葉郅弈 蔡莉莉




摘要:隨著經濟的發展和生活水平的提高,人們對自身健康的需求日益關注。長期壓力及不健康的生活習慣使得亞健康人群比例連年攀升。當身體出現某些不適癥狀時,人們迫切想要了解癥狀對應的疾病原因,以便盡快就醫。為方便人們的線上導診,該文提出基于TextRNN的醫療導診設計,使用預訓練模型將患者的自述病情逐詞映射為詞向量并輸入模型,通過雙向長短時記憶網絡提取病情中的特征并學習,預測出患者需要就診的科室,實現了智能導診的功能。
關鍵詞: 智能醫療導診; TextRNN; 雙向長短時記憶網絡;特征學習
中圖分類號:TP311? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2023)31-0082-03
開放科學(資源服務)標識碼(OSID)
0 引言
就醫問題一直是民生問題的一大熱點,隨著時代的發展以及互聯網技術的應用與普及,線上醫療服務逐漸成為新的趨勢,這給人們帶來極大的便利。過去的傳統就醫模式,患者需要前往導診臺,經過護士的分診工作后,才能了解自己所需的掛號科室。但由于疾病種類繁多等問題,醫護人員可能無法及時分診到每一位患者[1]。為此患者可以選擇各大醫療網站推出的線上醫療服務,使用手機將自己的病情進行簡單自述,然后發送到網站,具備相應醫療資歷的專業人員會根據患者所提供的病情自述推薦就診科室。相比傳統就醫模式,這種方式使得患者的就醫效率有了明顯提升,但也存在等候分診的時間差。為了充分利用大數據的優勢,基于深度學習的智能導診系統可以根據患者的病情自述,智能地分類預測出需要就診的科室,在第一時間為患者提供分診信息,幫助患者選擇與其病情對口的專項科室或特色科室,減輕普通科室的醫生壓力。同時也方便患者進一步了解自身的病情,提前準備相應的就診材料,提高患者的就醫綜合體驗。
智能導診模型的設計思路屬于自然語言處理領域的文本分類問題。文本分類是指使用計算機學習文本中的特征,并根據給出的標簽對其進行分類學習,以幫助人們標注分類。文本分類問題中較為重要的工作就是將文字表示為計算機易處理的形式,常見的文字表示方法有詞袋模型、向量空間模型以及詞嵌入等。經過文字表示處理后,數據將通過分類模型進行分類學習。常見的分類模型有基于機器學習的決策樹、K近鄰、樸素貝葉斯分類器、支持向量機以及基于深度學習的TextRNN、TextCNN、Transformer等。在深度學習模型選擇方面,傳統的RNN模型可以很好的利用其獨特的記憶能力,尋找詞語在上下文的含義,但計算速度較慢。在處理較長文本時,存在有梯度消失問題[2],改進后的雙向長短時記憶網絡(BiLSTM) 文本分類模型能有效避免梯度消失問題。
1 數據與模型介紹
1.1 數據集介紹
先使用beatufulsoup、urlibPython等模塊,爬取各大醫療網的數據。數據包括疾病的名稱、疾病的典型癥狀、臨床表現等總計18 886條數據,帶有科室信息的醫療問答信息共計54 000條數據。爬取的原始數據中存在重復的問答語句以及與醫療領域無關的文本內容,因此需要對爬取的數據進行清洗,同時去除數據中存在的亂碼數據和低于5個字符的無效數據。
再將患者的自述癥狀以及所攜帶的科室信息分類成27種不同科室,并為其標注上對應的0~27標簽。科室分別為肛腸科、普通外科、神經腦外科、肝膽科、泌尿科、乳腺科、心血管科、心外科、胸外科、腫瘤科、神經科、內分泌科、消化科、呼吸科、腎內科、感染科、風濕免疫科、普通內科、男科、皮膚科、耳鼻喉科、兒科、婦產科、骨科、心理科、血液科、肝病科。每個科室擁有1 500條數據樣本,總計4.5萬條數據,并將這些數據按照1∶1∶8的比例分配成測試集、驗證集、訓練集。如圖1為訓練集的部分數據展示。
1.2 模型介紹
TextRNN模型由嵌入層、LSTM層和輸出層構成。
1) 嵌入層
在數據輸入模型之前,需要通過嵌入層將詞語用低緯、稠密、連續的向量來表示,以轉化為計算機可以處理的數據類型,其中每個緯度表示文本詞語的一個潛在語法或者語法特征。在具體的醫療領域中,復雜的病情描述加大了上下文解讀的難度。而預訓練是指通過大量的中文文本數據進行預學習,以此得到能較好表達詞語上下文含義的詞向量,提高模型的上下文理解能力,達到更好的分類效果。本文使用的是LI S等[3]提出的開源預訓練模型,此模型使用MIKOLOV T等[4]提出的Word2vec工具中的Skipgram模型對中文數據進行預訓練。
2) LSTM層
LSTM層的作用是捕捉上下文之間隱含的相關性。常用模型有卷積神經網絡、循環神經網絡、遞歸神經網絡、深層Transformer,本文使用的是基于循環神經網絡(RNN) 的拓展模型BiLSTM。在處理文本語句時,傳統的RNN有著天然的優勢[5],它能按照句子的邏輯順序,分別把字輸入對應順序的時間節點,在處理完一個時間節點后進行下一個時間節點的計算,當完成所有時間節點后,模型就能捕捉到上下文之間的相關性。但當文本語句過長時,RNN模型對上下文理解能力將會變差,同時由于RNN各個時間節點使用同一個權值矩陣,導致模型在反向傳播過程中會出現梯度消失或者梯度爆炸等問題。
LSTM在RNN的基礎上進行了改進,通過添加遺忘門、輸入門、輸出門提高了上下文的理解能力。在LSTM的基礎上,BiLSTM通過建立一條反向LSTM,在正向與反向序列處理完后,將正反雙向的LSTM結果整合起來,得到理解效果更好的輸出結果[6]。
3) 輸出層
輸出層是模型的最后一層,用于預測分類結果,將LSTM層所表現出來的特征進行拼接后作為輸入。常用模型包括:多層感知層(MLP) +Softmax、條件隨機場、遞歸神經網絡和指針網絡,本文使用Softmax得到分類結果。圖2是文本分類模型框架圖。
4) 評判指標
常用評估指標包括嚴格匹配指標和寬松匹配指標,本文使用的是嚴格匹配指標,通過假陽性(FP) 、假陰性(FN) 和真陰性(TP) 的數量來計算精確度、召回率和F1值,如式(1) ~(3) 所示:
[Precision=TPTP+FP] (1)
[Recall=TP(TP+FN)] (2)
[F1-score = 2×Precision×RecallPrecision+Recall]? ?(3)
2 模型測試與模型部署
2.1 模型測試
模型的主要思路是將患者輸入的自述癥狀如“前段時間飲食睡眠不規律,生活壓力巨大。連續3~4天肚臍下部隱隱作痛,幾乎直不起腰來,大便正常。好像存在腹脹氣,不確定癥狀”,通過預訓練模型將癥狀映射為300維的詞向量輸入TextRNN網絡,詞向量經過計算和拼接后,經Softmax分類后得出預測的推薦科室。模型的參數選擇如表1所示,經過10輪的迭代,模型的準確度可以達到82.26%,各科室評價指標如表2所示,證明該模型可以較好地將患者的自述病癥進行分類。
根據表2的分類評估指標,對測試集進行評估,普通內科、普通外科、兒科、感染科等科室分類效果相對較差。在檢查數據集后發現,感染科數據中存在與其他科室相似的交叉病癥信息,如“被狗咬了一絲絲皮但是沒出血,幾個小時后發現身體酸痛發熱”。“狗咬”與“出血”等關鍵詞屬于感染科范疇,而身體發熱酸痛這類病癥信息可存在于多個科室中,導致模型在分類時,無法很好地區分此類交叉多個科室的病癥信息。此外,上述科室的患者自述病癥多樣,確診的疾病類型眾多,導致這類數據集出現過多特征,而驗證集中的數據過少,存在樣本分布不均等問題。相比分類效果較差的科室,病癥信息較為明顯的科室、數據質量較好的科室如肛腸科、男科等分類效果較好,f1值均在0.8以上。
2.2 模型部署
智能導診模塊的面向對象多為老年人群體或工作較為繁重的上班族,因此模型的部署需要做到快速、便捷、易上手等特點,并且上述群體對于微信及微信中的附加功能較為熟悉且在日常生活中使用頻率較高。為此,選擇將模型部署到微信小程序平臺,通過小程序與服務器完成導診工作。
部署模型的方法有很多,其中較為常見的有:通過將模型部署到服務器或云端上,使用請求和響應進行交互的在線部署方法;將模型打包直接部署到手機設備中的離線部署方法;使用開源的深度學習模型部署工具如 TensorFlow Serving、TorchServe、MMDeploy 等將模型部署到服務器或云端上的模型部署工具包。
由于模型框架規模較大,占用資源較多,對患者的設備要求較高,因此選擇在線部署方式完成智能導診系統設計較為合適。使用Python編寫的flask框架將模型部署到服務器中,flask框架具有便捷、靈活、輕量化等特點,非常適合Web服務的開發。
微信小程序則用來收集患者的自述癥狀并向服務器發送請求,經過預測將推薦科室信息結果返回小程序界面,因此需要在小程序開發工具中設計可以接受患者輸入的對話框,發送請求的查詢按鍵以及顯示科室信息的文本框。
舉例說明智能導診模塊的使用流程。患者通過點擊簡述病情下的對話框,輸入自己的自述病癥,點擊查詢按鈕,小程序會將自述病癥傳入服務器并通過詞嵌入輸入模型,經過模型預測后,將與自述病癥最相關的科室信息返回給小程序并顯示出來,完成導診工作。如圖3所示為小程序導診界面顯示結果圖。患者通過在病情簡述框中輸入“膽囊結石該去哪個科室”“心臟搭橋會影響生命嗎”“常年有甲狀腺功能減退,近期眼睛腫,腿腫”“大便不成形,胃里有氣不消化腸胃有聲”等癥狀分別給出了肝膽科、心外科、內分泌科及消化科的導診建議,結果測試基本是符合預期的。
3 總結
導診模塊通過小程序收集患者自述病情,使用TextRNN模型進行科室分類,預測出推薦科室后,反饋到小程序實現患者的自主問診。在模型的建立中,導診模型應用了預訓練詞向量模型,經過驗證與評估在科室推薦功能上具有一定的準確性。但在部分科室標簽中,數據集存在問題。部分科室數據較少,病癥特征較多且與其他科室存在相似的交叉病癥信息,導致模型的分類能力較差。在模塊的實際測試中,導診模塊對新型詞匯諸如方言類的關鍵詞或較為口頭化的疾病癥狀分類不佳。同時,基于Word2vec的預訓練模型無法表達同一詞語在不同語境下的含義。動態詞向量表示模型ELMO與BERT可以很好地解決此類問題,提升詞語上下文含義的表示能力,提高模型分類的精度。在分類模型選擇方面,GPU的大力發展提升了大規模計算的能力,但BiLSTM并未充分地利用GPU的并行計算能力,這使得BiLSTM在處理速度上處于劣勢。隨著深度學習的不斷發展,添加注意力機制的CNN網絡以及基于Transformer的深度學習框架能更好地分類出患者的疾病,同時提高模型訓練的效率,更利于智能導診系統的科室推薦功能。
參考文獻:
[1] 戴甜甜,金冬.智能醫療APP導診功能設計探究[J].設計,2020,33(5):137-139.
[2] BENGIO Y,SIMARD P,FRASCONI P.Learning long-term dependencies with gradient descent is difficult[J].IEEE Transactions on Neural Networks,1994,5(2):157-166.
[3] LI S,ZHAO Z,HU R F,et al.Analogical reasoning on Chinese morphological and semantic relations[EB/OL].[2022-06-20].2018:arXiv:1805.06504.https://arxiv.org/abs/1805.06504.pdf.
[4] MIKOLOV T,CHEN K,CORRADO G,et al.Efficient estimation of word representations in vector space[EB/OL].[2022-06-20].2013:arXiv:1301.3781.https://arxiv.org/abs/1301.3781.pdf.
[5] LIU P F,QIU X P,HUANG X J.Recurrent neural network for text classification with multi-task learning[EB/OL].[2022-06-20].2016:arXiv:1605.05101.https://arxiv.org/abs/1605.05101.pdf.
[6] 陳曉梅,肖徐東.基于集群辨識和卷積神經網絡-雙向長短期記憶-時序模式注意力機制的區域級短期負荷預測[J/OL].[2023-04-10].現代電力.https://kns.cnki.net/kcms2/article/abstract?v=LD-wYsOa3Djuwd0g-g0PymsD26hnTMxfzoGh Z0RMbQ4tG1YCm4VeGuporow3kE11GJ0rc0bJS7IgT6I6JoBYCFBTNJocxQBarj0B0r4cP_AZHNJMviUMTVI36cUUDBqDCk_ Jm4dC8mM=&uniplatform=NZKPT&flag=copy.
【通聯編輯:代影】