1. 程式人生 > >中文 NLP(9) -- 實體識別

中文 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 的基礎上,加入基於角色標註的命名實體方法如下:

HanLP 角色表(來自 enum NT)
角色 意義 例子
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 。