HanLP收詞特別是實體比較多,所以特別容易形成誤識別。下邊舉幾個地名誤識別的例子,須要指出的是,後邊的機構名識別也以地名識別爲基礎,所以,若是地名識別不許確,也會致使機構名識別不許確。app
類型1 數字+地名機器學習
[1] 暗訪哈爾濱網約車:下10單來7輛「黑車」 1輛套牌ide
[2] 房天下每日成交5月12日海寧商品房銷售備案43套函數
[3] 廣西近視手術專家-黃明漢院長9月9日百色見面會學習
類型2 前詞+地名首詞成詞或地名尾詞+後詞成詞測試
[1] 西安國企4000元工資至關於私企多少錢?spa
[2] 七月份從包頭到山東,十五天左右,有自駕遊路線推薦嗎?深度學習
[3] 最受考研人歡迎的城市,有你報考高校所在的城市嗎?it
類型3 地名自己成詞io
[1] 滴滴司機接跨省天價訂單 乘客半路改道至今未付款
[2] 上聯:山水未曾隨我老,如何對下聯?
[3] 上聯:柳着金妝閒釣水,如何對下聯?
Badcase分析及修正
下邊介紹一下排查誤判緣由以及修正的方法
首先須要明確如下幾點注意事項
1.實體識別受分詞精度影響。
2.實體識別一樣涉及消歧的問題。
3.HanLP收錄了一些不常見的實體詞,會形成錯誤率升高。
4.HanLP基於隱馬的命名實體識召回率沒有特別要求的話,不須要再去訓練。
這裏咱們如下邊這個badcase的分析過程爲例來講明
[5] 上聯:山水未曾隨我老,如何對下聯?
打開提示模式 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',機構名ner_type='nt'。text爲要抽取實體的文本。
識別結果,這裏爲了清晰,只截取了部分輸出。
粗分結果[上聯/n, :/w, 山水/n, 不/d, 曾隨/ns, 我/rr, 老/a, ,/w, 如何/ryv, 對/p, 下聯/n, ?/w]
地名角色觀察:[ S 1163565 ][上聯 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 ][下聯 Z 20211628 ][? B 82 ][ B 1322 ]
地名角色標註:[ /S ,上聯/Z ,:/B ,山水/A ,不/C ,曾隨/H ,我/B ,老/B ,,/A ,如何/B ,對/A ,下聯/Z ,?/B , /S]
識別出地名:未曾隨 CH
hanlp_ns ['未曾隨']
顯然,曾隨被認爲是地名了,並且粗分結果表示的是未經地名識別模塊分詞和詞性標註的結果,顯然這是因爲詞表致使的。因爲沒有通過地名識別模塊,因此不須要去地名的發射詞表ns.txt中去找詞語,只須要看核心詞表CoreNatureDictionary.txt中去找
顯然,在覈心詞表中「曾隨「被標記爲一個地名,把」曾隨「從詞表中刪除掉,並刪除詞表文件CoreNatureDictionary.txt.bin,以後再次運行程序獲得下邊的輸出結果
hanlp_ns []
從這個實例,咱們也能夠看出一些不常見地名若是作成地名詞表,就有致使錯誤識別實體。所以,咱們應該保留一份評測語料,每當修改了實體詞表後,須要跑一下測試語料查看準確率,若是下降的太多,則表示這樣加進來是不可行的。同時填加的實體名也有可能會形成分詞錯誤。
下邊說明一下HanLP中有關實體的詞表文件名
1.CoreNatureDictionary.mini.txt
2.CoreNatureDictionary.txt
3.CustomDictionary.txt
4.機構名詞典.txt
5.全國地名大全.txt
6.人名詞典.txt
7.上海地名.txt
8.現代漢語補充詞庫.txt
9.ns.txt
10.nr.txt
11.nt.txt
固然這裏列出的是一般最有可能致使誤識別的詞表,若是這些詞表都沒有找到,還須要在HanLP其餘詞典文件中尋找。
但願今天的內容對使用HanLP並對隱馬情有獨鍾的小夥伴有幫助。這兩天的一點小體會是,實體識別其實跟分詞是密不可分的,二者都有共同的處理難點,好比詞義消歧(邊界的肯定),詞法分析其實才是真正的NLP的內容之一,而詞法分析跟機器學習其實沒有太大關係。上邊的badcase解決方法不是根本方法,直接去除掉某些詞,會致使一些生僻實體識別不出來。咱們是否能夠考慮左右信息熵之類的測度函數來解決這種詞是否須要拆開與其先後構成詞。針對詞法分析推薦你們使用深度學習的方法,畢竟瞭解這些方法也是必須的,雖然你能夠在實際種不用,可是不表明你能夠偷懶而不去學習。