HanLP-地名識別除錯方法
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-2651074/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hanlp-地名識別除錯方法詳解HanLP地名識別除錯
- 自然語言處理工具HanLP-基於層疊HMM地名識別自然語言處理HanLPHMM地名識別
- HanLP-命名實體識別總結HanLP
- HanLP-基於HMM-Viterbi的人名識別原理介紹HanLPHMMViterbi
- c 語言除錯方法(除錯 PHP 底層、擴充套件)除錯PHP套件
- 手勢識別中一些錯誤解決方法
- iOS 常用除錯方法:LLDB命令iOS除錯LLDB
- Apache httpclient的execute方法除錯ApacheHTTPclient除錯
- 006 Web Assembly之除錯方法Web除錯
- Android 中 WebView 的除錯方法AndroidWebView除錯
- python五種除錯或排錯的方法Python除錯
- 高通QFIL,開關usb除錯埠,無法識別到下載埠除錯
- Ubuntu 下使用 ADB 除錯 Android 應用時的裝置識別問題Ubuntu除錯Android
- 移動端除錯方法彙總除錯
- 移動端除錯方法補充除錯
- GDB除錯基礎使用方法除錯
- iOS 常用除錯方法:靜態分析iOS除錯
- UE Puerts 在 Android 的除錯方法Android除錯
- 【除錯】ftrace(一)基本使用方法除錯
- 不同Java除錯方法總結 - VardhanJava除錯
- Java程式中除錯Python程式方法Java除錯Python
- 除錯篇——除錯物件與除錯事件除錯物件事件
- C/C++ 程式反除錯的方法C++除錯
- Vue生產環境除錯的方法Vue除錯
- Windows windbg kernel debug 雙機核心除錯 - USB3.0 除錯 USB除錯 除錯線Windows除錯
- 幽默:除錯程式碼問題的最佳方法除錯
- 分享:識別圖片文字方法
- Python 程式碼除錯—使用 pdb 除錯Python除錯
- IsDebuggerPresent的反除錯與反反除錯除錯
- OCR名片識別除噪美化 加深字元對比字元
- 4種除錯深度神經網路的方法除錯神經網路
- python 使用 delete 方法時報錯,可以正常刪除Pythondelete
- nginx 錯誤除錯Nginx除錯
- 告別Print,使用IceCream進行高效的Python除錯Python除錯
- 前端除錯前端除錯
- python 除錯Python除錯
- LLDB除錯LLDB除錯
- postman除錯Postman除錯