徐慕豪,葛欣宜,劉 洋,劉俊秀,趙 耀,朱振峰+
1.北京交通大學 信息科學研究所,北京100044
2.北京交通大學 現代信息科學與網絡技術北京市重點實驗室,北京100044
3.北京大學第三醫院 耳鼻咽喉頭頸外科,北京100191
近年來,隨著計算機和信息技術的不斷發展,我國的醫療信息化產業逐漸建設完善,其中患者的就診記錄也從原先的紙質材料轉變為數字化的電子病歷。相比世界其他國家,我國在電子病歷建設方面起步較晚。但隨著醫療衛生系統愈發受到人們關注重視,近年來我國政府也出臺了多項政策來支持醫療信息化的建設與發展。
電子病歷是醫療信息化中重要的數據資料,其貫穿于患者就診看病的全部醫療活動中,涵蓋了大量的醫療信息和健康信息,有著巨大的研究意義。首先對于患者來說,挖掘電子病歷中的信息有益于自身的健康發展。患者以往的診斷信息和健康狀況都被記錄在電子病歷中,如果能提取、分析這些記錄中的數據信息,便可為患者的身體狀況、健康信息提供一定的參考與預測。同時,通過挖掘分析患者的電子病歷數據,可以在大數據中尋找到其他類似的患者,以其他患者的狀況信息和用藥信息為該患者提供參考[1-2]。其次對于醫生來說,挖掘電子病歷中的寶貴信息能提高醫療效率。
推薦系統可以根據用戶的偏好預測用戶對其他未接觸項目的潛在興趣,從而為用戶形成個性化推薦列表[3],已廣泛應用在電子商務、新聞媒體、社交網絡等眾多領域。目前的用藥推薦算法一般只限于對患者電子病歷數據中數值型、結構化數據的使用,然而本文研究的過敏性鼻炎是一種較為常見的呼吸道疾病,通常情況下醫生通過患者的癥狀和病史便可做出診斷和治療,少數情況下可能會進行過敏原檢測。其病歷中一般只包含文本類型的主訴信息和醫囑用藥信息,其中主訴文本蘊含了醫生為患者做出診斷和醫囑用藥的關鍵信息。同時,注意到癥狀和用藥相當于患者在兩個不同視角上的描述,且兩視角具有較強的相關關系。因此,本文研究的問題便是通過構建患者主訴和用藥信息之間的關聯關系,將其投影到一個共享子空間,學習患者表示從而為患者推薦合適的藥物,其示意圖如圖1 所示。

圖1 過敏性鼻炎用藥推薦示意圖Fig.1 Medicine recommendation for allergic rhinitis
為了解決上述問題,本文提出了一種基于深度典型相關自編碼器的過敏性鼻炎用藥推薦算法。本文首先從非結構化的主訴文本中抽取關鍵信息,然后通過構建深度典型相關自編碼器模型對數據進行特征提取并建立起主訴癥狀和用藥情況之間的關聯關系,從而為過敏性鼻炎患者推薦用藥。
本文的主要貢獻有三方面:
(1)提出一種基于搜索引擎的主訴文本結構化表示方法,使用詞語間互信息值對主訴文本進行分詞,基于搜索引擎計算詞語相似性從而將相似詞語歸為一類,將主訴分詞結果轉換為結構化數據。
(2)提出一種基于深度典型相關分析的藥品推薦算法,利用深度典型相關自編碼器構建患者癥狀和用藥之間的關聯關系,進而根據患者癥狀信息通過近鄰搜索來為其推薦用藥。
(3)在一個真實的來自三甲醫院耳鼻喉科的電子病歷數據集上進行實驗,實驗驗證了模型的準確性和有效性,證實了模型的實際應用價值。
廣義的推薦系統依賴用戶和項目之間的交互關系找到用戶的個性化需求,從而實現推薦功能。傳統的推薦系統主要分為基于內容的推薦、基于協同過濾的推薦和混合推薦[4]。其中應用最廣泛的基于協同過濾的推薦可以分為基于用戶的協同過濾和基于物品的協同過濾,前者首先尋找與當前用戶偏好相似的鄰居用戶,然后從鄰居用戶中為當前用戶推薦其沒有進行過操作的項目;后者則是計算項目之間的相似性,然后為當前用戶推薦和他以前喜好的項目相似的項目。文獻[5]提出一種基于隱性反饋模型與交叉推薦的藥物推薦方法,使用非負矩陣分解提取癥狀和藥物特征。文獻[6]提出一種基于多源情境協同感知的藥品推薦方法,對情境信息、病情信息和藥品信息綜合建模。以上研究并未考慮患者的癥狀和用藥信息之間的相關關系,并且線性模型限制了模型的表征能力。
目前用藥推薦方面的研究并不充分,且大多數研究主要依據的是患者和藥品之間的交互關系,從醫學領域來看,僅僅使用交互關系來進行推薦是極其不準確的。
典型相關分析(canonical correlation analysis,CCA)[7]是一種多元統計分析方法,用于探尋同一個體中兩個多向量之間的關聯關系,其使用典型變量對之間的相關關系來衡量兩組指標之間的整體相關性。CCA 是一種廣泛應用在多視角學習當中的方法,其將兩個視角的數據線性映射到低維子空間中,使得映射后的數據具有最大的相關性。
因為CCA 本質上是一種線性映射的方法,不能較好地處理現實世界中錯綜復雜的數據關系。核典型相關分析(Kernel CCA)[8]將核函數的思想引入典型相關分析中,將低維數據映射到高維的核函數空間后,再進行典型相關分析。深度神經網絡和CCA也有較好的結合,Andrew 等人提出了深度典型相關分析(Deep CCA)[9],依據大量數據同時對兩個視角進行非線性映射,保持映射后的數據有最大相關性。
基于深度典型相關自編碼器的過敏性鼻炎用藥推薦算法整體框架如圖2 所示,該模型主要包括三部分。

