顧君杰,王 蓓+,李曉禹,鄒俊忠
(1.華東理工大學 信息科學與工程學院,上海 200237;2.清影醫療科技(深圳)有限公司 研發部,廣東 深圳 518083)
科室導診在患者正式就診前,根據病癥給患者提供可參考的掛號就診科室。隨著門診科室的分類越來越細,人們僅根據臨床醫學表現而沒有考慮深層次的醫學特征并結合醫學常識的話,較難正確地區分病癥對應的科室。傳統就診方式下,醫院會在就診大廳設置人工導診臺,由導診臺工作人員負責面對每天大量的患者科室咨詢問題。近兩年,由于疫情防控的常態化,線上就診已逐步成為不可缺少的就診模式。在線上問診時,由于沒有線下導診臺的設置,導致患者對自身病癥認識不清從而加重專家醫生的工作負擔。隨著人工智能技術的發展,越來越多的研究人員開始對智能化導診領域進行探索。目前,對智能導診的實現方法主要有相似度匹配、知識圖譜問答和數據模型分類等。相似度匹配是根據問診文本和科室核心詞之間的相似度來進行科室匹配,尚缺乏一定的醫學強知識性和可解釋性;采用知識圖譜能夠較好地關聯醫學專業知識,但需要強大且完備的專業領域知識庫;采用數據模型進行分類,可以通過選擇合適的神經網絡訓練模型來學習醫學語言特征,所需要的數據量也相對較小。本文主要將科室導診問題看待為數據模型分類問題,研究并提出基于深度學習的智能化科室導診模型。預訓練采用ALBERT模型來減少參數、降低訓練成本,并送入下游神經網絡對問診文本的語句位置等特征進行捕獲,關聯多個相關科室,將導診問題轉化為多標簽文本分類問題,最后給出多科室的預測結果,使得模型的預測結果能夠更貼近實際應用。
當前,導診系統在實現原理上主要可以歸納為基于相似度匹配、基于知識圖譜問答和基于數據模型分類3個方向。基于相似度匹配的方法通過計算患者的疾病描述和科室核心詞之間的文本相似度,將相似度高的科室作為推薦科室輸出。相關研究主要是對問診文本進行不同方式的加權來使匹配的預測結果更準確。衣鵬[1]對問診病癥進行貢獻度加權計算,引入信息熵加權優化方法,實現科室分診功能。徐奕楓等[2]在進行權重賦值時引入重心后移的概念,以提高科室預測的準確率。曠珊珊等[3]將專家經驗考慮在內,構建包含主客觀信息的重要度權重矩陣。基于知識圖譜問答的方法通過構建大規模的通用醫療知識語料庫,形成科室、疾病、癥狀、檢查、藥品相關聯的醫學知識圖譜,從而實現科室導診、智能預問診等功能。劉道文等[4]融合多源醫療數據構建的知識圖譜,包含癥狀-疾病,疾病-科室-醫院兩個子圖譜,實現各醫療實體的關系對應。湯人杰等[5]在海量醫學數據的基礎上,通過疾病癥狀識別、實體修飾否認識別、實體管理構建等方法完善醫學知識圖譜。全威等[6]通過融合知識圖譜與患者主述得到科室置信度,并在置信度較低時以交互問詢方式對患者癥狀進行補充,最終給出導診推薦科室。基于數據模型分類的方法借助患者主訴文本,采用文本向量化和分類器結合的方式,先選用合適的向量化方法對文本進行向量化,之后,使用機器學習或者深度學習的方法構建分類模型,依據模型預測結果實現科室導診。王若佳等[7]借助詞頻-逆文檔(TF-IDF)的方式對文本進行向量化處理,并結合多種機器學習模型進行了分類和比較。劉勘等[8]利用獨熱(One-Hot)編碼的方式實現向量化,采用卷積神經網絡(CNN)構建分類器,提取文本的高級語義信息以及不同醫療術語之間的相關性。湯人杰等[9]針對前人對導診系統的研究中存在的問題,引入BERT預訓練模型來進行文本向量化處理,并對接下游文本卷積神經網絡(TextCNN)模型實現科室分類。
在以上智能導診系統的研究方法中,由于患者的病癥有多種表示方法,不同科室的高頻詞也有所重復,僅依靠文本相似度的方法可能造成預測結果差異較大,比如“發燒”、“咳嗽”、“拉肚子”等在兒科和內科中都屬于高頻詞,根據文本相似度進行判斷容易造成混肴。采用知識圖譜的方法也需要克服數據的收集與統一這一難點,諸如癥狀與疾病、疾病與科室都是多對多的關系,不同來源的問診數據可能科室劃分也不同。采用數據模型分類的方法可以結合神經網絡學習語義語句等醫療語言特征,僅針對問診導診問題進行研究時所需的數據集相對較小,可以將算法模型靈活地嵌入線下導診設備以及線上智慧醫療系統中。本文將科室導診問題作為分類問題進行研究,設計基于深度學習的智能化導診模型。與其它論文工作相比,本文的不同點主要有:①多級科室預測模式。將問診時的一級科室和二級科室同時考慮在內,以問診問題作為輸入,一級科室和二級科室作為輸出,將科室導診問題轉化為自然語言處理中的多標簽文本分類問題,更貼近實際應用;②少參數輕量化模型。在文本向量化階段,相比于常用的BERT預訓練模型,本文采用ALBERT模型對參數進行簡化,以解決系統應用時數據、硬件等資源成本要求比較高的問題,使得導診模型在保證準確度和適應性的同時更輕量化與小成本化。
本文所構建的智能導診模型結構如圖1所示,模型整體分為4個部分:輸入層、雙向門控循環單元(Bi-GRU)特征提取層、注意力機制層、輸出層。以某互聯網醫院在一段時期內的問診文本作為數據集,對模型進行訓練及測試。輸入層主要作用是采用ALBERT預訓練模型對輸入文本進行向量化處理,將問診文本轉化為模型可以接受的形式。然后,將向量化后的數據送入Bi-GRU層,通過雙向的循環神經網絡獲得上下文語義的特征信息,同時避免出現梯度消失問題。接下來,再經過注意力機制層來突出關鍵內容對整體的貢獻,對局部的重點特征進行加強。最后,根據sigmoid函數預測概率得到多級科室的預測結果。

