HanLP-地名识别调试方法
HanLP收詞特別是實體比較多,因此特別容易造成誤識別。下邊舉幾個地名誤識別的例子,需要指出的是,后邊的機構(gòu)名識別也以地名識別為基礎(chǔ),因此,如果地名識別不準確,也會導(dǎo)致機構(gòu)名識別不準確。
?
類型1 數(shù)字+地名
[1] 暗訪哈爾濱網(wǎng)約車:下10單來7輛“黑車” 1輛套牌
[2] 房天下每日成交5月12日海寧商品房銷售備案43套
廣西近視手術(shù)專家-黃明漢院長9月9日百色見面會
?
類型2 前詞+地名首詞成詞或地名尾詞+后詞成詞
[1] 西安國企4000元工資相當于私企多少錢?
[2] 七月份從包頭到山東,十五天左右,有自駕游路線推薦嗎?
[3] 最受考研人歡迎的城市,有你報考高校所在的城市嗎?
?
類型3 地名本身成詞
[1] 滴滴司機接跨省天價訂單 乘客半路改道至今未付款
[2] 上聯(lián):山水不曾隨我老,如何對下聯(lián)?
[3] 上聯(lián):柳著金妝閑釣水,如何對下聯(lián)?
?
Badcase分析及修正
下邊介紹一下排查誤判原因以及修正的方法
首先需要明確以下幾點注意事項
1.實體識別受分詞精度影響。
2.實體識別同樣涉及消歧的問題。
3.HanLP收錄了一些不常見的實體詞,會造成錯誤率升高。
4.HanLP基于隱馬的命名實體識召回率沒有特別要求的話,不需要再去訓(xùn)練。
這里我們以下邊這個badcase的分析過程為例來說明
[5] 上聯(lián):山水不曾隨我老,如何對下聯(lián)?
打開提示模式 HanLP.Config.enableDebug()
?
運行人名識別代碼
?
# HanLP命名實體識別
def hanlp_ner(text, ner_type):
????global segment
????ner_li = []
????for term in segment.seg(text):
????????if str(term.nature) == ner_type:
????????????ner_li.append(str(term.word))
????return ner_li
這里ner_type為你要識別的實體類型,如果是人名則ner_type='nr',地名ner_type='ns',機構(gòu)名ner_type='nt'。text為要抽取實體的文本。
?
識別結(jié)果,這里為了清晰,只截取了部分輸出。
?
粗分結(jié)果[上聯(lián)/n, :/w, 山水/n, 不/d, 曾隨/ns, 我/rr, 老/a, ,/w, 如何/ryv, 對/p, 下聯(lián)/n, ?/w]
地名角色觀察:[ ?S 1163565 ][上聯(lián) Z 20211628 ][: A 2701 B 439 X 11 ][山水 B 6 A 1 ][不 B 214 A 3 C 3 ][曾隨 G 1 H 1 ]
[我 A 47 B 26 ][老 C 274 A 75 B 66 D 2 X 2 ][, A 40525 B 10497 X 418 ][如何 B 44 ][對 A 2896 B 454 X 215 ][下聯(lián) Z 20211628 ][? B 82 ][ ?B 1322 ]
地名角色標注:[ /S ,上聯(lián)/Z ,:/B ,山水/A ,不/C ,曾隨/H ,我/B ,老/B ,,/A ,如何/B ,對/A ,下聯(lián)/Z ,?/B , /S]
識別出地名:不曾隨 CH
hanlp_ns ['不曾隨']
?
顯然,曾隨被認為是地名了,而且粗分結(jié)果表示的是未經(jīng)地名識別模塊分詞和詞性標注的結(jié)果,顯然這是由于詞表導(dǎo)致的。由于沒有經(jīng)過地名識別模塊,所以不需要去地名的發(fā)射詞表ns.txt中去找詞語,只需要看核心詞表CoreNatureDictionary.txt中去找
?
顯然,在核心詞表中“曾隨“被標記為一個地名,把”曾隨“從詞表中刪除掉,并刪除詞表文件CoreNatureDictionary.txt.bin,之后再次運行程序得到下邊的輸出結(jié)果
?
hanlp_ns []
從這個實例,我們也可以看出一些不常見地名如果做成地名詞表,就有導(dǎo)致錯誤識別實體。因此,我們應(yīng)該保留一份評測語料,每當修改了實體詞表后,需要跑一下測試語料查看準確率,如果降低的太多,則表示這樣加進來是不可行的。同時填加的實體名也有可能會造成分詞錯誤。
?
下邊說明一下HanLP中有關(guān)實體的詞表文件名
1.CoreNatureDictionary.mini.txt
2.CoreNatureDictionary.txt
3.CustomDictionary.txt
4.機構(gòu)名詞典.txt
5.全國地名大全.txt
6.人名詞典.txt
7.上海地名.txt
8.現(xiàn)代漢語補充詞庫.txt
9.ns.txt
10.nr.txt
11.nt.txt
?
當然這里列出的是通常最有可能導(dǎo)致誤識別的詞表,如果這些詞表都沒有找到,還需要在HanLP其他詞典文件中尋找。
希望今天的內(nèi)容對使用HanLP并對隱馬情有獨鐘的小伙伴有幫助。這兩天的一點小體會是,實體識別其實跟分詞是密不可分的,兩者都有共同的處理難點,比如詞義消歧(邊界的確定),詞法分析其實才是真正的NLP的內(nèi)容之一,而詞法分析跟機器學(xué)習(xí)其實沒有太大關(guān)系。上邊的badcase解決方法不是根本方法,直接去除掉某些詞,會導(dǎo)致一些生僻實體識別不出來。我們是否可以考慮左右信息熵之類的測度函數(shù)來解決這種詞是否需要拆開與其前后構(gòu)成詞。針對詞法分析推薦大家使用深度學(xué)習(xí)的方法,畢竟了解這些方法也是必須的,雖然你可以在實際種不用,但是不代表你可以偷懶而不去學(xué)習(xí)。
總結(jié)
以上是生活随笔為你收集整理的HanLP-地名识别调试方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: apache zookeeper jav
- 下一篇: NetCore 依赖注入之服务之间的依赖