張華麗,康曉東,李小軍,2,劉漢卿,王笑天
1.天津醫科大學 醫學影像學院,天津300203
2.重慶市黔江中心醫院,重慶409099
自動問答(question answering)是人工智能領域中重要的研究方向,其核心是利用計算機對用戶提出的問題進行自動解析,并從答案候選集中檢索出目標答案[1]。近年來,隨著醫療信息化的飛快發展,越來越多的人通過互聯網來尋找醫療幫助,導致在線醫療自動問答論壇十分活躍。現階段,人們提出的健康咨詢問題日益劇增,需要消耗大量的醫療資源。而醫生的資源有限,很難及時回答所有問題。因此,如何通過分析現有的海量中文醫療問答數據構建快速、準確的自動問答系統是一個亟需解決的任務。構建完整的中文醫療自動問答系統不僅可以緩解醫生資源有限的現狀,也可以減少醫生的工作量,避免重復工作。
目前,醫療自動問答領域的研究主要分為傳統方法和深度學習方法兩類。傳統方法主要利用關鍵詞匹配的機制,其包括人工規則方法[2]、信息檢索[3]以及機器學習的傳統模型[4]等。傳統方法很大程度上依賴于大量的人工特征,需要耗費大量的人力且泛化能力弱,并在匹配正確答案的精度上也存在不足。隨著深度學習不斷融入到自然語言處理領域,研究者們嘗試將深度學習算法應用到自動問答任務上,并取得優異效果。深度學習方法旨在通過文本表示、特征提取以及判斷問答對之間的語義相似度等一系列操作,實現精準回答用戶所提出的問題。Feng 等人[5]利用卷積神經網絡(convolutional neural networks,CNN)提取問題和答案的局部特征,再通過計算余弦相似度判斷問答對的匹配程度。由于長短時記憶網絡具有捕捉長距離依賴的語義信息的能力,Tan等人[6]采用雙向長短時記憶網絡(bi-directional long short-term memory,BiLSTM),從句子整體上編碼問題和答案的語義信息。Zhang 等人[7]在字向量的基礎上,構建多尺度卷積神經網絡(multi-scale convolutional neural networks,Multi-CNN),通過不同的卷積核從字、詞和短語等不同尺度深度挖掘問答對的語義特征。考慮到句子的局部特征和全局特征對語義理解均有意義,Zhang 等人[8]提出BiGRU-CNN 聯合網絡模型,先利用BiGRU(bi-directional gated recurrent unit)獲取句子的整體序列信息,再傳入多尺度CNN 模型有效捕獲句子的局部特征信息,利用兩種不同的網絡模型學習不同角度的語義信息。隨后,有研究者把注意力機制和神經網絡模型結合起來處理自動問答任務。邵曦等人[9]提出結合BiLSTM 和注意力模型的問答系統,具有良好的性能。Zhang 等人[10]在BiGRU-CNN 組合網絡的基礎上,添加注意力機制,將更多的注意力權重分配到問答對的關聯信息上,并實現問答對的信息交互。Cui 等人[11]提出孿生BERT 網絡,設計了Crossed BERT 模型,提取問答對深度的語義信息以及充分理解問答對之間的語義相關性,再融合Multi-CNN 或BiGRU 模型學習更豐富的語義信息,實驗結果表明該方法在中文醫療自動問答領域上表現出最優性能。
中文醫療問答句表達方式靈活多樣、句法語法復雜多變,文本中包含豐富的序列信息和句法語法信息,需要從不同維度和角度上全面分析句子復雜的內部語義信息。因此,在中文醫療領域的自動問答任務上,也面臨著挑戰。鑒于不同網絡結構挖掘不同角度的語義信息,Tai 等人[12]將LSTM 模型拓展為Tree-LSTM 網絡,在預測句子對的語義相關性和情感分類任務上,Tree-LSTM要優于LSTM。由此可見,樹結構化LSTM 不僅具有良好的表示序列信息的能力,也擁有揭示句子語法結構的優勢,實現從不同角度上捕獲文本信息。Zhang等人[13-15]提出把圖卷積神經網絡(graph convolutional network,GCN)引入到中文實體關系聯合抽取任務上,先通過雙向長短時記憶網絡編碼句子的序列特征,再利用圖卷積神經網絡捕捉句子中蘊含的句法信息,兼顧了句子的序列信息和復雜的語法關系,提高模型實體關系抽取的準確率。比如,對“我沒有感冒、發燒等不適癥狀,但是心慌、難受,我該怎么辦?”文本序列進行語義表征,如果只依賴于BiLSTM模型,由于其對“沒有”這種否定詞的語義表征不敏感,文本理解上會有偏差,不利于下游任務。引入GCN模型提取句法信息,與GRU模型獲取的特征信息表現出互補關系,因此,在一定程度上學習較完整的文本信息。
根據上述分析,本文提出融合語義及句法特征的多注意力交互的自動問答方法。也就是,本文在BERT模型的基礎上,分別利用BiGRU 和GCN 進一步編碼句子的語義特征和句法結構。通過引入GCN模型捕獲單獨從BiGRU 模型無法學習到的句法關系,與BiGRU 模型學習到的語義特征呈現互補關系,充分學習蘊含在問答句中的復雜信息;又添加多注意力池化模塊,實現問答對的語義特征和句法特征兩種不同語義空間上的特征交互,從而能夠多角度捕捉問答對之間的語義相關性。在cMedQAv1.0 和cMedQAv2.0 兩種公開數據集的基礎上,相比于基準模型,本文方法的準確率均有所提高。實驗證明通過引入GCN 模型捕捉句子的句法信息,優化了問答句的特征編碼;利用多注意力池化模塊,能進一步刻畫不同角度的問答對特征向量,且充分學習問題和答案之間的語義關聯度。
本研究的主要貢獻包括以下四點:(1)采用不同網絡模型捕捉問答對中不同角度和維度上的語義信息。利用雙向門控循環單元學習句子的語義特征,引入圖卷積神經網絡捕捉句法結構的特征表示。(2)通過多注意力池化模型,在語義特征和句法特征不同語義空間上,實現問答對兩種編碼向量的多注意力交互表示,給特征向量分配不同的注意力權重,并學習問答對之間的語義關聯。(3)所提出的方法在兩種公開的中文醫療自動問答數據集上,cMedQAv1.0 開發集、測試集以及cMedQAv2.0開發集準確率均達到最優,分別為79.05%、78.45%和81.85%。(4)通過觀察ACC@1評價指標,分析本文方法的各個模塊對本實驗的貢獻。
首先,將問答句拼接起來以字嵌入方式輸入到BERT 預訓練語言模型,捕獲和表示問答句的語義信息以及兩者的語義關聯性。其次,將BERT模型生成的特征向量分別作為BiGRU 和GCN 模型的輸入,由此在BERT 模型挖掘的序列信息基礎上,進一步得到句子的全局語義特征和句法特征,即通過BiGRU 優化文本的語義表示,獲得全局化的語義向量;通過GCN能夠捕捉句子的句法特征,并與BiGRU 獲得的序列特征呈現互補關系。隨后,利用多注意力交互模塊,將問答對的語義特征和句法特征四個特征向量進行兩兩融合,一方面能夠集成問答對的不同空間上的特征向量,使得特征向量包含更豐富的文本信息;另一方面可以多角度學習問答對的共現信息以及突出表達問答對的重要內容。其中,問答對的四個特征向量兩兩融合指的是問題的語義特征和答案的語法結構特征、問題的語義特征和答案的語義特征、問題的語法結構特征和答案的語義特征以及問題的語法結構特征和答案的語法結構特征四種交互方式,由此得到多個注意力池化矩陣。然后,將多個注意力池化矩陣傳入到池化層分別做最大行和最大列的池化,進一步提取問答句的向量表示,并通過分別計算問答對特征向量的平均值,獲得最終的編碼向量;最后,通過計算問答對的相關性大小,衡量問答對的匹配程度,從而找到目標答案。
本文提出的自動問答模型主要分為了三個組成部分:編碼層、多注意力池化模塊和計算相似度層。總體框架如圖1所示。