圖1 科室導診模型的整體結構
對文本進行預訓練的模型參數一般體量較大。為了獲取更優的訓練效果,往往會采用增加隱藏神經元個數的方式,由此帶來的參數量的增加會給模型訓練帶來困難。相對于預訓練中常用的BERT模型[10-12],ALBERT模型通過詞嵌入參數因式分解和跨層參數共享來降低BERT的參數量[13,14]。
本文采用ALBERT模型對問診文本進行向量化處理。不同于根據詞語相似度或文本頻率進行向量化的方式,利用ALBERT結構中包含的transform雙向編碼器,能夠在編碼時就將問診時的上下文信息考慮在內,在向量化時考慮一詞多義情況,使文本轉化后的向量更具有可解釋性。
ALBERT在token embedding層的向量化過程如圖2所示。將文本送入ALBERT模型時,首先經過tokenization標志化處理。比如,在模型中輸入“新生嬰兒嘔吐怎么辦”,標志化之后就將每個漢字單獨作為一部分處理。并且,在對語句進行向量化之前,會添加[CLS]作為句子開頭的特殊token,以及在結尾添加[SEP]作為句子結束的特殊token。其次,將每一個漢字送入token embedding層,將每個詞語轉化為固定維度的向量,在模型之中統一文本長度,對于短文本利用零值填充的方式保證長度統一。假設統一一句話的文本由n個詞語組成,取詞向量的維度為m,那么經向量化之后的矩陣X可以表示為X={x1,x2,x3,…,xn}。

