劉 彬 肖曉霞 鄒北驥 周 展 鄭立瑞 譚建聰
(湖南中醫(yī)藥大學(xué)信息科學(xué)與工程學(xué)院 長沙 410208)
中醫(yī)醫(yī)案是中醫(yī)名家臨床過程記錄,蘊(yùn)含豐富診療經(jīng)驗(yàn)、中醫(yī)診療理論和學(xué)術(shù)創(chuàng)新。因此中醫(yī)醫(yī)案成為學(xué)習(xí)和傳承中醫(yī)藥的重要文獻(xiàn),有效提取醫(yī)案中記錄的癥狀、體征、證、處方、劑量、治法等命名實(shí)體,可以將醫(yī)案結(jié)構(gòu)化后利用機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等人工智能方法探索中醫(yī)診療規(guī)律、構(gòu)建智能診斷模型,對中醫(yī)傳承與發(fā)展具有重要意義。
命名實(shí)體識別[1]是指從特定文本中識別和提取具有特定含義的實(shí)體,是文本結(jié)構(gòu)化的第1步,也是機(jī)器翻譯、問答系統(tǒng)、句法分析等自然語言處理(natural language processing,NLP)任務(wù)的重要基礎(chǔ)工具。相對于英文每個(gè)詞都有空格分隔,中文詞與詞之間沒有明顯的分隔符,導(dǎo)致中文命名實(shí)體識別更加困難。提取醫(yī)案中記錄的實(shí)體信息可以視為一種中文命名實(shí)體識別任務(wù),因此構(gòu)建高準(zhǔn)確率、實(shí)用的中醫(yī)命名實(shí)體提取模型迫在眉睫。
從統(tǒng)計(jì)學(xué)習(xí)方法到神經(jīng)網(wǎng)絡(luò),研究者使用不同方法提取醫(yī)療文本中的實(shí)體。肖曉霞等[2]提出一種基于自然語言處理的中醫(yī)醫(yī)案文本快速結(jié)構(gòu)化方法,通過構(gòu)建癥狀詞典,采用結(jié)合詞典的改進(jìn)N-gram模型提取醫(yī)案文本中的體征、癥狀等實(shí)體,并在結(jié)構(gòu)化過程中不斷對詞典進(jìn)行更新,模型F1值達(dá)到82.99%。高佳奕等[3]提出一種條件隨機(jī)場(conditional random field,CRF)與長短期記憶人工神經(jīng)網(wǎng)絡(luò)(long short-term memory,LSTM)混合模型,基于已標(biāo)注的肺癌醫(yī)案進(jìn)行實(shí)驗(yàn),F(xiàn)1值達(dá)到84%。許力等[4]提出一種雙向長短期記憶人工神經(jīng)網(wǎng)絡(luò)(bi-directional long short-term memory,BiLSTM)模型與預(yù)訓(xùn)練語言模型雙向編碼器表征 (bidirectional encoder representations from transformers,BERT)[5]相結(jié)合的模型,并將其應(yīng)用于生物醫(yī)學(xué)領(lǐng)域進(jìn)行實(shí)體識別,該模型在3個(gè)數(shù)據(jù)集上的平均F1值達(dá)到89.45%,取得良好效果。
中醫(yī)醫(yī)案是描述疾病診療的文本,癥狀、身體部位、藥物、疾病等術(shù)語的漢字部首結(jié)構(gòu)具有明顯特點(diǎn)。漢字的部首有不同相對位置,如左右結(jié)構(gòu)漢字“肝”“淡”,上下結(jié)構(gòu)漢字“苔”“薄”,包圍結(jié)構(gòu)漢字“困”“悶”等。部首還具有表意作用,如“疒”部首[6]就和疾病方面具有密切關(guān)系,大部分包含該部首的漢字與疾病相關(guān),如“病”“癱”“瘋”等;部首“月”出現(xiàn)在與肉體相關(guān)的字上,如“肢”“腸”等。漢字偏旁部首特征明顯,目前常被廣泛用于增強(qiáng)不同漢語自然語言處理任務(wù)。
為了更好地識別醫(yī)案中的命名實(shí)體,本文以預(yù)訓(xùn)練模型BERT[7]作為基礎(chǔ)模型,并在輸入的文本向量中嵌入偏旁部首特征進(jìn)行訓(xùn)練,構(gòu)建更加精準(zhǔn)的融合漢字部首的BERT-BiLSTM-CRF命名實(shí)體提取模型。
BERT-BiLSTM-CRF模型框架,見圖1[7]。首先,將文本數(shù)據(jù)經(jīng)由BERT的嵌入層映射成字向量,然后輸入到Transformer的編碼層學(xué)習(xí)上下文特征;其次,文本向量與部首特征結(jié)合,經(jīng)過雙向長短期記憶人工神經(jīng)網(wǎng)絡(luò)進(jìn)行語義編碼處理;最后由條件隨機(jī)場計(jì)算得到模型預(yù)測的標(biāo)簽序列。例如輸入是“肢體活動障礙”,輸出則是對應(yīng)的預(yù)測標(biāo)簽。