圖1 本文方法框架圖Fig.1 Framework diagram of proposed method
編碼層中使用BERT 模型提取問答句的序列信息以及問答對的語義相關性;在BERT 模型的基礎上,再利用BiGRU 進一步提取句子的全局語義信息,優化文本的序列特征,引入GCN 編碼文本中基于依存分析圖的局部依賴的句法關系,補充單獨從BiGRU 無法捕捉的語法結構信息,與BiGRU 捕捉的序列信息表現為互補關系。
1.3.1 BERT編碼
BERT模型是近幾年Devlin等人[16]提出的一種優秀的語言表征模型,廣泛應用于自然語言處理任務中。BERT模型是基于雙向的Transformer編碼器構成,其框架結構如圖2 所示。如圖1 所示,本文將問題和答案拼接起來并以[SEP]分隔,輸入到BERT 模型,其中,BERT模型的輸入向量由位置編碼、段編碼和詞向量相加而成。然后經過雙向Transformer得到問答對的編碼向量[CLS],較完整地保存了問答對的語義信息,并利用自注意機制(self-attention)捕捉問答對的語義關聯性。

圖2 BERT框架圖Fig.2 BERT frame diagram
1.3.2 BiGRU編碼
由BERT模型生成的特征向量作為BiGRU的輸入,利用BiGRU進一步編碼問答對的全局語義信息。BiGRU是通過兩層GRU對輸入序列分別采用前向序列和反向序列的方式進行編碼,由此生成上下文語境化的特征向量。GRU模型是在LSTM模型的基礎上做改進,簡化了模型結構,其只包括更新門和重置門兩個門控結構[17]。GRU 模型降低了模型復雜度的同時,加快了運算速度。GRU網絡模型的具體計算過程如式(1)~(4)所示:

其中,rt表示重置門權重,其決定從歷史信息中保留多少融入到xt。zt表示更新門權重,其決定從歷史信息中有多少來更新ht。ht-1表示t-1 時刻的隱含狀態的輸出;xt表示t時刻的輸入;ht表示t時刻的隱含狀態的輸出;Wr、Wz和W表示權重矩陣;σ為sigmoid激活函數;tanh為雙曲正切激活函數。
因此,在t時刻,BiGRU 的前向輸出為htf,反向輸出為htb,將兩種特征表示拼接獲得最終的隱藏狀態ht,計算公式如下所示:

1.3.3 GCN編碼
本文在BERT編碼的基礎上,引入GCN編碼得到問答對的句法信息,與BiGRU 編碼的語義信息互補。GCN 是在卷積神經網絡的基礎上改進而來的,是一種直接提取依存分析圖上結構特征的模型[18]。依存分析圖由節點和邊組成。對于一個句子s=c1,c2,…,cn,設定有n個節點的依存分析圖。在本文中,依存分析圖的每個節點代表一個字,邊(i,j)代表第i個字和第j個字之間的依賴關系。并采用n×n的鄰接矩陣Aij表示圖結構,通常Aij=1 代表節點i到節點j之間存在邊。本文利用BERT 模型生成的特征向量作為依存分析圖的節點,將節點i與節點j的注意力權重用作衡量邊權重的大小,以區別不同的依賴關系。對于圖中每個節點,GCN通過該節點的附近其他節點的性質融合歸納得到該節點的特征表示向量,也就是,將每個節點鄰域內的相關信息編碼為一個新的表示向量。
在L層GCN中,表示輸入向量,表示節點i在第L層的輸出向量,具體的圖卷積操作如下式所示:

其中,W(l)是線性轉換,b(l)是偏置項,σ是非線性函數,Aij是鄰接矩陣。
問題和正確答案之間通常有相似的語義信息和語法結構,通過深度挖掘問答對之間的相似性,有助于找到最佳答案。本文的多注意力池化模塊主要作用是從語義特征和句法特征兩種不同語義空間上挖掘問答句中隱藏的相關性,其包括三個組成部分:多注意力交互層、池化層和平均化層。
1.4.1 多注意力交互層
本文先通過編碼層構建問答句的特征向量Q和A,再將Q和A傳入到多注意力交互層,進行語義特征和句法特征不同語義空間上的特征向量兩兩交互,由此構造注意力池化矩陣G,使問答對的向量表示包含豐富的語義特征和句法信息以及實現從多角度挖掘問答對的相關性。其計算公式如下:

其中,U是由神經網絡訓練得到的參數矩陣。
1.4.2 池化層
將多個注意力池化矩陣G傳入到池化層,分別作基于行的最大池化和基于列的最大池化,并生成不同的向量q和a。池化層的作用是采用最大池化的方式進一步提取句子中的重要信息[19]。向量q的第m個元素表示問題中的第m個字附近的上下文對答案影響的重要性,同樣地,向量a的第n個元素表示候選答案中的第n個字附近的上下文對問題影響的重要性。其計算公式分別如下所示:

其中,M表示問題的序列長度;L表示答案的序列長度。
接著,將向量q和a進行Softmax函數歸一化處理,分別轉化為注意力權重向量σq和σa。并將注意力權重向量σq和σa與神經網絡模型提取的特征向量Q和A相乘,得到問題和答案表示向量rq和ra。由此著重突出問答句中相關信息。具體計算公式如下:

1.4.3 平均化層
通過將不同rq和ra取平均值,得到最終的特征向量qmean和amean。
在問答對特征向量余弦相似度的基礎上,為了減小預訓練和Finetune的不一致性,增加由BERT的[CLS]預測得到問答對匹配概率值,作為最終匹配分數,從而判斷問答對的語義匹配程度。
本文利用余弦值大小有效評估問題和答案之間的語義相關性大小。余弦值越大,兩個句子的語義相關度越高。其計算公式如下:

該實驗依托于中文醫療自動問答任務中公開的數據集cMedQA[20]。cMedQA數據集包括v1.0和v2.0兩個版本,表1是關于該數據集的概覽。兩種數據集均由訓練集、開發集和測試集三個部分組成。訓練集用于訓練模型,開發集用于調整模型參數,測試集用于評估模型的性能。在cMedQAv2.0 訓練集中,對于每一個問題qi,都有一個或幾個正確答案和幾十個不相關答案,由此共構成50 個問答對,所以,在訓練過程中共有500 萬個三元組輸入到網絡。對于開發集和測試集的每一個問題,目標是從由正確回答和不相關答案構成的100個候選答案中找出最佳答案,由此來評估模型性能的好壞。

表1 cMedQA數據集的概覽Table 1 Overview of cMedQA data set
實驗的硬件和軟件的配置保證著實驗的順利進行,本文實驗環境如表2所示。

表2 實驗環境配置Table 2 Experimental environment configuration
本文的BERT 模型使用了12 頭注意力機制的雙向Transformer,隱藏層有768維,其他詳細的超參數如表3所示。

表3 超參數設置Table 3 Hyperparameter settings
為了評估本文方法的有效性,選用了top-1 精度(ACC@1)作為評價指標[21]。top-k精度ACC@k是信息檢索中常用的一個評價標準,其計算公式如下所示:

其中,N表示開發集或測試集的樣本數目;表示為問題qi的某一個正確答案;1[?]為示性函數,即當且僅當函數表達式成立時,其值為1,否則為0。
與傳統信息檢索任務不同的是,自動問答任務的主要目的是找出與問題最匹配的答案。因此,本實驗采用ACC@1。即,ACC@1 值越大,表明模型回答問題的準確率越高,模型性能越好。
本文實驗共包括4 個部分:實驗1 通過與多種不同的基準模型進行對比研究,證明本文方法的優越性。實驗2設置不同超參數值,分析其對模型性能的影響。實驗3通過對本文方法中的各個模塊進行移除,觀察各個模塊的重要性。實驗4繪制問題和答案相關度熱力圖,進一步生動描述多注意力池化模塊的表現。
實驗1 模型對比。為了充分驗證本文方法的可靠性和有效性,本文分別選取了cMedQA v1.0和cMedQA v2.0公開數據集進行實驗,并將本文方法與當前主流的深度學習算法對比以驗證所提出算法性能的優越性。實驗結果如表4所示。
表4描述了在兩種公開數據集下,不同神經網絡的ACC@1 指標表現。宏觀來看,各個神經網絡模型在cMedQA v2.0 數據集的準確率與cMedQA v1.0 數據集的準確率相比均有提高。由此可見,訓練集樣本量的提高可以顯著提高準確率。