圖2 token embedding層向量化過程
問診文本信息經ALBERT預訓練之后,對問診文本中包含的開放語義進行了向量化,獲得了動態的詞向量。針對具體的導診科室分類問題,在這些開放的語義信息中更關注患者問診時的上下文序列信息、位置信息和方向信息。本文將向量化之后的數據送入下游Bi-GRU神經網絡來學習特征序列的依賴關系。Bi-GRU神經網絡相比于其它神經網絡更適合處理具有序列特性的數據[15]。
GRU網絡在處理經ALBERT預訓練之后的第i個字的時候,將第i個字作為輸入xt,與前i-1個字的隱狀態ht-1拼接為一個新的矩陣并送入GRU網絡層神經元中,之后就可以得到訓練之后下一個字的隱狀態ht。在此基礎上,考慮到在對問診語句進行訓練時,當前時刻的輸出與前一刻和后一刻的狀態都有聯系,僅使用單向GRU可能導致整句話的特征向量無法得到充分使用。比如,模型對于“阿莫西林膠囊”,如果僅從前兩個字或前3個字無法理解名詞含義,但若在后向添加完整至“膠囊”,就能加強模型對文本的理解。同理,添加前向GRU使模型能夠反方向增加文本信息。
在Bi-GRU之后接入注意力機制,通過計算概率分布突出語句中的關鍵信息,并對重要語句分配相應注意力。經過Bi-GRU層處理的向量表示為H={h1,h2,h3,…,hn}, 通過注意力機制的計算得到每個元素對其它元素的注意力影響權重值。比如,αi,j表示第i個元素對第j個元素的影響權重值。在“新生嬰兒嘔吐怎么辦”中,“新生”、“嬰兒”、“嘔吐”是相對更重要的部分,而“怎么辦”和為了長度統一補全的零值影響值較小。利用注意力機制可以很好地區分出不同詞語的重要程度。
在問診中,病癥-疾病-科室屬于多對多的關系。比如,“新生嬰兒嘔吐怎么辦”和“兒科”、“內科”都有關聯。依據實際應用需求,本文在建立模型時考慮將問診問題抽象成為多標簽學習任務。Y={y1,y2,…,yq} 表示所有科室的標簽空間,設置一個閾值t,對于每一個樣本通過多標簽分類器f(.)計算預測為每個科室標簽的概率。當概率大于設置的閾值時,在輸出向量中將該位置的標簽置為1。本文在輸出層采用sigmoid作為激活函數,在每個科室類別上,利用sigmoid分類器分別判斷數據是否屬于該科室,進而將多標簽問題轉化為多個二分類問題,sigmoid函數表達式為
(1)
用sigmoid激活函數后,輸出層就將類別yj建模為伯努利概率分布
(2)
這樣,計算每一個科室的概率分布就與其它科室相互獨立。設置概率閾值為0.5,預測概率在閾值之上的多個科室之間非獨占輸出。
本文選取了某互聯網醫院一段時期內的問診文本對模型的性能進行測試和分析。考慮到數據均衡問題,分別選取了一級科室為兒科、內科、外科、婦產科、腫瘤科5個科室,每科室2500條問診數據,將一級科室下屬的多個具體科室作為二級科室。部分選取的科室問診數據見表1。在對問診數據進行科室標簽標注時,同時將問題的一級科室和二級科室作為該問題的標簽,科室之間以“|”分隔。其中,如果該問診問題的一級科室和二級科室名稱相同,則只給該問題貼一個標簽,不再重復標注。一級科室和二級科室共有36個科室類型。

表1 部分科室數據示例
對原始文本數據收集整理完成之后,首先對數據進行預處理,去除文本中無效的感嘆詞、空白文本等。之后,將所有數據按照75%和25%的比例劃分為訓練集和測試集。訓練集共有數據9375條,其中一級科室和二級科室不相同的問診數據為5500條,也就是多標簽數據占比為58.66%。
采用底層為TensorFlow的Keras深度學習框架,采用Python編程語言進行實現,實驗環境參數為Win11系統、PyCharm軟件、內存16 G等。模型各層網絡結構訓練參數設置見表2。

表2 模型參數設置
模型評估時采用binary_crossentropy作為損失函數,針對多標簽問題,可以在每個類別上分別計算負對數概率。為了防止模型過擬合,設置模型的神經元失活比例為0.2。結合問診數據集,文本長度統一選取為80。下游各層結構參數變化如圖3所示,文本數據經albert模塊將每個字提取出312個特征,形成(80,312)的維度向量,然后送入下游繼續訓練。在GRU層每層選取神經元為128個,雙向共256個,輸出維度按照科室類別為36維向量,其中一個或多個元素為1,對輸出向量中對應位置為1的科室進行最后預測輸出。

