开源词法分析工具LAC重大升级!打造属于自己的个性化分词器!
星標(biāo)/置頂小屋,帶你解鎖
最萌最前沿的NLP、搜索與推薦技術(shù)
文 | 匿名大佬
編 |? 北大小才女小軼
本文將為大家介紹如何使用百度開源的詞法分析工具LAC實(shí)現(xiàn)個(gè)性化分詞(附代碼),并展示LAC在各數(shù)據(jù)集上驚艷的性能表現(xiàn)。
背景介紹
分詞是中文自然語言處理基礎(chǔ)且重要的任務(wù)。詞是表意的完整單位?!皬埲边@個(gè)詞中,“張”其實(shí)既可以是姓也可以表“張開”之意,而“三”則常被表示為數(shù)字。但“張三”作為一個(gè)詞出現(xiàn)在一起時(shí),大家明確知道這表示的是個(gè)人名,故而句子經(jīng)過分詞后可降低理解的難度。
分詞也是文本檢索、知識(shí)圖譜等自然語言處理應(yīng)用的重要基礎(chǔ)。這些下游任務(wù)的效果很大程度受限于分詞的準(zhǔn)確率。在問答對(duì)話、信息抽取、機(jī)器翻譯等任務(wù)也常用采用分詞后的結(jié)果作為模型輸入。在深度學(xué)習(xí)模型中,分詞除了能降低學(xué)習(xí)難度外,還可以縮短輸入序列長(zhǎng)度,從而降低模型運(yùn)算量。
在分詞任務(wù)中,最主要的挑戰(zhàn)包括以下三點(diǎn):
沒有統(tǒng)一的分詞標(biāo)準(zhǔn):因?yàn)椤霸~”的本身并沒有一個(gè)非常明確的界定,比如“夕小瑤”可以看做是一個(gè)名字組成的詞,“夕”和“小瑤”分別以姓和名作為一個(gè)詞也是有意義的。
持續(xù)增加的未登錄詞:未登錄詞(Out of Vocabulary,OOV),也叫生詞,主要指未在詞典或訓(xùn)練語料中出現(xiàn)過的詞,這是目前導(dǎo)致分詞錯(cuò)誤最主要的原因,并且每年都會(huì)有一些新的概念詞或網(wǎng)絡(luò)用語出現(xiàn),如“c位”、“打call”、“新冠”等。
歧義切分:一方面,同一個(gè)詞可能存在多個(gè)語義,在不同語義下需要進(jìn)行不同的切分,比如“努力/才/能/成功”、“發(fā)揮/才能”中的“才能”;另一方面,不同的切分結(jié)果可能導(dǎo)致完全不一樣的語義,如”無線電法/國別/研究“、“無線電/法國/別/研究”;這個(gè)時(shí)候,往往都需要理解上下文的語義才能得到一個(gè)合理的切分結(jié)果。
對(duì)于分詞標(biāo)準(zhǔn)問題,總是眾口難調(diào)的,因?yàn)榉衷~標(biāo)準(zhǔn)上存在人的主觀性,而且其實(shí)對(duì)于不同的應(yīng)用,所需要的分詞粒度也是不同的。比如檢索相關(guān)的應(yīng)用往往偏向于更細(xì)粒度的分詞,甚至同時(shí)使用多種粒度的分詞構(gòu)建索引,如果我們僅僅采用粗粒度的分詞,比如以“夕小瑤”進(jìn)行搜索,就會(huì)難以匹配到包含“小瑤”的結(jié)果。而在實(shí)體抽取時(shí),知識(shí)圖譜等領(lǐng)域則會(huì)更加偏向于粗粒度的分詞結(jié)果,比如“夕小瑤”才是一個(gè)完整的人名,對(duì)應(yīng)于一個(gè)實(shí)體,而“夕”或“小瑤”則不是。而在醫(yī)療、音樂、法律等不同應(yīng)用領(lǐng)域,所采用的分詞標(biāo)準(zhǔn)往往也是有所差異的。這個(gè)時(shí)候我們就需要打造一個(gè)屬于自己的個(gè)性化分詞工具。
此前,在領(lǐng)域個(gè)性化分詞方面,比較出名的工具當(dāng)屬北大分詞工具pkuseg。而近期,百度開源的詞法分析工具LAC剛剛進(jìn)行了一次比較大的升級(jí),大大提升了其易用性,并提供了增量訓(xùn)練的接口。在使用這個(gè)增量訓(xùn)練的接口進(jìn)行簡(jiǎn)單測(cè)試發(fā)現(xiàn),LAC在個(gè)性化分詞訓(xùn)練的效果驚艷,在測(cè)試的多個(gè)數(shù)據(jù)集中上的表現(xiàn)明顯優(yōu)于pkuseg。
個(gè)性化分詞的實(shí)現(xiàn)
數(shù)據(jù)集
我們搜刮了一些不同領(lǐng)域的分詞數(shù)據(jù)集,用于對(duì)個(gè)性化分詞的效果進(jìn)行測(cè)試,數(shù)據(jù)集整理如下:
PKU:新聞數(shù)據(jù) (http://sighan.cs.uchicago.edu/bakeoff2005/)
MSR:新聞數(shù)據(jù) (http://sighan.cs.uchicago.edu/bakeoff2005/)
CityU:繁體字新聞數(shù) (http://sighan.cs.uchicago.edu/bakeoff2005/)
weibo:微博文本數(shù)據(jù) (https://github.com/FudanNLP/NLPCC-WordSeg-Weibo)
law:法律文書數(shù)據(jù) (https://github.com/FanhuaandLuomu/BiLstm_CNN_CRF_CWS)
medical: 醫(yī)療論壇數(shù)據(jù) (https://github.com/adapt-sjtu/AMTTL/tree/538258cdcc58dc66761e87db690658da5c0f498f)
HKCanCor:粵語對(duì)話數(shù)據(jù) (http://compling.hss.ntu.edu.sg/hkcancor/)
CTB8:新聞、廣播、微博及網(wǎng)頁等綜合數(shù)據(jù) (https://catalog.ldc.upenn.edu/LDC2013T21)
我們整理了以上數(shù)據(jù),對(duì)部分需要進(jìn)行格式轉(zhuǎn)換的數(shù)據(jù)進(jìn)行了預(yù)處理,已將預(yù)處理腳本上傳到云盤。
在訂閱號(hào)「夕小瑤的賣萌屋」后臺(tái)回復(fù)關(guān)鍵詞【0720】,即可下載各領(lǐng)域分詞數(shù)據(jù)集的預(yù)處理腳本。
分詞模型的安裝與訓(xùn)練
pkuseg安裝:pip install pkuseg
LAC安裝: pip install lac
pkuseg和LAC的訓(xùn)練代碼都非常簡(jiǎn)潔,安裝并準(zhǔn)備好訓(xùn)練數(shù)據(jù)后,只需運(yùn)行以下幾行代碼即可完成模型訓(xùn)練:
train_file?=?'train.txt'?#?訓(xùn)練數(shù)據(jù) test_file?=?'test.txt'??#?測(cè)試數(shù)據(jù)#?LAC?訓(xùn)練 from?LAC?import?LAC lac?=?LAC(mode='seg') lac.train('my_lac_model',?train_file) lac?=?LAC('my_lac_model')??????#?裝載新模型#?pkuseg訓(xùn)練 import?pkuseg pkuseg.train(train_file,?test_file,?'my_pku_model') pkusegger?=?pkuseg.pkuseg('my_pkumodel')?#?裝載新模型實(shí)驗(yàn)
評(píng)估指標(biāo)
訓(xùn)練好模型后,就需要對(duì)模型進(jìn)行評(píng)估了。在這里我們使用SIGHAN 2005的評(píng)估標(biāo)準(zhǔn):以詞為粒度,統(tǒng)計(jì)其準(zhǔn)確率和召回率的。以“夕小瑤的賣萌屋”的分詞結(jié)果為例,如果模型對(duì)于“賣萌屋”這一個(gè)單詞進(jìn)行了分割,預(yù)測(cè)錯(cuò)誤。其準(zhǔn)確率,召回率和F1值的計(jì)算結(jié)果如下所示:
預(yù)測(cè)正確的單詞數(shù)預(yù)測(cè)結(jié)果的單詞數(shù)
預(yù)測(cè)正確的單詞數(shù)標(biāo)注結(jié)果的單詞數(shù)
測(cè)試結(jié)果
下表列出了LAC、pkuseg、thulac在各數(shù)據(jù)集上的測(cè)試結(jié)果。可以看到,LAC在大多數(shù)的數(shù)據(jù)集的效果要顯著優(yōu)于pkuseg,以及thulac。除了HKCanCor數(shù)據(jù)集外,LAC的F1值大約要比pkuseg高2-3個(gè)百分點(diǎn)。因?yàn)镠KCanCor是粵語方面的數(shù)據(jù),LAC原本模型的訓(xùn)練語料中應(yīng)該沒什么粵語數(shù)據(jù),所以這個(gè)效果優(yōu)勢(shì)不是很明顯似乎也能理解。
(可左右滑動(dòng)查看完整表格)
| CTB8 | 232W | 95.7(96.0/95.3) | 93.7(95.4/92.0) | 92.9(94.7/91.1) | 91.4(90.4/92.4) |
| MSR | 405W | 97.3(97.2/97.3) | 95.2(96.3/94.1) | 94.9(95.9/93.9) | 93.0(92.1/93.8) |
| PKU | 182W | 95.8(96.2/95.4) | 94.0(95.5/92.6) | 93.6(95.1/92.2) | 92.0(91.9/92.0) |
| 107W | 95.2(94.7/95.6) | 93.1(93.7/92.4) | 92.7(93.4/91.9) | 89.7(88.4/91.0) | |
| CityU | 240W | 96.1(95.9/96.3) | 93.6(94.2/93.0) | 92.8(93.6/92.1) | 92.7(92.1/93.3) |
| law | 9.83W | 97.7(97.9/97.6) | 96.5(95.8/93.7) | 95.8(96.5/95.2) | 94.5(95.0/94.1) |
| medical | 9.37W | 86.9(86.4/87.5) | 84.1(85.2/83.1) | 83.7(84.6/82.8) | 80.5(78.5/82.6) |
| HKCanCor | 17.6W | 96.7(96.5/96.8) | 96.6(96.5/96.6) | 96.3(96.4/96.3) | 93.8(93.2/94.5) |
注:pkuseg 增量訓(xùn)練的參數(shù)初始化均使用pkuseg提供的default模型
事實(shí)上,LAC直接采用默認(rèn)參數(shù)、未經(jīng)調(diào)參操作得出的結(jié)果,都已經(jīng)接近近年頂會(huì)論文中呈現(xiàn)的結(jié)果。以下是一篇ACL2020論文(Improving Chinese Word Segmentation with Wordhood Memory Networks)所羅列的近幾年分詞測(cè)試結(jié)果。其中,近兩年的模型大多都是基于BERT等大規(guī)模預(yù)訓(xùn)練模型,非常需要的算力,相信會(huì)讓不少讀者望而卻步。
而在醫(yī)療垂類的測(cè)試結(jié)果中,LAC的結(jié)果也是要遠(yuǎn)優(yōu)于COLING2018提出的AMTTL模型的,所以可以看出LAC的結(jié)果還是比較驚艷的。
完整的模型評(píng)估和訓(xùn)練代碼
如下所示,為了方便讀者自行體驗(yàn)感受其效果,我們提供得到上述結(jié)果的完整測(cè)試代碼。各位可下載相應(yīng)數(shù)據(jù)集后直接運(yùn)行以下腳本:
#?評(píng)估函數(shù) def?seg_eval(gold_file,?predict_file):def?convert2set(word_list):offset?=?0res?=?[]for?word?in?word_list:res.append((offset,?offset?+?len(word),?word))offset?+=?len(word)return?set(res)gold_num?=?0.0predict_num?=?0.0correct_num?=?0.0golds?=?open(gold_file,?'r',?encoding='utf8')predicts?=?open(predict_file,?'r',?encoding='utf8')for?gold,?predict?in?zip(golds,?predicts):words_gold?=?gold.strip().split()words_predict?=?predict.strip().split()gold_num?+=?len(words_gold)predict_num?+=?len(words_predict)correct_num?+=?len(convert2set(words_gold)?&convert2set(words_predict))P?=?correct_num?/?predict_numR?=?correct_num?/?gold_numF1?=?2?*?P?*?R?/?(P?+?R)return?P,?R,?F1datanames?=?['lac',?'medical',?'pku',?'msr',?'ctb8',?'weibo',?'cityu',?'hkcantcor']#?訓(xùn)練代碼 from?LAC?import?LAC import?pkusegfor?dataname?in?datanames:train_file?=?'cws_data/%s_train.txt'%datanametest_file?=?'cws_data/%s_test.txt'%datanamelac_predict_file?=?'%s_lacout.txt'%datanamepku_predict_file?=?'%s_pkuout.txt'%dataname#?lac?訓(xùn)練并裝載新模型lac?=?LAC(mode='seg')lac.train(dataname?+?'_lacmodel',?train_file)lac?=?LAC(dataname?+?'_lacmodel',?mode='seg')#?pku?訓(xùn)練并裝載新模型pkuseg.train(train_file,?test_file,?dataname?+?'_pkumodel')pkusegger?=?pkuseg.pkuseg(dataname?+?'_pkumodel')#?執(zhí)行評(píng)估with?open(test_file,?'r',?encoding='utf8')?as?fi:with?open(lac_predict_file,?'w',?encoding='utf8')?as?lacfo:with?open(pku_predict_file,?'w',?encoding='utf8')?as?pkufo:for?line?in?fi:words?=?line.strip().split()#?執(zhí)行并保存lac模型結(jié)果words_lac?=?lac.run("".join(words))print("?".join(words_lac),?file=lacfo)#?執(zhí)行并保存pku模型結(jié)果words_pku?=?pkusegger.cut("".join(words))print("?".join(words_pku),?file=pkufo)print('lac',?dataname,?seg_eval(test_file,?lac_predict_file))print('pku',?dataname,?seg_eval(test_file,?pku_predict_file))LAC個(gè)性化增量訓(xùn)練后的效果
以下展示了LAC在各自不同領(lǐng)域數(shù)據(jù)上訓(xùn)練前后的一些case。不難發(fā)現(xiàn),LAC默認(rèn)模型其實(shí)在法律、醫(yī)療、新聞等相關(guān)領(lǐng)域的分詞效果其實(shí)都已經(jīng)比較好了。通過增量訓(xùn)練,主要調(diào)整了模型的分詞粒度(目測(cè)LAC默認(rèn)模型的分詞粒度都比較粗)。而對(duì)于粵語數(shù)據(jù),LAC默認(rèn)模型的效果表現(xiàn)比較差。通過訓(xùn)練后效果后明顯提升。這可能是LAC原有模型的訓(xùn)練語料沒什么粵語語料的原因。
粵語數(shù)據(jù)
LAC: 我 哋 而 家 返 屋企 睇 電視 囉 !
LAC-HKCanCor: 我哋 而家 返 屋企 睇 電視 囉 !
普通話:我們現(xiàn)在回家看電視了!
LAC:琴日嘅嗰啲 問題 真 係 唔知 點(diǎn)解
LAC-HKCanCor:琴日 嘅 嗰啲 問題 真?zhèn)S 唔 知 點(diǎn)解
普通話:昨天的那些問題真的不知道為什么
法律數(shù)據(jù)
LAC:據(jù)此 , 依照 《 中華人民共和國合同法 》 第一百零七條 、 第一百九十六條 、 第二百條 、 第二百零五條 、 第二百零六條 、 第二百零七條 、 第二百一十一條 第二款
LAC-law:據(jù) 此 , 依照 《 中華 人民 共和國 合同法 》 第一百零七 條 、 第一百九十六 條 、 第二百 條 、 第二百零五 條 、 第二百零六 條 、 第二百零七 條 、 第二百一十一 條 第二 款
LAC:以上 事實(shí) , 有 《 借款協(xié)議 》 、 《 收款確認(rèn)書 》 、 工商銀行 賬戶 歷史 明細(xì) 清單 、 《 委托代理合同 》 、 律師 收費(fèi) 發(fā)票 及 當(dāng)事人 陳述 記錄 在案 為證 。
LAC-lac:以上 事實(shí) , 有 《 借款 協(xié)議 》 、 《 收款 確認(rèn)書 》 、 工商 銀行 賬戶 歷史 明細(xì) 清單 、 《 委托 代理 合同 》 、 律師 收費(fèi) 發(fā)票 及 當(dāng)事人 陳述 記錄 在案 為 證 。
醫(yī)療數(shù)據(jù)
LAC:慢性支氣管炎 冠狀動(dòng)脈 肺動(dòng)脈瘺 , 心律失常 完全性 左束支 傳導(dǎo) 阻滯 , 阻塞性肺氣腫
LAC-medical:慢性 支氣管 炎 冠狀 動(dòng)脈 肺動(dòng)脈 瘺 , 心律失常 完全性 左束支 傳導(dǎo) 阻滯 , 阻塞性 肺氣腫
新聞數(shù)據(jù)
LAC:北京新年音樂會(huì) 展現(xiàn) 經(jīng)典 魅力 尉健行 李嵐清 與 數(shù)千 首都 觀眾 一起 欣賞
LAC-pku:北京 新年 音樂會(huì) 展現(xiàn) 經(jīng)典 魅力 尉 健行 李 嵐清 與 數(shù)千 首都 觀眾 一起 欣賞
LAC:2000年12月22日 下午 2 時(shí) ( 北京 時(shí)間 23日 凌晨 2 時(shí) ) , 我 作為 鷺江出版社 “ 2000 人文 學(xué)者 南極行 ” 活動(dòng) 的 代表
LAC-pku:2000年 12月 22日 下午 2時(shí) ( 北京 時(shí)間 23日 凌晨 2時(shí) ) , 我 作為 鷺江 出版社 “ 2000 人文 學(xué)者 南極 行 ” 活動(dòng) 的 代表
賣萌屋成立了自然語言處理、搜索技術(shù)、推薦系統(tǒng)、算法崗求職等方向大群和知識(shí)圖譜與信息抽取、智能問答、對(duì)話系統(tǒng)等垂類討論群。不僅可以認(rèn)識(shí)眾多志同道合的優(yōu)秀小伙伴,而且還有若干賣萌屋美麗小姐姐(劃掉)、頂會(huì)審稿人、大廠研究員、知乎大V等你來撩哦。后臺(tái)回復(fù)關(guān)鍵詞【入群】即可獲取入口。
記得掃描下方二維碼關(guān)注并星標(biāo)置頂,我才能來到你面前哦。
夕小瑤的賣萌屋
關(guān)注&星標(biāo)小夕,帶你解鎖AI秘籍
訂閱號(hào)主頁下方「撩一下」有驚喜
總結(jié)
以上是生活随笔為你收集整理的开源词法分析工具LAC重大升级!打造属于自己的个性化分词器!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EMNLP'20最佳论文揭晓!八块肌肉=
- 下一篇: 实践中学到的最重要的机器学习经验!