用CRF做命名實體識別(三)

用CRF做命名實體識別(三)

標簽: CRF
作者:煉己者


歡迎大家訪問我的簡書以及我的博客
本博客所有內(nèi)容以學(xué)習捌年、研究和分享為主,如需轉(zhuǎn)載渤涌,請聯(lián)系本人,標明作者和出處绽昏,并且是非商業(yè)用途扬霜,謝謝!


命名實體識別系列

用CRF做命名實體識別(一)
用CRF做命名實體識別(二)
用BILSTM-CRF做命名實體識別


摘要

本文主要是對近期做的命名實體識別做一個總結(jié)而涉,會給出構(gòu)造一個特征的大概思路著瓶,以及對比所有構(gòu)造的特征對結(jié)構(gòu)的影響。先給出我最近做出來的特征對比:

特征 F1值 精度 召回率
0.8399 0.8472 0.8327
字+詞性+邊界 0.8711 0.8839 0.8589
字+詞性+邊界+實體指示詞 0.8856 0.9076 0.8649
字+詞性+邊界+特征詞 0.8847 0.8990 0.8709
字+詞性+邊界+實體指示詞 +特征詞 0.8853 0.8994 0.8718
字+詞性+邊界+常用詞 0.928 0.9382 0.9182
字+詞性+邊界+特征詞+常用詞 0.9293 0.9381 0.9207
字+詞性+邊界+實體指示詞+特征詞+常用詞 0.9261 0.9334 0.9191

目錄

  • 整體操作流程
  • 特征的構(gòu)造思路
  • 用CRF++訓(xùn)練模型
  • 用CRF++測試模型并計算F1值

正文

1.整體操作流程

  • 構(gòu)造特征啼县,然后合并材原,格式要符合CRF++訓(xùn)練的格式
  • 撰寫對應(yīng)的特征模板
  • 用CRF++訓(xùn)練模型
  • 用CRF++測試模型并計算F1值

2.特征的構(gòu)造思路

  1. 構(gòu)造詞性

用jieba標注分詞即可,直接調(diào)用jieba


2)構(gòu)造詞語邊界特征

邁   B
向   E
充   B
滿   M
希   M
望   E
的   W
新   B
世   M
紀   E

思路:

我們把句子先用jieba進行分詞季眷,然后遍歷所有的詞余蟹,用len函數(shù)判斷這個詞的長度,如果長度是1子刮,那么標記為W威酒,否則首部(word[0])標記為B,中間(word[1:-1])標記為M挺峡,尾部(word[-1])標記為E


  1. 構(gòu)造實體指示詞特征

首先肯定會問什么是實體指示詞呢葵孤?

在中文中,有些詞的出現(xiàn)通常標志著該詞周圍很可能出現(xiàn)相應(yīng)的命名實體橱赠,這樣的詞尤仍,我們稱之為命名實體指示詞。命名實體指示詞是文本中非常有意義的上下文信息狭姨,可以有效的幫助識別命名實體宰啦。通常可以分為人名指示詞饼拍、地名指示詞和組織名指示詞赡模。
比如:溫家寶總理主持了政府工作報告。這句話中“總理”這個詞很大程度上指示著人名實體溫家寶的出現(xiàn) 师抄。

我用人民日報標注語料提取了人名漓柑,地名,組織名指示詞司澎。先給大家看一下地名指示詞大概長什么樣子

['向/p',
 '同胞/n',
 '和/c',
 '是/v',
 '發(fā)展/vn',
 '歷史/n',
 '年/q',
 '人民/n',
 '建設(shè)/v',
 '有/v',
 '特色/n',
 '社會主義/n',
 '恢復(fù)/v',
 '對/p',
 '主權(quán)/n',
......]

建立一個實體指示詞表的思路:

