一. 摘要
本文是對上文用CRF做命名實體識別(一)做一次升級撬槽。多添加了5個特征(分別是詞性此改,詞語邊界,人名侄柔,地名共啃,組織名指示詞),另外還修改了特征模板暂题,最終訓練了11個小時移剪,F(xiàn)1值為0.98。(這里面有錯誤薪者,計算F1值不應該計算全體的纵苛,應該只計算帶有標注實體的詞,不然量這么大言津,肯定F1值就大攻人。最終改了計算F1值的方法,F(xiàn)1值為0.8856)
二. 目錄
- 整個流程的思路
- 一些概念解釋
- 實體指示詞
- 詞語邊界
- 為什么要用jieba再次分詞標注詞性 - 具體流程實現(xiàn)
- 總結(jié)與展望
三. 正文
1. 整個流程的思路:
- 根據(jù)人民日報語料庫建立命名實體指示詞庫
- 構(gòu)建人名悬槽,地名怀吻,組織名指示詞特征
- 構(gòu)建詞性特征以及詞語邊界特征
- 將這五個特征合并,形成CRF++的訓練數(shù)據(jù)格式
- 編寫特征模板
- 劃分數(shù)據(jù)集為訓練集和測試集
- 用CRF++訓練模型
- 測試模型
2. 上面出現(xiàn)的一些概念解釋
2.1 實體指示詞
在中文中初婆,有些詞的出現(xiàn)通常標志著該詞周圍很可能出現(xiàn)相應的命名實體烙博,這樣的詞,我們稱之為命名實體指示詞烟逊。命名實體指示詞是文本中非常有意義的上下文信息,可以有效的幫助識別命名實體铺根。通诚芮可以分為人名指示詞、地名指示詞和組織名指示詞位迂。
比如:溫家寶總理主持了政府工作報告访雪。這句話中“總理”這個詞很大程度上指示著人名實體溫家寶的出現(xiàn) 。
2.2 詞語邊界
一個詞有頭有尾掂林,我們給它進行位置標注臣缀。B代表詞語的頭部,M代表詞語的中間部位泻帮,E代表詞語的尾部精置,W代表一個詞。如下所示:
邁 B
向 E
充 B
滿 M
希 M
望 E
的 W
新 B
世 M
紀 E
2.3 為什么要用jieba再次分詞標注詞性
因為人民日報標注語料是人工標注的锣杂。我們構(gòu)造了詞性這個特征脂倦,測試的時候我們不可能對要測試的語料進行人工標注詞性番宁,這樣工程量太大了,所以我們直接用jieba分詞標注赖阻,這樣訓練和測試都是用的jieba標注的詞性蝶押。
3. 具體流程實現(xiàn)
3.1 根據(jù)人民日報語料庫建立命名實體指示詞庫
1)建立地名指示詞庫
(1)從人民日報標記語料庫中按順序讀取一個詞 ;
(2)如果這個詞是一個標記了的命名實體則轉(zhuǎn)(3)火欧,否則轉(zhuǎn)(1)棋电;
(3)讀取當前詞左邊的 2 個詞和右邊的 2 個詞,組成上下文詞匯集合word_text苇侵,若當前詞左邊或者右邊的詞數(shù)少于 2 個赶盔,則取盡可能多個;
(4)如果當前詞的標記為地名衅檀,則在備選地名指示詞集合 Indication_l 中查找 word_text中的詞招刨,如果找到了区端,則相應詞的頻度加 1惠况;否則究驴,將此詞加入到 Indication_l 集合 中碧囊,該詞頻度設為 1楷力;
(5)如果當前詞是語料中的最后一個詞亚隅,轉(zhuǎn)(6)亮曹,否則轉(zhuǎn)(1)氛什;
(6)統(tǒng)計備選備選地名指示詞集合 Indication_l中所有詞匯在單位語料中出現(xiàn)的頻度 f猿推;
(7)如果頻度 f 小于閾值(我設置的是20) 片习,刪除該詞;
下圖便是地名指示詞
['向/p',
'同胞/n',
'和/c',
'是/v',
'發(fā)展/vn',
'歷史/n',
'年/q',
'人民/n',
'建設/v',
'有/v',
'特色/n',
'社會主義/n',
'恢復/v',
'對/p',
'主權(quán)/n',
......]
2)同理建立人名指示詞庫以及組織名指示詞庫
3.2 構(gòu)建人名蹬叭,地名藕咏,組織名指示詞特征
1)構(gòu)建地名指示詞特征
- A. 讀入數(shù)據(jù)
['邁向/v 充滿/v 希望/n 的/u 新/a 世紀/n ——/w 一九九八年/t 新年/t 講話/n (/w 附/v 圖片/n 1/m 張/q )/w',
'中共中央/nt 總書記/n 、/w 國家/n 主席/n 江澤民/nr',
'(/w 一九九七年/t 十二月/t 三十一日/t )/w',
'12月/t 31日/t ,/w 中共中央/nt 總書記/n 秽五、/w 國家/n 主席/n 江澤民/nr 發(fā)表/v 1998年/t 新年/t 講話/n 《/w 邁向/v 充滿/v 希望/n 的/u 新/a 世紀/n 》/w 孽查。/w (/w 新華社/nt 記者/n 蘭紅光/nr 攝/Vg )/w',
'同胞/n 們/k 、/w 朋友/n 們/k 坦喘、/w 女士/n 們/k 盲再、/w 先生/n 們/k :/w',......]
- B. 提取上面列表里的地名實體
- 空列表表示這句話里面沒有我們的地名實體
[[],
[],
[],
[],
[],
['香港特別行政區(qū)/ns', '澳門/ns', '臺灣/ns'],
['中國/ns', '中國/ns', '中國/ns', '香港/ns', '香港/ns', '中國/ns'],
['中國/ns', '中國/ns'],
......]
- C. 將列表里的每個元素變成只含有中文的句子
['邁向充滿希望的新世紀——一九九八年新年講話(附圖片1張)',
'中共中央總書記、國家主席江澤民',
'(一九九七年十二月三十一日)',
'12月31日,中共中央總書記瓣铣、國家主席江澤民發(fā)表1998年新年講話《邁向充滿希望的新世紀》答朋。(新華社記者蘭紅光攝)',
'同胞們、朋友們棠笑、女士們梦碗、先生們:',......]
- D. 對列表里的每個元素進行jieba分詞標注詞性
['邁向/v 充滿希望/nz 的/uj 新世紀/nz —/x —/x 一九九八年/m 新年/t 講話/n (/x 附圖片/n 1/m 張/nr )/x',
'中共中央/nt 總書記/n 、/x 國家/n 主席/n 江澤民/nr',
'(/x 一九九七年/m 十二月/m 三十一日/m )/x',
'12/m 月/m 31/m 日/m ,/x 中共中央/nt 總書記/n 、/x 國家/n 主席/n 江澤民/nr 發(fā)表/v 1998/m 年/m 新年/t 講話/n 《/x 邁向/v 充滿希望/nz 的/uj 新世紀/nz 》/x 叉弦。/x (/x 新華社/nt 記者/n 蘭紅光/nr 攝/vg )/x',
'同胞們/n 丐一、/x 朋友/n 們/k 、/x 女士們/n 淹冰、/x 先生/n 們/k :/x',......]
- E. 去掉列表里面的空格库车,讓它更緊湊
['邁向/v充滿希望/nz的/uj新世紀/nz—/x—/x一九九八年/m新年/t講話/n(/x附圖片/n1/m張/nr)/x',
'中共中央/nt總書記/n、/x國家/n主席/n江澤民/nr',
'(/x一九九七年/m十二月/m三十一日/m)/x',
'12/m月/m31/m日/m,/x中共中央/nt總書記/n樱拴、/x國家/n主席/n江澤民/nr發(fā)表/v1998/m年/m新年/t講話/n《/x邁向/v充滿希望/nz的/uj新世紀/nz》/x柠衍。/x(/x新華社/nt記者/n蘭紅光/nr攝/vg)/x',
'同胞們/n、/x朋友/n們/k晶乔、/x女士們/n珍坊、/x先生/n們/k:/x',......]
- F. 讀取我們前面構(gòu)建的地名指示詞表
['向/p',
'同胞/n',
'和/c',
'是/v',
'發(fā)展/vn',
'歷史/n',
'年/q',
'人民/n',
'建設/v',
'有/v',
'特色/n',
'社會主義/n',
'恢復/v',
'對/p',
'主權(quán)/n',
......]
- G. 取出每一句話的地名指示詞
[[[]],
[[]],
[[]],
[[]],
[[]],
[[], [], []],
[['是/v'], ['是/v'], ['是/v'], ['對/p'], ['對/p'], ['是/v']],
[[], []],
[['和/c'], ['和/c'], ['與/p'], [], [], [], ['和/c'], ['和/c'], [], ['和/c'], []],
[['有/v', '建設/vn'], ['有/v', '建設/vn']],
[[], ['和/c'], ['和/c']],
[[], ['是/v'], ['是/v'], [], [], ['是/v']],......]
- H. 美化一下
[[],
[],
[],
[],
[],
[],
['是/v', '是/v', '是/v', '對/p', '對/p', '是/v'],
[],
['和/c', '和/c', '與/p', '和/c', '和/c', '和/c'],
['有/v', '建設/vn', '有/v', '建設/vn'],
['和/c', '和/c'],
['是/v', '是/v', '是/v'],......]
- J. 替換取出來的地名指示詞里面的標簽
[[],
[],
[],
[],
[],
[],
['是/pi', '是/pi', '是/pi', '對/pi', '對/pi', '是/pi'],
[],
['和/pi', '和/pi', '與/pi', '和/pi', '和/pi', '和/pi'],
['有/pi', '建設/pi', '有/pi', '建設/pi'],
['和/pi', '和/pi'],
['是/pi', '是/pi', '是/pi'],......]
- K. 改變每句話里的實體指示詞的標簽
# 發(fā)現(xiàn)下面的 '與/p' 被改成了 '與/pi'
' ... 通過/p 高層/n 互訪/v ,/x 中國/ns 與/pi 美國/ns 、/x 俄羅斯/ns 正罢、/x 法國/ns ... '
- L. 對上面列表里面的每句話進行切分阵漏,做成列表
[['邁向/v',
'充滿希望/nz',
'的/uj',
'新世紀/nz',
'—/x',
'—/x',
'一九九八年/m',
'新年/t',
'講話/n',
'(/x',
'附圖片/n',
'1/m',
'張/nr',
')/x'],
['中共中央/nt', '總書記/n', '、/x', '國家/n', '主席/n', '江澤民/nr'],......]
- M. 寫入外部文件
- 寫成下面的形式翻具,是地名指示詞就標注為Y履怯,不是就標注為N
未 N
來 N
發(fā) N
展 N
的 N
目 N
標 N
和 Y
指 N
導 N
方 N
針 N
。 N
中 N
國 N
與 Y
周 N
邊 N
國 N
家 N
和 Y
到這里我們就構(gòu)建好了地名指示詞特征了
2)同理構(gòu)建人名裆泳,組織名指示詞特征
3.3 構(gòu)建詞性特征以及詞語邊界特征
1)構(gòu)建詞性特征
邁 v
向 v
充 nz
滿 nz
希 nz
望 nz
的 uj
新 nz
世 nz
紀 nz
2)構(gòu)建詞語邊界特征
邁 B
向 E
充 B
滿 M
希 M
望 E
的 W
新 B
世 M
紀 E
3.4 將這五個特征合并叹洲,形成CRF++的訓練數(shù)據(jù)格式
從左到右的特征依次為字符,詞性工禾,詞語邊界运提,地名指示詞,組織名指示詞闻葵,人名指示詞民泵,標簽。(最后一列在用CRF做命名實體識別(一)中有討論過槽畔,這里不再贅述)
年 a B N N N O
輕 a E N N N O
時 n W N N N O
, x W N N N O
在 p W Y N N O
重 ns B N N N B_LOCATION
慶 ns E N N N E_LOCATION
山 ns B N N N O
城 ns E N N N O
, x W N N N O
在 p W Y N N O
紅 n B N N N B_LOCATION
巖 n E N N N M_LOCATION
嘴 n W N N N E_LOCATION
山 n B N N N O
頭 n E N N N O
的 uj W N N N O
樓 n B N N N O
房 n E N N N O
, x W N N N O
我 r B N N N O
們 r E N N N O
紅 nr B N N N B_ORGANIZATION
巖 nr E N N N M_ORGANIZATION
歌 n B N N N M_ORGANIZATION
詠 n E N N N M_ORGANIZATION
團 n W N N N E_ORGANIZATION
的 uj W N N N O
男 n B N N N O
女 n E N N N O
青 t B N N N O
年 t E N N N O
3.5 特征模板
# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-2,1]
U06:%x[-1,1]
U07:%x[0,1]
U08:%x[1,1]
U09:%x[2,1]
U10:%x[0,0]/%x[0,1]
U11:%x[0,0]/%x[1,0]
U12:%x[0,0]/%x[-1,0]
U13:%x[-1,0]/%x[0,1]
U14:%x[0,0]/%x[1,1]
U15:%x[-1,0]/%x[-1,1]
U16:%x[-1,0]/%x[-2,0]
U17:%x[-2,0]/%x[-2,1]
U18:%x[1,0]/%x[2,0]
U19:%x[-1,1]/%x[1,0]
U20:%x[0,1]/%x[1,0]
U21:%x[-2,1]/%x[-1,1]
U22:%x[0,1]/%x[-2,1]
U23:%x[-1,1]/%x[0,1]
U24:%x[-1,1]/%x[1,1]
U25:%x[0,1]/%x[1,1]
U26:%x[0,1]/%x[2,1]
U27:%x[1,1]/%x[2,1]
U28:%x[-1,2]
U29:%x[-2,2]
U30:%x[-1,2]/%x[-2,2]
U31:%x[0,1]/%x[-1,2]
U32:%x[0,1]/%x[-2,2]
U33:%x[0,1]/%x[1,2]
U34:%x[0,0]/%x[-1,2]
U35:%x[0,0]/%x[-2,2]
U36:%x[0,0]/%x[1,2]
U37:%x[0,1]/%x[-1,2]/%x[-2,2]
U38:%x[-1,2]/%x[0,1]/%x[1,1]
U39:%x[-1,2]/%x[-1,1]/%x[0,1]
U40:%x[-1,2]/%x[0,1]/%x[0,0]
U41:%x[-2,2]/%x[-1,2]/%x[0,1]
U42:%x[-2,3]/%x[-1,3]/%x[1,3]%x[2,3]
U43:%x[-2,4]/%x[-1,4]/%x[1,4]%x[2,4]
U44:%x[-2,5]/%x[-1,5]/%x[1,5]%x[2,5]
# Bigram
B
3.6 劃分數(shù)據(jù)集為訓練集和測試集
- 這里我是70%為訓練集洪灯,30%為測試集。主要是為了測F1值
3.7 訓練的方法同用CRF做命名實體識別(一)
3.8 測試模型
- F1值的計算用了sklearn庫竟痰,最終得值是0.8856
- 從網(wǎng)上下載了一些新聞語料庫,也是要處理成上面的那種格式(CRF++可以訓練數(shù)據(jù)的格式)掏呼,最終效果還可以坏快,主要還是得看jieba分詞標注詞性的效果
四. 總結(jié)與展望
整個流程走完了,最后得出的效果也很不錯憎夷,接下來打算把CRF的原理好好理一遍莽鸿,以及用BI-LSTM-CRF方法做命名實體識別,據(jù)說這是目前的主流處理方法。
以下是我所有文章的目錄祥得,大家如果感興趣兔沃,也可以前往查看
??戳右邊:打開它,也許會看到很多對你有幫助的文章