全 威, 馬志柔, 劉 杰, 葉 丹, 鐘 華
1(中國科學(xué)院 軟件研究所 軟件工程技術(shù)研究開發(fā)中心, 北京 100190)
2(中國科學(xué)院大學(xué), 北京 100049)
隨著醫(yī)療信息技術(shù)的發(fā)展, 傳統(tǒng)醫(yī)療健康模式正在向“互聯(lián)網(wǎng)+醫(yī)療健康”轉(zhuǎn)型, 網(wǎng)絡(luò)預(yù)約、遠(yuǎn)程治療、在線問診等醫(yī)療服務(wù)也逐漸普及. 在線問診系統(tǒng)依據(jù)患者主訴來分配科室, 是醫(yī)生與患者線上溝通咨詢的重要媒介. 大多數(shù)患者對自身病情缺乏全面了解, 醫(yī)學(xué)專業(yè)知識存在不足, 患者的主訴文本口語化、通俗化、多樣化, 識別其中的醫(yī)療信息以及精準(zhǔn)的科室推薦算法是導(dǎo)診系統(tǒng)的核心部分. 現(xiàn)有導(dǎo)診系統(tǒng)通過規(guī)則推理、文本分類、圖譜問答等方法實(shí)現(xiàn). 規(guī)則推理方法需要人工設(shè)計(jì)推理規(guī)則, 靈活度不高; 文本分類方法直接預(yù)測主訴文本就診科室, 但導(dǎo)診是醫(yī)學(xué)的強(qiáng)知識問題, 需要醫(yī)療理論知識的支撐保證其可靠性; 傳統(tǒng)的圖譜問答方法則只在主訴文本較為簡單時(shí)實(shí)用, 無法應(yīng)用于多醫(yī)療實(shí)體的復(fù)雜主訴文本.
針對上述問題, 本文設(shè)計(jì)了交互式智能導(dǎo)診系統(tǒng),通過識別患者主訴中的疾病、癥狀、檢查、藥品等多種醫(yī)療指稱, 然后鏈接到醫(yī)療知識圖譜對應(yīng)醫(yī)療實(shí)體上, 利用醫(yī)療實(shí)體在醫(yī)療圖譜中查詢子圖, 通過圖編碼器提取子圖語義信息, 結(jié)合主訴文本語義信息進(jìn)行導(dǎo)診. 最后針對推薦科室置信度不高的情況, 使用單輪導(dǎo)診和多輪交互模塊相結(jié)合的導(dǎo)診方式, 通過搜索關(guān)聯(lián)癥狀讓用戶選擇來補(bǔ)充信息.
導(dǎo)診系統(tǒng)從原理上大致可分為基于規(guī)則模板和基于數(shù)據(jù)模型兩類. 基于規(guī)則推理的方法通過人工建立癥狀、疾病和科室之間的對應(yīng)規(guī)則實(shí)現(xiàn)導(dǎo)診功能. 崔浩等[1]通過提供圖形化的界面讓用戶輸入年齡、性別等個人信息, 選擇患病部位及相關(guān)癥狀, 將相關(guān)癥狀作為特征推理匹配得到科室, 推薦給患者. 基于數(shù)據(jù)模型的方法不需要人工建立規(guī)則, 將導(dǎo)診看作科室分類問題, 從醫(yī)療問診網(wǎng)站爬取大量的問診數(shù)據(jù), 抽取患者病情描述和科室數(shù)據(jù), 使用傳統(tǒng)機(jī)器學(xué)習(xí)方法或者深度神經(jīng)網(wǎng)絡(luò)分類模型作為導(dǎo)診模型. 鄭姝雅[2]將患者的年齡、性別特征和主訴信息融合后使用SVM預(yù)測科室. 陸康[3]利用知識圖譜問答的方式進(jìn)行導(dǎo)診, 通過識別患者問題中的疾病實(shí)體及其意圖, 查詢知識圖譜對應(yīng)科室進(jìn)行導(dǎo)診. 但無法解決問題中出現(xiàn)多個疾病實(shí)體時(shí)的情況, 在實(shí)際問診中更多的是包含多實(shí)體的句子. Liu等[4]通過醫(yī)療百科網(wǎng)站和電子病歷構(gòu)建了以癥狀-疾病-科室為核心的醫(yī)療知識圖譜, 根據(jù)用戶自身癥狀計(jì)算潛在疾病及其權(quán)重, 通過查詢醫(yī)療知識圖譜得到疾病和科室之間的相關(guān)度, 將兩種權(quán)重系數(shù)融合后得到科室的相關(guān)度.
醫(yī)療實(shí)體識別是指從醫(yī)療文本中識別疾病、癥狀、檢查等實(shí)體. 早期的醫(yī)療實(shí)體識別使用基于詞典的方法, 例如cTAKES[5]、MedKAT[6]等系統(tǒng). 雖然詞典方法在準(zhǔn)確率上有不錯的效果, 但由于醫(yī)療實(shí)體存在多種多樣的表述, 詞典方法覆蓋率不高. 隨著標(biāo)注數(shù)據(jù)的日益豐富, 機(jī)器學(xué)習(xí)方法成為實(shí)體識別技術(shù)的主流, 有監(jiān)督的序列標(biāo)注模型取得了不錯的效果, 如隱馬爾可夫HMM、條件隨機(jī)場CRF等模型. Liu等[7]在CRF模型中加入4種特征對電子病歷進(jìn)行識別. 基于神經(jīng)網(wǎng)絡(luò)的方法相較于傳統(tǒng)機(jī)器學(xué)習(xí)方法不需要特征工程, 非常靈活. 當(dāng)數(shù)據(jù)規(guī)模較大時(shí), 明顯優(yōu)于機(jī)器學(xué)習(xí)方法. Almgren等[8]提出基于字符的Bi-LSTM模型,通過端到端的方式訓(xùn)練有明顯提升. Xu等[9]將Bi-LSTM和CRF結(jié)合, 實(shí)驗(yàn)證明該方法優(yōu)于單一模型. 醫(yī)療實(shí)體構(gòu)詞復(fù)雜, 分詞時(shí)容易出現(xiàn)錯誤影響實(shí)體識別效果, BERT[10]等預(yù)訓(xùn)練語言模型使用字符級的編碼能有效規(guī)避分詞導(dǎo)致的實(shí)體識別錯誤, 同時(shí)相較Glove、Word2Vec等靜態(tài)詞向量, 能獲得動態(tài)字向量表示, 得到更豐富的文本語義信息.
隨著知識圖譜的發(fā)展, 醫(yī)療領(lǐng)域知識圖譜也日益完善, 在知識推理、智能問答、輔助診斷等智能醫(yī)療應(yīng)用中發(fā)揮了重要作用. 侯夢薇等[11]對醫(yī)療知識圖譜架構(gòu)、構(gòu)建技術(shù)及應(yīng)用現(xiàn)狀進(jìn)行了全面剖析. 奧德瑪?shù)萚12]基于大規(guī)模醫(yī)療文本數(shù)據(jù), 利用自然語言處理與文本挖掘技術(shù), 以人機(jī)結(jié)合的方式研發(fā)了一個中文醫(yī)療知識圖譜. 昝紅英等[13]通過知識圖譜中癥狀的發(fā)作部位和所屬科室?guī)椭鷮?dǎo)診. 湯人杰等[14]根據(jù)電子病歷數(shù)據(jù)建立了癥狀和疾病之間的權(quán)重關(guān)系, 用于輔助診斷. 首先清洗電子病歷中現(xiàn)病史一欄的否定修飾詞, 然后識別其中的癥狀實(shí)體, 最后使用概率圖方法計(jì)算癥狀和疾病之間的權(quán)重. 基于語義解析的知識圖譜智能問答分為實(shí)體識別、實(shí)體鏈接和關(guān)系預(yù)測3個階段,Wang等[15]使用編碼器-解碼器框架, 通過解碼器預(yù)測關(guān)系路徑, 增加了對關(guān)系路徑正確性的驗(yàn)證結(jié)構(gòu), 并使用APVA-TURBO方式訓(xùn)練編碼器和解碼器, 提升了問答的準(zhǔn)確率. Feng等[16]在常識問答任務(wù)中引入常識知識圖譜來增加常識知識, 提出融合了基于路徑的推理方法和圖神經(jīng)網(wǎng)絡(luò)的多跳圖編碼器MHGRN, 增強(qiáng)了模型的常識知識多跳推理能力.
然而, 上述研究工作中沒有考慮到醫(yī)療導(dǎo)診系統(tǒng)的特殊性. 一方面導(dǎo)診是醫(yī)學(xué)的強(qiáng)知識問題, 需要醫(yī)療理論知識的支撐保證其可靠性; 一方面患者提供的信息不足可能導(dǎo)致單輪導(dǎo)診成功率低. 因此, 本文考慮通過引入醫(yī)療知識圖譜和多輪交互技術(shù)來提升導(dǎo)診系統(tǒng)的智能化效果.
在進(jìn)行醫(yī)療導(dǎo)診時(shí), 其關(guān)鍵技術(shù)是如何從患者的主訴文本中提取醫(yī)療信息以及如何使用醫(yī)療知識更好的理解患者文本語義. 本節(jié)將介紹醫(yī)療信息識別算法和患者主訴推薦算法兩個關(guān)鍵技術(shù).
通?;颊叩闹髟V文本如表1所示.
醫(yī)療信息識別是指識別出患者主訴中醫(yī)療信息,并將其對應(yīng)到醫(yī)療知識圖譜中, 得到統(tǒng)一規(guī)范的醫(yī)療表述.本文首先使用BERT+Bi-LSTM+CRF模型識別主訴文本中的癥狀、疾病、檢查、藥品等醫(yī)療實(shí)體指稱,然后通過無監(jiān)督的字符結(jié)合語義匹配的方法將識別的醫(yī)療指稱鏈接到醫(yī)療知識圖譜中的實(shí)體, 最后查詢圖譜中實(shí)體的名稱得到統(tǒng)一規(guī)范的表述.
2.1.1 醫(yī)療實(shí)體識別
深度學(xué)習(xí)模型可以從醫(yī)療實(shí)體識別訓(xùn)練數(shù)據(jù)的標(biāo)注中自動學(xué)習(xí)到醫(yī)療指稱的上下文規(guī)律, 并且具備優(yōu)秀的泛化能力. 本系統(tǒng)使用BERT+Bi-LSTM+CRF模型識別患者主訴中的醫(yī)療實(shí)體指稱, 可以將模型分為BERT, Bi-LSTM和CRF三層網(wǎng)絡(luò)結(jié)構(gòu), 該模型結(jié)構(gòu)如圖1所示.
圖1 患者主訴醫(yī)療實(shí)體識別模型
第1層是利用預(yù)訓(xùn)練的BERT語言模型獲取患者主訴文本的字向量, 記作序列X=(x1,x2,···,xn), 通過預(yù)訓(xùn)練語言模型得到的字向量能夠有效提取患者主訴文本中的特征信息.
第2層是Bi-LSTM層, 即雙向長短時(shí)記憶神經(jīng)網(wǎng)絡(luò). 第1層得到的序列X作為Bi-LSTM各個時(shí)間步的輸入, 得到Bi-LSTM層的前向隱狀態(tài)序列和后向隱狀態(tài)序列, 將前向和后向隱狀態(tài)序列按照時(shí)間步拼接得到完整的隱狀態(tài)序列, 記作H=(h1,h2,···,hn). 之后通過線性層將隱狀態(tài)序列映射到s維(即標(biāo)注集的標(biāo)簽類別數(shù)目), 將映射后的序列記作L=(l1,l2,···,ln),其中,lij代 表字xi對 應(yīng)的每個類別標(biāo)簽的yj的得分.
第3層是條件隨機(jī)場層CRF, 在命名實(shí)體識別任務(wù)中, 某一位置的標(biāo)簽不僅和自身有關(guān), 還要考慮到前后位置的信息. CRF網(wǎng)絡(luò)不僅考慮到當(dāng)前位置的標(biāo)注概率分布, 還會考慮到之前位置的標(biāo)簽概率分布. 通過Viterbi算法解碼得到概率最大的標(biāo)簽路徑.
2.1.2 醫(yī)療實(shí)體鏈接
醫(yī)療實(shí)體鏈接是將主訴文本中的醫(yī)療指稱映射到醫(yī)療知識圖譜中對應(yīng)的實(shí)體, 分為候選實(shí)體生成和候選實(shí)體排序兩個階段.
第1階段. 候選實(shí)體生成: 為醫(yī)療指稱在醫(yī)療知識圖譜中找到相關(guān)的候選實(shí)體列表. 抽取醫(yī)療知識圖譜中的所有實(shí)體, 對每個實(shí)體構(gòu)建n-Gram (n=1,2,…,10)到實(shí)體的倒排索引表. 實(shí)體識別模型識別患者主訴文本得到醫(yī)療指稱, 查詢倒排索引表得到對應(yīng)的候選實(shí)體列表, 計(jì)算醫(yī)療指稱和列表中的每個元素之間的Jaccard相似度, 選擇前100作為最終的候選實(shí)體列表.
第2階段. 候選實(shí)體排序: 對候選實(shí)體列表中的候選實(shí)體排序, 選擇排名最高的候選實(shí)體作為醫(yī)療指稱的映射實(shí)體. 使用字符結(jié)合語義的方式對候選實(shí)體打分, 進(jìn)行排序. 使用Jaccard相似度和相對編輯距離作為字符匹配的指標(biāo), 通過fastText中的Skip-Gram語言模型訓(xùn)練主訴文本得到詞向量, 從語義的角度對候選實(shí)體打分, 加權(quán)字符匹配度和語義匹配度得到候選實(shí)體的最終匹配分?jǐn)?shù), 最后選擇分?jǐn)?shù)最高的候選實(shí)體作為醫(yī)療指稱的映射實(shí)體.
在進(jìn)行科室推薦時(shí), 利用醫(yī)療知識圖譜中癥狀、疾病等實(shí)體和科室實(shí)體之間的關(guān)系來幫助科室推薦.但完整的醫(yī)療知識圖譜一般包含幾十萬甚至上百萬三元組, 考慮到效率和噪聲問題, 采用從完整的醫(yī)療知識圖譜中查詢主訴文本相關(guān)的子圖幫助導(dǎo)診. 通過醫(yī)療信息識別算法得到患者主訴文本中在醫(yī)療知識圖譜中對應(yīng)的醫(yī)療實(shí)體, 稱作主訴實(shí)體. 通過查詢主訴實(shí)體和科室實(shí)體在醫(yī)療知識圖譜中的相關(guān)路徑得到主訴文本相關(guān)子圖. 通過圖編碼器得到子圖語義表示, 圖編碼器結(jié)構(gòu)參考MHGRN[16]模型. 但僅使用圖編碼網(wǎng)絡(luò)無法處理患者主訴中識別不到醫(yī)療實(shí)體的情況. 所以通過預(yù)訓(xùn)練語言模型BERT提取患者主訴的語義信息, 將主訴文本的語義信息和子圖信息融合后進(jìn)行科室推薦.
圖2是患者主訴科室推薦模型的結(jié)構(gòu), 分為輸入層、表示層和融合層3層.
圖2 患者主訴科室推薦模型
(1) 輸入層: 主要是對患者主訴的預(yù)處理以及生成患者主訴相關(guān)子圖.
文本輸入處理: 將患者主訴按字(token)切分, 加上BERT模型要求的[CLS]和[SEP]特殊符號, 例如:“[CLS]左腿腳踝浮腫及左腿浮腫, 是什么原因. 掛號的話, 應(yīng)該掛什么科室?[SEP] ”, 將輸入文本序列記作x∈RdL,dL為患者主訴長度.
子圖生成: 通過醫(yī)療信息識別算法得到主訴中的實(shí)體, 將主訴中的醫(yī)療實(shí)體稱作主訴實(shí)體, 利用查詢主訴實(shí)體-主訴實(shí)體, 主訴實(shí)體-科室實(shí)體之間的路徑構(gòu)建子圖. 為了限制子圖的規(guī)模, 過濾長度大于4的路徑,最后用鄰接矩陣的形式表示, 記作M∈Rr×n×n,r為醫(yī)療知識圖譜關(guān)系數(shù),n為子圖中實(shí)體節(jié)點(diǎn)數(shù)目. 子圖生成算法的偽代碼如算法1所示, 輸入是知識圖譜KG, 主訴中的實(shí)體集合Eq, 科室實(shí)體集合Edep, 最大路徑長度hopmax, 輸出是子圖對應(yīng)的鄰接矩陣形式M.
(KG,Eq,Edep,hopmax)算法1. 子圖生成算法V E M 1) :={},:={},:=[](KG,V,E,ei,ej,pathselector):2) def update_paths paths (KG,ei,ej)3) :=find_paths path paths 4) for in do:(path)5) if pathselector do:V.add(path.nodes)6) E.add(path.edges)7) 8) end for eqi Eq 9) for in do:edep Edep 10) for in do:(KG,V,E,eqi,edep,len(path)≤hopmax)11) update_paths
12) end for eqj Eq 13) for in do:(KG,V,E,eqj,edep,len(path)==2 14) update_paths )15) end for(KG,eqi)16) update_neighbors 17) end for M(V,E)18) :=get_adj_matrix
(2) 表示層: 主要由文本編碼器和圖編碼器組成.文本編碼器負(fù)責(zé)提取患者主訴中的文本語義特征, 模型中使用BERT預(yù)訓(xùn)練語言模型作為文本編碼器, 得到文本語義向量t∈Rdn. 圖編碼器提取患者主訴相關(guān)醫(yī)療子圖中的語義特征, 使用MHGRN[16]的圖編碼網(wǎng)絡(luò),得到子圖語義向量q∈Rdm.
文本編碼器:
圖編碼器:
首先通過圖嵌入初始化子圖中節(jié)點(diǎn)的表示hi, 再根據(jù)子圖中節(jié)點(diǎn)的類別進(jìn)行轉(zhuǎn)化.
其中, ?(i)是節(jié)點(diǎn)對應(yīng)類型, 節(jié)點(diǎn)類型分為主訴文本醫(yī)療實(shí)體對應(yīng)節(jié)點(diǎn)(主訴節(jié)點(diǎn))、科室節(jié)點(diǎn)和中間節(jié)點(diǎn)3種,U和b是對應(yīng)類別的參數(shù).
將子圖中所有長度為k的關(guān)系路徑定義為 ?k, 關(guān)系路徑最大長度為K, 1 ≤k≤K.
使用多層的關(guān)系圖卷積網(wǎng)絡(luò)(Relational Graph Convolution Networks, RGCNs)得到節(jié)點(diǎn)在不同跳數(shù)下的表示如式(4):
其中, α(j,r1,···,rk,i)/dik是相關(guān)系數(shù),zki是節(jié)點(diǎn)i在第k跳的表示.
通過注意力機(jī)制融合不同跳數(shù)的節(jié)點(diǎn)表示:
為了避免遺忘節(jié)點(diǎn)的原始信息, 通過短跳連接(shortcut connection)將節(jié)點(diǎn)原始嵌入和最新的節(jié)點(diǎn)表示融合.
其中,V和V′是可學(xué)習(xí)的參數(shù), σ是非線性激活函數(shù).
最后對圖中科室節(jié)點(diǎn){h′i|i∈D}做注意力池化(attentive pooling)得到子圖表示g, D是子圖中科室節(jié)點(diǎn)集合.
(3) 融合層: 將患者主訴的文本語義特征向量和子圖語義特征向量拼接后得到q∈Rdm+dn通過多層感知機(jī)將維度映射到m維(m維是科室數(shù)目), 記作o∈Rm,oi表示推薦第i個科室的概率. 選擇概率最大的科室y*進(jìn)行推薦.
為了解決醫(yī)療導(dǎo)診中的問診文本表述口語化和癥狀和科室關(guān)系不明顯的問題, 本文設(shè)計(jì)了一套基于醫(yī)療知識圖譜的交互式智能導(dǎo)診系統(tǒng). 系統(tǒng)實(shí)現(xiàn)采用的程序開發(fā)語言為Python語言、深度學(xué)習(xí)框架為PyTorch、Web服務(wù)框架為Flask. 整個系統(tǒng)的組織架構(gòu)如圖3所示.
圖3 系統(tǒng)結(jié)構(gòu)圖
數(shù)據(jù)層包括醫(yī)療知識庫和訓(xùn)練系統(tǒng)中模型所使用的語料. 下面簡要介紹數(shù)據(jù)的構(gòu)建過程及組成.
3.1.1 醫(yī)療知識圖譜
本文將中科院軟件所劉煥勇根據(jù)醫(yī)療百科網(wǎng)站整理的知識圖譜和華東理工大學(xué)在OpenKG上發(fā)布的中文癥狀三元組關(guān)系庫進(jìn)行合并, 將合并后的醫(yī)療知識圖譜作為導(dǎo)診系統(tǒng)的知識庫, 為導(dǎo)診提供幫助.
下面簡單介紹一下兩個知識圖譜的情況. 醫(yī)療百科網(wǎng)站知識圖譜包括4.4萬實(shí)體, 類別包括疾病、藥品、食物、科室、檢查、癥狀等11種關(guān)系, 37萬三元組, 本體結(jié)構(gòu)以疾病實(shí)體為核心. 中文癥狀關(guān)系庫包含13.3萬實(shí)體, 類別有疾病、癥狀、檢查、科室、部位、藥品6類, 疾病相關(guān)科室、癥狀相關(guān)檢查、檢查相關(guān)部位等22類關(guān)系, 97萬三元組. 本體結(jié)構(gòu)上, 疾病、科室、檢查、癥狀、部位之間的關(guān)系稠密, 更適合導(dǎo)診場景.
針對數(shù)據(jù)庫的基本情況, 在合并時(shí)以中文癥狀關(guān)系庫為基礎(chǔ), 醫(yī)療百科網(wǎng)站知識圖譜作為補(bǔ)充, 去掉冗余食物實(shí)體, 得到導(dǎo)診系統(tǒng)中使用的醫(yī)療知識圖譜, 具體情況如表2所示.
表2 知識圖譜信息表
最后整理得到的醫(yī)療知識圖譜本體關(guān)系結(jié)構(gòu)如圖4所示.
圖4 醫(yī)療知識圖譜本體結(jié)構(gòu)圖
3.1.2 實(shí)體標(biāo)注數(shù)據(jù)集
實(shí)體標(biāo)注數(shù)據(jù)集使用來自“瑞金醫(yī)院MMC人工智能輔助構(gòu)建知識圖譜大賽”的瑞金糖尿病數(shù)據(jù)集, 共有45 929條數(shù)據(jù), 將其劃分為訓(xùn)練集4萬條, 驗(yàn)證集2929條, 測試集3000條, 涉及疾病名稱、病因、臨床表現(xiàn)、部位等15類實(shí)體類型, 標(biāo)注采用BIO實(shí)體標(biāo)注體系, 加上特殊標(biāo)注符號“<sos>”、“<pad>”、“<eos>”共34個標(biāo)注, 本文使用該數(shù)據(jù)訓(xùn)練醫(yī)療實(shí)體識別模型.
3.1.3 導(dǎo)診標(biāo)注數(shù)據(jù)集
數(shù)據(jù)語料從好大夫網(wǎng)站上爬取患者和醫(yī)生的對話數(shù)據(jù), 從中抽取患者的主訴及其就診科室信息構(gòu)造數(shù)據(jù)集, 數(shù)據(jù)集共有36 400條數(shù)據(jù). 按照8:1:1的比例劃分為訓(xùn)練集、驗(yàn)證集和測試集. 其中每份數(shù)據(jù)由患者主訴文本和其對應(yīng)的科室組成, 共有骨科、神經(jīng)內(nèi)科、肝膽外科等26個科室, 本文使用該數(shù)據(jù)訓(xùn)練和評估科室推薦模型.
模型層是導(dǎo)診系統(tǒng)所使用的核心模型. 下面介紹模型訓(xùn)練及效果驗(yàn)證.
3.2.1 知識圖譜嵌入模型
知識圖譜嵌入(knowledge graph embedding)[17]將知識圖譜中的實(shí)體 (entity) 和關(guān)系 (relation) 嵌入到連續(xù)向量空間, 在方便計(jì)算的同時(shí)保留了知識圖譜中的結(jié)構(gòu)信息.
本文使用兩種知識圖譜嵌入方法得到實(shí)體和關(guān)系的語義向量表示, 一種是經(jīng)典的Trans-E[18]方法, 一種是基于圖注意力機(jī)制的圖嵌入方法[19]. 并在醫(yī)療知識圖譜上進(jìn)行了鏈接預(yù)測(link prediction)實(shí)驗(yàn), 鏈接預(yù)測是衡量知識圖譜嵌入效果的常用方法, 將知識圖譜中實(shí)體和關(guān)系的內(nèi)容映射到連續(xù)向量空間中, 對知識圖譜中的實(shí)體或關(guān)系進(jìn)行預(yù)測, 即給出頭實(shí)體和關(guān)系,預(yù)測尾實(shí)體(h,r,?)以及給出尾實(shí)體和關(guān)系預(yù)測頭實(shí)體(?,r,t)兩種知識圖譜的補(bǔ)全任務(wù). 評價(jià)指標(biāo)使用hit@k,即正確實(shí)體在預(yù)測時(shí)排名≤k的頻率. 實(shí)驗(yàn)中使用hit@1, hit@3, 以及hit@10三個指標(biāo). 實(shí)驗(yàn)結(jié)果如表3所示.
表3 鏈接預(yù)測實(shí)驗(yàn)對比結(jié)果
可以發(fā)現(xiàn)圖注意力模型得到的實(shí)體向量和關(guān)系向量明顯優(yōu)于Trans-E方法, 所以在系統(tǒng)的后續(xù)模塊中使用圖注意力模型方法得到的圖嵌入表示.
3.2.2 醫(yī)療實(shí)體識別模型
數(shù)據(jù)集及模型: 使用第3.1.2節(jié)中介紹的實(shí)體標(biāo)注數(shù)據(jù)集訓(xùn)練模型, 模型結(jié)構(gòu)使用第2.1.1節(jié)中介紹的BERT+Bi-LSTM+CRF.
模型驗(yàn)證與分析: 采用準(zhǔn)確率、召回率和F1值來評價(jià)模型. 在測試集中準(zhǔn)確率76.60%, 召回率79.07%,F1值77.82%. 識別錯誤的原因主要有兩種, 一種是英文縮寫實(shí)體類別錯誤(例如FFA, Free Fat Acid是Test類別, 識別為Drug類別), 這是因?yàn)橛⑽目s寫本身不具備信息, 而Test和Drug實(shí)體周圍的上下文比較相似, 所以容易誤判. 另外一種是標(biāo)注信息不全, 預(yù)測了正確的實(shí)體, 但在標(biāo)注中未標(biāo)注出來. 例如: 從“應(yīng)注意影像學(xué)檢查并不是診斷和手術(shù)指征依據(jù), 多用于術(shù)前協(xié)助術(shù)式選擇”中預(yù)測 “影像學(xué)檢查”為Test類別, 但是在標(biāo)注中未出現(xiàn), 所以還是算作了錯誤識別.
3.2.3 科室推薦模型
數(shù)據(jù)集及模型: 使用第3.1.3節(jié)中的導(dǎo)診標(biāo)注數(shù)據(jù)集訓(xùn)練模型, 模型結(jié)構(gòu)使用第2.2節(jié)介紹的結(jié)構(gòu).
模型驗(yàn)證及分析: 采用準(zhǔn)確率評估模型效果. 實(shí)驗(yàn)對比了基于BERT的分類方法和基于知識圖譜問答的APVA-TURBO方法. 準(zhǔn)確率為75.14%, 較前兩個方法準(zhǔn)確率分別提升了2.09%和2.47%. 科室推薦錯誤的原因主要是因?yàn)椴糠职Y狀可去多個科室就診, 但數(shù)據(jù)標(biāo)注只標(biāo)簽單個科室. 例如泌尿外科和男科均可治療男士性功能異常相關(guān)疾病.
服務(wù)層分為單輪導(dǎo)診和多輪交互兩個部分, 具體流程如圖5所示, 患者主訴先通過單輪導(dǎo)診部分得到推薦科室的置信度(概率), 如果置信度小于設(shè)定的經(jīng)驗(yàn)閾值k(0<k<1), 則進(jìn)入多輪交互部分, 通過和患者交互完成導(dǎo)診, 交互能補(bǔ)充患者癥狀信息, 從而解決主訴中醫(yī)療信息不足的問題.
圖5 線上科室導(dǎo)診流程圖
3.3.1 單輪導(dǎo)診
單輪導(dǎo)診部分根據(jù)患者主訴進(jìn)行導(dǎo)診, 輸入患者主訴, 輸出推薦患者就診的科室及其概率. 首先通過醫(yī)療實(shí)體識別模型識別患者主訴中的醫(yī)療指稱, 然后利用基于字符和語義匹配的實(shí)體鏈接方法得到主訴中的醫(yī)療實(shí)體,最后通過科室推薦模型推薦科室, 如果推薦科室的置信度(概率)大于設(shè)定閾值k, 則將該科室返回給患者.
3.3.2 多輪交互
當(dāng)患者主訴文本提供的信息太少時(shí), 無法準(zhǔn)確推薦合適的科室給患者, 需要和患者進(jìn)行交互, 弄清楚患者的主要癥狀. 信息不足時(shí), 單輪導(dǎo)診推薦科室的置信度較低, 當(dāng)?shù)陀谠O(shè)定閾值k時(shí), 將進(jìn)入多輪交互模塊.
(1) 醫(yī)療信息列表初始化: 用醫(yī)療實(shí)體鏈接模型得到的實(shí)體初始化醫(yī)療信息列表, 如果未鏈接到醫(yī)療實(shí)體則初始化為空列表.
(2) 更新醫(yī)療信息列表: 將患者選擇的相關(guān)癥狀加入醫(yī)療信息列表中, 將用戶未選擇的相關(guān)癥狀加入黑名單中, 避免下次搜索相關(guān)癥狀時(shí)搜索到用戶拒絕過的相關(guān)癥狀.
(3) 搜索相關(guān)癥狀: 如果當(dāng)前交互輪數(shù)小于最大交互輪數(shù), 則基于醫(yī)療信息列表和黑名單搜索相關(guān)癥狀.搜索方法: 遍歷醫(yī)療信息列表中的實(shí)體, 利用圖嵌入模型得到的實(shí)體向量計(jì)算得到實(shí)體之間相關(guān)度分?jǐn)?shù), 通過類型約束和黑名單過濾, 最后選擇相關(guān)度分?jǐn)?shù)最高的3個癥狀作為相關(guān)癥狀.
(4) 患者選擇相關(guān)癥狀: 將搜索得到的3個相關(guān)癥狀讓用戶選擇, 詢問用戶是否有這3個癥狀, 患者通過回復(fù)相關(guān)癥狀的名稱進(jìn)行選擇, 如無則回復(fù)“無”.
(5) 最終科室推薦: 在當(dāng)前交互輪數(shù)超出最大交互輪數(shù)時(shí), 利用醫(yī)療歷史信息列表中的醫(yī)療實(shí)體改寫患者主訴后, 再次輸入科室推薦模型, 得到最終的科室推薦結(jié)果.
交互層負(fù)責(zé)處理用戶輸入的患者主訴文本、多輪交互中用戶選擇的癥狀信息, 以及將推薦的科室展示給患者.
系統(tǒng)導(dǎo)診界面效果圖如圖6所示, 界面內(nèi)容包括患者主訴的輸入, 患者主訴實(shí)體識別和鏈指的結(jié)果, 從醫(yī)療知識圖譜搜索得到的患者主訴相關(guān)子圖的展現(xiàn),以及概率最大的前5個科室的結(jié)果展現(xiàn).
圖6 系統(tǒng)導(dǎo)診界面效果圖
本文介紹了基于醫(yī)療知識圖譜的交互式智能導(dǎo)診系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn). 該系統(tǒng)利用現(xiàn)有醫(yī)療知識圖譜資源, 整理得到一個適合導(dǎo)診的醫(yī)療知識圖譜, 并在此基礎(chǔ)上, 通過實(shí)體識別、實(shí)體鏈接技術(shù)識別患者主訴中的醫(yī)療信息, 利用預(yù)訓(xùn)練語言模型、圖嵌入學(xué)習(xí)、圖神經(jīng)網(wǎng)絡(luò)等技術(shù)查詢得到問診文本相關(guān)的子圖, 實(shí)現(xiàn)了結(jié)合子圖和文本語義信息的科室推薦模型. 針對推薦科室置信度不高的情況, 引入知識圖譜, 采用單輪和多輪交互結(jié)合的方式進(jìn)行科室推薦. 解決了在復(fù)雜的多醫(yī)療實(shí)體主訴文本上進(jìn)行導(dǎo)診的問題, 提升了導(dǎo)診系統(tǒng)的智能度.