杜曾貞,唐東昕,解丹*
(1.湖北中醫(yī)藥大學(xué)信息工程學(xué)院,武漢 430065;2.貴州中醫(yī)藥大學(xué)第一附屬醫(yī)院,貴陽 550001)
問診是醫(yī)生診斷中極為重要的一環(huán),但在疫情期間,面對面的醫(yī)患溝通容易帶來醫(yī)患交叉感染的風(fēng)險(xiǎn),而智能問診的興起正是為了解決這一問題。在智能問診過程中可通過模擬醫(yī)生機(jī)器人與患者進(jìn)行簡單對話,以此減少醫(yī)務(wù)人員與感染者的接觸,為診療過程增添一道安全屏障,同時(shí)節(jié)約大量的醫(yī)療資源。在智能問診的過程中,醫(yī)生通常無法根據(jù)患者所說的一句話確定其患病信息,可能需要主動(dòng)反問來明確患者的意圖。醫(yī)生通過評估患者闡述的可信度,決定是回答患者的問題還是向患者提出反問以弄清他們的需求。選擇合適的反問對于提升醫(yī)患對話效率尤為重要,既可以減少醫(yī)生的診斷時(shí)間,又可提高患者的就診效率。表1 顯示了一個(gè)常見的醫(yī)患問診對話實(shí)例,可以看到在第2 輪和第3 輪的對話中,醫(yī)生并未對患者的咨詢作出回答,而是提出了一個(gè)反問。本文旨在研究面對患者的提問時(shí),醫(yī)生如何提出反問,包括確定是否需要提出問題,以及提出怎樣的反問。
表1 醫(yī)患問診對話實(shí)例Tab.1 Question-answer example between a doctor and a patient
本文以“春雨醫(yī)生”(https://www.chunyuyisheng.com)中的問答對話作為數(shù)據(jù)源,抓取了10 萬余個(gè)醫(yī)患問答,提出了一個(gè)面向智能問診的基于深度神經(jīng)網(wǎng)絡(luò)的方法來解決醫(yī)生反問生成問題,一共包括回答分類、問題觸發(fā)、反問生成和評估4 個(gè)環(huán)節(jié)。在進(jìn)入主流程前首先要建立數(shù)據(jù)集,分為數(shù)據(jù)獲取和數(shù)據(jù)預(yù)處理兩個(gè)步驟?;卮鸱诸愂菍︶t(yī)生在對話中作出的陳述進(jìn)行分類,同時(shí)可以構(gòu)造進(jìn)行問題觸發(fā)和反問生成所需要的數(shù)據(jù)集。良好的對話是有前瞻性的,在問題觸發(fā)部分,使用不同的對話選取方式來判斷醫(yī)生是否需要提出問題,提出的問題應(yīng)充分考慮了醫(yī)患之間的對話。反問生成是在醫(yī)生需要提問時(shí)選擇合適方法提出一個(gè)問題,本文不考慮醫(yī)生需要回答的情況。評估則是對生成的反問結(jié)果進(jìn)行綜合評價(jià),具體流程如圖1 所示,其中,文本循環(huán)神經(jīng)網(wǎng)絡(luò)(Text Recurrent Neural Networks,TextRNN)表示基于長短期記憶(Long Short-Term Memory,LSTM)網(wǎng)絡(luò)的分類模型,雙向文本循環(huán)神經(jīng)網(wǎng)絡(luò)(Text Recurrent Neural Network-BLSTM,TextRNN-B)表示基于雙向長短期記憶(Bi-directional Long Short-Term Memory,BLSTM)網(wǎng)絡(luò)的分類模型。
圖1 反問生成流程Fig.1 Flowchart of rhetorical question generation
2020 年伊始,新型冠狀病毒肺炎在全國范圍內(nèi)爆發(fā),各地的疾控機(jī)構(gòu)紛紛開啟線上醫(yī)療咨詢服務(wù)[1],為此暴露出了一些問題:醫(yī)生全天超負(fù)荷工作仍無法滿足問診的需求量;患者的表述不清,造成了醫(yī)生接診效率低下等問題,所以,建立一個(gè)高效的智能問診平臺(tái)成為了疫情期間的剛需。
醫(yī)患問答在診療過程中是不可或缺的環(huán)節(jié),醫(yī)生通過問答了解患者的病情并進(jìn)行診斷。智能問答用計(jì)算機(jī)來模擬人,讓機(jī)器通過對人類語言的分析,自動(dòng)回復(fù)用戶所詢問的問題[2]。當(dāng)前在互聯(lián)網(wǎng)大環(huán)境下已經(jīng)出現(xiàn)了越來越多的智能問答應(yīng)用,比如以互聯(lián)網(wǎng)語料和用戶的聊天日志數(shù)據(jù)為基礎(chǔ)的微軟“小冰、小娜、Rinna、Ruuh”等,蘋果手機(jī)里的Siri 以及用戶搜索日志為基礎(chǔ)的百度語音助手等[3]。相比之下,醫(yī)學(xué)領(lǐng)域智能問答研究起步較晚,由于醫(yī)生具有很強(qiáng)的專業(yè)知識,用計(jì)算機(jī)來模擬醫(yī)生,在實(shí)現(xiàn)上具有一定困難,目前仍處于探索發(fā)展階段。國外醫(yī)學(xué)領(lǐng)域的問答系統(tǒng)有基于傳統(tǒng)檢索技術(shù)的問答系統(tǒng)MedQA(Medical Question Answering)[4]、AskHERMES[5],以及基于語義技術(shù)的問答系統(tǒng)MEANS[6]、AskCuebee[7]等。隨著醫(yī)學(xué)問答領(lǐng)域的發(fā)展,研究人員也逐漸開始對中文問答系統(tǒng)進(jìn)行研究,例如Yin 等[8]通過提取互聯(lián)網(wǎng)上的數(shù)據(jù)為有健康需求的人開發(fā)了問答系統(tǒng);田迎等[9]發(fā)明了基于知識圖譜的自動(dòng)問答系統(tǒng),可以有效回答抑郁癥相關(guān)問題。疫情爆發(fā)后,喬宇等[10]研發(fā)了智能問答機(jī)器人系統(tǒng),應(yīng)用于疫情期間的公眾咨詢;湯人杰等[11]研究了基于醫(yī)療知識圖譜的智能輔助問診,可以在疫情期間做到無接觸問詢,實(shí)時(shí)響應(yīng)。另外,國內(nèi)還出現(xiàn)了一些比較有名的醫(yī)學(xué)信息服務(wù)類網(wǎng)站,如尋醫(yī)問藥網(wǎng)、快速問醫(yī)生等,但中文醫(yī)學(xué)問答系統(tǒng)研究仍然占比較少。本文主要研究中文語言環(huán)境下醫(yī)學(xué)領(lǐng)域的智能問答。
反問生成過程中醫(yī)生向患者提問的過程與神經(jīng)機(jī)器翻譯中的翻譯過程原理相似。神經(jīng)機(jī)器翻譯的研究已經(jīng)得到了自然語言處理(Natural Language Processing,NLP)界的廣泛關(guān)注,它通過構(gòu)建復(fù)雜的神經(jīng)網(wǎng)絡(luò),運(yùn)用大量的語料訓(xùn)練,使得該網(wǎng)絡(luò)能夠?qū)崿F(xiàn)上下文的精確翻譯[12]。目前,較為著名的神經(jīng)機(jī)器翻譯項(xiàng)目有:谷歌公司開源的基于TensorFlow的神經(jīng)翻譯網(wǎng) 絡(luò)(Google’s Neural Machine Translation,GNMT)[13]、Facebook AI 研究院開源的基于卷積神經(jīng)網(wǎng)絡(luò)的神經(jīng)機(jī)器翻譯模型Fairseq[14]以及由Yoon Kim 和哈佛大學(xué)自然語言處理研究組開發(fā)的開源神經(jīng)機(jī)器翻譯(Open-Source Neural Machine Translation,OpenNMT)框架[15]。由周海林等[16]對谷歌神經(jīng)機(jī)器翻譯質(zhì)量現(xiàn)狀的分析發(fā)現(xiàn),GMNT 系統(tǒng)在翻譯時(shí)出現(xiàn)的問題較多,比如只翻譯出了字面含義而沒有結(jié)合整個(gè)句子的含義、句子理解錯(cuò)誤而導(dǎo)致翻譯出錯(cuò)以及出現(xiàn)漏譯原文的情況;而Fairseq 實(shí)現(xiàn)的模型已被包含在OpenNMT 提供的預(yù)置模型里[14]。另外,牛向華等[17]使用蒙漢平行數(shù)據(jù)在開源系統(tǒng)OpenNMT 上訓(xùn)練的效果較好。因此本文將利用OpenNMT 模型進(jìn)行反問生成。
回答分類是為了解決分類問題,可以采用常見的分類算法TextRNN 和TextCNN 等。對于TextRNN,在對每個(gè)單詞進(jìn)行矢量化后,單詞向量進(jìn)入LSTM 層,這里使用標(biāo)準(zhǔn)LSTM。每個(gè)LSTM 單元的隱藏層輸出作為輸入傳遞到平均池層。平均池運(yùn)算可以用來平均LSTM 單元輸出的隱藏層狀態(tài),從而獲得統(tǒng)一的語句特征表示。通過Softmax 分類層得到類別分布概率向量,并以概率值最高的類別作為最終的預(yù)測結(jié)果[18]。另外,標(biāo)準(zhǔn)LSTM 也可以替換為BLSTM,其基本思想是將每個(gè)序列向前和向后呈現(xiàn)為兩個(gè)單獨(dú)的隱藏狀態(tài),以分別獲得過去和未來的信息[19],如圖2 所示。
圖2 TextRNN-B基本流程Fig.2 Basic flowchart of TextRNN-B
對于TextCNN,在卷積層,使用不同大小的卷積核,卷積得到的feature maps 會(huì)具有不同的向量維度,因此在池化層中,可以使用1-max-pooling 方法通過提取每個(gè)feature map 中的最大值來表征該特征向量。將每個(gè)特征向量經(jīng)過1-maxpooling 池化得到的值拼接起來,即為池化層最終的輸出向量。在進(jìn)入全連接層(Fully Connected layer,F(xiàn)C)之前,需要進(jìn)行Dropout 操作來避免過擬合。全連接層設(shè)置可以參照傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò),第1 層采用ReLU(Rectified Linear Units)作為激活函數(shù),第2 層則使用Softmax 分類函數(shù)來進(jìn)行分類[20]。
盡管TextRNN 和TextCNN 已經(jīng)取得了很新的研究成果,但多義性等問題也帶來了很多限制[21]。雙向變形編碼器(Bidirectional Encoder Representation from Transformers,BERT)是最近提出的一種語言預(yù)訓(xùn)練模型[22],是近年來最成功的文本分類深層神經(jīng)網(wǎng)絡(luò)模型之一。該模型使用雙向Transformer 模型結(jié)構(gòu)對大型的未標(biāo)記語料庫進(jìn)行預(yù)訓(xùn)練,然后通過對下游任務(wù)進(jìn)行微調(diào)的方式在一些NLP 任務(wù)(例如分詞、命名實(shí)體識別、情感分析和問題解答)上展現(xiàn)模型優(yōu)異性能[23]。包括兩個(gè)階段:首先,BERT 對大量文本進(jìn)行預(yù)訓(xùn)練,無監(jiān)督的目標(biāo)是進(jìn)行語言建模和下一句預(yù)測;接下來,預(yù)先訓(xùn)練好的網(wǎng)絡(luò)會(huì)在特定任務(wù)的標(biāo)記數(shù)據(jù)上進(jìn)行微調(diào)[24]。
在使用BERT 進(jìn)行文本分類的過程中,BERT 模型首先會(huì)對輸入進(jìn)行編碼,轉(zhuǎn)為模型需要的編碼格式,使用輔助標(biāo)記符[CLS]和[SEP]來表示句子的開始和分隔,然后根據(jù)輸入得到對應(yīng)的詞向量。得到整體的詞向量后,應(yīng)用單句分類模型進(jìn)行學(xué)習(xí),如圖3 所示,最終根據(jù)Softmax 分類器得到結(jié)果。
圖3 使用BERT處理的單句分類模型Fig.3 Single sentence classification model with BERT
開源神經(jīng)機(jī)器翻譯是一種用于機(jī)器翻譯的方法,為了提高效率、可讀性和通用性,它已經(jīng)被完全重寫。該技術(shù)已經(jīng)成為自然語言處理領(lǐng)域的一種有效方法,運(yùn)用在對話、句法分析、摘要等領(lǐng)域。OpenNMT 中的序列到序列(Sequence to Sequence,Seq2Seq)模型適用于端到端開放域的對話生成[25]。例如,Qiu 等[26]在Seq2Seq 基本體系結(jié)構(gòu)的基礎(chǔ)上,進(jìn)行各種擴(kuò)展,以解決安全響應(yīng)問題;Serban 等[27]為多回合的對話建立模型,可以用于任何具有層次結(jié)構(gòu)的序列生成任務(wù);Li 等[28]建立強(qiáng)化學(xué)習(xí)模型以產(chǎn)生與人類產(chǎn)生的對話無法區(qū)分的響應(yīng)序列,生成開放域?qū)υ?。因此,使用基于Seq2Seq的OpenNMT 模型進(jìn)行反問生成。
OpenNMT 使用Seq2Seq 呈現(xiàn)一個(gè)單詞序列到另一個(gè)單詞序列的神經(jīng)機(jī)器轉(zhuǎn)換。通過對概率進(jìn)行建模來獲取翻譯的條件語言建模視圖,給定源句子x1:S的目標(biāo)句子w1:T的概率為,其中分布用θ參數(shù)化。使用基于注意力的編碼?解碼器架構(gòu)來估計(jì)這種分布[15]。源編碼器循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)將每個(gè)源字映射到一個(gè)字向量,并將其處理成一系列隱藏向量h1,h2,…,hS。目標(biāo)解碼器將 之前生成的單 詞(w1,w2,…,wt-1)的RNN 隱藏表示與源隱藏向量相結(jié)合,以預(yù)測每個(gè)可能的下一個(gè)單詞的分?jǐn)?shù)。然后使用Softmax 層來產(chǎn)生下一個(gè)字分布p(wt|w1:t-1,x;θ)。源隱藏向量通過一個(gè)池化層來影響分布,該層根據(jù)每個(gè)源詞對目標(biāo)預(yù)測進(jìn)行加權(quán)。為了使訓(xùn)練語料的負(fù)對數(shù)似然最小化[29],對整個(gè)模型進(jìn)行了端到端的訓(xùn)練,展開的網(wǎng)絡(luò)如圖4 所示。
圖4 神經(jīng)機(jī)器翻譯原理Fig.4 Principle of neural machine translation
3.1.1 數(shù)據(jù)獲取
原始的醫(yī)患問答對話文本來自醫(yī)患交流平臺(tái)——“春雨醫(yī)生”上的問答論壇。論壇分為14 個(gè)一級科室,每個(gè)一級科室下分有若干個(gè)二級科室,并帶有疾病分類。為了盡可能多地理解不同疾病情境下的語義環(huán)境,本文抓取了一級和二級科室對應(yīng)的經(jīng)典問答對話,共計(jì)100 210 個(gè)對話,將數(shù)據(jù)集命名為D-P QA。每個(gè)問答對都包括醫(yī)生與患者之間的一輪或幾輪對話。圖5 展示了某個(gè)醫(yī)患對話的部分內(nèi)容。
圖5 問答論壇中的醫(yī)患對話實(shí)例Fig.5 QA example between a doctor and a patient on QA forum
3.1.2 數(shù)據(jù)預(yù)處理
傳統(tǒng)的中文文本處理通常需要?jiǎng)h除停用詞來減少文本冗余,但本文并沒有刪除停用詞,原因在于問題表達(dá)的特殊性。停用詞是問題中非常重要的部分,若刪除“呢”和“嗎”這類停用詞,將對問題分類造成影響。對于D-P QA 進(jìn)行處理時(shí),刪除了少于一輪的問答和被認(rèn)為無效的對話,例如某些對話沒有談及與病情相關(guān)的內(nèi)容。在刪除冗余空間和重復(fù)數(shù)據(jù)后最終剩余91 047 個(gè)對話。
3.2.1 機(jī)器評估
回答分類和問題觸發(fā)主要解決分類問題。使用準(zhǔn)確率Accuracy 來評估TextCNN 和TextRNN 模型,在分類實(shí)驗(yàn)中應(yīng)該盡量實(shí)現(xiàn)更高的準(zhǔn)確率,減小錯(cuò)誤迭代的可能性。為了在長句中獲得更好的分類效果,在問題觸發(fā)環(huán)節(jié)將TextRNN 模型中的標(biāo)準(zhǔn)LSTM 替換為BLSTM 單元,其模型稱為BLSTMQuD,用F1-micro、F1-macro 和Accuracy 這3 個(gè)指標(biāo)來評估其有效性。基于BERT 的分類模型稱為BERT-QuD,用兩個(gè)指標(biāo)來評估其有效性:F1 和Accuracy。在問題生成實(shí)驗(yàn)中使用雙語評估替補(bǔ)(Bilingual Evaluation Understudy,BLEU)[30]和困惑度(Perplexity,PPL)[31]兩個(gè)評測指標(biāo)。BLEU 具有語言獨(dú)立性、易計(jì)算性,可以表明一個(gè)句子的詞匯、短語順序的準(zhǔn)確性;PPL 的值與句子長度無關(guān),可以用來評估任何長度的句子的合理性[32]。
3.2.2 人工評價(jià)
在自然語言生成中,由于沒有統(tǒng)一的評估模型,因此在問題生成實(shí)驗(yàn)中除了進(jìn)行機(jī)器自動(dòng)評估,還需與人工評價(jià)相結(jié)合。
隨機(jī)選取每種方式產(chǎn)生的500 個(gè)問題,連同上下文分配給多位評委。按照0~3 分的打分標(biāo)準(zhǔn):0 分表示得到的句子不是反問句;1 分表示生成的句子是一個(gè)反問句,但不符合上下文語境;2 分是指生成的句子是一個(gè)反問句且能很好地表達(dá)語義關(guān)系;3 分是指生成的句子是一個(gè)具有語境關(guān)聯(lián)性的問題,并且表達(dá)非常準(zhǔn)確。最后計(jì)算出平均分,得分越高表示生成的問句質(zhì)量越好。
在問題分類中,使用Python 開源的Gensim 工具,選擇Skip-gram 算法來訓(xùn)練100 維Word2vec 模型,最終得到9 086個(gè)漢字(包括漢字、數(shù)字、標(biāo)點(diǎn)符號等)的詞向量表示,并將其應(yīng)用到TextRNN 和TextCNN 模型中,優(yōu)化算法為Adam,隱藏層大小為100。
在BLSTM-QuD 模型中,直接使用已有的詞向量代替獨(dú)立訓(xùn)練所需要的詞向量,使用的中文詞向量已經(jīng)通過各種不同的表示(密集和稀疏)、上下文特征(單詞、N-Gram、字符等)和Wikipedia zh 的語料庫進(jìn)行了訓(xùn)練,是一個(gè)300 維的352 217 個(gè)漢字的詞向量表示。在BERT-QuD 模型中,采用Google 提供的BERT-Base 預(yù)訓(xùn)練模型。BERT-Base 模型一共12 層,有768 個(gè)隱單元,12 個(gè)Attention head,110 MB 個(gè)參數(shù)。在本文的醫(yī)患問答中,使用6 種不同的選取方式來模擬問題觸發(fā)的情景。第一種方式稱為Window-top,是選取醫(yī)生所說的每個(gè)問題前的所有問答作出判斷;第二種方式稱為Window-last-q,是選取醫(yī)生所說的每兩個(gè)問題(包括后一個(gè)問題)之間的所有問答內(nèi)容作出判斷;另外四種方式是分別選取每個(gè)問題前的1 個(gè)、3 個(gè)、5 個(gè)和10 個(gè)問答內(nèi)容作出判斷,稱為Window-1、Window-3、Window-5、Window-10,選取到的所有問答內(nèi)容均不包括當(dāng)前的問題。最后在醫(yī)生提出問題的地方標(biāo)記“Y”標(biāo)簽,在醫(yī)生作出回答的地方標(biāo)記“N”標(biāo)簽。采用這六種選取方式后,分別得到28 萬、28 萬、30 萬、28萬、24 萬和24 萬個(gè)數(shù)據(jù),其中2 萬個(gè)數(shù)據(jù)作為測試集,1 萬個(gè)數(shù)據(jù)作為驗(yàn)證集,剩余數(shù)量的數(shù)據(jù)集作為訓(xùn)練集。
在問題生成模型的OpenNMT 框架中,網(wǎng)絡(luò)參數(shù)如下:編碼?解碼器為Transformer,編碼器類型為雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(Bi-directional Recurrent Neural Network,BRNN),RNN 類型為門循環(huán)單元(Gate Recurrent Unit,GRU),字向量大小為200,編碼?解碼器層數(shù)為2,RNN 大小為200,批大小為8。
由于原始數(shù)據(jù)集中沒有分類標(biāo)簽,因此第一步工作是在數(shù)據(jù)集中創(chuàng)建分類標(biāo)簽。通常,在醫(yī)患問答中,患者是提出問題的人,而醫(yī)生作出陳述。本文關(guān)注的是醫(yī)生的陳述,因此不對患者所說的話進(jìn)行分類。醫(yī)生在對話中的任何陳述可被視為一個(gè)分類問題,被分為兩類,一類是問句(即反問),一類是回答。然而,在問答中,并不是所有的問句都以問號結(jié)尾,所以有必要先對醫(yī)生的回答進(jìn)行分類。一旦在對話中找到問題的標(biāo)簽,就會(huì)檢測出問題在對話中的位置(稱為問題觸發(fā)),并使用OpenNMT 模型生成反問。
3.4.1 回答分類
對于數(shù)據(jù)集數(shù)量的選取,分別選用1 000、2 000、5 000、10 000、20 000、30 000 這幾種不同的數(shù)值進(jìn)行測試,選擇所得準(zhǔn)確率最高的數(shù)值作為數(shù)據(jù)集數(shù)量。實(shí)驗(yàn)如下:在數(shù)據(jù)集中隨機(jī)選取相應(yīng)數(shù)值的醫(yī)生所說的句子,人工標(biāo)注句子的類型。例如,在表1 中,“孩子是兩個(gè)眼睛視力不好還是一只呢?”是一個(gè)問題,將其歸類為“Q”;“弱視是指視力要比健康眼差?!笔且粋€(gè)回答,將其歸類為“A”。然后使用TextCNN 和TextRNN 方法對醫(yī)生所說的話進(jìn)行分類,準(zhǔn)確率見表2。
表2 不同數(shù)據(jù)集選取的準(zhǔn)確率測試結(jié)果 單位:%Tab.2 Accuracy test results of different selected datasets unit:%
由表2 的數(shù)據(jù)可以看出,當(dāng)選取10 000 個(gè)句子進(jìn)行實(shí)驗(yàn)時(shí),準(zhǔn)確率最高,因此選取10 000 個(gè)醫(yī)生所說的話,使用TextCNN 和TextRNN 方法對其進(jìn)行分類,準(zhǔn)確率分別為89.20%和96.00%。使用TextCNN 進(jìn)行分類的失敗實(shí)例中,“說你身上有單純皰疹病毒?”(例①)與“是不是尖銳濕疣?你要發(fā)照片過來看。”(例②)這兩句話本應(yīng)被分為“Q”類,但TextCNN 將它們分為“A”類。在進(jìn)行分類時(shí),如果包含兩個(gè)句子(例②),其中只有一個(gè)是問題,那么整個(gè)句子也應(yīng)被分為“Q”類?;蛟S在停用詞不明顯(例①)或者在問題之后有一個(gè)非問題的情況下(例②),TextCNN 無法準(zhǔn)確分類,而同樣的問題在使用TextRNN 方法時(shí)沒有出現(xiàn)。因此,選用TextRNN 方法對整個(gè)數(shù)據(jù)集中醫(yī)生所說的句子進(jìn)行分類。最后得到一個(gè)帶標(biāo)簽的數(shù)據(jù)集,其中,每個(gè)對話至少有兩輪,平均每個(gè)對話有十輪,每個(gè)對話至少有一個(gè)反問。
3.4.2 問題觸發(fā)
在回答分類后需要確定在何種情況下醫(yī)生會(huì)提出反問。分別使用Window-top、Window-last-q、Window-1、Window-3、Window-5 和Window-10 這六種選取方式,基于BLSTM-QuD和BERT-QuD 兩種分類模型進(jìn)行實(shí)驗(yàn),結(jié)果見表3。從表3實(shí)驗(yàn)結(jié)果來看,使用BERT-QuD 模型總體比使用BLSTM-QuD模型的準(zhǔn)確率高。實(shí)驗(yàn)結(jié)果表明,與傳統(tǒng)的詞向量相比,BERT 預(yù)訓(xùn)練模型能更好地表達(dá)詞的語義信息。其次,基于BERT-QuD 模型且使用Window-last-q 方式的準(zhǔn)確率更高。這表明,醫(yī)患問答中醫(yī)生根據(jù)其所說的每兩個(gè)問題之間的所有問答內(nèi)容更容易提出問題。
表3 基于六種選取方式的問題觸發(fā)檢測結(jié)果對比Tab.3 Comparison of question trigger detection results based on six selection methods
3.4.3 反問生成
根據(jù)之前的內(nèi)容,已經(jīng)確定了醫(yī)生將在何種情況下提出反問,現(xiàn)將預(yù)測醫(yī)生提出的問題的內(nèi)容。分別使用六種選取方式(選取的問答內(nèi)容都包含了當(dāng)前的問題),將前一輪或幾輪問答和最后一個(gè)反問作為問答對運(yùn)用到OpenNMT 模型中進(jìn)行訓(xùn)練,用BLEU-1、BLEU-2、BLEU-4 和PPL 這幾個(gè)自動(dòng)評價(jià)指標(biāo)來評估。另外,對于對話生成,預(yù)測概率最高的問題并不是最終目標(biāo),能夠產(chǎn)生上下文相關(guān)、達(dá)到語義相關(guān)性才應(yīng)該是對話生成的真正目的,因此,選用兩位評委對生成的反問進(jìn)行人工評價(jià),并計(jì)算兩位評委打分的平均得分,如表4 所示。
表4 基于六種選取方式的反問生成結(jié)果對比Tab.4 Comparison of rhetorical question generation results based on six selection methods
從表4 可以看出,使用Window-top 方式所得到的PPL 最小,BLEU-1、BLEU-2、BLEU-4 均為最高。在人工評價(jià)結(jié)果中,雖然使用Window-last-q 方式得到3 分的比例最高,但是使用Window-top 方式所得的平均得分最高。另外,發(fā)現(xiàn)Window-1 方式優(yōu)于Window-3,Window-3 方式優(yōu)于Window-5,Window-5 方式優(yōu)于Window-10,表明上文越短(“長短”指對話次數(shù)的多少)結(jié)果越好;但使用Window-top 方式比Window-last-q 方式要好,這是因?yàn)楫?dāng)上文較短時(shí),模型能夠更好地抓住上文的中心語義,從而產(chǎn)生更合適的問題。但若上文過長,如采用Window-top 方式,則可以結(jié)合多方面的語義來考慮生成問題,從而使生成的反問更貼合現(xiàn)實(shí)。
由于Window-last-q 是最合適的問題觸發(fā)方式,現(xiàn)使用Window-last-q 和Window-top 方式在同一個(gè)對話中進(jìn)行具體實(shí)例的比較。兩個(gè)實(shí)例如表5 所示,從表5 可以看出,由于上文的長度(對話次數(shù))不同,使用Window-top 和Window-last-q兩種方式預(yù)測的問題的語義也有所不同。在實(shí)例1 中,使用Window-top 生成的問題更接近實(shí)際情況,但在實(shí)例2 中,使用Window-last-q 方法生成的問題更接近實(shí)際情況。
表5 反問生成的兩個(gè)實(shí)例Tab.5 Two examples of rhetorical question generation between a doctor and a patient
根據(jù)以上分析,可以提出假設(shè):如果是短上文,最好使用Window-top 方式生成問題;如果是一個(gè)包含五個(gè)或更多句子的長上文,則最好使用Window-last-q 方式生成問題。對于長上文,Window-last-q 方式效果更好,因?yàn)樗梢院雎耘c當(dāng)前問題無關(guān)的遠(yuǎn)處的噪聲,例如醫(yī)生在這種醫(yī)患問答環(huán)境中已經(jīng)建立的診斷。在實(shí)例2 中,由于最近的一句話證實(shí)了“弱視”的診斷,推斷它已經(jīng)持續(xù)了一段時(shí)間,所以沒必要使用Window-top方式生成問題。這是受醫(yī)生描述癥狀第一句話的噪聲影響,因?yàn)榘Y狀通常會(huì)被詢問其持續(xù)時(shí)間。這表明醫(yī)患問答中的醫(yī)生可以根據(jù)對話的長度來決定如何提出問題。
根據(jù)以上假設(shè),隨機(jī)選取1 000 個(gè)對話。一半的對話是短上文,少于5 個(gè)句子;另一半是長上文,多于5 個(gè)句子。使用Window-top 和Window-last-q 方式分別生成問題。然后進(jìn)行人工評價(jià),如果Window-top 方式比Window-last-q 方式更適合于預(yù)測問題,則得1 分,否則得0 分。結(jié)果如表6 所示,表明了短上文和長上文的得分占比。這初步證實(shí)了之前的假設(shè),即Window-top 方式適用于短上文語境下的問題生成,而Window-last-q 方式適用于長上文語境下的問題生成。但也有些反例,這些反例存在的原因有待進(jìn)一步研究。
表6 短上文與長上文的得分占比 單位:%Tab.6 Score proportion of short context and long context unit:%
本文提出了一個(gè)適用于智能問診的反問生成方法,該方法利用深度神經(jīng)網(wǎng)絡(luò)技術(shù)解決了醫(yī)生如何通過合理的反問來提高醫(yī)患對話效率的問題。在研究過程中,收集了一個(gè)醫(yī)學(xué)咨詢領(lǐng)域的大型中文對話數(shù)據(jù)集,使用BERT 來檢測問題觸發(fā),并使用OpenNMT 模型生成問題。還設(shè)計(jì)了六種問答選取方式來模擬對話語境,研究表明本方法有效可行,并且不同的問答選取方式對于反問生成質(zhì)量有較大影響。例如,當(dāng)考慮醫(yī)生所說的每兩個(gè)問題之間的所有問答內(nèi)容時(shí),適合觸發(fā)問題,考慮醫(yī)生所說的每個(gè)問題前的所有問答內(nèi)容時(shí)則更適合生成反問。這是因?yàn)樵谟|發(fā)問題時(shí)會(huì)考慮對話內(nèi)容的語義信息,在生成問題時(shí)會(huì)考慮已有對話內(nèi)容的長度。由于在醫(yī)患問答中病人信息的描述通常集中在第一句話,若不考慮初始描述去生成問題將會(huì)導(dǎo)致信息缺失的問題。值得一提的是,考慮對話上文的長度去選取合適的方式生成反問,更容易生成質(zhì)量好的問題。另外,在問題生成的結(jié)果中仍然存在泛化問題,比如在同一個(gè)對話中,不同的觸發(fā)問題位置生成的問題語義容易相似,從而導(dǎo)致對話效率低下,這些是今后將需要考慮的問題。