張德政,范欣欣,謝永紅?,蔣彥釗
1) 北京科技大學(xué)計(jì)算機(jī)與通信工程學(xué)院,北京 100083 2) 材料領(lǐng)域知識(shí)工程北京市重點(diǎn)實(shí)驗(yàn)室,北京 100083
人工智能技術(shù)的快速發(fā)展為各個(gè)行業(yè)注入了新的活力,也為中醫(yī)學(xué)的發(fā)展提供了新的思路. 隨著人工智能與中醫(yī)的結(jié)合,也為中醫(yī)的輔助診療提供了更多可能. 中醫(yī)學(xué)在歷史上形成了多種辨證方法,其中臟腑辨證是根據(jù)臟腑的生理功能,病理表現(xiàn),對(duì)疾病證候進(jìn)行歸納,借以推究病機(jī),判斷病變的部位、性質(zhì)、正邪盛衰情況的一種辨證方法,是辨證體系中的重要組成部分. 當(dāng)某一臟腑發(fā)生病變時(shí),反映出的臨床癥狀也各不相同,且依據(jù)臟腑辨證特點(diǎn),一個(gè)癥狀可涉及多個(gè)臟腑,所以本文將中醫(yī)中的臟腑定位問題抽象為自然語言處理領(lǐng)域的多標(biāo)簽文本分類問題,將醫(yī)案數(shù)據(jù)中的癥狀類文本信息作為輸入,將具體病變臟腑作為多標(biāo)簽文本分類問題中的標(biāo)簽.
在中醫(yī)的辨證推理方面,已經(jīng)有大量研究人員進(jìn)行過相關(guān)研究. 許強(qiáng)[1]通過對(duì)經(jīng)典證素辨證體系相關(guān)內(nèi)容的總結(jié),分析經(jīng)典證素辨證體系存在的不足,并基于有向圖這種數(shù)據(jù)結(jié)構(gòu)重新對(duì)證素概念進(jìn)行定義,對(duì)證素內(nèi)容進(jìn)行分類,并重新對(duì)辨證醫(yī)理模型進(jìn)行構(gòu)建. 尹丹等[2]采用領(lǐng)域本體七步法構(gòu)建中醫(yī)經(jīng)方知識(shí)圖譜,并通過Cypher設(shè)計(jì)一種模擬人聯(lián)想思維進(jìn)行檢索的經(jīng)方知識(shí)檢索框架. 劉超等[3]基于BP神經(jīng)網(wǎng)絡(luò)方法,建立冠狀動(dòng)脈臨界病變患者證候要素及其常見組合的中醫(yī)辨證診斷模型. 褚娜[4]在中醫(yī)辨證的現(xiàn)狀研究和相關(guān)智能算法的基礎(chǔ)上,提出適合于中醫(yī)辨證的理論方法和系統(tǒng)實(shí)施方案. 楊開明[5]將85例糖尿病患者結(jié)合C4.5決策樹算法建立了中醫(yī)辨證決策樹,提取出糖尿病的8種中醫(yī)證候分類規(guī)則. 周璐等[6]將C4.5決策樹、隨機(jī)森林、支持向量機(jī)、BP神經(jīng)網(wǎng)絡(luò)算法進(jìn)行融合,最終得到一種復(fù)合結(jié)構(gòu)的智能化辨證選方模型. 舒鑫等[7]基于神經(jīng)網(wǎng)絡(luò)構(gòu)建了AIS氣虛證預(yù)測(cè)模型,并展現(xiàn)出了良好的準(zhǔn)確率. 在此類方法中,尚未充分使用運(yùn)用文本的高層語義信息,可以嘗試在此類方法基礎(chǔ)上融入高層語義信息進(jìn)行效果提升.
自然語言處理技術(shù)的發(fā)展為中醫(yī)的辨證論治提供了新的方法,多標(biāo)簽文本分類即為其中的重要方法. 多標(biāo)簽文本分類是指一個(gè)樣本可以屬于多個(gè)類別(或標(biāo)簽). 比如一條癥狀同時(shí)與“腎”和“肝”兩個(gè)標(biāo)簽關(guān)聯(lián),即該癥狀表現(xiàn)與“腎”和“肝”兩個(gè)臟腑相關(guān). 有研究人員從聚類的角度對(duì)文本進(jìn)行多標(biāo)簽分類,申超波等[8]提出了一種基于標(biāo)簽聚類的標(biāo)簽冪集方法,通過改進(jìn)平衡k-means聚類來發(fā)現(xiàn)訓(xùn)練集中潛在的重要標(biāo)簽集合,并用于形成新的訓(xùn)練集進(jìn)行多標(biāo)簽分類. 黃志強(qiáng)[9]對(duì)基于k-means的多標(biāo)簽分類及標(biāo)簽補(bǔ)全算法進(jìn)行了研究.
在基于神經(jīng)網(wǎng)絡(luò)對(duì)文本特征進(jìn)行提取表示方面,研究人員也進(jìn)行了大量研究. 李德玉等[10]提出一種基于標(biāo)簽特征的卷積神經(jīng)網(wǎng)絡(luò)(CNN)情緒多標(biāo)簽分類方法,使用Word2Vec進(jìn)行詞向量表示,然后利用標(biāo)簽特征來強(qiáng)化文本情緒和標(biāo)簽之間的聯(lián)系,融合入CNN模型對(duì)文本情緒進(jìn)行深層次的表示和多標(biāo)簽分類. Joulin等[11]基于淺層神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)出了文本分類工具FastText. 易士翔等[12]在中文突發(fā)事件數(shù)據(jù)集上驗(yàn)證了雙向LSTM模型在文本表征中的有效性. Chen等[13]在獲得文本的整體語義 (Text feature vector)后,將文本整體語義輸入到一個(gè)遞歸神經(jīng)網(wǎng)絡(luò)(RNN)的序列中作為初始值,每一時(shí)刻輸入是上一時(shí)刻的輸出,將卷積神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行集成應(yīng)用,以獲得全局和局部文本語義. Yogatama等[14]針對(duì)文本分類問題構(gòu)建了基于 LSTM(Long short-term memory,長短期記憶網(wǎng)絡(luò))的生成模型和判別模型. Wang[15]提出了中斷遞歸神經(jīng)網(wǎng)絡(luò)(DRNN),將位置不變性引入RNN中. 該網(wǎng)絡(luò)通過限制RNN中的信息流的距離,將每個(gè)時(shí)間步長的隱藏狀態(tài)限制為表示當(dāng)前位置附近的單詞. Kim[16]提出TextCNN,將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到文本分類任務(wù),利用多個(gè)不同大小的kernel提取句子中的關(guān)鍵信息,這種方法類似于多窗口大小的n-gram,能夠更好地捕捉局部相關(guān)性.
在對(duì)多標(biāo)簽文本分類效果的提升過程中,輸入高質(zhì)量的文本表征對(duì)模型效果有巨大的作用.基于大規(guī)模語料庫的預(yù)訓(xùn)練模型已經(jīng)成為自然語言處理技術(shù)的重要研究方向. 這些預(yù)訓(xùn)練模型是以龐大的語料庫作為基礎(chǔ)訓(xùn)練的,因此相較于onehot、Word2Vec[17]、Glove[18]等文本表征方式,預(yù)訓(xùn)練模型具有更好的表征能力,可以更好地適用于不同場(chǎng)景下的自然語言處理任務(wù). 為了更多地保留句子中詞與詞之間的內(nèi)在聯(lián)系,Google提出Transformer編碼器模型[19],在此基礎(chǔ)上Google提出了 BERT 模型[20](Bidirectional encoder representations from transformers),利用了隨機(jī)遮蓋語言模型(Masked LM)和預(yù)測(cè)下一句 (Next sentence prediction,NSP) 2種方法分別捕捉詞語和句子級(jí)別的表示. 在BERT出現(xiàn)后,又相繼出現(xiàn)了很多在BERT基礎(chǔ)上進(jìn)一步改進(jìn)和提升的模型,如XLNet[21],RoBERTa[22]、DistilBERT[23]等.
雷景生和錢葉[24]在公開數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn),驗(yàn)證了使用ERNIE預(yù)訓(xùn)練模型進(jìn)行文本分類 的 有 效 性 . 本 文 使 用 的A lite BERT 模 型(ALBERT)[25]是Google在BERT之后提出一種輕量級(jí)BERT,相比于BERT,ALBERT模型采用解綁輸入的詞向量大小和隱藏層大小關(guān)系的方式降低了模型參數(shù)量,并實(shí)現(xiàn)了模型跨層的參數(shù)共享,在不損失模型效果的前提下有效縮小了模型大小.
本文提出的基于ALBERT和雙向門控循環(huán)單元 (Bidirectional gated recurrent unit, Bi-GRU) 的 多標(biāo)簽文本分類模型整體結(jié)果如圖1所示,整個(gè)模型可以分為4個(gè)部分:輸入層,預(yù)訓(xùn)練層,Bi-GRU層和輸出層.
圖1 臟腑定位模型結(jié)構(gòu)Fig.1 Zang-fu localization model structure
輸入層將癥狀文本進(jìn)行預(yù)處理后輸入模型中.
預(yù)訓(xùn)練層將輸入的文本通過ALBERT預(yù)訓(xùn)練語言模型獲得文本的向量表征.
Bi-GRU層接收經(jīng)過ALBERT預(yù)訓(xùn)練模型后的向量序列,通過Bi-GRU進(jìn)一步編碼獲取高層語義.
輸出層通過以Sigmoid為激活函數(shù)的全連接層將各標(biāo)簽對(duì)應(yīng)輸出值壓縮至0~1之間,并將輸出值大于等于設(shè)定閾值的所有病位標(biāo)簽輸出作為最終臟腑定位結(jié)果.
自BERT的成功以來,預(yù)訓(xùn)練模型都采用了很大的參數(shù)量以取得更好的模型表現(xiàn). 但是模型參數(shù)量越來越大也帶來了很多問題,比如對(duì)算力要求越來越高、模型體積越來越大、模型訓(xùn)練時(shí)間越來越長等. 為了解決目前預(yù)訓(xùn)練模型參數(shù)量過大的問題,Lan等[25]提出了ALBERT模型,相比于BERT,ALBERT使用了2種能夠大幅減少預(yù)訓(xùn)練模型參數(shù)量的方法,并提出用語句順序預(yù)測(cè)(Sentence order prediction, SOP)任務(wù)代替 BERT中的 NSP 任務(wù). ALBERT是一種輕量級(jí)的基于Transformer的雙向編碼器表示模型(A lite bidirectional encoder representations from transformers). 通過對(duì)部分語義單元的隨機(jī)掩碼,使得模型能夠?qū)W習(xí)到完整的語義表示. ALBERT模型結(jié)構(gòu)如圖 2所示,其中[E1,E2,···,En?1,En]為原始文本向量,trm為Transformer模型[19].
圖2 ALBERT 模型結(jié)構(gòu)Fig.2 ALBERT model structure
由圖2可以看出,模型的輸出包含文本上下文信息的向量表示,且每個(gè)向量 [T1,T2,···,Tn?1,Tn]都包含了整個(gè)序列的文本信息.
在ALBERT中,提出了2種可以減少BERT參數(shù)量的方法:(1)解綁WordPiece詞向量大小E和隱層大小H,減小參數(shù)量;(2)層之間參數(shù)共享,即在模型多個(gè)層之間使用相同的參數(shù). 第一種方法對(duì)詞嵌入?yún)?shù)進(jìn)行了因式分解,將它們分解為兩個(gè)小矩陣. 不再將One-hot向量直接映射到大小為H的隱藏空間,而是先將它們映射到一個(gè)低維詞嵌入空間E,再映射到隱藏空間. 通過這種分解,將詞嵌入?yún)?shù)從 o (V×H)降低到 o (V×E+E×H),在隱層大小H遠(yuǎn)大于E時(shí),會(huì)有非常明顯的參數(shù)量減少. 第2種方法通過跨層參數(shù)共享,有效降低了參數(shù)量,并且通過參數(shù)共享,提升了模型的魯棒性.
此外,對(duì)于BERT中的NSP任務(wù),ALBERT進(jìn)行了改進(jìn). 由于BERT中NSP任務(wù)是預(yù)測(cè)兩個(gè)句子在原文本中是否連續(xù)出現(xiàn)的二分類任務(wù),其正例為文章中連續(xù)出現(xiàn)的兩個(gè)句子,負(fù)例由兩篇文檔中各選一句構(gòu)造而成. 由于負(fù)例的構(gòu)造使得模型可能更多傾向于預(yù)測(cè)句子主題關(guān)系而非句子連續(xù)性,這將NSP任務(wù)簡單化. 所以ALBERT提出了句子順序預(yù)測(cè)任務(wù)(SOP),即正例選擇方式不變,與NSP任務(wù)中的正例選擇方式相同,負(fù)例選擇一篇文檔中兩個(gè)連續(xù)的句子并將它們順序交換后構(gòu)造得到. 在NSP和SOP有效性對(duì)比實(shí)驗(yàn)中,NSP在解決SOP問題時(shí)精度僅為52%,而SOP在NSP任務(wù)上精度為78.9%,且SOP任務(wù)在幾乎所有下游任務(wù)中都相比NSP有提升[25],基于此證明了SOP相比于NSP的有效性.
經(jīng)過上述處理,在大規(guī)模語料上訓(xùn)練得到的ALBERT預(yù)訓(xùn)練模型可以憑借較少的模型參數(shù)表達(dá)豐富的語義信息,有效縮減了模型體積.
門控循環(huán)單元是LSTM的變種,是相比于LSTM網(wǎng)絡(luò)更簡單的循環(huán)神經(jīng)網(wǎng)絡(luò)[26].
GRU網(wǎng)絡(luò)通過引入門控機(jī)制來進(jìn)行信息的更新. 在LSTM網(wǎng)絡(luò)中,輸入門和遺忘門是互補(bǔ)關(guān)系,直接使用兩個(gè)門比較冗余. GRU將輸入門與和遺忘門合并成更新門(Update gate),并引入了重置門(Reset gate). 同時(shí),GRU 也不引入額外的記憶單元,直接在當(dāng)前狀態(tài)和歷史狀態(tài)之間引入線性依賴關(guān)系.
GRU模型更新方式如圖3所示.
圖3 GRU 單元Fig.3 GRU unit
按照流程,可將圖3中的GRU分成4部分:更新門、重置門、產(chǎn)生新記憶和產(chǎn)生新隱藏層狀態(tài),下面將具體說明.
更新門:用過去的隱藏層狀態(tài)與當(dāng)前輸入決定如何產(chǎn)生新記憶.
重置門:用過去的隱藏層狀態(tài)與當(dāng)前輸入決定要有多少之前的記憶被遺忘.
上述流程描述,可以得到如下4個(gè)公式,其中包括重置門向量、更新門向量、新記憶和經(jīng)過門控處理后的新的記憶(新的隱藏層狀態(tài)):
GRU作為RNN的變種同RNN一樣,均具有遺忘性. 通常來說,在訓(xùn)練過程中,最后一個(gè)狀態(tài)所包含的信息是有損失的,而且越靠前,損失越嚴(yán)重. 對(duì)于包含很多序列的訓(xùn)練任務(wù)而言,獲取前后背景信息對(duì)增加模型準(zhǔn)確度來說有重要意義. 因此,本文通過訓(xùn)練正向?qū)W習(xí)和反向?qū)W習(xí)兩個(gè)GRU神經(jīng)網(wǎng)絡(luò),能夠把正向和反向?qū)W習(xí)過程中最后狀態(tài)對(duì)應(yīng)的向量進(jìn)行連接,將連接后得到的向量作為最后的結(jié)果,這個(gè)網(wǎng)絡(luò)就可以利用前后所有信息. 本文中使用的雙向GRU模型如圖4所示.
圖4 雙向 GRU 模型示意圖Fig.4 Bi-GRU model diagram
依據(jù)中醫(yī)一個(gè)癥狀涉及多個(gè)臟腑的特點(diǎn),該模型的輸出為多標(biāo)簽分類輸出而非多分類輸出.多標(biāo)簽分類與多分類的區(qū)別在于,多標(biāo)簽分類中一個(gè)樣本可以同時(shí)屬于多個(gè)類別,而多分類中,一個(gè)樣本屬于且只屬于一個(gè)類別. 如癥狀“胸悶,氣短,頭暈,頭痛,夜寐不寧,舌暗,苔薄,苔白,苔膩,脈弦,脈細(xì),脈沉”同時(shí)發(fā)生在“心,腎”兩個(gè)病位,即同時(shí)屬于“心”,“腎”兩個(gè)類別,所以該問題為多標(biāo)簽分類問題.
基于臟腑定位模型具有多標(biāo)簽分類的特點(diǎn),在輸出層使用Sigmoid函數(shù)作為激活函數(shù)預(yù)測(cè)各個(gè)標(biāo)簽的概率,區(qū)別于單標(biāo)簽?zāi)P统S玫腟oftmax函數(shù). Sigmoid函數(shù)是一類S型曲線函數(shù),為兩端飽和函數(shù). 可以看成是一個(gè)“擠壓”函數(shù),把一個(gè)實(shí)數(shù)域的輸入“擠壓”到 (0, 1)之間. 當(dāng)輸入值在 0附近時(shí),Sigmoid函數(shù)近似為線性函數(shù);當(dāng)輸入值靠近兩端時(shí),對(duì)輸入進(jìn)行抑制. 輸入越小,越接近于0,輸入越大,越接近于1.
在模型訓(xùn)練過程中,損失函數(shù)調(diào)整為帶有Sigmoid函數(shù)的二元交叉熵?fù)p失函數(shù),樣本損失計(jì)算方式如式(5)所示:
式中,n為類別總數(shù),是模型的輸出值,表示預(yù)測(cè)樣本屬于某一類別的概率;是樣本在某一類別下的真實(shí)標(biāo)簽. 區(qū)別于Softmax交叉熵?fù)p失,Sigmoid函數(shù)使樣本屬于各類別的概率分布在(0, 1)之間.
在訓(xùn)練階段結(jié)束使用模型進(jìn)行預(yù)測(cè)推理時(shí),設(shè)定一個(gè)閾值,將概率大于閾值的所有標(biāo)簽輸出,作為多標(biāo)簽分類的預(yù)測(cè)結(jié)果. 如輸入癥狀“胸悶,氣短,頭暈,頭痛,夜寐不寧,舌暗,苔薄,苔白,苔膩,脈弦,脈細(xì),脈沉”后,輸出各個(gè)標(biāo)簽概率為[0.64240265, 0.6062219, 0.04209191, 0.17620572],分別對(duì)應(yīng) [‘心’, ’腎’, ‘肺’, …, ‘脾’],通過網(wǎng)格調(diào)參的方法,最終設(shè)定閾值為0.5,即大于等于0.5均為相關(guān)病位,在上述例子中,即“心”,“腎”為輸入癥狀的對(duì)應(yīng)病位標(biāo)簽.
實(shí)驗(yàn)數(shù)據(jù)來源于名老中醫(yī)醫(yī)案庫,在經(jīng)過專家指導(dǎo)后共篩選出14821份醫(yī)案,本文中需要用到其中的“癥狀”和“病位”信息. 其中“癥狀”指疾病過程中機(jī)體內(nèi)的一系列機(jī)能、代謝和形態(tài)結(jié)構(gòu)異常變化所引起的病人主觀上的異常感覺或某些客觀病態(tài)改變;“病位”指與表現(xiàn)出的癥狀相關(guān)的部位,即臟腑標(biāo)簽. 在這些醫(yī)案中存在癥狀信息不全、癥狀文本中存在無意義字符的情況,通過專家指導(dǎo)和設(shè)置相應(yīng)規(guī)則,對(duì)癥狀文本中去噪處理和篩選后,得到最終有效醫(yī)案數(shù)據(jù). 將這些醫(yī)案中“癥狀”信息和“病位”信息進(jìn)行提取,得到本實(shí)驗(yàn)中所用到的全部數(shù)據(jù),共計(jì)12735份. 所得數(shù)據(jù)格式如表1所示.
表1 臟腑定位數(shù)據(jù)格式Table 1 Zang-fu location data format
具體實(shí)驗(yàn)參數(shù)設(shè)置如表2所示.
表2 訓(xùn)練過程中的參數(shù)Table 2 Parameters in the training process
為了綜合考慮模型的性能,本文采用了精確率(Precision)、召回率(Recall)、F1值(F1-Value)作為模型評(píng)價(jià)指標(biāo).
精確率,P:指在被所有預(yù)測(cè)為正例中實(shí)際為正例的概率.
召回率,R:指在所有實(shí)際為正例中被預(yù)測(cè)為正例的概率.
F1值:指精確值和召回率的調(diào)和均值.
計(jì)算表達(dá)式如下:
為了驗(yàn)證本文提出的臟腑定位模型對(duì)于實(shí)驗(yàn)的有效性,采用多種模型與本文模型進(jìn)行對(duì)比,如表3和表4所示,并為了驗(yàn)證本文提出模型的有效性進(jìn)行了消融實(shí)驗(yàn),如表5所示.
表3 多標(biāo)簽分類對(duì)比實(shí)驗(yàn)結(jié)果Table 3 Comparative experimental results of multiple label classification
表4 BERT 與 ALBERT 對(duì)比實(shí)驗(yàn)結(jié)果Table 4 Comparative experimental results of BERT and ALBERT
表5 多標(biāo)簽分類消融實(shí)驗(yàn)結(jié)果Table 5 Ablation experiment multiple label classification results
在表3對(duì)比實(shí)驗(yàn)中可以看出,方法1與方法4相比,在其他條件完全相同的情況下,本文提出的基于ALBERT預(yù)訓(xùn)練模型相比于Word2Vec的表示方式,能更好地完成文本表征任務(wù),F(xiàn)1值相比提升了0.0183. 將方法4與方法2、方法3相比,本文提出的模型比多層感知機(jī)(MLP classifier,No.2)模型和決策樹(Decision tree classifier,No.3)方法F1值分別提升了0.0934和0.1325,均有大幅提升.表4的對(duì)比實(shí)驗(yàn)結(jié)果表明,相比于使用BERT預(yù)訓(xùn)練模型,采用ALBERT預(yù)訓(xùn)練模型的方法F1值提升了0.0002,且在測(cè)試集上預(yù)測(cè)時(shí)間有了明顯減少,模型參數(shù)大幅減少,模型體積縮小為原來的近十分之一.
通過表5消融實(shí)驗(yàn)可以看出,使用ALBERT預(yù)訓(xùn)練模型后不增加Bi-GRU層,最終在測(cè)試集上的F1值為0.7508. 與之相比,在ALBERT層后加入Bi-GRU層的模型F1值提升了0.0505. 通過該消融實(shí)驗(yàn),可以得出在本文的臟腑定位模型中加入Bi-GRU層確實(shí)有效捕捉了上下文信息,生成了高層語義表示,有效提升模型效果.
針對(duì)中醫(yī)中的臟腑定位方法,本文提出了一種基于ALBERT和Bi-GRU的多標(biāo)簽文本分類模型. 該模型采用ALBERT表示作為輸入,通過Bi-GRU有效地捕捉上下文信息生成高層次的文本語義信息表示,之后再對(duì)高層次信息表示進(jìn)行分類. 該方法從醫(yī)案數(shù)據(jù)的角度對(duì)中醫(yī)的臟腑定位方法的探索,相較于決策樹、感知機(jī)等模型F1值有較大的提升. 使用的ALBERT向量化表示方式與Word2Vec相比有很大的提升,相比于BERT方法,一定程度上縮短了預(yù)測(cè)時(shí)間,并大幅縮減了模型體積. 在未來的工作中,將在進(jìn)一步提升模型效果的基礎(chǔ)上,考慮融入更多中醫(yī)中臟腑定位的知識(shí),將知識(shí)圖譜中的知識(shí)融入到臟腑定位模型中,進(jìn)行融合知識(shí)的臟腑辨證. 探索在中醫(yī)知識(shí)的約束下更準(zhǔn)確地進(jìn)行中醫(yī)證素的推理工作,在提高模型效果的同時(shí)也為模型加入更多的可解釋性.