關於中文詞法分析(中文分詞、詞性標註、命名實體識別)相關的工具,我們在之前已經多次提到過百度LAC,除了在易用性上稍弱外,其他方面,特別在專名識別的橫向對比中還是很亮眼的。
最近百度NLP發布了LAC 2.0:開源!我知道你不知道,百度開源詞法LAC 2.0幫你更懂中文,看完文章的第一感受就是易用性大大加強了,之前需要通過PaddleNLP或者PaddleHub調用lac,現在 "pip install lac" 後即可直接調用,相當方便。
所以花了一點時間,把 LAC 2.0 單獨作為一個接口部署在AINLP公眾號的自然語言處理工具測試平臺了,感興趣的同學可以通過AINLP公眾號後臺對話極速體驗LAC 2.0,輸入"LAC 中文文本"直接獲取百度LAC的中文文詞、詞性標註、NER識別結果:
關於百度LAC,首先看一下官方主頁的介紹:
LAC全稱Lexical Analysis of Chinese,是百度自然語言處理部研發的一款聯合的詞法分析工具,實現中文分詞、詞性標註、專名識別等功能。該工具具有以下特點與優勢:效果好:通過深度學習模型聯合學習分詞、詞性標註、專名識別任務,整體效果F1值超過0.91,詞性標註F1值超過0.94,專名識別F1值超過0.85,效果業內領先。效率高:精簡模型參數,結合Paddle預測庫的性能優化,CPU單線程性能達800QPS,效率業內領先。可定製:實現簡單可控的幹預機制,精準匹配用戶詞典對模型進行幹預。詞典支持長片段形式,使得幹預更為精準。調用便捷:支持一鍵安裝,同時提供了Python、Java和C++調用接口與調用示例,實現快速調用和集成。支持移動端: 定製超輕量級模型,體積僅為2M,主流千元手機單線程性能達200QPS,滿足大多數移動端應用的需求,同等體積量級效果業內領先。
LAC 2.0 的使用還是很方便的,官方文檔很清晰,可以直接參考,以下是在 Ubuntu 16.04, Python 3.6.8 環境下安裝測試,這裡是在 virtualenv 虛擬環境下通過 pip install lac 安裝,安裝完成後可以在命令行中直接輸入lac進行體驗:
(venv) textminer@textminer:~/nlp_tools/baidu_lac$ lac我愛自然語言處理我/r 愛/v 自然語言處理/nz百度LAC是一個中文詞法分析工具百度/ORG LAC/nz 是/v 一個/m 中文/nz 詞法/n 分析/vn 工具/n習近平致信祝賀哈爾濱工業大學建校100周年習近平/PER 致信/v 祝賀/v 哈爾濱工業大學/ORG 建校/v 100周年/m新華社北京6月7日電 中共中央總書記、國家主席、中央軍委主席習近平7日致信祝賀哈爾濱工業大學建校100周年,向全校師生員工和校友致以熱烈的祝賀和誠摯的問候。新華社/ORG 北京/LOC 6月7日/TIME 電/n /w /w 中共中央/ORG 總書記/n 、/w 國家主席/n 、/w 中央軍委/ORG 主席/n 習近平/PER 7日/TIME 致信/v 祝賀/v 哈爾濱工業大學/ORG 建校/v 100周年/m ,/w 向/p 全校/n 師生/n 員工/n 和/c 校友/n 致以/v 熱烈/a 的/u 祝賀/vn 和/c 誠摯/a 的/u 問候/vn 。/w
如果只需要測試中文分詞結果,輸入'lac --segonly'即可。LAC的代碼調用也很方便:
1 (venv) textminer@textminer:~/nlp_tools/baidu_lac$ ipython2 Python 3.6.8 (default, May 7 2019, 14:58:50)3 Type 'copyright', 'credits' or 'license' for more information4 IPython 7.15.0 -- An enhanced Interactive Python. Type '?' for help.56 In [1]: from LAC import LAC78 # 如果只需要中文分詞功能,設置'seg'模式,加載中文分詞模型9 In [2]: lac = LAC(mode='seg')1011 # 單個樣本調用12 In [3]: text = '我愛自然語言處理'1314 In [4]: result = lac.run(text)1516 In [5]: print(result)17 ['我', '愛', '自然語言處理']1819 # 批量樣本調用20 In [6]: texts = ['我愛自然語言處理', '百度LAC是一個不錯的中文詞法分析工具', 'AINLP@我愛自然語言處理']2122 In [7]: result = lac.run(texts)2324 In [8]: print(result)25 [['我', '愛', '自然語言處理'], ['百度', 'LAC', '是', '一個', '不錯', '的', '中文', '詞', '法', '分析', '工具'], ['AINLP', '@', '我', '愛', '自然語言處理']]
如果需要使用LAC的詞性標註與命名實體識別功能,可以調用的時候設置為'lac'模式,加載LAC模型:
1 In [11]: lac = LAC(mode='lac') 2 3 In [12]: text = '我愛自然語言處理' 4 5 In [13]: result = lac.run(text) 6 7 In [14]: print(result) 8 [['我', '愛', '自然語言處理'], ['r', 'v', 'nz']] 910 In [15]: texts = ['我愛哈爾濱工業大學', '2020年6月7日哈工大迎來百年校慶'] 1112 In [16]: result = lac.run(texts) 1314 In [17]: print(result) 15 [[['我', '愛', '哈爾濱工業大學'], ['r', 'v', 'ORG']], [['2020年6月7日', '哈工大', '迎來', '百年', '校慶'], ['TIME', 'ORG', 'v', 'm', 'n']]]
這裡的輸出格式為(word_list, tags_list),對應每個句子的切詞結果word_list和每個詞的對應詞性標註的tags_list,其所用的詞性標記集如下,包括4個常用的專名類別(PER, LOC, ORG, TIME):
此外,LAC的詞典定製化和模型增量訓練功能也相當友好,這對於有在實際業務需求的團隊就非常有幫助,可以基於自己的業務需求和領域詞典數據定製一個面向自身業務和領域的中文詞法分析模型。以下以詞典定製化為例,我們添加了一個自定義詞典 mydict.txt, 內容如下:
錦江石材/ORG正式成立
以下是加載自定義詞典前後的結果對比:
1 In [24]: text = "錦江石材正式成立了"23 In [25]: result = lac.run(text)4 # 沒有幹預的結果5 In [26]: print(result)6 [['錦江', '石材', '正式', '成立', '了'], ['LOC', 'n', 'ad', 'v', 'xc']]78 In [27]: lac.load_customization('mydict.txt')910 In [28]: result = lac.run(text)1112 # 幹預後的結果13 In [29]: print(result)14 [['錦江石材', '正式成立', '了'], ['ORG', 'v', 'xc']]
至於模型增量訓練,留給感興趣的同學自己嘗試,這個功能很有用,可以參考LAC官方文檔說明,很清晰。
最後需要說明一下本文主要參考了百度LAC的項目主頁文檔,歡迎貢獻推薦Star
本文作者:AINLP