(1)從人民日報標記語料庫中按順序讀取一個詞 欺缘;
(2)如果這個詞是一個標記了的命名實體則轉(zhuǎn)(3)栋豫,否則轉(zhuǎn)(1)挤安;
(3)讀取當前詞左邊的 2 個詞和右邊的 2 個詞,組成上下文詞匯集合word_text丧鸯,若當前詞左邊或者右邊的詞數(shù)少于 2 個蛤铜,則取盡可能多個;
(4)如果當前詞的標記為地名,則在備選地名指示詞集合 Indication_l 中查找 word_text中的詞围肥,如果找到了剿干,則相應(yīng)詞的頻度加 1;否則穆刻,將此詞加入到 Indication_l 集合 中置尔,該詞頻度設(shè)為 1;
(5)如果當前詞是語料中的最后一個詞氢伟,轉(zhuǎn)(6)榜轿,否則轉(zhuǎn)(1);
(6)統(tǒng)計備選備選地名指示詞集合 Indication_l中所有詞匯在單位語料中出現(xiàn)的頻度 f朵锣;
(7)如果頻度 f 小于閾值(我設(shè)置的是20) 谬盐,刪除該詞;

建立好實體指示詞表之后就該構(gòu)建實體指示詞這個特征了

a) 先對每句話進行jieba分詞诚些,注意是不帶標注的jieba分詞
b) 遍歷每個詞飞傀,判斷這個詞是否在我們的實體指示詞表里,在的話我們就做個標記是Y诬烹,不在的話就標記為N
c) 然后用len函數(shù)判斷這個詞的長度砸烦,依次寫入我們的標記即可


  1. 構(gòu)造特征詞

什么是特征詞呢?
比如人名都是以姓氏開頭的绞吁,所以它的特征詞就是姓氏外冀;組織名基本都是以特定的詞匯結(jié)尾,比如公司掀泳,學(xué)校雪隧,集團等等;地名都是以省员舵,市脑沿,國等特定的詞結(jié)尾。這些都是特征詞马僻。這些特征詞都可以從百度中查到庄拇,我們下載下來,這樣就有三個文件韭邓。

思路

關(guān)于姓氏這個特征詞的構(gòu)造比較簡單措近,因為它只有一個字,我們只需遍歷每個字女淑,然后判斷這個字是不是在我們的姓氏表里瞭郑,在的話標記為Y,不在的話標記為N鸭你。

中   N
共   N
中   N
央   N
總   N
書   N
記   N
屈张、   N
國   N
家   N
主   N
席   N
江   Y
澤   N
民   N

關(guān)于地名和組織名的特征詞構(gòu)造有點麻煩擒权,因為它是多個字。不過和上面構(gòu)建實體指示詞特征的思路一樣
a) 先對每句話進行jieba分詞阁谆,注意是不帶標注的jieba分詞
b) 遍歷每個詞碳抄,判斷這個詞是否在我們的特征詞表里,在的話我們就做個標記是Y场绿,不在的話就標記為N
c) 然后用len函數(shù)判斷這個詞的長度剖效,依次寫入我們的標記即可


5)構(gòu)造常用詞

什么是常用詞呢?
比如常見的人名王偉焰盗,張偉等贱鄙,常見的地名其實就是中國的所有地名,包括各種村什么的姨谷,還有常用的組織名逗宁,這些都可以從網(wǎng)上找到。這樣就可以得到三個文件梦湘。
比如組織名"中共中央"就被找到瞎颗,并標記為Y

中   Y
共   Y
中   Y
央   Y
總   N
書   N
記   N
、   N
國   N
家   N
主   N
席   N
江   N
澤   N
民   N

和上面構(gòu)建實體指示詞特征的思路一樣
a) 先對每句話進行jieba分詞捌议,注意是不帶標注的jieba分詞
b) 遍歷每個詞哼拔,判斷這個詞是否在我們的常用詞表里,在的話我們就做個標記是Y瓣颅,不在的話就標記為N
c) 然后用len函數(shù)判斷這個詞的長度倦逐,依次寫入我們的標記即可


6)構(gòu)造標簽
對文本進行jieba標注分詞后,我們會得到每個詞的詞性宫补,然后觀察發(fā)現(xiàn)檬姥,人名標注詞性為/nr,組織名是/nt,地名是/ns粉怕。這樣我們就可以遍歷所有的詞健民,先判斷詞性,再結(jié)合前面構(gòu)造邊界的方法便可以構(gòu)造了贫贝。

