1.前言
詞法分析是自然語言處理的基本工具,主要包括分詞、詞性標註和實體識別等功能。目前各類詞法分析工具大行其道,有免費開源的,也有商業收費的;有高校研發的,也有企業開發的;有支持Java的,也有支持Python的,甚至還有支持安卓平臺的。不久前百度帶來了LAC2.0版本,據說做了很多改進,我們通過實戰來體驗一下。
2.百度LAC2.0介紹
根據百度官方消息,LAC全稱Lexical Analysis of Chinese,是百度NLP(自然語言處理部)研發的一款詞法分析工具,可實現中文分詞、詞性標註、專名識別等功能。
百度方面宣稱,LAC在分詞、詞性、專名識別的整體準確率超過90%,以專名識別為例,其效果要比同類詞法分析工具提升10%以上。
目前,百度已經發布了LAC2.0版本,之前的1.0版本我也寫過一篇博文加以探討,彼時的1.0版本還是融合在paddlehub中的一個模型,詳見利用百度超大規模預訓練模型進行分詞 一文。在2.0版本中LAC已經成為了獨立模塊,可以直接通過pip 安裝。
使用起來也非常方便
結果如下
結合官方給出的對照表進行轉換,可以得到如下詞性
3.與其他分詞工具速度對比
在本文中,我們主要選取了結巴分詞、foolnltk和THULAC三個工具來和百度的LAC2.0進行比較。
需要注意的是,foolnltk對TensorFlow的版本有要求,推薦使用TensorFlow==1.14.0。
我大致用自己的電腦各跑幾百條數據看下速度,這裡我從微博上拿到了700+條,用各個工具進行分詞標註詞性。懶得多次測試了,可能有偶然性,僅供參考。
可以看到LAC 2.0在處理時的速度非常快,而THULAC的數據比較反常,也可能是我測試的問題(以後可以分析一下這個問題)。實際上THULAC還有fast_cut快速分詞功能,但是現實找不到so文件,懶得解決了,能用就行。
在本段落中我們僅比較了不同工具之間的啟動速度和處理速度。至於效果,有很多開源的測試集,很容易找到這些工具的測試結果。我就不再囉嗦啦。
然而僅僅看測試結果,而不去實際應用,就會有準確而不具體的問題。為了更直觀的比較四種工具的效果,我們以詞雲圖為例,觀察通過四種工具對同一文章生成的詞雲圖,比較其分詞和標註的效果。
4.生成詞雲圖
生成詞雲圖非常簡單,只需要用到第三方工具WordCloud即可,可以通過pip 安裝。
然後生成詞雲對象並設置參數
需要特別注意的是,如果要生成中文詞雲圖,必須手動指定字體路徑(相對)。這裡我們選用阿里巴巴普惠體,主要是免費,用得起,良心過得去。
另外還需注意,如果是在某些沒有GUI的linux伺服器上生成詞雲圖,還需要安裝PyQt4,否則會報錯。我總以為PyQt4是一個python的包,但其實不是的,而是一個系統工具,通過yum安裝即可。
然後就可以生成詞雲圖啦!
這裡的texts是一個以空格為分隔符的詞表字符串,可以通過分詞工具獲得。
5.效果展示
這裡我們選用的是《2020年政府工作報告》來生成詞雲圖。並同時在頁面上展示4個工具分詞生成的詞雲圖。並支持查看單一詞性詞雲圖。
連結為fgb2019.top:5001/index
通過詞雲圖我們可以直觀的看到不同的工具的區別。
對於名詞和動詞,四款工具分詞都很不錯,看不出明顯的差別,而對於地名和機構名,差異比較明顯。LAC2.0和結巴明顯能識別出較多機構名,其他兩個工具稍稍遜色。地名方面LAC2.0表現也不錯。
地名方面,LAC2.0和THULAC表現較好,而jieba和foolnltk明顯出現較多錯誤(見紅框標註)
而機構方面,foolnltk和THULAC幾乎僅能識別出黨中央、國務院等機構,LAC2.0和jieba識別出了較多機構,也各有一些錯誤。但就識別正確的詞而言,LAC2.0效果較好,比如LAC2.0能夠識別出二十國集團,而jieba認為是「十國集團」。
6.總結
總的來說,百度的LAC2.0在各方面性能上算得上優秀,尤其是在地名和機構名的識別上。實際上LAC2.0對人名識別也比較準確,本文沒有具體測試。
到這裡,細心的讀者應該已經發現了,我用的埠是5001埠,這說明我很可能用的是Flask框架,同時5000埠被佔用。如果這樣想,那你可能在第五層,但其實我就是更喜歡5001,5000上什麼也沒有,所以我也只是在第二層。
本文作者:雷帥
公眾號:16上財計算機小可愛