馬詩(shī)語(yǔ),黃潤(rùn)才
上海工程技術(shù)大學(xué)電子電氣工程學(xué)院,上海 201620
糖尿病是當(dāng)前威脅全球人類健康的最重要的非傳染性疾病之一,根據(jù)國(guó)際糖尿病聯(lián)盟統(tǒng)計(jì),2011年全球糖尿病患者已達(dá)3.7 億,其中80%在發(fā)展中國(guó)家,預(yù)計(jì)到2030年全球?qū)⒂?億多糖尿病患者[1]。中國(guó)糖尿病患者在全球占比最高,成人糖尿病患者約1.298億,平均每10個(gè)成年人中有1個(gè)糖尿病患者,因此,防治糖尿病成為重點(diǎn)難題之一。然而,我國(guó)糖尿病血糖控制狀況不佳,有研究顯示,糖尿病知曉率、治療率、控制率均偏低[1]。為此,需要加強(qiáng)居民對(duì)糖尿病知識(shí)的關(guān)注,通過(guò)分析糖尿病相關(guān)知識(shí)來(lái)引導(dǎo)廣大市民及醫(yī)療衛(wèi)生機(jī)構(gòu)提早預(yù)防或延緩這一疾病的發(fā)生[2]。人們對(duì)如何迅速?gòu)谋姸辔墨I(xiàn)中獲取專業(yè)知識(shí)給予了極大的關(guān)注。醫(yī)學(xué)文本挖掘技術(shù)在文本知識(shí)的自動(dòng)獲取中起著重要作用,作為這項(xiàng)技術(shù)的任務(wù)之一,糖尿病命名實(shí)體識(shí)別(Named Entity Recognition, NER)旨在從糖尿病文獻(xiàn)中識(shí)別特定類型的名稱,如1型糖尿病、2型糖尿病、血糖、胰島素促分泌素等[3]。NER 為下一步關(guān)系抽取,構(gòu)建知識(shí)圖譜提供了前提;為引導(dǎo)廣大市民了解糖尿病相關(guān)知識(shí),指導(dǎo)糖尿病患者加強(qiáng)健康管理提供了技術(shù)幫助。
百度研究院在2015年提出了深度學(xué)習(xí)應(yīng)用NER的經(jīng)典模型,即BILSTM-CRF[4],憑借雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(Bidirectional Long Short-Term Memory Network,BILSTM)對(duì)上下文信息進(jìn)行深度建模,條件隨機(jī)場(chǎng)(Conditional Random Fields,CRF)利用特征矩陣解碼整個(gè)句子的標(biāo)簽。Strubell等[5]提出迭代膨脹卷積神經(jīng)網(wǎng)絡(luò)(Iterated Dilated Convolutional Neural Network,IDCNN),與傳統(tǒng)的CNN相比,此模型在大文本和結(jié)構(gòu)化預(yù)測(cè)中具有更好的表現(xiàn)能力。對(duì)于文本的表示,傳統(tǒng)的詞表示方法有one-hot、詞袋模型、n-gram[6],但這些離散的表示無(wú)法考慮詞向量之間的關(guān)系。為提高模型精度,利用深度神經(jīng)網(wǎng)絡(luò)提取特征得到越來(lái)越多的關(guān)注。Mikoliv等[7]提出的word2vec詞嵌入模型是目前最常用的詞嵌入模型之一,然而詞嵌入模型只提供一層表征,無(wú)法解決一詞多義的問(wèn)題。隨著深度學(xué)習(xí)的發(fā)展,自然語(yǔ)言處理(Natural Language Processing,NLP)不再是一個(gè)任務(wù)一個(gè)模型,而是預(yù)先在大量語(yǔ)料上訓(xùn)練好一個(gè)模型,再對(duì)模型在特定的下游任務(wù)上進(jìn)行微調(diào),微調(diào)后的模型在眾多NLP任務(wù)上均取得了不錯(cuò)的效果,如ELMO[8]、GTP[9]、BERT[10]等。李妮等[11]利用BERT與IDCNN-CRF的融合提高了NER的準(zhǔn)確率。然而,目前這些預(yù)訓(xùn)練模型關(guān)注的焦點(diǎn)在于將模型變得更復(fù)雜,依賴越來(lái)越多的參數(shù),很少考慮訓(xùn)練耗時(shí)長(zhǎng)、成本高等問(wèn)題。對(duì)此,Lan等[12]在2019年提出BERT的輕量級(jí)模型,即基于輕量型動(dòng)態(tài)詞向量模型(A Lite BERT,ALBERT),兩個(gè)模型架構(gòu)幾乎一樣,但ALBERT參數(shù)量相比BERT大幅度減少。即便如此,模型性能不但沒(méi)有下降,反而有所提升。
鑒于先驗(yàn)知識(shí)對(duì)實(shí)體識(shí)別任務(wù)有良好的幫助,本研究將ALBERT 與經(jīng)典BILSTM-CRF 相結(jié)合,提出融合ALBERT的糖尿病NER方法。
本研究提出的ALBERT-BILSTM-CRF 模型的主要結(jié)構(gòu)如圖1所示。
圖1 ALBERT-BILSTM-CRF 的模型框架Fig.1 ALBERT-BILSTM-CRF model framework
該模型主要分為3 個(gè)部分,輸入表示層、序列建模層和預(yù)測(cè)解碼層。輸入表示部分未使用傳統(tǒng)的人工特征,而是選擇了擁有先驗(yàn)知識(shí)的預(yù)訓(xùn)練模型提取字符級(jí)表征。本研究使用的是ALBERT 模型,該模型通過(guò)Embedding層把每個(gè)字映射為字向量;然后采用Transformer 雙向綜合的考慮上下文特征進(jìn)行編碼,將學(xué)到的知識(shí)加到token的表示上,獲得字符級(jí)別的語(yǔ)義信息。獲取的字向量輸入到序列編碼層的BILSTM 模塊中,BILSTM 考慮上下文信息并進(jìn)行高維特征抽取。最后在CRF 語(yǔ)義解碼模塊中預(yù)測(cè)出真實(shí)標(biāo)簽序列。
本研究在經(jīng)典模型BILSTM-CRF 的基礎(chǔ)上進(jìn)行改進(jìn),引入ALBERT 模型。ALBERT 模型通過(guò)對(duì)字符的掩碼學(xué)習(xí)可以捕捉到字符上下文之間的語(yǔ)法和語(yǔ)義層面信息,增強(qiáng)字符級(jí)向量的語(yǔ)義表征能力。
ALBERT 是一種輕量級(jí)的BERT[13]。該模型架構(gòu)與BERT 幾乎沒(méi)有區(qū)別,但其所占內(nèi)存僅為BERT的十分之一。為了不大幅度降低模型性能,ALBERT提出跨層參數(shù)共享機(jī)制,使用句子順序預(yù)測(cè)(Sentence Order Prediction,SOP)訓(xùn)練方法代替下一句子預(yù)測(cè)(Next Sentence Prediction,NSP)訓(xùn)練方法。ALBERT預(yù)訓(xùn)練模型的結(jié)構(gòu)如圖2所示。
圖2 ALBERT預(yù)訓(xùn)練模型結(jié)構(gòu)Fig.2 ALBERT pre-training model structure
ALBERT 的 結(jié) 構(gòu) 是 由 Embedding 層 和Transformer encoder 層組成。Embedding 層通過(guò)字典將每個(gè)字符映射成字向量,輸入串聯(lián)的Transformer encoder 層,通過(guò)預(yù)訓(xùn)練去捕捉語(yǔ)法和語(yǔ)義層面的信息,把文本中包含的語(yǔ)言知識(shí)編碼到Transformer 中以參數(shù)的形式體現(xiàn)出來(lái)。
為了訓(xùn)練Transformer 模型中的encoder 層,ALBERT設(shè)計(jì)了兩個(gè)任務(wù):掩碼學(xué)習(xí)和SOP。掩碼學(xué)習(xí)的基本想法是隨機(jī)遮擋一或兩個(gè)單詞,讓encoder層根據(jù)前后文預(yù)測(cè)被遮蓋的單詞。SOP 的基本思想是將兩個(gè)句子放在一起,encoder 層通過(guò)學(xué)習(xí)去判斷兩句話是否是原文中相鄰且順序正常的兩句話。BERT 的NSP 任務(wù)只需要判斷是否為相鄰的兩句話,而ALBERT 在相鄰的基礎(chǔ)上更側(cè)重于句子之間的連貫性,所以SOP 在一定程度上能夠解決NSP 任務(wù)。ALBERT 任務(wù)較BERT 難度增加,也提高了多語(yǔ)句編碼的性能。
ALBERT 是一個(gè)流程,采用雙向多層的編碼器Transformer。 為了使模型輕量化,ALBERT 在Transformer 層采用參數(shù)共享的方法來(lái)減少模型存儲(chǔ)參數(shù)量。Transformer 發(fā)表于2017年,是seq2seq 模型,包括encoder 與decoder 兩部分[14]。ALBERT 只采用encoder 部分。encoder 網(wǎng)絡(luò)由多頭Self-attention和全連接層搭建而成。Self-attention 的計(jì)算公式如下:
其中,Q,K,V是輸入向量通過(guò)線性變換得到的3個(gè)輸入矩陣,dk為輸入字向量維度。通過(guò)計(jì)算每一個(gè)輸入字向量與序列其它字向量之間的關(guān)系比重大小,得到不同的權(quán)重,再將權(quán)重與所有序列的表示進(jìn)行加權(quán)求和,最終獲得新的字符表征。
由于ALBERT 中的encoder 部分采用自注意力結(jié)構(gòu),因此輸出的特征缺少順序性。為了得到糖尿病文本中的序列特征,本研究采用BILSTM模型對(duì)糖尿病文本的上下文信息進(jìn)行建模,BILSTM 網(wǎng)絡(luò)結(jié)構(gòu)與BIRNN 類似,在隱含層單元采用LSTM[15]結(jié)構(gòu),其單元結(jié)構(gòu)如圖3所示。
圖3 LSTM 單元結(jié)構(gòu)Fig.3 LSTM unit structure
LSTM 是對(duì)Simple RNN 模型的改進(jìn),可以避免梯度消失的問(wèn)題,擁有更長(zhǎng)的記憶。LSTM 內(nèi)部結(jié)構(gòu)中,最重要的結(jié)構(gòu)是傳輸帶C,過(guò)去的信息直接通過(guò)傳輸帶送到下一時(shí)刻,傳輸帶可以避免梯度消失。
LSTM 由遺忘門、輸入門、計(jì)算及輸出門這4部分組成,它們可以選擇性地讓信息通過(guò)。遺忘門ft介于0~1 之間,可以有選擇地讓傳輸帶Ct-1的值通過(guò),假設(shè)ft中有元素0,那么Ct-1中對(duì)應(yīng)元素?zé)o法通過(guò),即選擇性遺忘掉一些元素;并且輸入門it向傳輸帶C中添加了新的信息,從而對(duì)傳輸帶進(jìn)行一輪更新。輸出門ot依賴于舊的狀態(tài)向量ht-1和新的輸入Xt,計(jì)算類似于遺忘門。最后,對(duì)傳輸帶Ct的每一個(gè)元素求雙曲正切,將元素壓到-1 與+1 之間,然后將ot與tanh[Ct]的對(duì)應(yīng)元素相乘,運(yùn)算符記為°,得到狀態(tài)向量ht。整體流程為:
其中,σ為Sigmoid激活函數(shù);、ft、it、Ct、ot、ht、Xt分別為t時(shí)刻的輸入的中間狀態(tài)、遺忘門、輸入門、傳輸帶、輸出門、狀態(tài)向量、輸入向量;b為偏置向量;tanh為雙曲正切函數(shù);W為模型參數(shù)矩陣。
BILSTM 訓(xùn)練兩條雙向LSTM,一條從左往右,一條從右往左,兩條LSTM 是完全獨(dú)立的,不共享參數(shù)及狀態(tài)向量。BILSTM 層的輸出向量是由兩條LSTM輸出的狀態(tài)向量拼接后得到的。
BILSTM 層能夠?qū)W習(xí)上下文信息,但不能限制前后兩個(gè)標(biāo)簽之間的關(guān)系,輸出結(jié)果相互之間沒(méi)有影響。BILSTM 在每一步挑選出最大的概率值作為輸出標(biāo)簽,這樣可能會(huì)出現(xiàn)B-label1 后接入B-label2 的情況;而CRF 中有特征轉(zhuǎn)移矩陣,可以考慮輸出標(biāo)簽之間的順序性,從而提高預(yù)測(cè)的準(zhǔn)確率。
CRF 是由Lafferty 等[16]在2001年首次提出。CRF 用于序列標(biāo)注問(wèn)題,是通過(guò)輸入序列來(lái)預(yù)測(cè)輸出序列的判別式模型。給定一組觀測(cè)序列X={x1,x2,…,xn},得到預(yù)測(cè)序列標(biāo)簽y={y1,y2,…,yn}。文本X對(duì)應(yīng)的標(biāo)簽y的分?jǐn)?shù)由轉(zhuǎn)移矩陣A和發(fā)射矩陣P相加得到。
其中,Ayi,yi+1為從標(biāo)簽yi到標(biāo)簽yi+1的轉(zhuǎn)移分?jǐn)?shù);Pi,yi為發(fā)射矩陣,表示第i個(gè)字符預(yù)測(cè)為yi標(biāo)簽的分?jǐn)?shù)。
CRF 的優(yōu)化目標(biāo)是正確序列的概率最大化,給定一個(gè)線性鏈條件隨機(jī)場(chǎng)P(y|X)
其中,y'為所有可能的狀態(tài)序列集合,y為真實(shí)序列。
讓真實(shí)序列的分值在所有序列的分值和中最大。最終做預(yù)測(cè)時(shí),采用Veterbi 算法,在所有狀態(tài)序列中尋找分值最大的序列,即為CRF 層的最終標(biāo)注序列。
本實(shí)驗(yàn)在Ubuntu18.04 LTS 上進(jìn)行,使用語(yǔ)言為Python 3.7,GPU 版本為華碩1070Ti GPU,顯存8 G,CPU 為E3-1281-V3,系統(tǒng)內(nèi)存為16 G,tensorfolw 版本為1.15GPU版。
實(shí)驗(yàn)數(shù)據(jù)由阿里云天池大數(shù)據(jù)平臺(tái)提供,數(shù)據(jù)內(nèi)容主要為基于糖尿病的相關(guān)研究論文以及糖尿病臨床指南。其中共有363 篇文檔,約250 萬(wàn)字,訓(xùn)練集與驗(yàn)證集以8:2 的比例劃分。測(cè)試集由平臺(tái)獨(dú)立提供的59篇糖尿病文本構(gòu)成。由于數(shù)據(jù)存在一定的噪聲,需要對(duì)數(shù)據(jù)進(jìn)行清洗數(shù)據(jù)、句子劃分等一系列預(yù)處理操作。
糖尿病NER 旨在從大量醫(yī)學(xué)文獻(xiàn)中抽取有價(jià)值的醫(yī)學(xué)知識(shí),其知識(shí)指醫(yī)學(xué)文本中有用的實(shí)體,將實(shí)體按事先定義的實(shí)體類型進(jìn)行分類,即NER 過(guò)程。實(shí)體類型的定義需要滿足知識(shí)圖譜的應(yīng)用需求,本研究針對(duì)糖尿病知識(shí)圖譜的應(yīng)用需求,定義了15 類實(shí)體類型,如表1所示。
表1 實(shí)體類型定義Tab.1 Entity type definition
本研究采取BIO序列標(biāo)注模式,對(duì)句子中的每個(gè)字符進(jìn)行標(biāo)注?!癇-實(shí)體類型”表示為該實(shí)體類型的實(shí)體首字符標(biāo)簽,“I-實(shí)體類型”表示為該實(shí)體類型除了首字符標(biāo)簽外實(shí)體其他符標(biāo)簽,“O”表示非實(shí)體標(biāo)簽。本次任務(wù)有15 種實(shí)體類型,因此每個(gè)字符有31種標(biāo)注可能性,如表2所示。
表2 實(shí)體標(biāo)簽定義Tab.2 Entity tag definition
糖尿病NER 采用精確率P、召回率R 和F1 值作為評(píng)價(jià)指標(biāo),具體公式如下。
其中,TP 為識(shí)別到正確實(shí)體的個(gè)數(shù);FP 為識(shí)別到非實(shí)體的個(gè)數(shù);FN為未識(shí)別到正確實(shí)體的個(gè)數(shù)。
本研究采用谷歌發(fā)布的ALBERT_BASE 模型,其模型嵌入層尺寸128,隱藏層共12 層,隱層維度768,采用12 頭模式,并使用gelu;BILSTM 的隱藏層節(jié)點(diǎn)數(shù)為100。ALBERT-BILSTM-CRF 模型訓(xùn)練參數(shù)如下:最大序列長(zhǎng)度為128,batch_size 為32,epoch為9,ALBERT的學(xué)習(xí)率為5e-5,其他模塊的學(xué)習(xí)率為0.001,dropout為0.5。
為了證明ALBERT-BILSTM-CRF 明顯提升了糖尿病NER 效果,本研究設(shè)計(jì)了幾種方法進(jìn)行對(duì)比:(1)BILSTM-CRF 模型,該模型為NER 的經(jīng)典模型,使用word2vec 詞嵌入作為文本的輸入表示,然后輸入BILSTM-CRF 模型進(jìn)行編碼以及預(yù)測(cè)。(2)IDCNN-CRF 模型,該模型同樣使用預(yù)訓(xùn)練好的word2vec 詞嵌入作為輸入表示,語(yǔ)義編碼部分使用的是IDCNN,與BILSTM-CRF 模型對(duì)比。(3)BILSTM-ATT-CRF 模型,在BILSTM 后添加一層注意力機(jī)制,根據(jù)相關(guān)程度選擇序列特征。(4)BERTBILSTM-CRF 模型,模型使用預(yù)訓(xùn)練模型BERT 提取語(yǔ)義表征。
實(shí)驗(yàn)設(shè)置不同epoch 值,研究模型隨著迭代次數(shù)的擬合狀況,從而確定合適的epoch 值。實(shí)驗(yàn)結(jié)果如圖4所示,橫坐標(biāo)為epoch值,縱坐標(biāo)為實(shí)體識(shí)別的性能百分?jǐn)?shù)。圖中折線分別是F1、精確率和召回率的變化情況。由圖可知,在第8 個(gè)epoch 時(shí),F(xiàn)1 和精確率的值分別為70.02%和71.04%,達(dá)到最高;召回率在第9 個(gè)epoch 時(shí)達(dá)到最優(yōu)值71.12%。隨著訓(xùn)練次數(shù)的增加,模型逐漸擬合并趨于平穩(wěn)狀態(tài)。綜合考慮,本研究選擇9為實(shí)驗(yàn)的epoch值。
圖4 ALBERT模型的各項(xiàng)指標(biāo)變化Fig.4 Changes in various indicators of ALBERT model
為了體現(xiàn)出動(dòng)態(tài)詞向量模型的優(yōu)越性,本研究對(duì)比了在糖尿病數(shù)據(jù)集訓(xùn)練過(guò)程中不同模型F1值的變化情況。從圖5可以看出,BILSTM-CRF 和IDCNN-CRF收斂較為緩慢,在第7個(gè)epoch時(shí)開始收斂,而融合了ALBERT 模型的BILSTM-CRF 收斂更早速度更快,并且訓(xùn)練期間F1值波動(dòng)較為平穩(wěn),遠(yuǎn)高于word2vec 詞嵌入模型的F1 值,說(shuō)明ALBERT 提供了更深層次的語(yǔ)義信息,進(jìn)一步證明了動(dòng)態(tài)詞向量的優(yōu)越性。除此之外,與其他模型的訓(xùn)練結(jié)果見(jiàn)表3。
圖5 不同模型的F1值對(duì)比Fig.5 Comparison of F1 values of different model
表3 不同模型的精確率、召回率、F1值對(duì)比(%)Tab.3 Comparison of precision,recall rate and F1 value of different models(%)
由表3可知,在糖尿病數(shù)據(jù)集中,BILSTM-CRF與IDCNN-CRF 實(shí)體識(shí)別的F1 值分別為65.25%和61.93%,BILSTM-CRF 添加注意力機(jī)制后F1 值達(dá)到66.47%,較之前提升1.22%。其中,BILSTM 最大的優(yōu)點(diǎn)是具有強(qiáng)大的記憶力,在長(zhǎng)文本處理中,距離較遠(yuǎn)的兩個(gè)單詞仍有依賴關(guān)系;IDCNN 更關(guān)注實(shí)體周圍的信息;加入一層注意力機(jī)制的BILSTM,注意力權(quán)重矩陣會(huì)根據(jù)每個(gè)單元特征向量對(duì)于單詞的重要程度分配不同的權(quán)重,對(duì)特征向量進(jìn)行加權(quán)。實(shí)驗(yàn)結(jié)果說(shuō)明BILSTM 在序列特征抽取方面優(yōu)于IDCNN,基于注意力機(jī)制的模型相比無(wú)注意力機(jī)制的模型實(shí)體識(shí)別的F1 值提高1.22%左右。對(duì)比模型ALBERT-BILSTM-CRF 與BILSTM-CRF,F(xiàn)1 值提高了2.67%,說(shuō)明ALBERT相對(duì)于傳統(tǒng)的word2vec詞向量,可以更準(zhǔn)確地捕捉上下文的語(yǔ)法和語(yǔ)義層面的信息,具有更好的語(yǔ)義表征能力。
ALBERT-BILSTM-CRF 與BERT-BILSTM-CRF相比,9 輪次的訓(xùn)練后,識(shí)別準(zhǔn)確率分別為68.14%和66.51%,F(xiàn)1 值分別為67.92%和67.72%;另一方面,BERT-BILSTM-CRF 訓(xùn)練耗時(shí)逼近50 min,而ALBERT-BILSTM-CRF 模型耗時(shí)40 min??傮w看來(lái),在各項(xiàng)評(píng)價(jià)指標(biāo)相差不大情況下,ALBERT 的模型訓(xùn)練效率更為出色。這是由于ABLBERT 采用了參數(shù)共享機(jī)制,模型參數(shù)量?jī)H為BERT 的十分之一。在訓(xùn)練過(guò)程中,需要梯度更新的參數(shù)大幅度減少,訓(xùn)練速度加快,在NER 任務(wù)上達(dá)到了相同的表現(xiàn)。從實(shí)驗(yàn)結(jié)果中可以看出,在削減參數(shù)量后,ALBERT 模型識(shí)別速度提高但性能并沒(méi)有下降,這也說(shuō)明BERT中存在冗余參數(shù)。因此,將ALBERT 引入輸入表示層表現(xiàn)更為出色。
針對(duì)大多數(shù)動(dòng)態(tài)詞向量模型訓(xùn)練耗時(shí)長(zhǎng)、資源成本高的缺點(diǎn),本研究采用ALBERT 模型,提出ALBERT-BILSTM-CRF,ALBERT 通過(guò)參數(shù)共享機(jī)制,減少訓(xùn)練時(shí)長(zhǎng),提高實(shí)體識(shí)別的效率。該模型在糖尿病數(shù)據(jù)集上取得了良好的結(jié)果,與傳統(tǒng)模型方法相比有所提高,但識(shí)別效果仍有提升空間,可以利用文本的其他特征,通過(guò)雙通道特征融合繼續(xù)進(jìn)行研究。在接下來(lái)的工作中,將在糖尿病NER 的基礎(chǔ)上,進(jìn)行關(guān)系抽取,對(duì)糖尿病領(lǐng)域知識(shí)圖譜基本框架進(jìn)行設(shè)計(jì)。