圖1 BERT-BiLSTM-CRF模型
BERT預(yù)訓(xùn)練模型是谷歌人工智能研究院于2018年10月提出的一種預(yù)訓(xùn)練語言模型,其在機(jī)器閱讀理解頂級水平測試中表現(xiàn)突出。預(yù)訓(xùn)練過程依據(jù)上下文語義信息對隨機(jī)掩蓋的詞進(jìn)行預(yù)測,可以更好地學(xué)習(xí)上下文內(nèi)容特征;句間關(guān)系預(yù)測則為每個(gè)句子的句首和句尾分別插入[CLS]和[SEP]標(biāo)簽,通過學(xué)習(xí)句子間的關(guān)系特征預(yù)測兩個(gè)句子的位置是否相鄰。
BERT模型采用12層或24層雙向Transformer編碼結(jié)構(gòu),其中輸入文本被轉(zhuǎn)換為詞向量,并為每個(gè)句子加上開始及結(jié)束標(biāo)志,由此得到輸入向量E1,E2,…,EN,經(jīng)過多層Transformer編碼器后輸出向量T1,T2,…,TN,見圖2。

圖2 BERT模型結(jié)構(gòu)
在本文中,首先將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換為詞向量,并為每個(gè)句子加上[SEP]和[CLS]標(biāo)志,由此得到BERT的輸入向量E1,E2,…,EN,經(jīng)過多層Transformer編碼器后得到輸出向量T1,T2,…,TN,將輸出向量T1,T2,…,TN記為A1。然后將輸入的訓(xùn)練數(shù)據(jù)與部首詞典進(jìn)行匹配,找到對應(yīng)部首,將部首數(shù)據(jù)進(jìn)行嵌入后得到向量A2,最后將向量A1和A2拼接起來作為雙向長短期記憶人工神經(jīng)網(wǎng)絡(luò)的輸入向量,以完成下游任務(wù)。
近年來,長短期記憶人工神經(jīng)網(wǎng)絡(luò)[8]被廣泛用于語音識別、自然語言處理等領(lǐng)域并獲得巨大成功。一個(gè)基本的長短期記憶人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),見圖3。其具體參數(shù)如下所示:

圖3 LSTM單元結(jié)構(gòu)
it=σ(Whiht-1+Wxixt+bhi+bii)
(1)
ft=σ(Whfht-1+Wxfxt+bhf+bif)
(2)
ot=σ(Whoht-1+Wxoxt+bio+bho)
(3)
(4)
(5)
ht=ottanh(ct)
(6)