圖3 模型各層參數變化
4.1.1 單標簽科室分類模型
采用TF-IDF和樸素貝葉斯方法構建單標簽科室分類模型,作為與本文多標簽科室分類模型進行對比的模型。從分類結果來看,單科室分類模型的整體準確率為79.30%。詳細分析每個科室的分類準確率,其中兒科準確率77.89%、內科準確率81.10%、外科準確率72.10%、婦產科準確率83.30%、腫瘤科準確率84.00%。
為探究錯分數據的特征和原因,以兒科為例,提取出錯分數據進行具體分析。發現將原始科室為兒科預測為內科的概率最大,占所有錯分數據的63.50%,其次是外科和腫瘤科,分別占所有錯分數據的17.30%和14.50%,最后是婦產科,占所有錯分數據的4.70%。進一步地,從原始數據中提取出將兒科預測為內科的數據進行查看,發現這些數據中的絕大多數二級科室實際是內科。也就是說,錯分數據的一級科室為兒科,二級科室為內科。然而,在單科室分類模式下,只能將這些數據按照一級科室標注為兒科,從而導致模型在訓練分類的過程中對兒科和內科的特征產生混肴,降低了分類準確率,出現不合理的預測也將大大降低模型的實用性。
4.1.2 多標簽科室分類模型
將數據送入本文的多標簽科室分類模型中進行訓練,并對訓練結果進行可視化處理。經過多次實驗驗證,在迭代次數為23時,訓練集的準確率為98.84%,損失為0.0340,測試集的準確率為98.04%,損失為0.0592。模型訓練效果最好,隨迭代次數增加,訓練結果的損失曲線和準確率曲線如圖4所示。

圖4 模型訓練結果
與單標簽科室分類模型相比,多標簽科室分類模型的準確率得到了明顯提升。在單標簽科室分類模型中,由于問診病癥的復雜性和綜合性,不可避免地會涉及到多科室交叉問題,所以會導致僅以單標簽科室作為分類標準時,預測的準確率較低。另外,單標簽科室分類模式下,預測的結果也不能靈活應對多種實際問診需求。多標簽科室分類模型采用將多個關聯科室輸出的策略有效緩解了上述問題,有助于提升模型的實用性。
為了驗證本文的多科室導診模型在實際場景中的應用效果,將本文的模型生成預測腳本,并輸入新的問診數據對模型進行驗證。部分數據驗證結果見表3。

表3 模型實際預測情況
根據模型預測結果對模型進行分析,可以看出模型具有以下特征:
(1)當問診的問題一級科室和二級科室相同時,模型給出一個預測標簽。例如,表3中序號1和序號2的問診數據。序號1中的“疝氣”癥狀在醫學應該規劃為普外科也就是外科,屬于一級科室和二級科室相同,模型給出一個預測科室;同理,序號2中“體溫過高”屬于內科問診病癥,也與模型預測結果相符。
(2)當問診的問題一級科室和二級科室不相同時,模型給出一個或多個二級科室預測結果。例如表3中序號3、序號4和序號5的問診數據。序號3中對“癲癇”病癥進行問診,模型預測結果給出一級科室兒科和二級科室內科,患者在實際問診時可以直接根據預測結果進行掛號問診。如果問診數據與多個二級科室關聯度都比較大時,模型給出多個二級科室。如序號6的問診數據,根據“小兒腦癱”病癥,模型一級科室預測為兒科,二級科室給出神經內科和神經腦外科兩個科室。這是因為這兩個二級科室預測概率都大于0.5,患者在問診時可以首選二級科室為神經內科,在神經內科醫生繁忙或其它特殊情況下將神經腦外科作為備選科室。
(3)結合問診問題的實際語義給出預測科室。在表3中,從序號1和序號3的問診問題可以看出,模型在對科室進行預測時,更關注與問診語句的語義而不是科室關鍵詞語的出現頻率。因為“小兒”、“兒童”、“幼兒”、“寶寶”等詞語都屬于兒科的高頻詞語,但是序號1的問診數據中雖然有關鍵詞“小兒”,但在整個句子的病癥更側重于疝氣,疝氣問題屬于外科范疇;而序號3的問診數據雖然沒有提到兒科的關鍵詞,但是根據語義可以知道問診者更注重于智力的發育,患者顯然是還沒有發育或正在發育的兒童。
針對就醫問診前的科室選擇問題,本文提出一種基于ALBERT和Bi-GRU并結合注意力機制的多科室分類模型。結構設計上,ALBERT預訓練能夠降低模型的參數量,雙向GRU能夠捕獲問診文本前向和后向的位置信息和語義信息,注意力機制使得模型更關注局部重點特征,sigmoid函數能夠關聯多個相關科室,得到多級科室的預測結果。實驗結果表明,基于深度學習的多科室導診模型在準確率和靈活性上均優于單科室導診模式。進一步的分析也可以看出,多級科室導診模型在不同場景下的預測結果具備可靠性和有效性,更貼近于實際應用。本文所提出的算法參數量相對較少、成本較低,能夠靈活地嵌入在線上問診應用和線下就診指導設備中,為患者就診提供便捷。