邁   O
向   O
充   O
滿   O
希   O
望   O
的   O
新   O
世   O
紀   O
—   O
—   O
一   B_TIME
九   M_TIME
九   M_TIME
八   M_TIME
年   E_TIME
新   B_TIME
年   E_TIME
講   O
話   O
(   O
附   O
圖   O
片   O
1   O
張   O
)   O

7)構(gòu)造好特征就是合并特征了秉犹,我用的是dataframe操作的
下面的特征順序依次是
(字+詞性+邊界+地方指示詞+組織名指示詞+人名指示詞+姓氏+地名特征詞+組織名特征詞+標簽)

邁   v   B   N   N   N   N   N   N   O
向   v   E   N   N   N   N   N   N   O
充   nz  B   N   N   N   N   N   N   O
滿   nz  M   N   N   N   N   N   N   O
希   nz  M   N   N   N   N   N   N   O
望   nz  E   N   N   N   N   N   N   O
的   uj  W   Y   Y   Y   N   N   N   O
新   nz  B   N   N   N   N   N   N   O
世   nz  M   N   N   N   N   N   N   O
紀   nz  E   N   N   N   N   N   N   O
—   x   W   N   N   N   N   N   N   O
—   x   W   N   N   N   N   N   N   O
一   m   B   N   N   N   N   N   N   B_TIME
九   m   M   N   N   N   N   N   N   M_TIME
九   m   M   N   N   N   N   N   N   M_TIME
八   m   M   N   N   N   N   N   N   M_TIME
年   m   E   N   N   N   N   N   N   E_TIME
新   t   B   Y   N   N   N   N   N   B_TIME
年   t   E   Y   N   N   N   N   N   E_TIME
講   n   B   N   N   Y   N   N   N   O
話   n   E   N   N   Y   N   N   N   O
(   x   W   N   N   N   N   N   N   O
附   n   B   N   N   N   N   N   N   O
圖   n   M   N   N   N   N   N   N   O
片   n   E   N   N   N   N   N   N   O
1   m   W   Y   N   N   N   N   N   O
張   nr  W   N   N   N   Y   N   N   O
)   x   W   N   N   N   N   N   N   O

合并好所有的特征之后這就是劃分我們的數(shù)據(jù)集了,為了計算F1值我們還要把它們劃分為訓(xùn)練集(70%)和測試集(30%)稚晚。


3.特征模板

比如下面的特征模板就是針對
(字+詞性+邊界+地方指示詞+組織名指示詞+人名指示詞+姓氏+地名特征詞+組織名特征詞)這幾個特征寫的

# 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]
U45:%x[0,6]
U46:%x[0,7]
U47:%x[0,8]
U48:%x[1,8]
U49:%x[2,8]
U50:%x[-2,5]/%x[-1,5]/%x[0,6]/%x[1,5]/%x[2,5]
U51:%x[-2,3]/%x[-1,3]/%x[0,7]
U52:%x[-2,4]/%x[-1,4]/%x[0,8]

# Bigram
B

寫特征模板首先是要把所有的特征都要羅列進去崇堵,然后特征模板里面比如說
“U50:%x[-2,5]/%x[-1,5]/%x[0,6]/%x[1,5]%x[2,5]”這句話的意思就是
當前字是否為姓氏,且它的左邊和右邊兩個字是否為人名指示詞

%x[-1,5]里面表示[-1行客燕,5列]鸳劳。0代表的是當前這個字,那么-1不就是代表前一個字么幸逆,而那個第五列指的就是第五個特征(注意我構(gòu)造的特征的順序棍辕,前面有說到)暮现,也就是對應(yīng)的人名指示詞這個特征了


4.用CRF++訓(xùn)練模型

具體操作就看我的簡書里關(guān)于CRF++訓(xùn)練的操作还绘,那里有詳細的介紹楚昭。


5.用CRF++測試模型并計算F1值

調(diào)用sklearn庫即可,非常簡單
很重要的一點計算F1值一定記住把預(yù)測值和真實值都是O的全部刪掉拍顷。比如說下面抚太,倒數(shù)第二列是真實值,最后一列是預(yù)測值昔案。為什么要刪掉兩列都是O的呢尿贫?因為整個數(shù)據(jù)集這樣的太多了,會導(dǎo)致F1值偏高踏揣,我之前就把這部分算進去了庆亡,結(jié)果F1值為0.98,還沾沾自喜捞稿,以為自己好厲害