雙向長短期記憶人工神經(jīng)網(wǎng)絡(luò)由前向長短期記憶人工神經(jīng)網(wǎng)絡(luò)和后向長短期記憶人工神經(jīng)網(wǎng)絡(luò)組成,其分別從兩個(gè)不同的方向?qū)斎胄蛄羞M(jìn)行處理,然后將得到的兩個(gè)結(jié)果拼接起來,作為最終輸出,從而更好捕捉雙向的語義依賴。
長短期記憶人工神經(jīng)網(wǎng)絡(luò)輸出的標(biāo)簽之間具有很強(qiáng)的依賴性。例如在命名實(shí)體識別中,一個(gè)實(shí)體的起始字B后不應(yīng)再緊接著出現(xiàn)另一種實(shí)體的中間字I,實(shí)體類型應(yīng)該保持一致,或?qū)嶓w中間字I不能獨(dú)立出現(xiàn)等。因此,最終預(yù)測標(biāo)簽序列中的各個(gè)標(biāo)簽并非獨(dú)立出現(xiàn),而是在特定約束條件下產(chǎn)生的觀測值序列。條件隨機(jī)場[8]能夠利用長短期記憶人工神經(jīng)網(wǎng)絡(luò)的輸出序列作為特征。
對于給定的輸入序列x=[x1,x2,…,xn],其輸出預(yù)測序列為y=(y1,y2,…,yn),那么該預(yù)測序列分?jǐn)?shù)可計(jì)算為:
(7)
其中A被稱為轉(zhuǎn)移矩陣,條件隨機(jī)場中需要訓(xùn)練的參數(shù)即為轉(zhuǎn)移矩陣,它將對訓(xùn)練文本中出現(xiàn)的一些重要語法約束進(jìn)行學(xué)習(xí)。P被稱為發(fā)射矩陣,在矩陣P中按照時(shí)間順序選擇的一條路徑即為序列y,則其出現(xiàn)概率可以由Softmax函數(shù)計(jì)算:
(8)
其中yx是對輸入序列x所有可能出現(xiàn)的預(yù)測序列觀測值集合,在訓(xùn)練過程中需要對y的對數(shù)概率最大化:
(9)
預(yù)測過程中,選擇預(yù)測結(jié)果y*使其序列評分最高:
(10)
實(shí)驗(yàn)所用語料來自于中醫(yī)典籍《中國現(xiàn)代名中醫(yī)醫(yī)案精粹叢書》中的第1本,選取其中400例醫(yī)案共計(jì)5萬余字進(jìn)行標(biāo)注。其中包含性別、姓名、年齡、癥狀、疾病、藥物、部位、處方等信息。實(shí)驗(yàn)所用部首由在線新華字典爬取而來[6],使用在線新華字典將中醫(yī)醫(yī)案數(shù)據(jù)集中的所有漢字全部查詢一次,構(gòu)建一個(gè)包含漢字-部首對的詞典,并精心選取12個(gè)出現(xiàn)頻率較高的部首(“疒”“艸”“口”“木”“氵”“扌”“辶”“亻”“纟”“月”“日”“忄”)作為最終部首字典,共計(jì)740個(gè)部首對。以部分部首詞典為例:“肝,月”“咳,口”“瘦,疒”“胸,月”“藥,艸”“病,疒”,其中每一條漢字-部首對都作為單獨(dú)的一行。
根據(jù)醫(yī)案文本特征并結(jié)合已有研究[2]中的方法使用正則表達(dá)式對其包含的癥狀和藥物進(jìn)行提取,通過人工校正最終得到癥狀字典(157詞)和藥物字典(1 693詞)用于醫(yī)案語料標(biāo)注。
結(jié)合雙向最大匹配法[9]對語料進(jìn)行標(biāo)注。同時(shí)運(yùn)用正向最大匹配法和逆向最大匹配法,比較兩者結(jié)果,取分詞數(shù)少的結(jié)果作為最終結(jié)果。將醫(yī)案按照癥狀(symptom)、藥物(medicine)、部位(body)、疾病(disease)4種實(shí)體進(jìn)行標(biāo)注。隨機(jī)從醫(yī)案中選出400條,總計(jì)53 000余字進(jìn)行標(biāo)注,訓(xùn)練集和測試集為3∶1。
使用“BIO”方式對語料進(jìn)行實(shí)體標(biāo)注。將實(shí)體起始字標(biāo)記為“B”,若實(shí)體為單個(gè)字,也標(biāo)記為“B”。將實(shí)體非起始字標(biāo)記為“I”,余下非實(shí)體字全部標(biāo)記為“O”。此外,采用半自動方式對語料進(jìn)行標(biāo)注。基于癥狀字典和藥物字典使用雙向最大匹配法,對匹配到的實(shí)體進(jìn)行自動標(biāo)注。沒有匹配到的字則標(biāo)為“O”,見圖4。