表4 多種網絡在兩種數據集下的實驗結果(ACC@1)Table 4 Experimental results of various networks under two data sets(ACC@1)%
在下文的實驗分析中,以cMedQA v1.0 的開發集和測試集為依據。表中前3 行是單個網絡模型的實驗結果,從實驗結果可以看出,BiGRU模型要優于CNN模型,但Multi-scale CNN 的ACC@1 最高,說明多尺度卷積神經網絡利用多個卷積核從字、詞和短語等不同粒度多方面學習問答對的語義信息。表中第4 行是BiGRU和CNN 組合的多模型網絡,無論與單個BiGRU 模型還是單個CNN 模型相比,多種模型組合的神經網絡都比單個模型的準確率高,說明多種不同模型可以從不同角度和維度全面捕捉句子復雜的內在語義特征。表中第5、6行是添加注意力池化機制的多模型組合網絡,從ACC@1 指標來看,引入多注意力池化機制的網絡模型可以掌握問答對之間的信息關聯,使得問答系統的性能有一定的提升。表中第7 行是目前中文醫療問答任務上效果最佳的方法,將本文所提方法與其相較,本文方法的開發集和測試集的ACC@1分別提高了0.45和0.25個百分點,主要因為本文方法集成多種不同功能的算法,不僅能提取問答句中的語義和語法結構信息,也能捕捉問答對之間的語義關系,具有一定的優越性。
同樣地,從表4中可以看出,對于cMedQAv2.0開發集來說,ACC@1 均高于其他基準模型;對于測試集來說,稍稍低于Crossed BERT Siamese BiGRU 網絡模型。由此可見,本文在沒有利用大量的中文醫療文本對BERT模型進行預訓練的前提下,也能取得較好的效果,這也證明了本文集成算法的優勢。
實驗2 參數設定。為了選擇合適的超參數,本文采用準確率作為評價指標,對比了6種不同學習率對本文方法的影響。實驗結果如圖3 所示。圖中橫坐標表示不同的學習率,縱坐標表示cMedQA v1.0 測試集的準確率。從圖3 可以看出,隨著學習率的變化,準確率表現出較大幅度的波動。當學習率為1E-5 時,模型的收斂性較好,準確率達到最大,為79.05%。當學習率過小或過大時,準確率均有所減小。由此可見,學習率的大小對模型性能具有一定的影響。

圖3 不同學習率對模型的影響Fig.3 Effect of different learning rate on model
接下來,固定其他超參數不變,調整不同BiGRU和GCN 的層數進行對照實驗,并分析兩者結構復雜度對模型性能的影響。本文在cMedQA v1.0 數據集上,進行了不同BiGRU 和GCN 層數的準確率變化的對比,具體結果如表5所示。

表5 不同BiGRU和GCN層數的實驗結果Table 5 Experimental results of different BiGRU and GCN layers
本文分別選用1 個、2 個、3 個BiGRU 和GCN 作為特征提取器。通過對比實驗,發現隨著網絡層數的加深,各個多層次復雜網絡的準確率有所降低。設置BiGRU層數為1 時,準確率最佳,主要因為利用單層BiGRU 可以獲取句子上下文的語義特征;層數設置為2和3時,準確率表現出下降,而且網絡的結構復雜度增加、訓練時間較長。同樣地,設置GCN層數為1時,準確率也最佳,其原理是通過單層GCN 將問答對文本轉化為節點構圖,不僅學習節點的文本信息,還通過句法屬性將文本關聯起來,更好地利用節點之間的鄰域信息。隨著GCN層數的增加,加深的網絡導致節點特征的平滑。因此,在考慮準確率的同時也考慮模型的復雜程度,本文選擇了1 層的BiGRU和GCN作為本文模型的最終參數。
實驗3 消融實驗。上文中,通過不同模型的對比,證實了本文方法的有效性。為了進一步解析本文方法的BiGRU、GCN以及Multi-Attentive Interaction(多注意力交互)對實驗結果的貢獻,本實驗在cMedQA v1.0 開發集和測試集的基礎上,進行了消融實驗。通過去除某個模塊與本文方法進行橫向對比,評估模塊的重要性。
表6 具體展現了本文方法中各個模塊的重要性。第1行是本文方法的實驗結果,2~5行分別是去除BiGRU、GCN 以及Multi-Attentive Interaction 模塊的實驗結果。整體上來看,所有模塊對本文的實驗結果都起著積極作用。當移除BiGRU,與本文方法相比,開發集和測試集ACC@1分別降低了2.9個百分點和3.2個百分點。說明利用BiGRU抽取句子級別的語義信息有很大意義。當移除GCN,發現開發集和測試集ACC@1 分別減少了2.9 和2.05 個百分點。說明通過GCN 模型學習句子的句法屬性,明顯優化了文本的語義表征。綜上所述,BiGRU模型和GCN模型能夠從不同角度和維度抽取文本的語義和句法信息,也進一步刻畫出BiGRU 模型和GCN模型所獲取信息的表現出互補關系。當移除Multi-Attentive Interaction 模塊,開發集和測試集CCA@1 也有所改變,分別減少了0.95 和0.4 個百分點。說明通過多注意力交互模塊將BiGRU 和GCN 輸出向量做進一步集成是有效的,能夠描述問答對的依賴關系,有助于改善實驗結果。

