馬鈺,張巖,王宏志,張義策
(哈爾濱工業(yè)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150001)
中國人口數(shù)量與醫(yī)療資源之間的巨大反差使得醫(yī)療資源日趨不足,短期內(nèi)增加醫(yī)療資源的總量幾乎是不可能的,因此有效整合和合理分配現(xiàn)有的醫(yī)療資源,緩解就診壓力,提升就醫(yī)質(zhì)量,有著很大的實用價值與社會意義。
智能導(dǎo)診根據(jù)患者的主訴為患者自動推薦相應(yīng)的醫(yī)院和醫(yī)生,對合理分診起著重要作用。從數(shù)據(jù)的角度看,智能導(dǎo)診是針對患者主訴和基本信息對醫(yī)院和醫(yī)生的推薦。
推薦技術(shù)與醫(yī)療導(dǎo)診的結(jié)合意義重大,但是傳統(tǒng)的推薦技術(shù)在導(dǎo)診中的應(yīng)用并不好,因為導(dǎo)診和每個用戶的特征息息相關(guān):由于地理位置等因素的影響,不同用戶在選擇醫(yī)院時差別很大,即使同一個用戶,在所患疾病不同時也會去不同的醫(yī)院就診。因此,針對用戶和疾病的不同推薦與導(dǎo)診的結(jié)果也應(yīng)該隨之變化,這樣的推薦才是有意義的。也就是說,醫(yī)療導(dǎo)診領(lǐng)域的推薦必須體現(xiàn)出用戶和疾病的特征,以個性化推薦為主。因此本文提出了一種面向智能導(dǎo)診的個性化推薦算法。
近年來國內(nèi)外與醫(yī)療領(lǐng)域推薦相關(guān)的研究很多,M. López-Nores等[1]引入了一種新的過濾策略,對于有特定疾病的患者,這種推薦方法的效率較高。P. Pattaraintakorn等[2]提出了一種使用粗糙集和規(guī)則分析的醫(yī)療推薦系統(tǒng),主要目標(biāo)是將病人的自身的身體數(shù)據(jù)作為條件屬性,推薦臨床檢查方式。宮繼兵等[3]提出了一種醫(yī)療社交網(wǎng)絡(luò)中的多層混合醫(yī)生推薦結(jié)構(gòu),通過挖掘網(wǎng)絡(luò)中醫(yī)生與病人之間的關(guān)系為患者推薦醫(yī)生。徐守坤等[4]提出過一種醫(yī)生資源均衡推薦算法,使用最佳結(jié)果優(yōu)先的推薦算法,解決了醫(yī)療資源的使用過度集中而產(chǎn)生的問題。
由上述分析可以看出,現(xiàn)行系統(tǒng)主要有兩方面的問題:1) 沒有考慮現(xiàn)在醫(yī)療推薦方面最迫切需要解決的問題;2) 沒有考慮導(dǎo)診與醫(yī)療推薦和傳統(tǒng)的推薦在本質(zhì)上的不同。
針對這些問題,本文提出了一種面向智能導(dǎo)診的個性化推薦算法,其主要有3個特點:
1) 算法提出了輔助診療機制,通過輔助診療能根據(jù)用戶的癥狀表現(xiàn),幫助用戶大致確定其所患疾病,從而明確用戶偏好,提升推薦結(jié)果的滿意度。
2) 算法獲得用戶評分及反饋信息的方式以顯式方法為主,并且在輔助診療時根據(jù)用戶的反饋信息對診斷結(jié)果進(jìn)行優(yōu)化,從而提高診斷結(jié)果的準(zhǔn)確性。
3) 提出了一種在有地域約束時的推薦算法。對Skyline[5-10]查詢進(jìn)行改進(jìn),并將其結(jié)果作為推薦的候選集合,之后在局部范圍內(nèi)使用基于協(xié)同過濾的評分算法,對候選集合進(jìn)行評分并排序。
為了對本文所述系統(tǒng)有一個全局性的了解進(jìn)而更好地了解算法細(xì)節(jié),本部分將以框架圖為基礎(chǔ),闡述算法中各部分的作用及大致思路。本文的整體框架如圖1所示。
圖1 整體框架Fig. 1 The overall framework
在圖1中,虛線將框架圖分為兩大部分:第1部分是獲取用戶偏好的過程,首先根據(jù)用戶的癥狀表現(xiàn),使用輔助診療算法給出初步診斷結(jié)果,再利用反饋信息和癥狀聯(lián)想機制進(jìn)一步確定所患疾病,從而完成癥狀到用戶偏好的轉(zhuǎn)化過程;第2部分是生成推薦結(jié)果的過程,由用戶的偏好結(jié)合其地理位置信息,采用改進(jìn)的Skyline查詢算法,找出一定范圍內(nèi)符合要求的醫(yī)院作為候選集合,最后在局部范圍內(nèi)由基于協(xié)同過濾的評分方式對候選集合中的醫(yī)院進(jìn)行評分、排序,從而生成最終的推薦結(jié)果。
在本節(jié)中,我們主要介紹輔助診療技術(shù)的具體細(xì)節(jié),用以解決醫(yī)療導(dǎo)診與推薦時用戶偏好未知的問題,通過輔助診療幫助用戶根據(jù)癥狀表現(xiàn)確定其所患疾病,從而明確用戶偏好。
為了提高分詞速度,本文通過對《同義詞林》進(jìn)行適當(dāng)?shù)母脑?,?gòu)建了一個新的字典。首先,部分無用詞匯被剔除;其次,按照詞語的字?jǐn)?shù),字典被分為5個部分,這樣每次匹配時詞典最多被掃描一次。使用改造后的詞典,診斷時癥狀描述中遇到的同義詞和相關(guān)詞等問題得到了一定程度的緩解。為了提高分詞準(zhǔn)確度,本文選用了逆向最大匹配法。為了加快診斷速度,本文采取了在癥狀信息上建立倒排索引的方法。該索引包含3個屬性,分別保存癥狀分詞結(jié)果對應(yīng)的同義詞林中的編碼、疾病ICD編碼和疾病中癥狀出現(xiàn)的次數(shù),以及癥狀對應(yīng)的疾病類型數(shù)。后兩個屬性在進(jìn)行診斷時使用。
3.2.1 輔助診療思路
輔助診療技術(shù)采用的核心思想是計算用戶輸入的癥狀信息與醫(yī)療知識庫中疾病癥狀信息之間的相似度,從而確診疾病類型,具體實現(xiàn)過程包括:
1) 對錄入的癥狀信息進(jìn)行分詞,使用分詞結(jié)果在索引表中進(jìn)行查詢,記錄所有匹配項,將對應(yīng)的疾病作為候選集,并將其中的疾病總數(shù)記為N。
2) 利用癥狀索引表計算輸入與候選集中每種疾病癥狀的相似度,并依據(jù)相似度進(jìn)行排序。
3.2.2 相似度計算
相似度計算公式借鑒了TF-IDF計算相似度的思路[11],其公式為
式中:S為輸入q與疾病癥狀之間的相似度;numi表示q中的某一癥狀i在該疾病中出現(xiàn)的次數(shù),當(dāng)q值較大時,意味著此癥狀為潛在的主要癥狀,則提高該癥狀的權(quán)重;numsymptom表示疾病的總癥狀數(shù),對numi進(jìn)行歸一化,以防止部分疾病系數(shù)偏大;typedisease表示癥狀對應(yīng)的疾病類型數(shù)量,對數(shù)函數(shù)則是為了提高潛在主要癥狀的權(quán)重。
3.2.3 癥狀聯(lián)想機制
算法在用戶輸入癥狀信息和得到診斷結(jié)果之后均引入癥狀聯(lián)想機制,以此來加強與用戶的交互,提升輔助診斷的準(zhǔn)確性。
1) 用戶輸入時的癥狀聯(lián)想
基于分詞與癥狀索引表,統(tǒng)計癥狀兩兩之間共同出現(xiàn)的次數(shù),并將與該癥狀共同出現(xiàn)次數(shù)前5的癥狀存入癥狀索引表作為聯(lián)想癥狀,在用戶輸入完一個癥狀之后,將聯(lián)想癥狀提供給用戶,用戶可以從中選擇與自身相關(guān)的癥狀,以此來幫助用戶提升輸入癥狀的完整性。
2) 診斷之后的癥狀聯(lián)想
首先計算疾病中每個癥狀在該疾病中的權(quán)值,然后選擇權(quán)重前3的癥狀作為聯(lián)想癥狀保存,在得到診斷結(jié)果之后將聯(lián)想癥狀提供給用戶,若出現(xiàn)聯(lián)想癥狀說明患該種疾病的可能性較高,從而幫助用戶進(jìn)一步確定所患疾病,癥狀在疾病中的權(quán)重計算方法與上述相似度計算公式類似,只不過N為疾病總數(shù)。
輔助診斷部分使用的數(shù)據(jù)只是疾病與其相關(guān)癥狀信息,相比于通用檢索系統(tǒng)其數(shù)據(jù)量很?。欢也樵兪怯砂Y狀確定疾病這一種固定模式,其輸入與輸出模式不變,因此引入癥狀聯(lián)想機制是合理的,而且能有效加強系統(tǒng)和用戶的交互,提升推薦結(jié)果的滿意度。
用戶往往會對自己可能患有的疾病進(jìn)行猜想,這是非常有價值的信息。系統(tǒng)將考慮來自用戶的反饋信息,對診斷結(jié)果進(jìn)行優(yōu)化。具體實現(xiàn)過程如下:
1) 將反饋疾病的癥狀加入查詢項;2) 增加查詢項中已有的癥狀的權(quán)重。具體而言,反饋信息與原癥狀信息的權(quán)重比α的計算過程為
式中:x為某反饋項在診斷結(jié)果中的位置,max為反饋項在診斷結(jié)果中位置的最大值。
本節(jié)介紹了基于地域信息的推薦技術(shù),該算法通過對Skyline查詢進(jìn)行改進(jìn)并將其結(jié)果作為推薦結(jié)果的候選集合,而將傳統(tǒng)的協(xié)同過濾推薦算法加以改進(jìn)作為局部范圍內(nèi)的一種評分方式,有效地應(yīng)對地域約束嚴(yán)格帶來的挑戰(zhàn)。
地理位置信息由經(jīng)度和緯度組成,是一個天然的二維數(shù)據(jù),而kd-tree常被用來對多維數(shù)據(jù)結(jié)構(gòu)進(jìn)行劃分,在kd-tree上對指定的點搜索其一定范圍內(nèi)的鄰居節(jié)點效率很高[12]。
因此,針對醫(yī)院的經(jīng)緯度信息,將所有的醫(yī)院以kd-tree的結(jié)構(gòu)組織起來,每個節(jié)點保存醫(yī)院的經(jīng)緯度以及醫(yī)院在數(shù)據(jù)庫中對應(yīng)的編號。在后面的推薦算法中,查詢指定點一定范圍內(nèi)的醫(yī)院時就可以在該kd-tree上進(jìn)行,返回醫(yī)院的idhospital集合,而根據(jù)idhospital返回醫(yī)院的其他信息的時間可忽略不計。
醫(yī)療推薦可以抽象為一個多目標(biāo)優(yōu)化問題,可以通過將Skyline查詢引入到推薦算法中解決。
Skyline查詢的目的是找到不被其他點支配的點集合作為Skyline集合,本文中支配的定義如下。
支配:一個醫(yī)院節(jié)點主要考慮距離和評分兩方面,因此可以抽象地表示為 h = 〈s,d〉,其中s表示該醫(yī)院治療某種疾病的評分,d表示該醫(yī)院與該用戶的距離;若 h1支配 h2,則 (h1.s≥h2.s且 h1.d≤h2.d)并且 (h1.s>h2.s或 h1.d<h2.d)為真。
該算法是針對傳統(tǒng)Skyline查詢中結(jié)果集合小于推薦結(jié)果集的最小閾值而提出的,此時推薦結(jié)果候選集合由兩部分組成:傳統(tǒng)的Skyline集合和優(yōu)先級隊列中的元素集合。其中Skyline集合中元素的優(yōu)先度高于優(yōu)先隊列中的元素,只有當(dāng)Skyline集合中的元素少于推薦的最小閾值時才從優(yōu)先級隊列選取元素進(jìn)行補充。
在算法中,維護(hù)一個優(yōu)先級隊列Q,長度為k+1,以便在隊列中的元素達(dá)到推薦結(jié)果的最小閾值時還能進(jìn)行一次插入操作,隊列Q的優(yōu)先級定義為:若h1支配h2,則h1的優(yōu)先級大于h2;否則,h2的優(yōu)先級大于h1。Q中從頭到尾元素的優(yōu)先級依次升高,也就是說,Q的頭元素Q.front的優(yōu)先級最低。對于在BNL中淘汰的節(jié)點p,進(jìn)行如下操作:
這一步要解決的問題就是結(jié)合用戶信息與醫(yī)院信息,對Skyline中的醫(yī)院集合進(jìn)行評分與排序,算法提出了局部范圍內(nèi)基于協(xié)同過濾的評分方式。該評分算法能夠充分利用用戶數(shù)據(jù)以及用戶之間的相似性,而且針對該領(lǐng)域中數(shù)據(jù)分布的局部稠密性,提出了近鄰用戶的篩選機制,有效降低了算法的時間復(fù)雜度。
4.3.1 近鄰用戶的選擇
傳統(tǒng)的基于用戶的協(xié)同過濾算法局限性在于不能很好地適應(yīng)大規(guī)模用戶和物品數(shù)據(jù)[13],假定M個用戶和N個物品,在最壞的情況下,評估最多包含這N個物品的所有M個用戶的記錄,因此復(fù)雜度較高,而且評分矩陣一般非常稀疏。
針對數(shù)據(jù)分布局部范圍內(nèi)稠密這一特性,近鄰用戶選擇算法將用戶信息同樣采用kd-tree索引結(jié)構(gòu)組織起來,可以快速找到距離該醫(yī)院一定范圍內(nèi)的用戶集合,該集合是所有用戶集合的一個很小的子集。選取一定范圍內(nèi)的用戶能夠覆蓋大多數(shù)的評分記錄。
4.3.2 帶“分級診療”的醫(yī)院累積評分
每次用戶就診后對就診的醫(yī)院的治療效果、收費水平、服務(wù)態(tài)度這3個方面進(jìn)行評分,系統(tǒng)根據(jù)3項各自的權(quán)重計算出評分的平均值,均值計算函數(shù)為
其中治療效果、收費水平、服務(wù)態(tài)度3者之間的權(quán)重暫時定為5:3:2,這3者的權(quán)重比是通過查閱相關(guān)資料與調(diào)查問卷的方式相結(jié)合得出的[14]。
計算醫(yī)院治療每種疾病的累積評分時采用動態(tài)的懲罰機制,懲罰系數(shù)設(shè)為α:
式中:Ld表示疾病標(biāo)注的默認(rèn)等級,Lh為實際所去的醫(yī)院。當(dāng)Ld=Lh時α=1,對該評分不懲罰;當(dāng)|Ld-Lh|越大時α越小,對該評分的懲罰越嚴(yán)重,α在計算每項均值時作為系數(shù)使用。
完整的醫(yī)院累積評分計算公式為
式中:effect、charge、attitude為各項評分的均值,userCounter為評分的總?cè)藬?shù),對評分總?cè)藬?shù)取對數(shù)是用來平衡規(guī)模不同的醫(yī)院之間評價人數(shù)的差別引起的偏斜。
4.3.3 計算預(yù)測評分
1) 確定相似用戶集
在經(jīng)過篩選的用戶子集上計算用戶相似度時采用的是Pearson相關(guān)系數(shù),因為Pearson相關(guān)系數(shù)能在計算中不考慮平均值的差異,用戶相似度計算公式為
相似度系數(shù)取值在–1~1之間,–1表示完全負(fù)相關(guān),1表示完全正相關(guān),0表示不相關(guān)。
2) 計算預(yù)測值
預(yù)測值計算公式為
針對空白評分?jǐn)?shù)據(jù),采用的是缺省投票機制,即用該醫(yī)院的平均評分值填充空白值。
本文所使用的測試數(shù)據(jù)來自超星醫(yī)療知識庫。為了模擬癥狀表述不全的情況,每種疾病的癥狀信息都被拆分為兩部分。實驗在醫(yī)療知識庫中疾病的種類數(shù)為100和1 000時分別進(jìn)行了測試。
統(tǒng)計實驗結(jié)果的策略是:如果診斷結(jié)果的前10位中出現(xiàn)該疾病,則認(rèn)為成功召回;如果診斷結(jié)果中的前3位中出現(xiàn)該疾病,則認(rèn)為診斷結(jié)果準(zhǔn)確。
1) 數(shù)據(jù)庫中的疾病種類為100時,選取了10種疾病,共20個測試用例,實驗結(jié)果如表1所示。
表1 100種疾病時的輔助診斷結(jié)果Table 1 The results of auxiliary diagnoses on 100 diseases
2) 數(shù)據(jù)庫中疾病種類為1 000時,選取100種,共200個測試用例,實驗結(jié)果如表2所示。
表2 1 000種疾病時輔助診斷結(jié)果Table 2 The results of auxiliary diagnoses on 1 000 diseases
實驗結(jié)果表明,所選測試數(shù)據(jù)在此統(tǒng)計策略下,當(dāng)數(shù)據(jù)庫中疾病種類為100時,召回率為95%,準(zhǔn)確率為85%,在優(yōu)化診斷之后,準(zhǔn)確率達(dá)到95%,召回率達(dá)到100%;當(dāng)數(shù)據(jù)庫中疾病種類為1 000時,召回率為91.5%,準(zhǔn)確率為81%,在優(yōu)化診斷之后,準(zhǔn)確率達(dá)到88.5%,召回率達(dá)到96%。
推薦算法的質(zhì)量衡量方法一直是存在爭議的,甚至有人認(rèn)為推薦系統(tǒng)的質(zhì)量根本就不可能直接衡量,因為有太多的目標(biāo)函數(shù)。目前最主流的評估方案是根據(jù)電影領(lǐng)域用戶歷史評分來估計不同算法的實驗方法,EachMovie數(shù)據(jù)集和Netflix數(shù)據(jù)集是其中的典型代表,但是很顯然,這些數(shù)據(jù)不可能應(yīng)用到本文中的推薦算法上,因為文中提出的推薦算法是和醫(yī)療與導(dǎo)診密切相關(guān)的?;谝陨显?,本文中使用合成的數(shù)據(jù)集,并采用定量和定性結(jié)合的方式評估算法質(zhì)量。
5.2.1 生成實驗數(shù)據(jù)
1) 合理性分析
經(jīng)過查閱相關(guān)醫(yī)學(xué)資料以及調(diào)查問卷的方式,得出在選擇醫(yī)院時人們主要關(guān)注的有兩點:醫(yī)院與自己的距離,一般對于常見疾病人們傾向于選擇距離自己近的醫(yī)院就診;在醫(yī)院質(zhì)量方面,患者主要關(guān)心的因素是診療效果、收費水平、服務(wù)態(tài)度,對這三者的關(guān)注度權(quán)重接近于5:3:2。既然人們在就診選擇時有這樣的傾向性,實際的數(shù)據(jù)分布也會體現(xiàn)出這樣的特點,那么我們就能按照上面的原則模擬生成實驗數(shù)據(jù),并且這樣的數(shù)據(jù)具有一定的合理性。
2) 數(shù)據(jù)規(guī)模
假定地域范圍是44×44 km2的一個矩形,有50家醫(yī)院,醫(yī)院的等級共有10級,有50種疾病,疾病的嚴(yán)重等級共有10級,有5 000個病人,每人有10條就診評價記錄,共有50 000條記錄。
3) 生成數(shù)據(jù)
① 醫(yī)院和用戶的地域信息使用經(jīng)緯度表示,經(jīng)緯度數(shù)值隨機生成,只要將其限制在上述的矩形區(qū)域即可,醫(yī)院和疾病的等級信息也隨機生成。
② 醫(yī)院的診療效果(effect)、收費水平(charge)、服務(wù)態(tài)度(attitude)都是醫(yī)院的固有屬性,因此事先生成醫(yī)院擅長治療的疾病與醫(yī)院之間的對應(yīng)集合S1、收費較低的醫(yī)院集合S2、服務(wù)態(tài)度好的醫(yī)院集合S3。
③對每條評價記錄,effect、charge、attitude初始的評價都是5分。
④按式 (8)~(10)更新 effect、charge、attitude 的值。
⑤ 給每一項再加一個小的正負(fù)隨機的擾動Δ0,以模擬評分時的噪音。
5.2.2 實驗方案
使用上面生成的模擬數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),再隨機選擇100名用戶,每人2種疾病,距離用戶R=15 km的醫(yī)院作為候選醫(yī)院,在該測試數(shù)據(jù)集上運行推薦算法,并記錄推薦結(jié)果中前3位。
前面已經(jīng)說過,就診時的關(guān)注點主要有距離和醫(yī)院的質(zhì)量,因此,一方面對距離用戶范圍R內(nèi)的醫(yī)院按照距離和治療對應(yīng)疾病的綜合評分分別排序,統(tǒng)計推薦的醫(yī)院在兩個序列中的具體分布情況;另一方面查看并統(tǒng)計推薦的醫(yī)院在上述S1、S2、S3這3個集合中分布情況,以此來定性地確定推薦的醫(yī)院的質(zhì)量。最終,通過對以上兩個指標(biāo)分布的分析,來半定量地評估推薦算法。
5.2.3 實驗結(jié)果
推薦結(jié)果中排前三的醫(yī)院在按照評分距離和評分排序的兩個序列中的具體分布情況如圖2所示。
圖2 推薦結(jié)果在兩個序列中的分布Fig. 2 The distribution of recommended results in two lists
由統(tǒng)計結(jié)果可得:排名第一的推薦結(jié)果兩個序列中前6位出現(xiàn)的概率是87%,在前3位出現(xiàn)的概率是62%;排名第二的推薦結(jié)果在前6位出現(xiàn)的概率是84%,在前3位出現(xiàn)的概率是51.5%;推薦結(jié)果排在前6位出現(xiàn)的概率是81.5%,在前3位出現(xiàn)的概率是54%。可以看出,推薦的醫(yī)院主要出現(xiàn)在上述兩個列表中的前6位,其概率大于81%,出現(xiàn)在前3位的概率大于51%,而且出現(xiàn)在前6位的概率隨著推薦結(jié)果的次序依次從高到低線性排列,這符合預(yù)期的結(jié)果,推薦的醫(yī)院至少在距離和質(zhì)量兩方面之一有優(yōu)勢,而且越處于推薦結(jié)果前列的醫(yī)院其占優(yōu)的可能性應(yīng)該越大。
推薦結(jié)果中前3的醫(yī)院在上述S1、S2、S3這3個集合中分布情況如圖3所示。
圖3 推薦結(jié)果在3個集合中的分布Fig. 3 The distribution of recommended results in three sets
推薦的醫(yī)院在診療效果、收費水平、服務(wù)態(tài)度這3項中至少有2項占優(yōu)的概率:結(jié)果一為82.5%,結(jié)果二為73.5%,結(jié)果三為66%,至少有一項占優(yōu)的概率大于95%。這就說明,推薦的醫(yī)院從一定程度上來看是較優(yōu)的,而且推薦結(jié)果中位置越靠前的就越優(yōu),推薦結(jié)果具有一定的合理性。
本文通過對醫(yī)療與導(dǎo)診領(lǐng)域的深入研究,發(fā)現(xiàn)了醫(yī)療領(lǐng)域的推薦與傳統(tǒng)推薦在本質(zhì)上的區(qū)別,提出了一種面向智能導(dǎo)診的個性化推薦算法,以輔助診療結(jié)果為基礎(chǔ),將Skyline查詢和局部范圍內(nèi)基于協(xié)同過濾的評分方式相結(jié)合。算法能根據(jù)用戶的癥狀表現(xiàn)與地理位置等個人信息,為用戶提供個性化的推薦結(jié)果。并且通過模擬生成實驗數(shù)據(jù),半定量地驗證了推薦算法的合理性和有效性。本文中提出的算法和思路對于有效地利用電子醫(yī)療數(shù)據(jù),合理分配和使用現(xiàn)有的醫(yī)療資源,緩解就診壓力,提升就醫(yī)質(zhì)量意義重大,有著很大的實用價值與社會意義。