圖4 醫(yī)案標(biāo)注流程
標(biāo)注完成后訓(xùn)練集與測試集中實(shí)體類型、實(shí)體數(shù)量,見表1。
實(shí)驗(yàn)參數(shù)采用已有研究[7]中的默認(rèn)參數(shù)。訓(xùn)練語料句子的最大長度設(shè)置為480,雙向長短期記憶人工神經(jīng)網(wǎng)絡(luò)的隱藏層單元數(shù)量設(shè)置為128,訓(xùn)練輪數(shù)設(shè)置為15。初始學(xué)習(xí)率設(shè)置為0.000 05,實(shí)驗(yàn)批量大小設(shè)置為4。
采用Pycharm作為主要程序開發(fā)平臺,Python版本為3.6。操作系統(tǒng)為Win 10,內(nèi)存16GB,硬件配置為Intel(R)Core(TM)i5-10300H@2.50GHz。
實(shí)驗(yàn)結(jié)果采用準(zhǔn)確率P、召回率R、F1值3個(gè)指標(biāo)進(jìn)行評價(jià),見表2。其中第1行是基于醫(yī)療文本進(jìn)行預(yù)訓(xùn)練的基線BERT模型。第2行加入條件隨機(jī)場層,第3行在第2行基礎(chǔ)上加入雙向長短期記憶人工神經(jīng)網(wǎng)絡(luò)層,最后一行是BERT-BiLSTM-CRF模型融合部首特征。可以看到,在加入部首特征后,模型F1值提升到了84.81%。這表明,BERT-BiLSTM-CRF模型的性能在嵌入部首特征后得到進(jìn)一步提升,表現(xiàn)優(yōu)異,更適合用于中醫(yī)醫(yī)案命名實(shí)體識別。

表2 模型實(shí)驗(yàn)結(jié)果對比(%)
BERT-BiLSTM-CRF-radical模型在不同類型臨床實(shí)體上的表現(xiàn),見表3。可以看出該模型對癥狀實(shí)體和藥物實(shí)體的識別效果優(yōu)于身體部位實(shí)體和疾病實(shí)體。其中模型對藥物詞的識別效果最好,F(xiàn)1值為88.74%;對身體部位的識別效果最差,F(xiàn)1值為83.29%。