表6 消融實驗結果Table 6 Ablation experiment results
實驗4 實例分析。為了更直觀地展示多注意力交互模塊在中文醫療自動問答任務上的表現,本實驗借助于一個實例進行闡述。具體內容如圖4所示。圖4是關于問題和其正確答案相關度的熱力圖,清晰地刻畫了問題和答案相關性大小。圖中橫坐標代表的是正確答案,縱坐標代表的是問題。縱坐標的具體內容是“專業治療中樞性截癱的方法什么?病情描述(發病時間、主要癥狀等):男55 歲三十年前就有癥狀,肌張力高,勉強自理。雙膝蓋互相碰撞,腦核磁檢查示腦萎縮趨勢,走路不穩。醫院檢查確診為中樞性截癱,想問一下有沒有朋友知道中樞性截癱的特色治療法?”,橫坐標的具體內容是“指導意見:中樞性截癱的癥狀多種多樣,其中身體發硬,這是肌張力亢進的癥狀,在一個月時即可見到。如果持續4個月以上,可診斷為腦癱。如果您出現這種癥狀就一定要及時就醫,千萬不要拖延。”。由圖4 可知,問答句相對應的每個區域顏色深淺大有不同。顏色較淺區域表示問題和答案內容相關度較小,即通過多注意力交互模塊,分配了較少的注意力權重;而顏色較深區域表示問題和答案內容相關度較大,即通過多注意力交互模塊,分配了更多的注意力權重。具體的,患者提出的問題是中樞性截癱的治療方法是什么,問題中描述的癥狀如“肌張力高”“雙膝蓋互相碰撞”和“走路不穩”,也通常是由中樞性截癱引起的。答句針對患者的疾病給出了指導意見,其中包括符合患者描述的癥狀以及給出恰當建議。問答句之間存在緊密的相關性。從圖4 可以看出,問句出現的“中樞性截癱”和答句出現的“中樞性截癱”兩個詞匯對應區域顏色較深,并且問句中患者表現的癥狀與答句的癥狀描述相關性權重較大,這些區域顏色也較深。通過分析發現本文提出的多注意力交互模塊可以進一步學習問題和答案的相關性,因此有助于找到與問題匹配的目標答案。

圖4 問題和答案相關度熱力圖Fig.4 Question and answer correlation heat map
本文提出了融合語義及句法特征的多注意力交互的自動問答方法。首先,通過將問答句拼接輸入到BERT模型,學習問答句的高階語義信息和語義關聯度;其次,利用雙向門控循環單元編碼句子的全局語義特征,同時采用圖卷積神經網絡編碼句子的語法結構信息;然后,利用多注意力池化模塊實現問題和答案不同特征向量之間的集成,以對其進一步分配不同的注意力權重,著重突出問答對的共現特征。通過與多組不同神經網絡的實驗結果對比,發現本文方法有效優化了自動問答的準確率。證明了本文方法通過多種深度神經網絡的集成進一步改善了對中文醫療文本語義的表征和語義相關性的捕捉。
當然,本文也存在著不足,沒有利用海量的中文醫療文本對BERT 語言模型進行預訓練,讓BERT 模型對醫學領域文本有更好的語義表征能力。這也是下一步的工作,由此進一步增強特征向量對文本語義的表達和提高自動問答的準確率。