圖2 過敏性鼻炎用藥推薦算法整體框架Fig.2 Framework for medicine recommendation for allergic rhinitis
(1)主訴文本結構化表示。使用詞語間互信息值對主訴文本進行分詞,基于搜索引擎計算詞語相似性從而將相似詞語歸為一類,將分詞結果轉換為結構化的癥狀表示。
(2)深度典型相關自編碼器學習癥狀和用藥表示。主訴癥狀和用藥情況可以看作一位患者的兩個視角信息,且兩者之間具有較強的相關關系,基于深度典型相關自編碼器來學習深層表示并提高兩視角數據之間的相關性。
(3)加權近鄰搜索進行用藥推薦。針對上述獲取的癥狀和用藥深層表示,通過距離值加權的近鄰搜索為新患者推薦用藥。
在過敏性鼻炎患者的電子病歷中,最主要的內容便是主訴文本,其蘊含了醫生為患者做出診斷和醫囑用藥的關鍵信息。主訴文本通常不超過20 個字,且多以關鍵詞形式呈現,而常用的命名實體識別技術需要大量的標注信息和語料庫,需要耗費極大的人力、物力,因此,本文提出了一種主訴文本結構化表示方法,通過分詞處理、信息抽取等提取包含的癥狀信息。
對于本文研究的過敏性鼻炎,患者主訴信息中的醫學詞語使用較為固定,考慮使用互信息值[10]來進行新詞發現,識別出主訴文本中的醫學詞語和固定搭配,計算公式如式(1)。

點互信息值越大,表明兩個詞語之間的關聯性越強,即相鄰出現的概率越大,也就意味著其成為固定搭配組成詞語的概率越大。篩選出合適的固定搭配新詞,將其添加進自定義詞典,對主訴文本再次進行分詞。下一步以醫院方提供的M類癥狀作為癥狀標準詞典模板對文本中信息進行提取。但在實際中,由于不同醫生的習慣不同,針對同一癥狀事物,其在主訴上的描述可能存在一定的差異。為了更準確全面地提取主訴文本中的信息,本文提出了一種基于搜索引擎的詞語相似性計算方法,將含義相似的詞語歸為一類。基于搜索引擎的詞語相似性計算[11]將網絡作為一個實時更新的語料庫,其側重于詞語對的相關性。主訴結構化的整體處理過程如圖3。

圖3 基于搜索引擎的主訴文本結構化表示Fig.3 Structured representation of chief complaint text based on search engine
在進行信息抽取時,首先對分詞后的結果與標準逐個對比,若與癥狀標準匹配,則直接完成抽取工作;若均不匹配,則依據式(2)計算該詞語與全部癥狀標準模板的相似度,若最大的相似度超過設定的閾值,便將其歸為對應的標準。

其中,w是分詞結果中的詞語,q∈Q,Q是全部癥狀標準詞語的集合,N(w)表示使用搜索引擎對w進行搜索返回的查詢結果數量,N(w,q)表示同時搜索兩個詞語w和q返回的查詢結果數量,Nb表示搜索引擎的索引總數。
每位患者的主訴癥狀和用藥情況可以看作該患者的兩個視角信息,且兩者之間具有較強的相關關系。本文將堆棧稀疏自編碼器[12]和典型相關分析[13-14]相結合,構建一個深度典型相關自編碼器(deep canonically correlated autoencoder,DCCAE)用于更好地獲取患者主訴癥狀和用藥情況的表示,模型如圖4所示。

