Hanlp-地名識別除錯方法詳解

adnb34g發表於2019-07-29


HanLP 收詞特別是實體比較多,因此特別容易造成誤識別。下邊舉幾個地名誤識別的例子,需要指出的是,後邊的機構名識別也以地名識別為基礎,因此,如果地名識別不準確,也會導致機構名識別不準確。

 

型別 1 數字 + 地名

[1] 暗訪哈爾濱網約車:下 10 單來 7 輛“黑車” 1 輛套牌

 

[2] 房天下每日成交 5 12 日海寧商品房銷售備案 43

 

[3] 廣西近視手術專家 - 黃明漢院長 9 9 日百色見面會

 

型別 2 前詞 + 地名首詞成詞或地名尾詞 + 後詞成詞

 

[1] 西安國企 4000 元工資相當於私企多少錢?

 

[2] 七月份從包頭到山東,十五天左右,有自駕遊路線推薦嗎?

 

[3] 最受考研人歡迎的城市,有你報考高校所在的城市嗎?

 

型別 3 地名本身成詞

 

[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 解決方法不是根本方法,直接去除掉某些詞,會導致一些生僻實體識別不出來。我們是否可以考慮左右資訊熵之類的測度函式來解決這種詞是否需要拆開與其前後構成詞。針對詞法分析推薦大家使用深度學習的方法,畢竟瞭解這些方法也是必須的,雖然你可以在實際種不用,但是不代表你可以偷懶而不去學習。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2652022/,如需轉載,請註明出處,否則將追究法律責任。

相關文章