陳繼剛
西安交通大學(xué)第二附屬醫(yī)院信息網(wǎng)絡(luò)部 陜西 西安 710004
電子病歷廣泛應(yīng)用于各大醫(yī)療機構(gòu)的臨床工作,其中包含大量的醫(yī)療領(lǐng)域非結(jié)構(gòu)化文本,是現(xiàn)代醫(yī)學(xué)研究的重要數(shù)據(jù)來源。如何分析、挖掘、理解和有效利用這些文本,在指導(dǎo)醫(yī)療行業(yè)科研,提供臨床決策支持和提供個性化醫(yī)療服務(wù)等方面具有重要意義。
文本的分析挖掘工作一般通過自然語言處理(Natural Language Processing,NLP)完成,命名實體識別(Named Entity Recognition,NER)作為NLP領(lǐng)域的重要基礎(chǔ)任務(wù),為上層任務(wù)(如信息抽取、信息檢索等)提供豐富的語義知識。
命名實體的概念于MUC-6會議上首次提出,早期NER研究主要有基于規(guī)則和詞典和基于統(tǒng)計機器學(xué)習(xí)兩種方法。近年來,基于深度學(xué)習(xí)的方法被廣泛應(yīng)用于NER任務(wù)。來自百度的Huang等[1]提出了BiLSTM(Bidirectional Long Short-Term Memory)-CRF(Conditional Random Field)模型并應(yīng)用于序列標(biāo)注任務(wù),成為NER任務(wù)的泛用基礎(chǔ)方法之一。研究者們同時發(fā)現(xiàn),使用預(yù)訓(xùn)練語言模型生成詞向量作為下層網(wǎng)絡(luò)的輸入,可以大幅提高NER任務(wù)的效果。Google的Devlin J等[2]提出了預(yù)訓(xùn)練模型BERT(Bidirectional Encoder Representation from Transformers),使用多層雙向Transformer網(wǎng)絡(luò)同時捕捉上下文信息,在多達(dá)11項自然語言處理任務(wù)中取得了最優(yōu)表現(xiàn),現(xiàn)已廣泛應(yīng)用于NER任務(wù)中。兩者結(jié)合的BERT-BiLSTM-CRF模型,是NER目前最常用的模型。
實際應(yīng)用中發(fā)現(xiàn),通用文本訓(xùn)練的BERT字向量(以下簡稱BERT字向量),無法很好適應(yīng)醫(yī)療領(lǐng)域的下游任務(wù)。如何讓BERT字向量適配醫(yī)療領(lǐng)域任務(wù),是本次研究的關(guān)注點。
針對傳統(tǒng)模型在醫(yī)療領(lǐng)域適配性不佳的現(xiàn)狀,本文提出利用領(lǐng)域信息調(diào)整BERT字向量的方法,最終輸入模型中的字向量同時包含BERT字向量中的語義信息和醫(yī)療領(lǐng)域文本的上下文關(guān)系。受Huang等的啟發(fā),本文主要考慮了以下三種方法結(jié)合BERT字向量與醫(yī)療領(lǐng)域預(yù)訓(xùn)練模型字向量(以下簡稱領(lǐng)域字向量),得到結(jié)合后的字向量
領(lǐng)域字向量表示為如式(2)的形式:
2.1.1 加權(quán)求和。將BERT字向量與領(lǐng)域字向量按位進(jìn)行加權(quán)求和得到,見式(3):
2.1.2 擴展維度。將領(lǐng)域字向量補在BERT字向量后面得到,如式(4)所示:
2.1.3 注意力機制。通過注意力機制融合BERT字向量與領(lǐng)域字向量可分為三步:
首先輸入信息,即BERT字向量 與領(lǐng)域字向量 。
其次計算注意力分布,見式(5):
注:表示sigmoid函數(shù);tanh表示雙曲正切函數(shù);W為訓(xùn)練得到的矩陣。
最后計算融合后的字向量,利用前一步求得的注意力分布,得到融合后的字向量 ,見式(6):
得到 后繼續(xù)使用標(biāo)注數(shù)據(jù)對其進(jìn)行微調(diào),具體表現(xiàn)為在結(jié)合后的網(wǎng)絡(luò)上加一層全連接層,用標(biāo)注數(shù)據(jù)調(diào)整全連接層的參數(shù),實現(xiàn)對字向量進(jìn)行微調(diào)的效果。經(jīng)過全連接層的微調(diào)之后,得到最終字向量 ,見式(7)。
注:tanh為全連接層的激活函數(shù);W,b為訓(xùn)練得到的參數(shù)。
將微調(diào)之后的最終字向量 輸入到下層BiLSTM-CRF網(wǎng)絡(luò),得到融入領(lǐng)域信息的醫(yī)療領(lǐng)域NER模型。
2.1.4 訓(xùn)練方法。使用融入領(lǐng)域信息的醫(yī)療領(lǐng)域NER模型訓(xùn)練相關(guān)數(shù)據(jù)集的具體過程如下:①使用從網(wǎng)絡(luò)渠道及“中國醫(yī)學(xué)影像資源共享平臺”獲取的病例數(shù)據(jù),作為醫(yī)療領(lǐng)域的未標(biāo)注文本進(jìn)行無監(jiān)督訓(xùn)練,可得到醫(yī)療領(lǐng)域的字向量 ;②采用多種方式將BERT字向量 與領(lǐng)域字向量 結(jié)合在一起構(gòu)成新的字向量 ;③利用經(jīng)過標(biāo)注的公開數(shù)據(jù)集和“中國醫(yī)學(xué)影像資源共享平臺”上部分經(jīng)過人工標(biāo)注的病例數(shù)據(jù)集對新的字向量進(jìn)行微調(diào),在第2步生成字向量的網(wǎng)絡(luò)之后增加一層全連接層,通過對標(biāo)注數(shù)據(jù)的訓(xùn)練調(diào)整全連接層的參數(shù);④遍歷數(shù)據(jù)集每一個句子,針對句子中的每一個字生成對應(yīng)的字向量,將生成的字向量輸入BiLSTM層中,通過BiLSTM層學(xué)習(xí)數(shù)據(jù)的文本特征,并最終生成輸出向量;⑤將BiLSTM生成的輸出向量輸入CRF層,通過CRF的打分矩陣以及概率轉(zhuǎn)移矩陣得到每一種標(biāo)簽對應(yīng)的分?jǐn)?shù),并定義損失函數(shù),通過將損失函數(shù)最小化更新需要學(xué)習(xí)的網(wǎng)絡(luò)參數(shù);⑥在經(jīng)過多輪學(xué)習(xí)參數(shù)收斂之后,固定網(wǎng)絡(luò)參數(shù),輸出模型文件,供后續(xù)醫(yī)療領(lǐng)域NER系統(tǒng)使用。
實驗環(huán)境的軟硬件配置如下:CPU為i7-8700,內(nèi)存16GB,顯卡為NVIDIA RTX 2080Ti/11GB,操作系統(tǒng)為Ubuntu18.04LTS,編程語言為Python3.6,深度學(xué)習(xí)框架為TensorFlow1.12,CUDA版本10.0。
模型訓(xùn)練結(jié)束之后,在測試集上驗證常用相關(guān)指標(biāo):準(zhǔn)確率(Precision)、召回率(Recall)以及F1值,對比訓(xùn)練后的不同模型的效果。
3.2.1 準(zhǔn)確率P標(biāo)注正確的實體占標(biāo)注出的實體總數(shù)的百分比,見式(8)。
注:P代表準(zhǔn)確率;EM代表標(biāo)注正確的實體數(shù)量;AE代表標(biāo)注出的實體總數(shù)。
3.2.2 召回率R標(biāo)注正確的實體占測試集中實體總數(shù)的百分比,見式(9)。
注:R代表召回率;EM代表標(biāo)注正確的實體數(shù)量;AM代表測試集中的實體總數(shù)。
3.2.3 F1值為準(zhǔn)確率與精確率的調(diào)和平均,見式(10)。
比較不同模型在測試集上三種指標(biāo)的高低,可以評判各自的優(yōu)劣程度。
在進(jìn)行醫(yī)療領(lǐng)域NER實驗之前,首先需要用醫(yī)療領(lǐng)域的未標(biāo)注文本作為語料庫,訓(xùn)練領(lǐng)域字向量。
3.3.1 獲取語料庫。本次研究的醫(yī)療領(lǐng)域語料庫來源,見表1。
表1 語料庫統(tǒng)計表
3.3.2 預(yù)訓(xùn)練。訓(xùn)練使用Python的Gensim模塊下的Word2Vec函數(shù),其模型結(jié)構(gòu)相對簡單,訓(xùn)練消耗的資源較少,適合本次訓(xùn)練醫(yī)療領(lǐng)域字向量。相關(guān)參數(shù)設(shè)置見表2。
表2 領(lǐng)域字向量訓(xùn)練參數(shù)
3.3.3 保存預(yù)訓(xùn)練模型。預(yù)訓(xùn)練完成之后,將預(yù)訓(xùn)練模型保存至文件系統(tǒng),供后續(xù)NER實驗使用。
實驗過程中的參數(shù)設(shè)置見表3,為緩解過擬合帶來的影響,在生成最終字向量的全連接層中加入了正則化方法Dropout[6]。在模型訓(xùn)練過程中,使用Adam優(yōu)化算法加速收斂速度,提高學(xué)習(xí)效果。
表3 融入領(lǐng)域信息的醫(yī)療領(lǐng)域命名實體識別模型實驗參數(shù)
訓(xùn)練結(jié)果在公開數(shù)據(jù)集Yidu-s4k數(shù)據(jù)集、CCKS2020-Task3數(shù)據(jù)集以及“醫(yī)學(xué)影像資源共享平臺”已標(biāo)注的病例數(shù)據(jù)上進(jìn)行了相關(guān)實驗。
為驗證將領(lǐng)域信息融入字向量方法的合理性,將本文提出的模型稱為Domain-BERT-BiLSTM-CRF模型,與CRF及BiLSTM-CRF等NER經(jīng)典模型進(jìn)行對比,實驗結(jié)果見表4。其中加權(quán)求和選擇效果最好的展示,CRF與BiLSTM-CRF均使用BERT作為生成字向量的預(yù)訓(xùn)練模型。
表4 不同模型在三種數(shù)據(jù)集上的實驗結(jié)果
根據(jù)表4中的結(jié)果,可以得出以下結(jié)論:
對比BiLSTM-CRF模型與原始CRF模型,可以看出利用BiLSTM提取訓(xùn)練數(shù)據(jù)中的上下文特征,有利于提高模型的特征提取能力,模型的效果更優(yōu)。
對比Domain-BERT-BiLSTM-CRF模型與BiLSTM-CRF模型,可以看出通過擴展維度的方式結(jié)合BERT字向量與領(lǐng)域字向量,取得了比原始BERT字向量更好的效果。在CCKS2020-Task3數(shù)據(jù)集中,該方式的F1值比使用通用BERT的BiLSTMCRF模型的F1值提高了2%。
實驗過程中記錄了各模型F1值隨epoch的變化,以CCKS2020-Task3數(shù)據(jù)集為例,見圖2。將以擴展維度的方式結(jié)合BERT字向量與領(lǐng)域字向量的模型命名為Domain-BERTBiLSTM-CRF-1,將以加權(quán)求和的方式結(jié)合BERT字向量與領(lǐng)域字向量的模型命名為Domain-BERT-BiLSTM-CRF-2,將以注意力機制的方式結(jié)合BERT字向量與領(lǐng)域字向量的模型命名為Domain-BERT-BiLSTM-CRF-3。
從圖1可以看出,融入領(lǐng)域信息的醫(yī)療領(lǐng)域命名實體模型的F1值趨于穩(wěn)定的時間比其他兩種傳統(tǒng)模型稍慢,但穩(wěn)定后的模型F1值更高。
圖1 CCKS2020-Task3數(shù)據(jù)集F1值的變化情況
醫(yī)療領(lǐng)域的文本標(biāo)注工作需要由受過專業(yè)培訓(xùn)的人員處理,鑒于醫(yī)療信息自身具有敏感性,各醫(yī)療機構(gòu)之間的原始數(shù)據(jù)又難以共享,最終導(dǎo)致標(biāo)注醫(yī)療數(shù)據(jù)的獲取成本高昂且難以實現(xiàn)。如何在有限條件下調(diào)整原始字向量,適應(yīng)醫(yī)療領(lǐng)域的NER任務(wù)是本次研究關(guān)注的改進(jìn)點。
針對通用BERT字向量無法很好適應(yīng)醫(yī)療領(lǐng)域任務(wù)的問題,本文提出一種將領(lǐng)域信息融入字向量的新方法:①利用醫(yī)療領(lǐng)域內(nèi)大量未標(biāo)注數(shù)據(jù)預(yù)訓(xùn)練一個領(lǐng)域字向量;②通過擴展維度等方式將BERT字向量與領(lǐng)域字向量相結(jié)合;③增設(shè)一個全連接層,利用標(biāo)注數(shù)據(jù)對結(jié)合后的字向量進(jìn)行微調(diào),得到最終的字向量。為了驗證新方法的有效性,本文使用Yidu-s4k、CCKS2020-Task3以及“醫(yī)學(xué)影像資源共享平臺”的已標(biāo)注病例數(shù)據(jù)作為語料庫進(jìn)行實驗,對比原始CRF模型,BiLSTM-CRF模型與三種Domain-BERT-BiLSTM-CRF模型的效果。
實驗結(jié)果表明,相比CRF和BiLSTM-CRF,采用擴展維度的方式結(jié)合BERT字向量與領(lǐng)域字向量效果最佳,有效提升了模型性能。這也驗證了Zhang等[7]的實驗結(jié)果,即維度擴展方式要優(yōu)于加算、乘算和注意力機制等方式的效果,猜測原因為維度擴展得到的向量在反向傳播計算誤差時,能更好地差異化處理不相關(guān)的特征,獨立地反映語言模型對上下文結(jié)構(gòu)和上下文語義的表達(dá)與預(yù)期的差別。
擴展維度方式的Domain-BERT-BiLSTM-CRF模型在一定程度上改善了原始BERT字向量對醫(yī)療領(lǐng)域NER任務(wù)適應(yīng)性不佳的情況,但該模型也存在一定局限性,其F1值趨于穩(wěn)定的時間稍慢,穩(wěn)定后的F1值更高。猜測原因是新模型在生成最終字向量時,需要比其他兩種傳統(tǒng)模型額外訓(xùn)練一個全連接網(wǎng)絡(luò)。