????????本文是一次基于BERT+BiLSTM+CRF做中文分詞的具體流程,方便自己查看,如有錯(cuò)誤的地方,還請(qǐng)各位不吝賜教!
1.漢語分詞:
????????事先聲明,本節(jié)漢語分詞任務(wù)的介紹都可以百度出來,只是整合搬運(yùn)了一下!
(1)分詞的概念
????????一般分詞是NLP(自然語言處理)的第一項(xiàng)核心技術(shù)。英文中每個(gè)句子都將詞用空格或標(biāo)點(diǎn)符號(hào)分隔開來,而在中文中很難對(duì)詞的邊界進(jìn)行界定,難以將詞劃分出來。在漢語中,雖然是以字為最小單位,但是一篇文章的語義表達(dá)卻仍然是以詞來劃分的。因此處理中文文本時(shí),需要進(jìn)行分詞處理,將句子轉(zhuǎn)為詞的表示。
(2)漢語分詞的意義和作用
????????對(duì)于中文分詞的意義和作用,就要提到智能計(jì)算技術(shù)。智能計(jì)算技術(shù)涉及的學(xué)科包括數(shù)學(xué)、計(jì)算機(jī)科學(xué)、電子機(jī)械、通訊、生理學(xué)、進(jìn)化理論和心理學(xué)等等。簡單來說,智能計(jì)算就是讓機(jī)器“能看會(huì)想,能聽會(huì)講”。要想實(shí)現(xiàn)這樣的一個(gè)目標(biāo),首先就要讓機(jī)器理解人類的語言,只有機(jī)器理解了人類的語言文字,才使得人與機(jī)器的交流成為可能。
????????對(duì)于人類語言而言,“詞是最小的能夠獨(dú)立活動(dòng)的有意義的語言成分”,所以對(duì)于中文來講,將詞確定下來是理解自然語言的第一步,只有跨越了這一步,中文才能像英文那樣過渡到短語劃分、概念抽取以及主題分析,以至自然語言理解,最終達(dá)到智能計(jì)算的最高境界。
????????從現(xiàn)階段的實(shí)際情況來看,英文已經(jīng)跨越了分詞這一步,并且已經(jīng)展現(xiàn)了良好的應(yīng)用前景,無論是信息檢索還是主題分析的研究都要強(qiáng)于中文,究其根本原因就是中文要通過分詞這道難關(guān),只有攻破了這道難關(guān),我們才有希望趕上并超過英文在信息領(lǐng)域的發(fā)展,所以中文分詞對(duì)我們來說意義重大,可以說直接影響到使用中文的每一個(gè)人的方方面面。
????????以搜索引擎為例,對(duì)于搜索引擎來說,最重要的并不是找到所有結(jié)果,因?yàn)樵谏习賰|的網(wǎng)頁中找到所有結(jié)果沒有太多的意義,最重要的是把最相關(guān)的結(jié)果排在最前面,這也稱為相關(guān)度排序。中文分詞的準(zhǔn)確與否,常常直接影響到對(duì)搜索結(jié)果的相關(guān)度排序。 ????????
????????Google的中文分詞技術(shù)采用的是美國Basis Technology公司提供的中文分詞技術(shù),百度使用的是自己公司開發(fā)的分詞技術(shù),中搜使用的是國內(nèi)海量科技提供的分詞技術(shù)。由此可見,中文分詞的準(zhǔn)確度,對(duì)搜索引擎結(jié)果相關(guān)性和準(zhǔn)確性有相當(dāng)大的關(guān)系。
(3)“漢語分詞”的典型應(yīng)用
????????中文分詞是其他中文信息處理的基礎(chǔ),搜索引擎只是中文分詞的一個(gè)應(yīng)用。此外,在機(jī)器翻譯(MT)、語音合成、自動(dòng)分類、自動(dòng)摘要、自動(dòng)校對(duì)等等,都需要用到漢語分詞。
(4)“漢語分詞”的技術(shù)難點(diǎn)
A.歧義識(shí)別
????????歧義是指同樣的一句話,可能有兩種或者更多的切分方法。歧義又分為組合型歧義、交集型歧義和真歧義三種類型。
(a)?組合型歧義:分詞是有不同的粒度的,指某個(gè)詞條中的一部分也可以切分為一個(gè)獨(dú)立的詞條。比如“中華人民共和國”,粗粒度的分詞就是“中華人民共和國”,細(xì)粒度的分詞可能是“中華/人民/共和國”
(b)交集型歧義:在“鄭州天和服裝廠”中,“天和”是廠名,是一個(gè)專有詞,“和服”也是一個(gè)詞,它們共用了“和”字。
(c)真歧義:本身的語法和語義都沒有問題, 即便采用人工切分也會(huì)產(chǎn)生同樣的歧義,只有通過上下文的語義環(huán)境才能給出正確的切分結(jié)果。例如:對(duì)于句子“美國會(huì)通過對(duì)臺(tái)售武法案”,既可以切分成“美國/會(huì)/通過對(duì)臺(tái)售武法案”,又可以切分成“美/國會(huì)/通過對(duì)臺(tái)售武法案”。
B.分詞標(biāo)準(zhǔn)
????????比如人名,在哈工大的標(biāo)準(zhǔn)中姓和名是分開的,但在Hanlp中是合在一起的。這需要根據(jù)不同的需求制定不同的分詞標(biāo)準(zhǔn)。
C.新詞
? ? ? ? 新詞也稱未被詞典收錄的詞,該問題的解決依賴于人們對(duì)分詞技術(shù)和漢語語言結(jié)構(gòu)的進(jìn)一步認(rèn)識(shí)。
2.數(shù)據(jù)集及預(yù)處理:
????????數(shù)據(jù)集來源于SIGHAN 2005第二屆中文分詞任務(wù)中的Peking University數(shù)據(jù)集。數(shù)據(jù)集共19814條句子,總共4699個(gè)字(不重復(fù))。
????????首先,對(duì)于漢語分詞任務(wù)而言,漢字分詞無非有兩種情況,一種是一個(gè)字,其余則是多字組合。每個(gè)字在構(gòu)造一個(gè)特定詞語時(shí)都占據(jù)著一個(gè)特定的位置即詞位,一般采用四結(jié)構(gòu)詞位:B(詞首),M(詞中),E(詞尾)和S(單獨(dú)成詞),即每個(gè)字有對(duì)應(yīng)的四種可能狀態(tài),相當(dāng)于為每一個(gè)漢字做四分類的任務(wù)。
????????在該數(shù)據(jù)集中以空格分開詞,即相當(dāng)于有標(biāo)注的文本,因?yàn)樵撐谋颈容^干凈,所以無需過多的預(yù)處理,只是按照空格劃分來標(biāo)注漢字,按照詞的長度對(duì)每一個(gè)漢字打標(biāo)簽,對(duì)于超出最大長度的文本(最大長度為500),則以最大長度作為限制將一段文本拆分成多段。
????????預(yù)處理過后的數(shù)據(jù)與標(biāo)簽如下圖所示:
?數(shù)據(jù)與對(duì)應(yīng)標(biāo)簽(前五個(gè))
????????之后是將標(biāo)簽映射成0-3,分別對(duì)應(yīng)著BMES的標(biāo)簽,對(duì)于單獨(dú)的漢字,則是統(tǒng)計(jì)總共的漢字個(gè)數(shù),從? ? ? ??
預(yù)處理之后,是將得到的數(shù)據(jù)劃分成一個(gè)個(gè)token,本次使用的模型是bert-base-chinese,
3.模型架構(gòu)介紹:
(1)整體架構(gòu):
? ? ? ? 目前對(duì)于NLP任務(wù),較為通用的框架是使用預(yù)訓(xùn)練模型+針對(duì)下游任務(wù)的微調(diào)這種處理范式。對(duì)于漢語分詞的上游任務(wù)語言預(yù)處理而言, 一直是研究的熱點(diǎn)問題。而BERT作為先進(jìn)的語言預(yù)處理模型, 可以獲取高質(zhì)量的詞向量(相較于傳統(tǒng)模型的Word2Vec), 從而更有利于下游任務(wù)進(jìn)行特征提取和分類。BERT-BiLSTM-CRF模型整體結(jié)構(gòu)如圖所示, 這個(gè)模型主要分3個(gè)模塊。首先標(biāo)注語料經(jīng)過BERT預(yù)訓(xùn)練語言模型獲得相應(yīng)的詞向量, 之后再把詞向量輸入到BiLSTM模塊中做進(jìn)一步處理, 最終利用CRF模塊對(duì)BiLSTM模塊的輸出結(jié)果進(jìn)行解碼, 得到一個(gè)預(yù)測(cè)標(biāo)注序列, 然后對(duì)序列中的各個(gè)實(shí)體進(jìn)行提取分類, 從而完成中文實(shí)體識(shí)別的整個(gè)流程。
?模型架構(gòu)
(2)Bert:
????????Bert作為該模型中的預(yù)處理模塊,主要作用是提取出序列中豐富的詞級(jí)特征、語法結(jié)構(gòu)特征和語義特征,經(jīng)過BERT處理過后能夠獲得語境化的詞向量, 對(duì)處理長距離依賴信息的語句有很好的效果。
????????BERT的本質(zhì)上是通過在海量的語料的基礎(chǔ)上運(yùn)行自監(jiān)督學(xué)習(xí)方法為單詞學(xué)習(xí)一個(gè)好的特征表示,所謂自監(jiān)督學(xué)習(xí)是指在沒有人工標(biāo)注的數(shù)據(jù)上運(yùn)行的監(jiān)督學(xué)習(xí)。在以后特定的NLP任務(wù)中,我們可以直接使用BERT的特征表示作為該任務(wù)的詞嵌入特征。所以BERT提供的是一個(gè)供其它任務(wù)遷移學(xué)習(xí)的模型,該模型可以根據(jù)任務(wù)微調(diào)或者固定之后作為特征提取器。
????????隨著研究的不斷深入,對(duì)于語言模型的研究先后經(jīng)歷了one-hot、Word2Vec、ELMO(2014)、GPT(2018)到BERT(2018),前幾個(gè)語言模型均存在一些缺陷,,如Word2Vec模型訓(xùn)練出來的詞向量是屬于靜態(tài)Word Embedding,無法表示一詞多義; GPT使用的Transformer的Decoder,屬于屬于生成式模型,是單向語言模型,?無法獲取一個(gè)字詞的上下文。而對(duì)BERT模型而言, 它是綜合ELMO和GPT這兩者的優(yōu)勢(shì)而構(gòu)造出來的模型,它使用的是TRansformer的Encoder,在訓(xùn)練時(shí)通過MLM(Masked Language Model)和NSP(Next Sequence Prediction)來計(jì)算損失,未來更多的證據(jù)證明,MLM是一種十分有效的方式。由于BERT具有很強(qiáng)的語義表征優(yōu)勢(shì), 可以利用BERT獲取語境化的詞向量來提高實(shí)體識(shí)別的性能。
????????Bert架構(gòu)如下圖所示。對(duì)于任意序列, 首先通過分詞處理得到分詞文本序列; 然后對(duì)分詞序列的部分詞進(jìn)行全詞Mask, 再為序列的開頭添加一個(gè)特殊標(biāo)記[CLS], 句子間用標(biāo)記[SEP]分隔。此時(shí)序列的每個(gè)詞的輸出Embedding由3部分組成: Token Embedding、Segment Embedding和Position Embedding。將序列向量輸入到雙向Transformer進(jìn)行特征提取, 最后得到含有豐富語義特征的序列向量。當(dāng)然,輸入形式一般要根據(jù)下游任務(wù)具體而定,比如在分詞中不需要NSP損失,也自然不需要同時(shí)輸入兩個(gè)句子來判斷是不是相鄰句子,也不需要[SEP]分隔符;而[CLS]則置于文本序列之前,用以表征全局信息。
Bert架構(gòu)
????????Bert使用的Transformer的Encoder結(jié)構(gòu),如圖所示。Transformer使用的編碼層只有Positional Embedding,并且是不可訓(xùn)練的,采用正余弦編碼,因?yàn)門ransformer無法得到序列中每個(gè)token的前后位置關(guān)系,所以采用位置編碼來記錄每個(gè)token在序列中的位置,與Transformer不一樣的是,Bert不僅使用了Positional Embedding,而且加入了Patch Embedding和Token Embedding,Token Embedding就是將詞劃分成一個(gè)合適的個(gè)體或組合,比如playing可以劃分成play和ing,在中文中自然就代表一個(gè)字。Patch Embedding采用0-1編碼,0代表第一個(gè)句子,1代表第二個(gè)句子,用于區(qū)分不同的句子。Bert的Positional Embedding與Transformer不同,Bert的PE是直接從0向后遞增得到的,沒有采用Transformer的正余弦編碼,因?yàn)榘l(fā)現(xiàn)簡單的遞增位置嵌入效果就已經(jīng)很好了,且在Bert中PE是可訓(xùn)練的。
?
(3)BiLSTM
????????LSTM (Long-Short Term Memory, 長短期記憶網(wǎng)絡(luò)), 是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體。它解決了RNN訓(xùn)練時(shí)所產(chǎn)生的梯度爆炸或梯度消失。LSTM巧妙地運(yùn)用門控概念實(shí)現(xiàn)長期記憶, 同時(shí)它也能夠捕捉序列信息。?
????????LSTM的核心主要是以下結(jié)構(gòu): 遺忘門、輸入門、輸出門以及記憶單元。輸入門與遺忘門兩者的共同作用就是舍棄無用的信息, 把有用的信息傳入到下一時(shí)刻。?對(duì)于整個(gè)結(jié)構(gòu)的輸出, 主要是記憶單元的輸出和輸出門的輸出相乘所得到的。
? ? ? ? 相較于單向的LSTM,雙向LSTM可以看到上下文信息,能給出更貼近語境的輸出。在模型中,BiLSTM接受來自BERT的輸出,作為雙向LSTM各個(gè)時(shí)間步的輸入,再將正向LSTM輸出的隱狀態(tài)序列與反向LSTM的在各個(gè)位置輸出的隱狀態(tài)進(jìn)行按位置拼接,得到完整的隱狀態(tài)序列。為了防止過擬合,設(shè)置dropout。之后接入一個(gè)全連接層,得到對(duì)每個(gè)詞預(yù)測(cè)的標(biāo)簽。
(4)CRF
????????在漢語分詞識(shí)別任務(wù)中, BiLSTM善于處理長距離的文本信息, 但無法處理相鄰標(biāo)簽之間的依賴關(guān)系。BiLSTM只能利用到序列的上下文信息給出最有可能的預(yù)測(cè),但是無法利用其預(yù)測(cè)出的信息來幫助預(yù)測(cè),具體來說,中文分詞的標(biāo)簽共有“BMES”四種,如果一個(gè)字被預(yù)測(cè)為M,則他的前一個(gè)字一定是B或者M(jìn),不可能是E或S,這就是標(biāo)簽之間的約束關(guān)系,而BiLSTM無法利用這層關(guān)系,而CRF能通過鄰近標(biāo)簽的關(guān)系獲得一個(gè)最優(yōu)的預(yù)測(cè)序列, 可以彌補(bǔ)BiLSTM的缺點(diǎn)。CRF層,進(jìn)行句子級(jí)的序列標(biāo)注。
????????CRF層的參數(shù)表示的是從第i個(gè)標(biāo)簽到第j個(gè)標(biāo)簽的轉(zhuǎn)移得分,進(jìn)而在為一個(gè)位置進(jìn)行標(biāo)注的時(shí)候可以利用此前已經(jīng)標(biāo)注過的標(biāo)簽,之所以要加2是因?yàn)橐獮榫渥邮撞刻砑右粋€(gè)起始狀態(tài)以及為句子尾部添加一個(gè)終止?fàn)顟B(tài)。如果記一個(gè)長度等于句子長度的標(biāo)簽序列,那么模型對(duì)于句子的標(biāo)簽等于的打分為。下圖得分中包含發(fā)射得分和狀態(tài)轉(zhuǎn)移得分兩部分。發(fā)射得分指的是BiLSTM輸出的標(biāo)簽的得分,狀態(tài)轉(zhuǎn)移得分是CRF由i狀態(tài)轉(zhuǎn)移到j(luò)狀態(tài)的概率,公式中的A是加權(quán)系數(shù)(可以使用自使用損失函數(shù)加權(quán)計(jì)算出),狀態(tài)轉(zhuǎn)移得分相當(dāng)于對(duì)BiLSTM的輸出加入了約束,規(guī)范其輸出,降低出現(xiàn)預(yù)測(cè)為E的字前面是E或S的可能性。
????????如何去評(píng)估當(dāng)前狀態(tài)的得分呢?通過預(yù)測(cè)出的最優(yōu)路徑的得分與所有路徑得分的比值來衡量。比值越大,說明越合理。損失函數(shù)為,即負(fù)對(duì)數(shù)似然,越大,loss越小。文章來源:http://www.zghlxwxcb.cn/news/detail-793497.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-793497.html
到了這里,關(guān)于基于BERT+BiLSTM+CRF做中文分詞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!