談   v   B   N   N   N   N   N   N   O   O
到   v   E   N   N   N   N   N   N   O   O
亞   ns  B   N   N   N   N   N   N   B_LOCATION  B_LOCATION
洲   ns  E   N   N   N   N   N   N   E_LOCATION  E_LOCATION
金   n   B   Y   N   N   Y   N   N   O   O
融   n   E   Y   N   N   N   N   N   O   O
風   n   B   N   N   N   N   N   N   O   O
波   n   E   N   N   N   N   N   N   O   O
,   x   W   N   N   N   N   N   N   O   O
董   nr  B   N   N   N   Y   N   N   B_PERSON    B_PERSON
建   nr  M   N   N   N   N   N   N   M_PERSON    M_PERSON
華   nr  E   N   N   N   N   N   N   E_PERSON    E_PERSON
說   v   W   Y   Y   Y   N   N   N   O   O
:   x   W   N   N   N   N   N   N   O   O
“   x   W   N   N   N   N   N   N   O   O
香   ns  B   N   N   N   N   N   N   B_LOCATION  B_LOCATION
港   ns  E   N   N   N   N   N   N   E_LOCATION  E_LOCATION
將   d   W   Y   Y   Y   N   N   N   O   O
堅   i   B   N   N   N   N   N   N   O   O
定   i   M   N   N   N   N   N   N   O   O
不   i   M   N   N   N   N   N   N   O   O
移   i   E   N   N   N   N   N   N   O   O
地   uv  W   Y   N   Y   N   N   N   O   O

6.展望

用CRF做命名實體識別基本就做到這里了又谋,我們發(fā)現(xiàn)(字+詞性+邊界+特征詞+常用詞)這幾個特征可以達到比較好的效果,F(xiàn)1值為0.9293娱局。再加入特征效果就會下降了彰亥,而且訓(xùn)練時間也會加長。后面打算用神經(jīng)網(wǎng)絡(luò)來做命名實體識別衰齐,目前主流方法是BILSTM-CRF任斋,據(jù)說效果是很好的,網(wǎng)上有可以直接用的代碼耻涛,回來操作一下废酷。希望這篇博文會對大家有所幫助,至少可以幫大家入門命名實體識別抹缕。


以下是我所有文章的目錄锦积,大家如果感興趣,也可以前往查看
??戳右邊:打開它歉嗓,也許會看到很多對你有幫助的文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丰介,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鉴分,更是在濱河造成了極大的恐慌哮幢,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件志珍,死亡現(xiàn)場離奇詭異橙垢,居然都是意外死亡,警方通過查閱死者的電腦和手機伦糯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門柜某,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗽元,“玉大人,你說我怎么就攤上這事喂击〖涟” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵翰绊,是天一觀的道長佩谷。 經(jīng)常有香客問我,道長监嗜,這世上最難降的妖魔是什么谐檀? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮裁奇,結(jié)果婚禮上桐猬,老公的妹妹穿的比我還像新娘。我一直安慰自己刽肠,他們只是感情好溃肪,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著五垮,像睡著了一般乍惊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上放仗,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天润绎,我揣著相機與錄音,去河邊找鬼诞挨。 笑死莉撇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的惶傻。 我是一名探鬼主播棍郎,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼银室!你這毒婦竟也來了涂佃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蜈敢,失蹤者是張志新(化名)和其女友劉穎辜荠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抓狭,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡伯病,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了否过。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片午笛。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惭蟋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出药磺,到底是詐尸還是另有隱情告组,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布与涡,位于F島的核電站惹谐,受9級特大地震影響持偏,放射性物質(zhì)發(fā)生泄漏驼卖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一鸿秆、第九天 我趴在偏房一處隱蔽的房頂上張望酌畜。 院中可真熱鬧,春花似錦卿叽、人聲如沸桥胞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贩虾。三九已至,卻和暖如春沥阱,著一層夾襖步出監(jiān)牢的瞬間缎罢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工考杉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留策精,地道東北人湿镀。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓舵盈,卻偏偏與公主長得像撒汉,于是被迫代替她去往敵國和親磨总。 傳聞我的和親對象是個殘疾皇子斩祭,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容