圖4 深度典型相關自編碼器Fig.4 Deep canonically correlated autoencoder
首先對主訴癥狀和用藥情況分別使用一個堆棧稀疏自編碼器重構輸入數據,并提取對應的非線性特征。然后對隱藏層的輸出進行典型相關分析,將患者癥狀和用藥情況投影至一個共享子空間,并計算兩者的相關系數,將結果反饋給網絡的輸入層,通過迭代訓練最小化兩個自編碼器的重構誤差,并且最大化兩視角信息的典型相關系數。模型目標函數定義如式(3)。


其中,f和g分別是自編碼器中編碼階段的深度神經網絡,p和q分別是解碼階段的深度神經網絡,X和Y表示主訴癥狀和用藥情況的輸入矩陣,U=[u1,u2,…,uL]和V=[v1,v2,…,vL]分別表示處理兩個隱藏層輸出向量的投影矩陣,rx和ry分別是協方差估計的正則化參數,α是重構誤差和相關系數之間的權衡參數,λ是自編碼器的正則化參數。
通過DCCAE獲取了患者主訴癥狀和用藥情況之間非線性的特征表示,分別為。對于一個僅含主訴癥狀信息的新患者樣本,首先通過訓練好的癥狀自編碼器獲取其癥狀表示xa∈RL,并計算其經過U投影的典型向量。然后使用K近鄰算法搜索在訓練集中與該樣本距離較近的其他多組典型向量,距離計算公式如式(4)。

其中,ρ是經過歸一化處理的相關系數。
至此,獲得了與新樣本癥狀向量鄰近的K個癥狀向量,而這K個癥狀向量對應著K個原始患者信息,下面根據近鄰度距離加權計算用藥平均值作為用藥評分,計算公式如式(5)。

獲取新樣本的用藥評分后,從大到小將藥品進行排序,從而為患者推薦一種或多種藥品。
本文實驗所用數據集來自某三甲醫院耳鼻喉科診斷為過敏性鼻炎的患者電子病歷,且經過脫敏處理,對電子病歷進行清洗、去重等操作,獲得3 700 條電子病歷記錄,包含患者的基本信息、主訴癥狀、用藥醫囑等。藥品種類共100 種,其中使用頻率大于1%的藥品有23 種。通過2.1 節主訴文本結構化處理得到最終數據集,其中每條記錄為一位患者的全部信息,包括16 項癥狀指標和23 項用藥情況,均為二值數據。實驗中數據集按比例劃分為訓練集、驗證集和測試集。
本文采用精確率(Precision@R)、召回率(Recall@R)和F1-score(F@R)作為評價指標。精確率表示正確預測正樣本占預測為正樣本的比例,召回率表示正確預測正樣本占實際正樣本的比例,F1-score 是精確率和召回率的調和平均值,公式如下:

其中,N為數據總數量,表示第n個數據的用藥集合,表示第n個數據推薦的前R個用藥集合。在本文使用的數據集中,所有患者使用的藥物組合中均包含了同一種藥品“鼻炎3 號”,因此僅推薦一種藥品時的結果沒有差異,故R在{2,3}中取值。
為了驗證本文算法的效果,選擇使用以下5 種算法進行對比實驗。
(1)Frequency(Freq)。該方法統計訓練數據中每種藥品的出現頻次,在進行推薦時,對于測試集上每一條數據均以出現頻次作為用藥評分。
(2)KNN-e[15]。直接使用原始的主訴數據計算歐式距離來找出與此患者最相似的K個患者,計算用藥數據的平均值作為用藥評分。
(3)KNN-h。將(2)方法中的漢明距離替換為歐式距離。
(4)MLP(multi-layer perceptron)。多層感知機是一種經典的神經網絡,包括輸入層、輸出層和多個隱藏層。將患者的主訴數據作為輸入層的輸入,使用ReLU 函數作為激活函數,訓練其輸出每種藥品推薦的概率作為用藥評分。
(5)CCA。對原始主訴信息和用藥信息進行典型相關分析,獲取兩者的投影向量,再使用3.3 節當中的方法進行用藥推薦。
實驗中,在驗證集上進行多次重復實驗,利用網格搜索方法確定最優參數。對于所有方法,設置癥狀維度為16,用藥維度為23。其中KNN 算法中近鄰個數K在{12,24,36,48,60}中取值;MLP 具有一層隱藏層,維度在{16,18,20,22}中取值;CCA 算法中最終輸出維度在{4,8,12,16}中取值;在本文提出的方法中,隱藏層維度d0和d1均在{4,8,12,16}中取值,近鄰個數K在{12,24,36,48,60}中取值,權衡參數α在{0.50,0.75,1.00,1.50,2.00}中取值,正則化系數λ在{10-5,10-4,10-3,10-2,10-1}中取值。
得到的最優參數如下:KNN 算法中近鄰個數K=36,MLP 的隱藏層維度為18,CCA 算法中最終輸出維度為8;在本文方法中,兩個自編碼器網絡的維度分別為16-12-8-12-16 和23-16-8-16-23,K=36,α=2,λ=10-5。
本文首先對上述數據集進行主訴結構化,圖5 和圖6 分別給出了詞語“流白涕”和“嗅覺下降”基于搜索引擎計算詞語相似性的結果圖。從結果可以看出,“流白涕”與“流清涕”的匹配度最高,“嗅覺下降”和“嗅覺減退”的匹配度最高,這也符合實際中醫生的認知。

