孫 浩 雒偉群 趙爾平 王 偉 崔志遠(yuǎn)
(西藏民族大學(xué)信息工程學(xué)院 咸陽 712082)
命名實(shí)體識別(Named Entity Recognition,NER)任務(wù)是自然語言處理(Nature Language Processing,NLP)領(lǐng)域的一個(gè)重要分支[1]。由于中文語言不像英文結(jié)構(gòu)簡單,中文句式中間沒有空格符分割,增加了中文實(shí)體識別的難度。NER任務(wù)早期采用的經(jīng)典算法有基于規(guī)則和詞典的方法以及條件隨機(jī)場等機(jī)器學(xué)習(xí)算法。
近年隨著深度學(xué)習(xí)發(fā)展,基于神經(jīng)網(wǎng)絡(luò)識別方法取得很好的識別效果,其中RNN循環(huán)神經(jīng)網(wǎng)絡(luò)和CNN卷積神經(jīng)網(wǎng)絡(luò)在序列標(biāo)注任務(wù)中應(yīng)用最為普遍。伴隨著研究的推進(jìn),在RNN的基礎(chǔ)上改進(jìn)后提出了長短時(shí)記憶(LSTM)神經(jīng)網(wǎng)絡(luò)以及門控循環(huán)單元(GRU),傳統(tǒng)機(jī)器學(xué)習(xí)算法與深度神經(jīng)網(wǎng)絡(luò)相結(jié)合是當(dāng)下主流的模型。Hammerton等[2]將LSTM第一次應(yīng)用在NER任務(wù)中并取得了不錯(cuò)的效果;Dong等[3]把雙向的LSTM與CRF
相結(jié)合到一起并應(yīng)用在NER任務(wù)上;Ma等[4]將雙向LSTM、CNN和CRF三者相融合起來應(yīng)用在NLP序列標(biāo)注任務(wù)中。目前在通用領(lǐng)域語料開展NER研究文獻(xiàn)較多,而在專業(yè)領(lǐng)域方面研究較少,由于受限于收集的領(lǐng)域方面的語料不充足、訓(xùn)練的句子單一、特殊實(shí)體定義的文本較長等問題導(dǎo)致實(shí)體識別難度大精度不高。文獻(xiàn)[5]采用單向LSTM與CRF相結(jié)合應(yīng)用在醫(yī)療領(lǐng)域文本的實(shí)體識別上F1值達(dá)到了78%;文獻(xiàn)[6~7]采用雙向LSTM結(jié)合CRF分別針對軍事專業(yè)領(lǐng)域和商情領(lǐng)域文本進(jìn)行實(shí)體識別達(dá)到良好的實(shí)驗(yàn)效果;文獻(xiàn)[8]采用CNN結(jié)合BILSTM與CRF在生物領(lǐng)域上實(shí)現(xiàn)文本實(shí)體識別最佳F1值達(dá)到89.09%。
Google于2018年提出BERT預(yù)訓(xùn)練語言模型[9]將句子的語義信息與位置信息和字符信息三者相融合使得同一個(gè)詞在不同語句中所表示的向量是不一樣的,其在多種NLP任務(wù)取得了不錯(cuò)的效果,比如在通用領(lǐng)域上的NER識別任務(wù)已經(jīng)超過大多數(shù)的經(jīng)典模型。文獻(xiàn)[10~11]將BERT與神經(jīng)網(wǎng)絡(luò)相結(jié)合分別在人民日報(bào)數(shù)據(jù)集上和MSRA微軟數(shù)據(jù)集等公開數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),取得了不錯(cuò)的識別效果。在西藏畜牧業(yè)命名實(shí)體識別方面,本文將BERT預(yù)訓(xùn)練語言模型融入BiLSTM-CRF神經(jīng)網(wǎng)絡(luò)模型中,在一定程度上解決了西藏畜牧業(yè)領(lǐng)域語料中潛在語義特征表示不充分等問題。并通過多組實(shí)驗(yàn)對比分析,發(fā)現(xiàn)Large比Base版本更適用于長語句中未訓(xùn)練詞的實(shí)體識別任務(wù)。本文自建了西藏畜牧業(yè)領(lǐng)域的語料庫,通過自主網(wǎng)上搜集語句,篩選清理出有代表性的句子,并設(shè)計(jì)不同類型實(shí)體的命名規(guī)范。
模型由以下由三個(gè)部分構(gòu)成,首先將輸入的待訓(xùn)練的文本序列經(jīng)過BERT語言模型中預(yù)處理輸出包含句子語義以及位置信息特征的字向量序列,然后將處理后的字向量序列放入到雙向的LSTM網(wǎng)絡(luò)層中訓(xùn)練得到更加抽象的上下文的特征信息,最后經(jīng)過CRF預(yù)測每個(gè)字的類別標(biāo)簽概率并輸出最大概率的類別標(biāo)簽,模型整體結(jié)構(gòu)如圖1所示。
圖1以“牦、牛、吃、苜、?!弊鳛榇幚淼淖址蛄校ㄟ^BERT處理后放入BLISTM中訓(xùn)練后輸出得到h1,…,h5序列,再經(jīng)過CRF聯(lián)合解碼預(yù)測出實(shí)體類別,即牦牛對應(yīng)為動(dòng)物類,苜蓿對應(yīng)為牧草類,吃不屬于任何的實(shí)體類別,被劃分為其他類(O)。
圖1 基于BERT-BiLSTM-CRF的西藏畜牧業(yè)領(lǐng)域?qū)嶓w識別模型
Word2vec[12]等傳統(tǒng)詞嵌入語言模型生成的詞向量存在著語義表示單一,不能充分考慮上下文之間的語義特征等問題。比較有代表性的預(yù)訓(xùn)練語言模型有Peters等[13]提出采用雙層雙向LSTM結(jié)構(gòu)的EMLO(Embeddings from language Models)語言模型以及Radford等[14]提出的采用單向Tansfromer編碼器的GPT(Generative Pre-Training)。而本文使用的BERT采用雙向Transformer編碼器結(jié)構(gòu),旨在構(gòu)建出能夠充分考慮上下文和句子間的關(guān)系特征的字向量。
BERT中最重要的部分是由多層雙向的Transformer編碼單元組成的,它的結(jié)構(gòu)圖如圖2所示,Transformer是目前比較流行的網(wǎng)絡(luò)結(jié)構(gòu),每個(gè)編碼單元主要部分包括自注意力機(jī)制和前饋神經(jīng)網(wǎng)絡(luò)。
圖2 Transfromer模型結(jié)構(gòu)圖
Transformer中最重要的部分是用自注意力機(jī)制代替RNN神經(jīng)網(wǎng)絡(luò),其原理就是利用attention計(jì)算輸入句子中的每一個(gè)詞和句中所有詞,獲得每個(gè)詞之間的相互關(guān)系并反映出每個(gè)詞在句中的重要性程度,計(jì)算原理如式(1)所示。
例如輸入向量為X,dk代表向量X的維度,QKT代表X的Q、K兩個(gè)分向量矩陣相乘,V表示X的字向量矩陣,Softmax函數(shù)將相除結(jié)果映射在0~1的區(qū)間上,最后再與V相乘得到注意力值Z。
2.1.1 輸入輸出表示
將句子“牦牛吃苜?!陛斎氲紹ERT進(jìn)行預(yù)處理,輸入序列的開頭需填充一個(gè)CLS分類標(biāo)識符,不同句子序列之間使用SEP分隔標(biāo)識符進(jìn)行分割,然后將每個(gè)字的嵌入向量與相對應(yīng)的句子嵌入向量和位置嵌入三種向量共同疊加后輸出,其中字嵌入表示輸入序列中每一個(gè)字符的對應(yīng)的向量,同一句話“牦牛吃苜?!敝忻總€(gè)字符對應(yīng)的句子向量都是一樣的,而位置嵌入為每一個(gè)輸入字符在句子中對應(yīng)的位置向量信息,其每個(gè)位置向量是不同的,輸入輸出結(jié)構(gòu)如圖3所示。
圖3 BERT的輸入輸出向量表示圖
2.1.2 預(yù)訓(xùn)練任務(wù)
BERT訓(xùn)練任務(wù)包括Masked語言模型和下一句預(yù)測,目的是分別獲取詞語級和句子級的特征表示。
Masked語言模型訓(xùn)練流程:首先將輸入的西藏畜牧業(yè)訓(xùn)練語料中隨機(jī)選擇15%部分將其掩蓋,然后使用masked token標(biāo)記隨機(jī)替換掉掩蓋后的輸入部分中80%部分,其次再將掩蓋后的10%部分使用隨機(jī)生成的詞替換掉,最后保持被遮蓋詞的剩下10%部分不變。
下一句預(yù)測任務(wù)其實(shí)就是訓(xùn)練一個(gè)二分類學(xué)習(xí)模型,用這個(gè)模型來判斷給定的兩個(gè)句子之間的關(guān)系是否為上下文相鄰位置的關(guān)系。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)[15]由于具有時(shí)序性的特點(diǎn)所以經(jīng)常被用作處理序列標(biāo)注問題,但隨著神經(jīng)網(wǎng)絡(luò)層數(shù)的增加,容易出現(xiàn)梯度消失問題。長短LSTM神經(jīng)網(wǎng)絡(luò)相較于RNN有了很大的改進(jìn),LSTM引入了復(fù)雜的門限和機(jī)制和記憶單元有效地解決了梯度消失問題,能夠提高收斂速度,更好地捕捉到了長距離的時(shí)序特征信息。LSTM中最重要的結(jié)構(gòu)包括輸入門(it)、遺忘門(ft)和輸出門(ot),這三種門具體計(jì)算更新方式如式(2~7)所示。
上述公式中各個(gè)參數(shù)代表的含義為:W和b分別表示兩個(gè)相鄰網(wǎng)絡(luò)層對應(yīng)的權(quán)重矩陣和偏置矩陣,t時(shí)刻的輸入向量和輸出向量分別用xt、ht符號代表,三個(gè)門使用的激活函數(shù)為sigmoid用σ符號表示,t時(shí)刻輸入與上一時(shí)刻隱含層輸出一起計(jì)算得到的當(dāng)前記憶單元臨時(shí)狀態(tài)用~Ct表示,其使用激活函數(shù)是雙曲正切函數(shù)用tanh表示,最后會將當(dāng)前時(shí)刻的隱含層輸出ht和計(jì)算更新后的記憶單元狀態(tài)ct傳入到下一個(gè)時(shí)刻。
傳統(tǒng)的單向的LSTM無法學(xué)習(xí)左右兩邊的上下文信息,所以本文模型采用兩層雙向長短時(shí)記憶神經(jīng)網(wǎng)絡(luò)(BILSTM)將輸入的字符向量序列分別順向和逆向輸入到LSTM中訓(xùn)練,以獲得能夠表征上文相關(guān)的語義信息。
CRF(Conventional random filed)全稱叫做條件隨機(jī)場,它經(jīng)常被用于序列標(biāo)注任務(wù),是自然語言處理中輸出層常用的算法。本文使用條件隨機(jī)場是線性鏈條件隨機(jī)場,通過傳入輸入序列來預(yù)測輸出序列。評估的分?jǐn)?shù)計(jì)算如式(8)所示,其中x=(x1,x2,…,xn)是輸入序列;y=(y1,y2,…,yn)為標(biāo)簽序列。
公式中各個(gè)符號的含義如下:n表示輸入序列的長度,Wyi-1,yi對應(yīng)轉(zhuǎn)移矩陣中標(biāo)簽yi-1到標(biāo)簽yi的轉(zhuǎn)移分?jǐn)?shù),Pi,yi為第i個(gè)字符在第yi個(gè)標(biāo)簽下的得分。Pi定義如式(9)所示:
其中,h(t)表示上一層的輸入數(shù)據(jù)在t時(shí)刻的輸出;Ws和bs分別為權(quán)重矩陣和偏置矩陣。
對標(biāo)簽序列使用Softmax函數(shù)歸一化處理,得到輸出序列y的最大概率如式(10)所示:
其中Yx為所有可能標(biāo)簽的集合。計(jì)算正確標(biāo)簽序列的似然概率如式(11)所示:
在預(yù)測階段采用Viterbi算法計(jì)算出總得分最高的序列y*作為最優(yōu)序列輸出,如式(12)所示:
本文實(shí)驗(yàn)環(huán)境為操作系統(tǒng)采用Win10專業(yè)版、GPU為NVIDIA GeForce RTX 2070、內(nèi)存32G、編程語言為Python 3.7、Tensorflow 1.13.1。
本文自建西藏畜牧業(yè)領(lǐng)域相關(guān)文本作為實(shí)驗(yàn)數(shù)據(jù)集,主要是通過Python爬蟲對網(wǎng)站上內(nèi)容進(jìn)行爬取下來后,再通過人工清洗篩選,最終精選后得到4300條語料共計(jì)95039個(gè)字?jǐn)?shù),將語料按照8∶1∶1劃分為訓(xùn)練集、測試集和驗(yàn)證集。
本文定義了牧草、動(dòng)物、病蟲害、藏藥、動(dòng)物疾病、藏藥、人的疾病共計(jì)7種類型的實(shí)體,其類型定義的具體解釋如表1所示,各種類型的實(shí)體數(shù)量統(tǒng)計(jì)如表2所示。
表1 西藏畜牧業(yè)領(lǐng)域?qū)嶓w識別類型
表2 西藏畜牧業(yè)領(lǐng)域標(biāo)注實(shí)體統(tǒng)計(jì)
對于西藏畜牧業(yè)領(lǐng)域文本采用BIO標(biāo)注規(guī)則,將實(shí)體中第一個(gè)字符標(biāo)記為“B-(實(shí)體類別)”,后續(xù)字符標(biāo)記為“I-(實(shí)體類別)”,和本領(lǐng)域無關(guān)的其他字符則統(tǒng)一標(biāo)記為O。
本文所標(biāo)記的標(biāo)簽共有15種,分別為B-PA、I-PA、B-AN、I-AN、B-G、I-G、B-DP、I-DP、B-AD、I-AD、B-TM、I-TM、B-PD、I-PD、O。
BERT預(yù)訓(xùn)練語言模型有兩個(gè)版本,包括Base和Large版本,區(qū)別在于層數(shù)(L)、隱含層單元數(shù)(H)、注意力頭數(shù)(A)以及參數(shù)大小的不同,如表3所示。
表3 Bert預(yù)訓(xùn)練模型對比
本模型采用批次batch的大小為128,迭代完整訓(xùn)練epoch次數(shù)為100,優(yōu)化器采用adam,詞向量維度設(shè)置為128,隱含層單元數(shù)為200,bath_size大小設(shè)置為128,Dropout設(shè)為0.4,初始化學(xué)習(xí)率為0.001。
對于西藏畜牧業(yè)中每一個(gè)實(shí)體類別都采用下面三個(gè)指標(biāo)進(jìn)行評價(jià),分別為精確率(Prescision)P和召回率(Recall)R以及調(diào)和平均數(shù)(F-Score)F1值,具體計(jì)算過程如式(13~15)所示:
例如:P代表預(yù)測為動(dòng)物,N代表預(yù)測為牧草,T表示這個(gè)預(yù)測是正確的,F(xiàn)表示這個(gè)預(yù)測是錯(cuò)誤的。當(dāng)來一個(gè)實(shí)體放入模型預(yù)測時(shí),TP代表預(yù)測為動(dòng)物,并且這個(gè)預(yù)測是正確的,即實(shí)際就是動(dòng)物的個(gè)數(shù),F(xiàn)P代表預(yù)測為是動(dòng)物,而這個(gè)預(yù)測是錯(cuò)誤的,即實(shí)際為牧草的個(gè)數(shù),F(xiàn)N代表預(yù)測為牧草,而這個(gè)預(yù)測是錯(cuò)誤的,即實(shí)際上是動(dòng)物的個(gè)數(shù)。
本文所采用的BERT-BILSTM-CRF模型在整體模型框架不改動(dòng)的前提下,嘗試在字符預(yù)處理部分更換兩種BERT預(yù)訓(xùn)練模型版本進(jìn)行測試,使用自建西藏畜牧業(yè)標(biāo)注好的語料庫在模型上完整訓(xùn)練100次的F1值變化如圖4所示。
圖4 不同BERT版本隨著epoch增加的變化曲線
通過圖4的變化曲線可以看出,在15次完整訓(xùn)練之后兩個(gè)版本的F1值均大于90%,最后的F1值都趨近于92%,如果僅看最優(yōu)實(shí)驗(yàn)測試數(shù)據(jù)的話,BERT的Base版本在92次達(dá)到最高點(diǎn)92.37%,Large版本最終F1值為92.78%比Base版本高0.41%。這是因?yàn)锽ERT的模型架構(gòu)是一個(gè)多層雙向Transformer編碼器,它通過所有層的左、右語境不僅能從前文中尋找線索,也能從后文中尋找線索,這樣就充分表示了句子中詞之間潛在語義關(guān)系,通過上下文猜測單詞時(shí),就能夠比較準(zhǔn)確地預(yù)測所有詞匯的概率。
本實(shí)驗(yàn)也列出了BERT的Base版與Large版的最后一次epoch訓(xùn)練時(shí),在不同Bert版本下通過模型算法跑出的各個(gè)實(shí)體類別的F1值,詳細(xì)數(shù)據(jù)如表4所示,其中同一類別實(shí)體在兩個(gè)版本中相比得到的F1值更高會被加粗顯示。在自定義的動(dòng)物、動(dòng)物疾病以及病蟲害三個(gè)類別上未訓(xùn)練詞的識別方面,Large版的F1值比Base版分別高1.46%、13.57%、3.73%,平均高6.25%。這是因?yàn)锽ERT中的自注意力機(jī)制計(jì)算句子中的每一個(gè)詞和句中所有詞,獲得詞之間的相互關(guān)系并反映出詞在句中的重要性程度。large比base版本擁有較多的層數(shù)和注意力機(jī)制頭數(shù),層數(shù)越多獲取詞在句子中的相互關(guān)系越多,頭數(shù)越多越能更準(zhǔn)確抓住詞在句子中的重要程度,從而提高了實(shí)體識別準(zhǔn)確率。但在牧草、草原、藏藥等三個(gè)類別上未訓(xùn)練詞的識別方面,Large版的F1值比Base版要低一些,原因是由于這三個(gè)類別的實(shí)體描述一般都處在一句話的開頭,其三類在訓(xùn)練語料中的句式比較固定簡單,句子長度較短,如藏藥能治療什么疾病,草原上有什么動(dòng)物,牧草有什么病蟲害等簡單句式,Base的層數(shù)少以及注意力頭數(shù)少對于抓取簡單句式以及開頭部分的實(shí)體重要性程度越高,Large訓(xùn)練過于冗余以至于簡單句式學(xué)習(xí)過度從而使得在一些情況下識別短語句中實(shí)體效果略低于Base版本。
表4 不同BERT版本的實(shí)驗(yàn)結(jié)果對比
本文將BERT的Base與large版的預(yù)訓(xùn)練模型與BILSTM-CRF模型結(jié)合進(jìn)行對比實(shí)驗(yàn),并將模型訓(xùn)練的最終總體指標(biāo)數(shù)據(jù)羅列出來。
從表5可以看出,使用了BERT比未使用BERT的模型在F1值上提升了2.33%,而在精確率上提升了6.68%,這是由于使用BERT作為文本的預(yù)處理相較于普通的Word2vec詞向量更具有潛在的上下文語義特征,從而提升模型識別的準(zhǔn)確率。
表5 不同模型實(shí)體識別結(jié)果對比
雖然使用BERT預(yù)處理后F1值已經(jīng)達(dá)到很高,但是實(shí)際測試中,還是有一些識別錯(cuò)誤的例子,主要是因?yàn)檎Z料庫的不充足,語句的句式不夠多樣性,會導(dǎo)致一句話換了個(gè)復(fù)雜的說法就有點(diǎn)可能識別出錯(cuò)等問題,如表6列舉了一些具體的輸出例子。
表6 兩個(gè)BERT版本的輸出示例
從表6中Input 1和Input 2可以看出來,Large經(jīng)過輸入在兩個(gè)預(yù)訓(xùn)練模型上對比顯示出,BERT-Base值識別出苜蓿的首字母,沒有完整預(yù)測出來存在識別邊界問題,Input 2中Base版本出現(xiàn)小幾率的漏識錯(cuò)誤,當(dāng)語序大幅度改變時(shí)全局預(yù)測可能會有些偏差,而Large版本可以很好的對長語句進(jìn)行識別。
Input 3是針對未訓(xùn)練詞的識別,呼倫貝爾大草原是在內(nèi)蒙的,不屬于西藏領(lǐng)域,語料庫中也未標(biāo)注出來,但是末尾的草原兩個(gè)詞非常具有明顯的特征,即使沒有預(yù)先訓(xùn)練過也能很好的識別出來,Base版識別出草原的名稱的一部分,而Large可以識別出全稱,這也說明Large版本模型的層數(shù)增加,注意力頭數(shù)增大對識別未訓(xùn)練詞是有一些優(yōu)勢的。對于Input 4來說,冬蟲夏草具有止咳嗽、益虛損等功效,其中咳嗽是訓(xùn)練過的詞,Base和Large都可以識別出這是一個(gè)疾病類(PD),而虛損是屬于未訓(xùn)練的詞在語料庫中沒有這個(gè)實(shí)體類別,Base版本識別不出來但Large版本可以很好地識別出這個(gè)未訓(xùn)練詞,說明了Large對于未訓(xùn)練詞的識別相對于Base版本更有優(yōu)勢。
本文針對解決特定領(lǐng)域NER識別難度高等問題,提出基于BERT-BiLSTM-CRF的西藏畜牧業(yè)領(lǐng)域?qū)嶓w識別模型,該模型在自建的西藏畜牧業(yè)小規(guī)模語料庫上進(jìn)行實(shí)驗(yàn),結(jié)果發(fā)現(xiàn):BERT-Base和BERT-Large對7類自定義的實(shí)體識別整體來說F1值均高于92%;對于長語句中未訓(xùn)練詞的識別,BERT-Large版本比BERT-Base版具有潛在的優(yōu)勢,尤其是在動(dòng)物、動(dòng)物疾病、病蟲害等命名實(shí)體識別方面Large具有更明顯的優(yōu)勢。本文所提模型對于構(gòu)建領(lǐng)域知識圖譜具有一定的參考價(jià)值。