金季豪 黃越祈 劉旭利 高大啟
(華東理工大學(xué)信息科學(xué)與工程學(xué)院 上海 200237)
隨著醫(yī)療信息系統(tǒng)的廣泛應(yīng)用,諸多大型醫(yī)療機構(gòu)已經(jīng)積累了大量的電子病歷(Electronic Health Record,HER)數(shù)據(jù)。通過對這些電子病歷數(shù)據(jù)進行醫(yī)療統(tǒng)計分析,可以幫助臨床醫(yī)生進行臨床研究。對此,本文提出了基于依存關(guān)系的醫(yī)療自然語言統(tǒng)計問答,臨床醫(yī)生能夠直接使用自然語言提問,得到相應(yīng)的統(tǒng)計結(jié)果。
目前,對于自然語言統(tǒng)計型問答的研究仍相對較少,醫(yī)療統(tǒng)計問題也需要用到復(fù)雜的邏輯限制,如“服用百令膠囊和冬凌草片且沒有患有冠心病的肺癌患者的疾病分布是怎樣的?”,包含了與、非等邏輯限制。目前基于知識庫的問答工作,大量集中在類三元組的簡單問題上,不涉及復(fù)雜邏輯關(guān)系與數(shù)學(xué)計算。ESWC 2016針對統(tǒng)計型問答舉辦了基于RDF數(shù)據(jù)立方(RDF Data Cube)的評測競賽。該競賽的RDF數(shù)據(jù)使用3個維度來刻畫數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)相對簡單,對應(yīng)的評測問題也不需要復(fù)雜的邏輯限制。最近流行的自然語言查詢(NL2SQL)研究工作[1-3],由于SQL本身固有的特點,目前的任務(wù)大多都集中在單表查詢上,而本文的統(tǒng)計必定會涉及到概念之間的多對多關(guān)系。在本文作者之前的工作中[4],利用上下文無關(guān)文法進行自然語言問題到圖數(shù)據(jù)庫查詢語言(Cypher)的轉(zhuǎn)換,并返回對應(yīng)的查詢結(jié)果,可以表達豐富的業(yè)務(wù)需求。但由于自然語言表達非常豐富,文法規(guī)則越來越多,給從文法到Cypher的正確轉(zhuǎn)換帶來了困難。
為解決上述問題,本文通過基于轉(zhuǎn)移的依存關(guān)系生成方式(Transition-Based Parsing),并且利用基于Blending的融合模型,將自然語言問題轉(zhuǎn)換成對應(yīng)的依存關(guān)系樹,并將解析結(jié)果映射成語義表達式,然后翻譯得到Cypher查詢語句,最后返回查詢的結(jié)果。實驗表明,模型的UAS(Unlabeled Attachment Score)達到了96.45%,LAS(Labeled Attachment Score)達到了96.01%,系統(tǒng)的問題覆蓋率達到了81.61%。相較于端對端利用seq2seq的方式直接翻譯成查詢語言來講,本文的方法能夠更好地處理包含復(fù)雜邏輯結(jié)構(gòu)和時間先后關(guān)系的問題,而且在翻譯成查詢語言步驟時,可解釋性更強,并且可以對應(yīng)地改進翻譯策略,提高系統(tǒng)精度。同時,本文在文獻[4]的基礎(chǔ)上,能夠處理的問題句式更為靈活,具體本文共有以下幾點貢獻點:
(1) 本文針對醫(yī)療領(lǐng)域定義了電子病歷語義模型以及對應(yīng)的依存關(guān)系,能夠清晰完整地表述實體之間的語義關(guān)系,且可擴充性強,能處理的問題句式也更為靈活。
(2) 論文提出了基于神經(jīng)網(wǎng)絡(luò)與XGBoost的依存關(guān)系融合模型。實驗證明,本文所提出的模型,在UAS以及LAS這兩個評價指標(biāo)上,都比單模型的結(jié)果有了一定的提升。
(3) 本文通過基于轉(zhuǎn)換的方法,利用融合模型預(yù)測得到自然語言問題的依存關(guān)系樹,并將其映射至語義表達式上,接著通過啟發(fā)式規(guī)則將語義表達式翻譯成對應(yīng)的Cypher查詢語句。實驗證明本文的查詢正確率比現(xiàn)有方法有了一定的提升。
自然語言問答一直是自然語言處理研究的熱點之一。本文從早期的自然語言問答技術(shù)到基于知識庫的問答系統(tǒng)(KB-Based QA),再到面向統(tǒng)計關(guān)聯(lián)數(shù)據(jù)的問答系統(tǒng)再到面向自然語言的SQL轉(zhuǎn)化。
基于知識庫問答系統(tǒng)的傳統(tǒng)做法是語義解析[5-12]先將自然語言問題解析成邏輯表達式,再將邏輯表達式轉(zhuǎn)換為結(jié)構(gòu)化查詢語言,再通過查詢語言從知識庫查詢得到答案并返回其結(jié)果。文獻[11]利用整型線性規(guī)劃的方法來進行聯(lián)合消歧。文獻[12]為了更好地表示問題,提出了語義查詢圖概念,將問題簡化為子圖匹配查詢。利用這種方法,解決了歧義的問題,但是這種方法的搜索空間往往是指數(shù)級的,響應(yīng)速度緩慢。Joseph等[13]提出了一個系統(tǒng),可以輸入英文語句,然后將它們翻譯成XQuery表達式。Bais等[14]介紹了基于關(guān)系數(shù)據(jù)庫的機器學(xué)習(xí)方法在通用自然語言接口上的實現(xiàn)。
另一種基于知識庫的問答方法是將問題和答案轉(zhuǎn)換成向量表示,并比較兩個向量的相似度。隨著詞向量學(xué)習(xí)的普及,知識表示任務(wù)也隨之變得更加容易。早期如文獻[15-16]簡單地把問題用詞袋模型進行編碼,而在最近的工作中,利用了更多的結(jié)構(gòu)化信息。文獻[17]利用多層卷積神經(jīng)網(wǎng)絡(luò)從答案的路徑、答案的上下文和答案的類型三個方面來表示問題。
在面向統(tǒng)計關(guān)聯(lián)數(shù)據(jù)的問答系統(tǒng)方面,比較知名的是ESWC舉辦的QALD評測。QALD-6有一個任務(wù)是基于統(tǒng)計關(guān)聯(lián)數(shù)據(jù)的問答[18],該應(yīng)用場景與本文任務(wù)十分相似。但是,QALD-6任務(wù)中的查詢是基于RDF數(shù)據(jù)立方(RDF Data Cube),僅使用3個維度來刻畫數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)相對簡單,對應(yīng)的評測問題也不需要復(fù)雜的邏輯限制。對此,文獻[18]設(shè)計了CubeQA算法,在文獻[19]的基礎(chǔ)上,基于模板規(guī)則,在QALD6T3-test評測中得到了0.43的全局F1值。
在自然語言轉(zhuǎn)換為結(jié)構(gòu)查詢語言(SQL)方面,文獻[1]提出了一種將深度學(xué)習(xí)技術(shù)與傳統(tǒng)查詢解析技術(shù)平滑結(jié)合的新方法——編碼器-解碼器框架。文獻[2]提出了通過結(jié)合自然語言處理,程序綜合和自動程序修復(fù)來實現(xiàn)從自然語言自動合成SQL查詢的方法。文獻[3]提出了一種新穎的方法TYPESQL,將自然語言轉(zhuǎn)化為SQL視為插槽填充任務(wù)。
目前的統(tǒng)計型問答系統(tǒng),數(shù)據(jù)結(jié)構(gòu)相對簡單,不能解決復(fù)雜的邏輯限制關(guān)系和時間限制關(guān)系,更不能理解復(fù)雜問句中的隱藏語義。因此,本文提出了基于醫(yī)療領(lǐng)域的電子病歷語義模型,以及對應(yīng)的依存關(guān)系。同時利用Blending的方式訓(xùn)練了依存關(guān)系融合模型。對于輸入的自然語言,首先會利用模型預(yù)測其依存關(guān)系樹,并結(jié)合定義好的語義模型將其映射至語義表達式中,接著轉(zhuǎn)換成Neo4j查詢語句Cypher,最后以圖表形式將查詢結(jié)果返回給用戶。
本文方法的總體流程如圖1所示。首先本文分析發(fā)現(xiàn)醫(yī)生所提出的醫(yī)療統(tǒng)計需求均是以“病人”這個主體進行提問的,問題中的各成分會對“病人”進行語義上的約束。因此,本文構(gòu)建了面向醫(yī)療統(tǒng)計型問答的電子病歷語義模型以及對應(yīng)的依存關(guān)系。
圖1 本文方法總體流程
在系統(tǒng)實際運行時,對于醫(yī)生提出的自然語言問題,系統(tǒng)首先利用jieba分詞工具對問句進行分詞及預(yù)處理。在刪除出現(xiàn)的停用詞和標(biāo)點后,對每個詞賦予其詞性,同時將其作為特征輸入到依存關(guān)系模型中,預(yù)測得到該問句對應(yīng)的依存關(guān)系樹,并將其映射到對應(yīng)的語義邏輯表達式中,再翻譯成Cypher語句,最后以圖表形式返回結(jié)果。
對于電子病歷語義模型的定義,本文分析臨床醫(yī)生的需求,發(fā)現(xiàn)這些需求均圍繞著“病人”展開,而問題中的其他部分則對其進行了語義上的約束,具體可以利用語義邏輯表達式的形式將這些需求問題的語義表示出來。因此本文在歸納總結(jié)后,構(gòu)建了一個電子病歷語義模型,能夠覆蓋本文醫(yī)療統(tǒng)計分析問題任務(wù)語境下的所有語義,一共有以下7種語義。其中,本文的語義表達式中用到的變量如表1所示。
表1 變量符號表
(1) 醫(yī)療事件約束。指對曾發(fā)生過某條具體醫(yī)療事件記錄的“病人”進行約束,其語義表達式為λx.?y.MedEvent(x,y)∧EventName(y,e)。例如“得了高血壓的病人”,表達式為λx.?y.DiseaseEvent(x,y)∧DiseaseName(y,″高血壓″)。
(2) 病人屬性約束。指對病人的某項屬性進行約束,其語義表達式為λx.Value(x,e)。例如“男性病人”,表達式為λx.Gender(x,″男性″)。
(3) 邏輯運算約束。共有與、或、非三種不同的邏輯操作計算,其對應(yīng)的語義表達式為∧、∨、。
(4) 時間先后約束。常常用于約束不同醫(yī)療事件之間的時間先后關(guān)系,其語義表達式為λx.?y1.?y2.MedEvent1(x,y1)∧MedEvent2(x,y2)∧EventName1(y1,e1)∧EventName2(y2,e2)∧TimeRelation(y1,y2)。例如“得了糖尿病后用了胰島素的病人”,表達式為λx.?y1.?y2.DiseaseEvent(x,y1)∧DrugEvent(x,y2)∧DiseaseName(y1,″糖尿病″)∧DrugName(y2,″胰島素″)∧Before(y1,y2)。
(5) 數(shù)值范圍約束。用于約束病人的數(shù)值型屬性,λx.Value(x,e)。例如“70歲的病人”,其語義表達式為λx.Age(x,70)。
(6) 對比關(guān)系約束。在醫(yī)療統(tǒng)計問題中會常常出現(xiàn)需要對比兩者的語義的情況,其語義表達式為λx1.λx2.Compare(x1,x2),其中x2表示另一個病人。
(7) 統(tǒng)計目的約束。用于約束問句最終的分析目的,例如“男性病人的總數(shù)”其語義表達式為Count(λx.″男性″))。
同時本文還根據(jù)上述的電子病歷語義模型,定義了對應(yīng)的醫(yī)療領(lǐng)域依存關(guān)系。依存句法的本質(zhì)是提取詞與詞之間的依存關(guān)系、在通用領(lǐng)域中一般使用語法關(guān)系,例如主謂關(guān)系,動賓關(guān)系。但在醫(yī)療領(lǐng)域的文本中,存在一部分能夠明確表示語義的關(guān)系,例如病人屬性關(guān)系、醫(yī)療事件關(guān)系。但如果完全使用此類關(guān)系,無法完整表示所有的文本,因此需要使用語法關(guān)系進行補充。在閱讀了大量醫(yī)療領(lǐng)域文本的基礎(chǔ)上,本文總結(jié)出一套針對醫(yī)療領(lǐng)域的依存關(guān)系,與語法關(guān)系一起訓(xùn)練,最終得到了不錯的結(jié)果,具體定義可見表2。
表2 醫(yī)療領(lǐng)域的依存關(guān)系定義
本文利用基于轉(zhuǎn)移的方法來訓(xùn)練依存關(guān)系。首先對于每個輸入的問句,初始化其結(jié)構(gòu)C=(s,b,a)。其中s表示堆棧(stack),初始化后s=[ROOT],s1代表棧頂詞,s2代表棧頂?shù)诙€詞。b表示緩沖區(qū)(buffer),初始化后b=[w1,w2,…,wn],wj表示問句中的第j個詞匯。a表示依存關(guān)系(Dependency Arcs),初始化后a=?。終止條件為當(dāng)結(jié)構(gòu)C中堆棧s僅有一個[ROOT],且緩沖區(qū)b=?。基于轉(zhuǎn)移的依存解析目標(biāo)就是將問句從初始結(jié)構(gòu)到終止結(jié)構(gòu),預(yù)測每次的轉(zhuǎn)移動作。轉(zhuǎn)移動作包括以下3個。
(1)shift:將緩沖區(qū)b中的棧底元素b1移到堆棧s的棧頂,前提條件是len(b)≥1。
(2)left_arc(l):向依存關(guān)系a中加入關(guān)系邊s1→s2,及其邊上的標(biāo)簽l,并把s2移出堆棧s,前提條件是len(s)≥2。
(3)right_arc(l):向依存關(guān)系a中加入關(guān)系邊s2→s1,及其邊上的標(biāo)簽l,并把s1移出堆棧s,前提條件是len(s)≥2。
因為本文定義了一共21種依存關(guān)系,所以神經(jīng)網(wǎng)絡(luò)的輸出為2T+1=43維的向量(其中T為依存關(guān)系個數(shù))。具體的操作流程如表3所示。
表3 轉(zhuǎn)移序列表
通過表3的Step13將“對比服用地諾帕明、卡托普利病人再入院率”這句句子用本文的方法進行了依存關(guān)系生成,生成后的對應(yīng)圖形如圖2所示。
圖2 “對比服用…病人再入院率”的依存關(guān)系圖
本文提出了一種依存關(guān)系的融合模型,其融合方式是基于Blending的方式。其中第一層分類器包括神經(jīng)網(wǎng)絡(luò)模型以及XGBoost模型,第二層分類器則使用了隨機森林。具體地,本文Blending模型結(jié)構(gòu)如圖3所示。
圖3 Blending模型示意圖
對于基于神經(jīng)網(wǎng)絡(luò)的模型,本文利用了文獻[20]中的訓(xùn)練方法,并進行了部分改進,具體描述如下:輸入的特征包括詞特征、詞性特征和依存關(guān)系特征三類特征。本文使用Word2vec來訓(xùn)練對應(yīng)的詞向量。因為在語料中會存在大量的數(shù)字,訓(xùn)練這些數(shù)字的詞向量意義并不大,因此本文對數(shù)字都做預(yù)處理,用“num”來替代數(shù)字,即所有數(shù)字共用一個詞向量。訓(xùn)練好的詞向量、詞性向量和依存關(guān)系向量均為200維,后兩者分別以方差為0.1的正態(tài)分布來進行初始化。
本文的神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)分為輸入層、兩層全連接層以及輸出層。其中第一層全連接層包括300個神經(jīng)元,第二層全連接層包括200個神經(jīng)元,輸出層為一個43維的向量,且激活函數(shù)為Cube函數(shù)y(x)=x3。本文一共使用了48個特征,每個特征用對應(yīng)的200維向量來表示。圖4展示了模型的部分特征,其中s表示stack,b表示buffer,下標(biāo)數(shù)字i(i=1,2)表示棧中第i個詞,lc(si)表示與棧中第i個詞完成最近一次左移操作的詞匯,反之,rc(si)表示與棧中第i個詞完成最近一次右移操作的詞匯。每個詞匯又都包括對應(yīng)的詞、詞性和依存關(guān)系3個粒度上的特征。如果不存在對應(yīng)特征,則賦值NULL。本文所使用的所有特征可詳見表4所示。
表4 特征模板
圖4 模型部分特征示意圖
同時本文還使用了XGBoost作為融合模型第一層中的另一個單模型。XGBoost作為一種高效的分布式Boosting模型,因為其算法學(xué)習(xí)速度快以及出色的訓(xùn)練效果,而被廣泛使用。但是其本質(zhì)上屬于梯度提升決策樹算法,在列抽樣時會破壞詞向量原有的信息。因此本文中XGBoost模型的輸入特征為詞匯在字典中的序號。在訓(xùn)練模型完成之后,本文還輸出了特征重要性,在48維特征中,stack棧中詞匯的詞向量以及詞性向量對訓(xùn)練是非常重要的。
首先對于醫(yī)生輸入的問題Q,利用jieba分詞后,將會生成一個詞序列wordList=[w1,w2,…,wn]。特別地,對于詞序列中的所有數(shù)字,均用“num”來替換。生成詞序列時,同樣調(diào)用jieba生成對應(yīng)的詞性序列posList=[p1,p2,…,pn],其中數(shù)字“num”的詞性均為數(shù)詞m。然后將問題Q的詞序列和詞性序列作為模型的輸入,輸入到融合模型中進行預(yù)測。因為本文的任務(wù)是對病人信息及診斷療效進行統(tǒng)計,所有的問句均是以病人為中心展開提問,所以最終會得到一棵由“病人”為根節(jié)點連出的依存關(guān)系樹。例如問題為“未服用地諾帕明和卡托普利,入院次數(shù)小于6次的男性高血糖病人的人數(shù)?”,會生成表5所示的以CoNLL格式表示的依存關(guān)系樹。
表5 依存關(guān)系樹示例
首先對于依存樹中的依存關(guān)系,會將其映射到語義邏輯表達式上。依存關(guān)系與語義之間往往存在一對一或多對一的映射關(guān)系。下面將介紹本文的映射方法:
(1) 對于醫(yī)療事件約束,MedEvent_Mod關(guān)系與之直接構(gòu)成映射關(guān)系。例如上例中“高血糖病人”,將會映射到λx.?y.DiseaseEvent(x,y)∧DiseaseName(y,″高血糖″)語義表達式上。
(2) 對于病人屬性約束,PatProperty_Mod關(guān)系與之直接構(gòu)成映射關(guān)系。例如中的“男性病人”其語義表達式為λx.Gender(x,″男性″)。
(3) 對于邏輯運算約束,一共有與或非三種不同的約束,一般出現(xiàn)在醫(yī)療事件之間來表示對應(yīng)的邏輯關(guān)系。
(4) 對于時間先后約束,用于約束醫(yī)療事件之間的時間先后關(guān)系。例如“患有高血壓前患有高血糖的患者”,將會映射到λx.?y1.?y2.DiseaseEvent(x,y1)∧DiseaseEvent(x,y2)∧DiseaseName(y1,″高血壓″)∧DiseaseName(y2,″高血糖″)∧Before(y2,y1)。
(5) 對于數(shù)值范圍約束,一般出現(xiàn)在病人屬性項中,限制病人的某個數(shù)值屬性,例如“入院次數(shù)小于6次”,會映射到語義表達式λx.λy.HospitalizationFrequency(x,y)∧Less(y,6)上。
(6) 對于統(tǒng)計目的約束,Query_rel依存關(guān)系與該語義直接構(gòu)成映射關(guān)系,例如上述例子中的“高血糖病人人數(shù)”會映射到Count(λx.?y.DiseaseEvent(x,y)∧DiseaseName(y,″高血糖″))語義表達式上。
(7) 對于對比關(guān)系約束,用于約束“病人”,即比較的對象一定為不同類型的病人。
最終問句映射到對應(yīng)的語義邏輯表達式后,則再需要將其翻譯成對應(yīng)的Neo4j查詢語言Cypher。其中Cypher可以分為三類查詢子句,分別是:(1) match子句,用于匹配子圖,一般以MATCH(p)-[r]->(n)的格式出現(xiàn),其中:p和n分別代表圖中的連接節(jié)點,r則表示節(jié)點之間的關(guān)系邊。(2) where子句,與SQL中where語句相似,用于條件限制。(3) return子句,則是用于返回最終的查詢目標(biāo)。
本文利用啟發(fā)式規(guī)則的方法,最終會將表5例子中的語義邏輯表達式Count(λx.?y1.?y2.?y3.?n.(DrugEvent1(x,y1)∧DrugEvent2(x,y2)∧DrugName1(y1,″地諾帕明″)∧DrugName2(y2,″卡托普利″)).HospitalizationFrequency(x,n)∧Less(n,6).Gender(x,″男性″).DiseaseEvent(x,y3)∧DiseaseName(y3,″高血糖″)),翻譯為以下的Cypher查詢語句:MATCH(x)-[r1:HaveTaken]->y1),(x)-[r2:HaveTaken]->(y2),(x)-[r3:SufferFrom]->(y3)WHERENOT(y1.DrugName=″地諾帕明″ANDy2.DrugName=″卡托普利″)ANDy3.DiseaseName=″高血糖″ANDx.Gender=″男″ANDx.HospitalizationFrequency<6RETURNcount(x)。
本文用于測試系統(tǒng)性能和準(zhǔn)確性的EHR數(shù)據(jù)來自上海中醫(yī)藥大學(xué)附屬曙光醫(yī)院,其中病人的診療信息都有詳細(xì)的記錄和時間戳,并將這些關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)存入圖數(shù)據(jù)庫Neo4j中。Neo4j庫中一共有204條病人記錄,324條疾病記錄,49條手術(shù)記錄,300條化驗記錄,182條藥品記錄,992條住院記錄,992條住院信息邊連接住院記錄和病人,4 838條醫(yī)囑信息邊連接藥品記錄和病人,2 792條診斷信息邊連接疾病記錄和病人,157條手術(shù)信息邊連接手術(shù)記錄和病人,117 771條化驗信息邊連接化驗記錄和病人。
本文的測試集(Test Set)共有261個醫(yī)療問題,具體由以下兩部分構(gòu)成:(1) 本文經(jīng)過德爾菲法(Delphi Method)向臨床醫(yī)生收集了144個自然語言問題,將其加入到測試問題集中。(2) 同時本文在萬方數(shù)據(jù)庫中,使用關(guān)鍵字檢索“電子病歷/電子健康病歷”、“統(tǒng)計/數(shù)據(jù)分析”和“流行病調(diào)查/臨床科研”三種不同條件組合下的文獻。在相關(guān)度排序前50篇的論文中,將16篇帶有臨床科研統(tǒng)計型問題的文獻加入到測試問題集中。同時也從Caliber Research Projects[21]中選取2016年-2017年發(fā)表的所有與醫(yī)療統(tǒng)計相關(guān)的12篇文獻中,對應(yīng)的醫(yī)療統(tǒng)計問題也整合出來,共計117個問題。其中英語文獻中的問題由上海中醫(yī)藥大學(xué)附屬曙光醫(yī)院臨床醫(yī)生翻譯整理成中文問題。
因為目前仍缺乏大量且高質(zhì)量的依存關(guān)系標(biāo)注語料用于模型訓(xùn)練。本文通過醫(yī)療文獻中收集的共86個醫(yī)療統(tǒng)計分析問題。同時歸納這些問題對應(yīng)的句式模板,通過模板填充塊的方法,結(jié)合自定義的問句多樣性策略以及合法性策略,自動生成8 000條醫(yī)療統(tǒng)計分析問題的依存關(guān)系訓(xùn)練語料,以及對應(yīng)的依存關(guān)系CoNLL格式。其中6 000條作為訓(xùn)練數(shù)據(jù)來訓(xùn)練神經(jīng)網(wǎng)絡(luò)以及XGBoost,2 000條數(shù)據(jù)作為驗證集,并根據(jù)Blending模型中第一層的模型生成新的特征,同時按照7∶3的比例劃分新的訓(xùn)練集和驗證集,用于訓(xùn)練第二層的隨機森林模型。最后本文為保證所生成語料的質(zhì)量,隨機抽取了400個問題交給上海曙光醫(yī)院醫(yī)生進行打分,具體評分如表6所示。
表6 部分問句評分展示
在本文的神經(jīng)網(wǎng)絡(luò)模型中,第一層全連接層均設(shè)為300維,第二層全連接層均設(shè)為200維。本文使用Word2vec方法進行詞向量和特征向量的預(yù)訓(xùn)練,并將其作為嵌入層的初始化向量。訓(xùn)練過程采用小批量梯度下降法,學(xué)習(xí)率設(shè)置為0.01,并選用了L2正則化,lam值設(shè)置為1e-8。為了防止梯度爆炸,本文使用了梯度裁剪的方法。對于XGBoost模型,其學(xué)習(xí)器個數(shù)為100,隨機列抽樣和行抽樣系數(shù)均設(shè)置為0.8。
同時本文選用了UAS和LAS作為模型的評測指標(biāo),具體定義如下:
(1) 無標(biāo)記依存正確率(UAS):中心詞預(yù)測正確的詞匯數(shù)占總詞數(shù)的百分比,即:
(1)
(2) 帶依存標(biāo)記正確率(LAS):中心詞預(yù)測正確并且中心詞的依存關(guān)系也正確的詞匯數(shù)占總詞數(shù)的百分比,即:
(2)
對于與文獻[4]中基于上下文無關(guān)文法的統(tǒng)計式問答系統(tǒng)的實驗對比,本文使用了如下評價指標(biāo)查詢正確率,具體描述如下:
(3)
為了驗證模型的有效性,本文在4個方面做了對比實驗,如表7所示。首先,本文比較了Cube激活函數(shù)與其他三種常見的非線性激活函數(shù),分別是Sigmod、Tanh和ReLU函數(shù)??梢悦黠@看出cube激活函數(shù)較其他三種函數(shù)有著更好的結(jié)果,相比較于Sigmod函數(shù)在LAS指標(biāo)上提高了32.4百分點,UAS指標(biāo)上提高了25.52百分點。這是因為本文的Cube函數(shù)h=(WwXw+WpXp+WdXd)3,相當(dāng)于對詞、詞性、依存關(guān)系三個維度上進行了特征組合,故而取得了較好的效果。
表7 本文對比實驗的結(jié)果(%)
其次,本文依據(jù)XGBoost輸出的特征重要性進行特征篩選。本文剔除了重要性小于100的23維特征,在剔除的特征中,共有9維是屬于依存關(guān)系維度的。據(jù)此,本文為了比較不同特征對神經(jīng)網(wǎng)絡(luò)模型性能的影響,可以看到48維特征相較于特征未篩選前25模型在UAS和LAS這兩個評價指標(biāo)上分別高了1.20百分點和1.91百分點,這說明依存維度對于模型的訓(xùn)練依舊非常重要。這是因為在上述提到的Cube函數(shù)中會對其和詞、詞性維度上的特征進行特征組合,而組合后會有助于模型的訓(xùn)練。
本文使用的是基于Blending方法的融合模型,在Blending的第一層中使用的是神經(jīng)網(wǎng)絡(luò)和XGBoost,第二層使用的則是隨機森林。為了驗證融合模型的效果,本文在261個測試問題集上,對兩個單模型以及融合模型做了性能比較。如表7所示,可以看到本文所使用的融合模型在UAS與LAS兩個評價指標(biāo)上相比于神經(jīng)網(wǎng)絡(luò)模型分別提升了0.99百分點、1.43百分點,而相比較于XGBoost模型上則分別提升了3.10百分點、2.98百分點。這證明了本文的融合模型在性能上有著較強的優(yōu)勢。
同時本文還對依存關(guān)系模型和問答系統(tǒng)的性能與現(xiàn)有方法進行了比較。在依存關(guān)系模型方面,本文和目前市面最流行的依存關(guān)系分析工具LTP以及最經(jīng)典的由Chen等[20]提出的基于神經(jīng)網(wǎng)絡(luò)依存關(guān)系模型進行了對比??梢詮谋?看到本文提出的基于Blending方法的神經(jīng)網(wǎng)絡(luò)和XGBoost的融合模型在性能上較前兩者均有提升。在UAS與LAS兩個評價指標(biāo)上,相比于LTP分別提升了14.77百分點、20.07百分點,同時相比于Chen等[20]的模型則分別提升了1.35百分點、2.58百分點。
目前在醫(yī)療自然語言統(tǒng)計問答方面,只有文獻[4]與本文的研究目標(biāo)一致。文獻[4]基于CFGs的解析正確率為68.97%,而本文基于依存關(guān)系方法的解析正確率為81.61%。本文方法能取得更好效果的原因是在文獻[4]中的上下文無關(guān)文法是利用規(guī)則遞歸生成問句中相鄰詞匯間的關(guān)系,很難將模板覆蓋全面,導(dǎo)致能正確解析出的句式有限。如對于問句“對比a病和b病患者的用藥分布”,文獻[4]中因為沒有制定相應(yīng)的處理規(guī)則,無法生成對應(yīng)的文法樹。而本文提出的依存關(guān)系樹是通過基于Blending的融合模型對醫(yī)療統(tǒng)計問題進行依存關(guān)系解析,能處理的句式相對自由,并將解析結(jié)果映射成語義表達式,翻譯成Cypher查詢語句后,從Neo4j中查詢得到結(jié)果,故而取得了比文獻[4]更好的效果,相較于文獻[4]在查詢結(jié)果正確率上提升了12.64百分點。
針對面向電子病歷的醫(yī)療自然語言統(tǒng)計問題,本文利用依存關(guān)系分析的方法來理解自然語言問題的語義。具體而言,本文定義了面向醫(yī)療統(tǒng)計問題的依存關(guān)系,并通過基于Blending的融合模型進行依存分析,將自然語言問題轉(zhuǎn)換成依存關(guān)系樹。先將依存關(guān)系樹映射至語義表達式,再根據(jù)表達式翻譯成對應(yīng)的Cypher查詢語句,最終將查詢結(jié)果以圖表的形式返回給用戶。本文的工作還存在一些不足,當(dāng)然也是未來準(zhǔn)備完善的部分。像“年增長率”的問題,現(xiàn)在的圖譜還不支持,但未來只需要將其標(biāo)注到正確的標(biāo)簽中,根據(jù)規(guī)則查詢前一年的數(shù)據(jù),結(jié)合本年數(shù)據(jù)后,保存查詢中間值來解決該問題。還會出現(xiàn)一些頭標(biāo)簽、關(guān)系標(biāo)簽的預(yù)測問題,以后可以根據(jù)先驗知識制定一些規(guī)則來限制預(yù)測的輸出,進一步提高精度。接下來會將圖譜進一步完善,使其能更好地支持醫(yī)療自然語言統(tǒng)計問答。