圖5 “流白涕”與癥狀標準詞典模板的匹配結果Fig.5 Matching results of word thin nasal discharge to standard dictionary template for symptoms

圖6 “嗅覺下降”與癥狀標準詞典模板的匹配結果Fig.6 Matching results of word hyposmia to standard dictionary template for symptoms
通過實驗比較了本文方法和其他對比方法。表1 給出了不同方法的性能表現,實驗結果均是運行5次然后取平均性能所得。觀察表1 可以看出:

表1 各方法在數據集上的推薦性能Table 1 Evaluation results of different methods on dataset
(1)與所有的對比方法相比,本文方法在精確率Precision、召回率Recall和F1-score 上都取得了最好的結果,這證明本文方法在過敏性鼻炎的用藥推薦上能夠實現更有效的實驗性能提升。
(2)KNN-e 方法未能超過Frequency 方法,可以看作完全無效果。這是因為KNN-e 直接使用患者的二值化癥狀數據計算歐式距離,不能較好地計算患者之間的相似度。相比而言,KNN-h 使用的漢明距離比歐式距離更加有效。
(3)基于深度學習的MLP 方法比CCA 模型效果更好,這是因為CCA 模型雖然考慮了患者癥狀和用藥之間的相關性,但線性變換的特點限制了模型的表征能力。
(4)對比MLP 和本文方法,前者采用端到端的模式進行訓練,沒有考慮患者之間的相似性。相較而言,本文方法使用深度典型相關自編碼器對患者的癥狀和用藥進行表征并構建相關關系,能夠搜索到與患者相似的群體,同時取得良好的推薦效果。
下面測試不同參數設置對模型結果的影響。圖7展示了K 近鄰中的近鄰個數對本文方法及對比方法效果的影響,其中設置推薦藥品數為3,調節不同的K值大小。可以看出,在K=36時取得最好效果。這是因為隨著K值的增大,搜索得到的患者相似度逐漸降低,可能引入更多的噪聲信息,從而降低實驗性能。

圖7 近鄰個數K 對性能的影響Fig.7 Effect of the number of neighbors K on performance
本文方法使用了兩個含有2 層隱藏層的自編碼器,令每層的維度分別為d0和d1。固定d0不變,圖8展示了d1的變化對本文方法效果的影響,其中K設置為36,推薦結果數設置為3。可以看出,在d1=8 時取得最好效果,這是因為較低維度的空間沒有足夠能力表示數據的隱藏屬性,而較高維度的空間又不利于模型的泛化能力,造成推薦性能下降。

圖8 隱藏層維度d1 對性能的影響Fig.8 Effect of hidden layer dimension d1 on performance
本文提出了一種基于深度典型相關自編碼器的過敏性鼻炎用藥推薦算法。該模型通過一種主訴文本結構化表示方法,使用詞語間互信息值對主訴文本進行分詞,基于搜索引擎計算詞語相似性從而將相似詞語歸為一類,將分詞結果轉換為結構化的癥狀表示。與目前常見的自然語言處理方法相比,該表示方法可移植性好,不需要在大量語料庫上進行訓練便可完成任務。同時,該模型考慮到患者的癥狀和用藥之間存在較強的相關關系,通過深度典型相關自編碼器建立起兩者之間的關聯關系。最后在一個真實的來自三甲醫院耳鼻喉科的電子病歷數據集上進行實驗,驗證了模型的準確性和有效性,證實了模型的實際應用價值。