中文 NLP(9) -- 實體識別
(1)實體識別
識別 人名,地名,組織機構,日期,時間,百分數,貨幣這七大實體。重點是人名,地名和組織機構的識別。屬於未登入詞識別的範疇。
人名特徵:當今仍使用,活躍的中文姓氏大致有1000 多個,前 586 個姓佔了 98.5%。其餘姓氏不到 1.5%。名字用字分佈較姓氏用字分佈要平緩,分散。共 3679 個名字用字,詞性分佈也很廣泛,不僅有實詞,還有各類虛詞。
地名特徵:較之人名相比,地名更像一個閉集。絕大部分地名可以通過相關資料覆蓋。如《中國地名錄》,《地理詞典》,《地物名詞》詞典集,但也有困難的情況,比如用詞比較自由,分散等。。。
組織機構:相比人名、地名,這是難度最大的識別,以上所有的難點都出現在此,再加上本身的難點。
(2)專名詞典 + CRF 模型演算法識別
設計思路就是將命名實體的任務從中文分詞的基礎模組中分離出來,命名實體作為一個獨立的模組位於基礎分詞步驟之後。在LTP3.3 和 StanfordNLP 中都把命名實體作為一個單獨的模組來處理。與專名詞典特徵提取如下(部分)
基於提取的特徵構建 CRF 訓練模型。。。然後整體的分詞流程如下
分詞流程如下:
(1)首先通過原子切分,將字串轉換為字元列表,這個階段與 ICTCLAS 的分詞方法相似。
(2)與內部詞典(或使用者匯入詞典)進行最大匹配,根據匹配結果給出成詞的特徵函式。
(3)將字串與匹配到的詞典詞彙共同匹配特徵模板,包括 CRF 的標準模板和內部詞典匹配結果特徵模板。
(4)根據匹配的模板,查詢和計算模板的概率。
(5)建立詞網,使用 Viterbi 演算法解碼。
(6)輸出分詞結果。
(3)疊層 HMM 模型
演算法思想:首先在詞語粗切分的基礎上,採用底層 HMM 模型識別出普通無巢狀的人名,地名和機構名等比如【辛普森】,然後依次採取高層 HMM 模型識別出嵌套了人名,地名的複雜地名和機構名。比如【美國/辛普森/公司】
在疊層式 HMM 的基礎上,加入基於角色標註的命名實體方法如下:
角色 | 意義 | 例子 |
A | 上文 | 【參與】亞太經合組織的活動 |
B | 下文 | 中央電視臺【報道】 |
X | 連線詞 | 北京【和】天津 |
C | 特徵詞的一般字首 | 北京【電影】學院 |
F | 特徵詞的譯名性字首 | 美國【摩托羅拉】公司 |
G | 特徵詞的地名性字首 | 交通銀行【北京】分行 |
H | 特徵詞的機構名字首 | 【中共中央】顧問委員會 |
I | 特徵詞的特殊性字首 | 【中央】電視臺 |
J | 特徵詞的簡稱性字首 | 【巴】政府 |
K | 整個機構 | 【麥當勞】 |
L | 方位詞 | —— |
M | 數詞 | 公交集團【五】分公司 |
P | 單字碎片 | —— |
D | 機構名的特徵詞 | 國務院僑務【辦公室】 |
W | 符號 | —— |
S | 句子的開頭 | —— |
Z | 非機構名成分 | —— |
標註順序如下:
比如: 參與/v [北京/ns 電影/n 學院/nis]/nt 和/cc [美國/nsf 辛普森/nr 公司/nis] / nt 的/ude 活動/vn
(1)新增句首句尾
[始##始/S 參與/v [北京/ns 電影/n 學院/nis]/nt 和/cc [美國/nsf 辛普森/nr 公司/nis] / nt 的/ude 活動/vn 末##/末/Z]
(2)標註上文
[始##始/S 參與/A [北京/ns 電影/n 學院/nis]/nt 和/A [美國/nsf 辛普森/nr 公司/nis] / nt 的/ude 活動/vn 末##/末/Z]
(3)標註下文
[始##始/S 參與/A [北京/ns 電影/n 學院/nis]/nt 和/B [美國/nsf 辛普森/nr 公司/nis] / nt 的/B 活動/vn 末##/末/Z]
(4)標註中間
[始##始/S 參與/A [北京/ns 電影/n 學院/nis]/nt 和/X [美國/nsf 辛普森/nr 公司/nis] / nt 的/B 活動/vn 末##/末/Z]
(5)處理整個句子
[始##始/S 參與/A 未##地/G 電影/C 學院/D 和/X 未##地/G 未##人/F 公司/D 的/B 活動/Z 末##/末/Z]
然後根據標註的語料統計角色詞典如下,後面數字代表頻率
公司 D 4621 A 24 B 24
公司總部 B 1
公司治理 B 2
公司股票 B 1
公告 B 15 X 1
公告欄 B 2
公園 C 9
公安 C 728 A 19 B 5
...
然後統計轉移概率矩陣,從一個角色標籤轉移到另一個角色的頻次。
A | B | ... | Z | |
A | 0 | 0 | ... | 0 |
B | 3013 | 0 | ... | 125708 |
... | ... | ... | ... | ... |
Z | 95874 | 0 | ... | 19796133 |
舉例如下:比如在組織機構名識別之前(先識別人名,地名),會得到如下輸出
[濟南/ns 楊銘宇/nr 餐飲/n 管理/vn 有限公司/nis 是/vshi 由/p 楊先生/nr 創辦/v]
然後根據角色標註如下:
[S 1162194][濟南 G 83472 B 1200 A 470 D 84 X 4] [楊銘宇 F 4309 B 769 A 266 D 254 X6] [餐飲 C 58 B 12][管理 C 706 B 70 A 5] [有限公司 D 2861 A 1 B 1][是 A 2340 B 353 X 20 P 2][由 A 1579 B 16 X 11] [楊先生 F 4309 B 769 A 266 D 254 X 6][創辦 A 20 B 5][B 710]
然後根據 HMM 計算機構名角色標註如下:
[/S 濟南/G 楊銘宇/F 餐飲/C 管理/C 有限公司/D 是/B 由/A 楊先生/F 創辦/A /B]
[始##始/S 未##地/G 未##人/F 餐飲/C 管理/C 有限公司/D 是/B 由/A 未##人/F 創辦/A 末##末/B]
最後進行模式匹配,有一個組織機構名稱的角色模式庫。當上文識別出角色標註串與組織機構的模式串匹配時,就認為識別出了一個組織機構。部分如下
CCCD
PPD
PPDCD
PPFCCD
PPFCD
...
經過細分,識別出機構名【濟南楊銘宇餐飲管理有限公司】GFCCD 。