黃詩(shī)怡, 李繼云
(東華大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 上海 201620)
目前中國(guó)心血管病(CVD,cardiovascular disease)病人數(shù)量高達(dá)2.9億。隨著城市化進(jìn)程的加速,人口老齡化問題突出,及吸煙、身體活動(dòng)不足、不合理膳食等不良生活習(xí)慣的盛行,心血管病患病率持續(xù)居高不下,并呈現(xiàn)出上升趨勢(shì)。心血管病死亡率占據(jù)首位,2018年心血管病死亡分別占農(nóng)村、城市居民疾病死因的46.66%、43.80%[1]。心血管病住院總費(fèi)用快速增長(zhǎng),國(guó)家心血管病的負(fù)擔(dān)逐漸加重,心血管病已經(jīng)成為重大的公共衛(wèi)生問題。雖然國(guó)內(nèi)已經(jīng)展開一系列心血管病社區(qū)防治工作并取得一定的成效,心血管病醫(yī)療質(zhì)量也在不斷提高,但是隨著國(guó)民心血管病多個(gè)危險(xiǎn)因素的流行趨勢(shì)明顯,防治工作仍然面臨著嚴(yán)峻的挑戰(zhàn)[2]。
自動(dòng)問答系統(tǒng)作為互聯(lián)網(wǎng)時(shí)代信息獲取的一種有效途徑,為心血管病的防治帶來了新的機(jī)遇,成為進(jìn)一步加強(qiáng)心血管病知識(shí)普及的一種手段。自動(dòng)問答系統(tǒng)與書籍、海報(bào)、雜志等傳統(tǒng)的信息獲取方式不同,與傳統(tǒng)的搜索引擎也有所區(qū)別,目的在于提高信息獲取的效率,可以根據(jù)用戶提出的問句,直接返回精準(zhǔn)而簡(jiǎn)潔的答案。本文以現(xiàn)有的心血管病知識(shí)圖譜為數(shù)據(jù)支持,構(gòu)建一個(gè)基于KV-MemNN(key-value memory network)模型的心血管病自動(dòng)問答系統(tǒng),通過挖掘知識(shí)圖譜中有價(jià)值的信息,加速心血管病知識(shí)的普及。
本文使用的心血管病知識(shí)圖譜共包含1 173個(gè)實(shí)體,2 381組實(shí)體關(guān)系和實(shí)體屬性。實(shí)體包括心血管病、癥狀以及藥物;實(shí)體關(guān)系包括疾病與癥狀之間的關(guān)系、疾病與藥物之間的關(guān)系,在此分別定義為相關(guān)癥狀、常用藥物關(guān)系。一個(gè)以心肌梗塞為中心的知識(shí)圖譜示例,如圖1所示??芍环N疾病往往對(duì)應(yīng)多個(gè)相關(guān)癥狀關(guān)系、多個(gè)常用藥物關(guān)系。
為了確保知識(shí)圖譜的可用性,對(duì)其中的數(shù)據(jù)進(jìn)行檢查與修正。
(1)數(shù)據(jù)存儲(chǔ)于5個(gè).csv文件中,存在個(gè)別疾病名稱不一致的情況,需要統(tǒng)一修改為正確的名稱;
(2)個(gè)別疾病名稱與數(shù)據(jù)來源中的名稱不同,需要修正為數(shù)據(jù)來源中的名稱;
(3)該知識(shí)圖譜主要抽取自39健康網(wǎng)的疾病百科,又有部分其他來源的補(bǔ)充信息,存在少量表述方式的不一致,個(gè)別疾病與癥狀重名,但數(shù)量極少,影響不大,不作處理。此外,疾病的別名內(nèi)容比較復(fù)雜,除了包含傳統(tǒng)意義上的別稱,還可能包含疾病的父類、某種子類、某種特征等等,導(dǎo)致疾病的一些別名可能與其他疾病或癥狀重名,需要對(duì)冗余的別名進(jìn)行清理。為了完全避免部分別名與其他疾病或癥狀的重名問題,將一種疾病的所有別名作為一個(gè)整體看待。
處理后的知識(shí)圖譜以SPO三元組(subject, predicate, object)的形式統(tǒng)一存儲(chǔ),并用實(shí)體表保存疾病、藥物、癥狀三種實(shí)體。
圖1 以心肌梗塞為中心的知識(shí)圖譜示例
本文運(yùn)用Facebook AI研究院的Miller等人提出的KV-MemNN模型實(shí)現(xiàn)基于心血管病知識(shí)圖譜的自動(dòng)問答,這個(gè)過程主要分為兩部分:?jiǎn)柎饠?shù)據(jù)集構(gòu)建和自動(dòng)問答實(shí)現(xiàn)。問答數(shù)據(jù)集構(gòu)建為自動(dòng)問答提供了數(shù)據(jù)支撐,自動(dòng)問答實(shí)現(xiàn)則包含了最為關(guān)鍵的數(shù)據(jù)處理和模型計(jì)算過程。
問答數(shù)據(jù)集依賴于知識(shí)圖譜構(gòu)建。針對(duì)知識(shí)圖譜中的關(guān)系和屬性,設(shè)計(jì)不同類型的問句模板。已知知識(shí)圖譜中包含疾病與藥物之間的常用藥物關(guān)系、疾病與癥狀之間相關(guān)癥狀關(guān)系、疾病的別名屬
性,以此設(shè)計(jì)根據(jù)疾病查詢常用藥物、相關(guān)癥狀、別名三種類型的問句模板。為了進(jìn)一步豐富問句類型,對(duì)常用藥物、相關(guān)癥狀兩種關(guān)系進(jìn)行逆向拓展,得到藥物與疾病之間的依存關(guān)系、癥狀與疾病之間的依存關(guān)系,以此設(shè)計(jì)根據(jù)藥物查詢可治療疾病、根據(jù)多個(gè)癥狀排查疾病兩種類型的問句模板。問句模板通過39健康網(wǎng)、百度知道以及使用搜索引擎檢索到的相關(guān)網(wǎng)頁(yè)信息搜集整理所得,與知識(shí)圖譜中對(duì)應(yīng)的三元組進(jìn)行整合。
整合過程分為兩種情況:其一是問句模板與單個(gè)實(shí)體整合,以相關(guān)癥狀關(guān)系為例,由于一種疾病對(duì)應(yīng)多種癥狀,問句模板與同一種疾病的若干三元組進(jìn)行整合,得到的問句以多個(gè)癥狀為答案;其二是問句模板與多個(gè)實(shí)體整合,只應(yīng)用于相關(guān)癥狀的逆向關(guān)系,找到多個(gè)癥狀所對(duì)應(yīng)的共同疾病,將問句模板與這些癥狀進(jìn)行整合,得到的問句以共同疾病為答案。
問答數(shù)據(jù)集由五種問答數(shù)據(jù)整合,最終得到13 062組問答數(shù)據(jù),每種問答數(shù)據(jù)以大約8∶1∶1的比例分別作為訓(xùn)練集、驗(yàn)證集、測(cè)試集。訓(xùn)練集中包含所有問答模板。
自動(dòng)問答基于KV-MemNN模型來實(shí)現(xiàn)。KV-MemNN模型建立于Weston等人的記憶網(wǎng)絡(luò)和Sukhbaatar等人的端對(duì)端記憶網(wǎng)絡(luò)的基礎(chǔ)之上,其體系結(jié)構(gòu)如圖2所示。模型將數(shù)據(jù)源中的內(nèi)容存儲(chǔ)于結(jié)構(gòu)為(鍵,值)的記憶中,從而為知識(shí)源的編碼提供了更大的靈活性,使得模型能通過鍵來尋找與問題相關(guān)的記憶,并得到這些記憶相對(duì)應(yīng)的值。因此,鍵的設(shè)計(jì)應(yīng)該包含與問題匹配的特征,值的設(shè)計(jì)應(yīng)該包含與答案匹配的特征。
圖2 模型的體系結(jié)構(gòu)
本文以心血管病知識(shí)圖譜作為模型的數(shù)據(jù)源,自動(dòng)問答實(shí)現(xiàn)的步驟如下:
步驟1對(duì)問句進(jìn)行預(yù)處理,包括問句分詞和去停用詞。問句分詞以實(shí)體表為輔助,在預(yù)先完成實(shí)體匹配的基礎(chǔ)上進(jìn)行。因?yàn)榧膊 ⑺幬?、癥狀3種實(shí)體名稱中專有名詞比較多,并且長(zhǎng)短不一,直接分詞可能造成混亂,從而導(dǎo)致問句原意完全改變,而這種方法可以避免這些名詞對(duì)分詞的干擾,保證準(zhǔn)確識(shí)別出問句中的所有實(shí)體。本文選用哈工大LTP進(jìn)行分詞,所得結(jié)果可以滿足分詞的需求。問句的停用詞包括標(biāo)點(diǎn)符號(hào)、語氣詞、以及“請(qǐng)問”、“目前”等對(duì)問答過程不造成影響的短語。
步驟2數(shù)據(jù)的向量表示。首先,構(gòu)建一個(gè)詞匯表,本文的詞匯表由知識(shí)圖譜以及訓(xùn)練集中的詞匯組成,以詞匯的出現(xiàn)頻數(shù)倒序排列,預(yù)留空字符處于排列首位;其次,以各個(gè)詞匯在詞匯表中的位置作為索引id,將知識(shí)圖譜和訓(xùn)練集、驗(yàn)證集、測(cè)試集中的文本信息轉(zhuǎn)換為數(shù)值形式,使得知識(shí)圖譜的三元組、問答數(shù)據(jù)集的問句與答案,均能夠使用向量形式來表達(dá)。知識(shí)圖譜中的三元組轉(zhuǎn)換為鍵-值對(duì)形式,即向量(k1,v1),…,(kM,vM),作為模型的記憶。鍵由SPO三元組中的subject和predicate組成,值用object來表示,使得鍵與值分別包含與問句、答案匹配的特征。
步驟3Key hashing,也就是找出所有與問句有關(guān)的記憶。首先,借助知識(shí)圖譜,構(gòu)建實(shí)體與其相關(guān)記憶之間的哈希表;其次,以問句中的實(shí)體為媒介,找出與各個(gè)實(shí)體相關(guān)的記憶(kh1,vh1),…,(khN,vhN)。
步驟4訓(xùn)練部分。首先是Key addressing和Value reading的迭代過程。在尋址階段計(jì)算問句與相關(guān)記憶中每個(gè)鍵的相關(guān)性評(píng)分,公式(1):
phi=Softmax(A?X(x)·A?K(khi)).
(1)
其中,?.表示D維特征映射,A是一個(gè)d×D的特征矩陣。在讀取階段,以相關(guān)性評(píng)分為權(quán)重,對(duì)值加權(quán)求和,得到一個(gè)輸出向量o,公式(2):
o=∑iphiA?V(vhi).
(2)
假定q=A?X(x),使用輸出向量o對(duì)其更新,本文采用的是qj+1=Rj(qj+o)+bj,其中R、b分別為d×d、d×1的矩陣,則尋址階段的公式修改為公式(3):
(3)
然后是結(jié)果預(yù)測(cè)。經(jīng)過H輪迭代后得到的預(yù)測(cè)結(jié)果為式(4):
(4)
其中,yi代表所有候選輸出,本文中B的取值與A保持一致。
模型通過Adam優(yōu)化算法來最小化交叉熵?fù)p失,從而實(shí)現(xiàn)模型中矩陣A、B、R1,…,RH以及b1,…,bH的更新。訓(xùn)練過程使用若干個(gè)epoch,每個(gè)epoch對(duì)訓(xùn)練集中的問答數(shù)據(jù)進(jìn)行一輪訓(xùn)練,如果一個(gè)問答數(shù)據(jù)中包含多個(gè)答案,則問答數(shù)據(jù)分為多個(gè)訓(xùn)練數(shù)據(jù)依次進(jìn)行訓(xùn)練。驗(yàn)證集中的問答數(shù)據(jù)用于評(píng)估最佳模型,即準(zhǔn)確率最高的模型,準(zhǔn)確率的評(píng)估標(biāo)準(zhǔn)是所有候選答案中排名首位的預(yù)測(cè)答案是否正確。
最終模型在d=230,Hops=5時(shí)取得,對(duì)測(cè)試集的評(píng)估結(jié)果見表1。從評(píng)估結(jié)果可知,對(duì)于大多數(shù)問答數(shù)據(jù)排名首位的預(yù)測(cè)結(jié)果是準(zhǔn)確的,并且無論是單個(gè)或是多個(gè)答案的問答數(shù)據(jù),各個(gè)答案的相關(guān)排名都是比較靠前的。
表1 評(píng)估結(jié)果
對(duì)測(cè)試集中的五種問答數(shù)據(jù)進(jìn)行分類評(píng)估,其結(jié)果見表2。已知前四種為多個(gè)答案的問答數(shù)據(jù),最后一種為單個(gè)答案的問答數(shù)據(jù),兩種數(shù)據(jù)都能得到較好的結(jié)果。此外,經(jīng)過對(duì)訓(xùn)練集、驗(yàn)證集、測(cè)試集多次數(shù)據(jù)分配可知,不同的數(shù)據(jù)分配會(huì)影響五種問答數(shù)據(jù)各自的結(jié)果,但是測(cè)試集的整體結(jié)果差異不大。
表2 五種問答數(shù)據(jù)評(píng)估結(jié)果
本文以面向心血管領(lǐng)域的知識(shí)圖譜為基礎(chǔ),構(gòu)建了心血管病問答數(shù)據(jù)集,實(shí)現(xiàn)了基于KV-MemNN模型的自動(dòng)問答系統(tǒng),使得心血管病知識(shí)圖譜能夠以更容易接受的方式服務(wù)于非醫(yī)學(xué)專業(yè)人員,對(duì)心血管病知識(shí)的傳播具有一定的意義。同時(shí)也存在一些不足之處需要優(yōu)化,其一是需要醫(yī)學(xué)專家的指導(dǎo)對(duì)知識(shí)圖譜進(jìn)行更加全面的檢查與錯(cuò)誤糾正;其二是知識(shí)圖譜的內(nèi)容不夠豐富,有待進(jìn)一步擴(kuò)充;其三是問答數(shù)據(jù)集的模板庫(kù)還不夠廣泛,需要進(jìn)一步搜集;此處可以將預(yù)訓(xùn)練的詞向量應(yīng)用于模型,進(jìn)一步提高準(zhǔn)確率。