表3 不同實(shí)體識別結(jié)果對比(%)
從以上結(jié)果可以看出,在BERT模型的基礎(chǔ)上增加不同人工神經(jīng)網(wǎng)絡(luò)層以及部首特征,能夠明顯提高命名實(shí)體識別效果。條件隨機(jī)場層是序列標(biāo)注的重要組成部分,其中包含轉(zhuǎn)移特征,可以為最后預(yù)測的標(biāo)簽添加一些約束以保證預(yù)測結(jié)果合理,特別是當(dāng)標(biāo)簽之間存在依賴關(guān)系時(shí)。雙向長短期記憶人工神經(jīng)網(wǎng)絡(luò)在長短期記憶人工神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上對輸入序列進(jìn)行了額外的反向?qū)W習(xí),使其對輸入序列的部分語法規(guī)則學(xué)習(xí)更加準(zhǔn)確,加強(qiáng)了對上下文所攜帶信息的記憶。由于醫(yī)學(xué)命名實(shí)體的部首具有很強(qiáng)的實(shí)體類別特點(diǎn),嵌入部首特征有效提高了模型性能。例如部首“疒”與疾病實(shí)體密切相關(guān),將其添加到模型中能夠強(qiáng)化對疾病實(shí)體識別的訓(xùn)練,從而提高模型性能。
本文采用由本研究團(tuán)隊(duì)從醫(yī)案及中醫(yī)診斷教材中抽取獲得的詞典對語料進(jìn)行標(biāo)注,提高了語料標(biāo)注效率,隨著醫(yī)案命名實(shí)體提取算法的應(yīng)用,術(shù)語詞典中詞的質(zhì)量和數(shù)量也會改善,將促進(jìn)語料標(biāo)注效率提高。
在中醫(yī)醫(yī)案數(shù)據(jù)集中,疾病實(shí)體數(shù)量較少,且在實(shí)際標(biāo)注過程中,發(fā)現(xiàn)疾病術(shù)語常分散在癥狀詞中。此外,在中醫(yī)術(shù)語中有些詞既是疾病術(shù)語又是癥狀術(shù)語,如“腦震蕩重度昏迷”,模型將疾病實(shí)體“腦震蕩”錯(cuò)誤地預(yù)測為癥狀實(shí)體。另一方面,癥狀詞表述相對來說比較豐富,例如疼痛有“酸痛”“劇痛”“脹痛”等多種表達(dá)方式,導(dǎo)致模型對癥狀詞的識別效果不佳。在中醫(yī)醫(yī)案中部位詞常與方位詞連用,這種細(xì)粒度的部位描述更加精準(zhǔn),但也使部位實(shí)體數(shù)增加且重復(fù)率低,如“右脅”“左胸”“左耳”等,這些表述豐富靈活且重復(fù)率低的實(shí)體影響模型性能。針對上述問題,條件隨機(jī)場具有一定局限性,無法根據(jù)具體語義對實(shí)體進(jìn)行靈活識別,而雙向長短期記憶則對學(xué)習(xí)內(nèi)容具有長時(shí)記憶,能夠?qū)Ρ硎鱿鄬`活的實(shí)體進(jìn)行識別,從而提高模型性能。
對數(shù)據(jù)中沒有被正確識別的命名實(shí)體進(jìn)行分析主要存在以下問題。一是程度詞與部位、癥狀、疾病等實(shí)體結(jié)合在一起時(shí),模型將程度詞預(yù)測為實(shí)體;例如句子“浮腫尤甚”,模型將“尤甚”預(yù)測為癥狀實(shí)體;句子“明顯脹氣”,模型將“明顯”預(yù)測為癥狀實(shí)體。這主要是因?yàn)閷︶t(yī)案實(shí)體的劃分還不夠全面。二是模型對長實(shí)體的識別效果不佳,例如癥狀實(shí)體“色素沉著皮損呈簇集性成群分布”,模型只將“色素沉著皮損”預(yù)測為癥狀實(shí)體。這是因?yàn)锽ERT模型對捕獲長實(shí)體中的依賴關(guān)系效果不佳。
中醫(yī)醫(yī)案是古今中醫(yī)傳承下來的寶貴財(cái)富,對指導(dǎo)現(xiàn)代中醫(yī)發(fā)展具有重要作用。本研究所涉及的基于預(yù)訓(xùn)練BERT模型的中醫(yī)醫(yī)案命名實(shí)體識別方法中,融入部首特征的BERT-BiLSTM-CRF-radical模型最優(yōu),其F1值達(dá)到最高(84.81%)。但采用的實(shí)驗(yàn)數(shù)據(jù)量較少,不同實(shí)體分布不均衡,實(shí)體間存在相互嵌套的問題。在今后研究中將進(jìn)一步增加實(shí)驗(yàn)數(shù)據(jù)和實(shí)體類別,均衡不同實(shí)體分布,并嘗試使用其他方法提高模型性能。