第三章 階層式語言模型
3.1 人名語言模型的訓練
3.1.1 Named Entity Recognition
文字語料庫 文本前處理 建立辨識辭典 NER標記
OOV_PER分群
N-gram training
圖 3.1: 文字資料庫處理流程
在第二章的文字處理流程中,我們以 CRF 斷詞器進行斷詞並依照每個詞的 IDF 值 來決定收錄詞典,但此斷詞結果並無包含命名實體(Named Entity, 文本中具有特定意義 的實體,如人名、地名、組織名等專有名詞)之標記結果。為了偵測出文本中屬於人名 的詞,採用王逸如老師撰寫之 NER 斷詞器,對 CRF 斷詞後的結果進行 Named Entity Recogntion,一共可得到 PER 標記數量 7,320,020 個。
在這份 PER 標記中,除中文人名外,尚有音譯之外文人名(如:席維斯史特龍、
戈巴契夫…等)、常見古代人名、特殊人名(如:上帝、聖誕老人、文昌公、孔子…等)。
23
3.1.2 OOV 中文人名的選擇與拆解
考慮到某些重要人名對前後文的關聯性高,若將所有人名都當作一個 class 看待,
在訓練語言模型時會丟失這個特性。因此我們將 PER 標記中 IV 與 OOV 的人名分開,
經 NER 斷詞器取得人名標記後,若被標記的人名沒有收錄於辭典中,則將該詞轉寫為 OOV_PER,當作一類 class 進行訓練,並將此人名收集起來另外訓練人名模型。
< 例句.1 > [… 台北 市長 陳水扁_PER 將 …]
由於 ”陳水扁” 已收錄在詞典中,我們不對這個句子更動。
< 例句.2 > [… 女 童軍 楊惠敏_PER 現 尚 在 台灣 …]
“楊惠敏” 不在收錄詞典中,此人名屬於 OOV_PER,重新轉寫文本為:
[… 女 童軍 PER_3 現 尚 在 台灣 …]
以 IDF 挑選之詞典為基準,除去在詞典中的人名後,尚餘 441,813 類人名,總計出 現 2,345,468 次。又,剩餘的人名標記中尚含有外文人名、特殊人名…等,不在我們處 理的範疇中,因此依照中文常見姓氏與詞長篩選出可能為中文人名的候選詞,詳細的處 理可分為:
1.) 詞長判斷:
NER 斷出的人名標記有可能是「姓氏」、「姓氏+名字」或「名字」,而中文姓氏多為 單姓,偶有複姓;而單名的情況也較少。
綜合以上結果,將 OOV 人名詞長>5 的結果去除。
2.) 姓氏斷詞:
以百家姓判斷此詞首是否為姓氏,若為姓氏則再將人名斷開成「姓氏+名字」;
3.) 同音合併:
在語音辨識中,同音異形的人名將會造成混淆,例如「江」與「姜」,無從得知輸
入之語音到底是念哪個「ㄐㄧㄤ」。由於聲學模型的分數一樣,則除了在語言模型分數 最高的該條路徑,其餘皆不會勝出,這會造成許多冗贅的路徑。
針對斷開的「姓氏」、「名字」字元,將發音相同的字元組合併,取出現次數較高者
24
顯示。在文本前處理時,原收錄姓氏共 128 個,去除同聲調剩下 117 種,再將同音節合 併後剩下 104 種字元。名字部分合併後則剩下 379 個字元。
NER 標記中文人名的 F-measure 統計如下,測詴組使用的是 TCC-300 測詴語料。
表 3.1: NER 中文人名標記之 F-measure 統計
Precision Recall F-measure
94.64% 89.52% 92.01%
1.) 外部機率(Inter-word probability)的預估:
我們將 OOV 人名與前後詞的關聯性使用 n-gram 模型來預估,但將所有的 OOV 人 名視為一類不夠妥當,現依據詞長將 OOV 人名分為二字、三字、四字共三群,分開訓 練其與前後詞的關聯性。
表 3.2: OOV 中文人名的長度分佈
Word Counts Percentage
中文人名總數 6,677,902
IV_PER 4,706,169 70.47%
OOV_PER_len3 1,663,575 24.91%
25
OOV_PER_len2 195,542 2.93%
OOV_PER_len4 112,616 1.69%
2.) 內部機率(Intra-word probability)的預估:
由於中文人名可視為「姓氏」、「名字」的組合,我們假設名字與姓氏的組合是無相
<p> Character1 | L </p>
#Last Name
F1
FN
CharacterK | CharacterN
Character2 |
#First Name
CharacterN |
#First Name
Character3 | Character2
Character4 | Character2
圖 3.2: 三字詞 PN model 之 WFST