王瑞洋,李 濤
(武漢科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 武漢 430065)
近些年,醫(yī)療水平極速發(fā)展,醫(yī)藥知識也漸漸得到普及。在網(wǎng)上或者門店購藥的人越來越多。然而一種疾病表征對應(yīng)著大量的藥品。面對品類繁雜的藥品,用戶很難從中選擇出對自己最具療效的藥品。另一方面,藥店企業(yè)眾多,同質(zhì)化現(xiàn)象嚴(yán)重;藥店做到個(gè)性化服務(wù),從中脫穎而出。個(gè)性化推薦系統(tǒng)能夠?qū)Υ罅康挠脩艚换?shù)據(jù)進(jìn)行分析,挖掘出用戶的資源偏好和不明確需求,實(shí)現(xiàn)信息資源的精準(zhǔn)過濾和推送[1]。將推薦算法應(yīng)用于藥品領(lǐng)域,不僅能夠幫助用戶做出選擇,解決用戶的購藥難題;而且還可以幫助藥店企業(yè)實(shí)現(xiàn)智能信息化服務(wù),吸引更多用戶群體,增加藥店的營業(yè)收入。所以,做好藥品的推薦意義深遠(yuǎn)。
矩陣分解算法[2]不受專業(yè)領(lǐng)域知識的限制,可以使用各種形式的數(shù)據(jù),因而應(yīng)用廣泛。但是矩陣分解算法沒有合理地利用豐富的數(shù)據(jù)資源,不關(guān)注用戶或者項(xiàng)目的屬性信息及其所處的上下文環(huán)境。該算法訓(xùn)練模型使用的評分矩陣十分稀疏,導(dǎo)致訓(xùn)練后的模型精度不高,預(yù)測不準(zhǔn)確,進(jìn)而影響到后續(xù)的推薦效果。
針對數(shù)據(jù)稀疏這一問題,許多國內(nèi)外科研人員結(jié)合具體的應(yīng)用場景提出了對應(yīng)的改進(jìn)算法。文獻(xiàn)[3]考慮了用戶偏好的改變,并建立項(xiàng)目信任關(guān)系,改進(jìn)了社交網(wǎng)絡(luò)推薦模型;文獻(xiàn)[4]認(rèn)為評分相似的用戶隱式特征向量也應(yīng)該相似,因此在概率矩陣分解的過程中加入了用戶約束矩陣來約束用戶特征向量,同時(shí)使用卷積神經(jīng)網(wǎng)絡(luò)識別用戶評論信息,緩解了項(xiàng)目特征向量上下文信息缺失的問題;文獻(xiàn)[5]從用戶和項(xiàng)目兩個(gè)角度計(jì)算出用戶偏好相似度和項(xiàng)目關(guān)聯(lián)度來改進(jìn)矩陣分解模型,使得推薦結(jié)果集不受數(shù)據(jù)稀疏問題的干擾;文獻(xiàn)[6]使用了關(guān)聯(lián)規(guī)則來分析高維數(shù)據(jù),組合和重構(gòu)高維特征,提高算法組合推薦的能力;文獻(xiàn)[7]從用戶群組的角度出發(fā),計(jì)算出用戶群組的相似性,實(shí)現(xiàn)了有效的群組推薦;文獻(xiàn)[8]利用評分矩陣和標(biāo)簽矩陣聯(lián)合監(jiān)督,讓概率矩陣分解模型可以學(xué)習(xí)到更多的標(biāo)簽信息,有效提高了算法的準(zhǔn)確性。
雖然上述算法借助輔助信息優(yōu)化了相關(guān)模型,有效緩解了數(shù)據(jù)稀疏性問題,但是它們只是簡單地利用用戶或項(xiàng)目的特征屬性,沒有深入分析所推薦項(xiàng)目的語義信息,導(dǎo)致模型學(xué)習(xí)到的特征與項(xiàng)目真實(shí)的語義不符,將上述算法應(yīng)用在藥品推薦時(shí)表現(xiàn)不佳。因此,文中提出了融合藥品語義的混合推薦算法,以此來提高藥品推薦的質(zhì)量。該模型從類別和功能兩個(gè)方面挖掘出藥品的語義知識。首先通過構(gòu)造藥品類別標(biāo)簽矩陣計(jì)算出藥品的類別關(guān)聯(lián)度;然后使用卷積神經(jīng)網(wǎng)絡(luò)提取藥品主治功能的文本特征;最后使用藥品的類別關(guān)聯(lián)度和主治功能特征約束矩陣分解過程。該模型聯(lián)合了藥品語義知識表示,在評分矩陣高稀疏性的條件下,也能夠準(zhǔn)確地預(yù)測出用戶與藥品的偏好關(guān)系,實(shí)現(xiàn)藥品的精準(zhǔn)推薦。
矩陣分解[9]認(rèn)為每個(gè)用戶和項(xiàng)目都有各自的特征,每個(gè)特征用向量表示,所有特征向量連接起來構(gòu)成各自的特征矩陣,它們可以通過原始矩陣分解得到,不受其他因素的影響。同時(shí)還可以通過矩陣乘積的方式復(fù)現(xiàn)原始矩陣,填補(bǔ)原來矩陣中缺失的值進(jìn)行推薦預(yù)測。概率矩陣分解(PMF)[10]是應(yīng)用概率論的相關(guān)知識解釋矩陣分解的過程,從而提升算法的推薦精度。PMF的概率圖如圖1所示。
圖1 PMF概率圖
(1)
(2)
(3)
因此,依照概率論的貝葉斯公式,U、I的概率分布為:
(4)
將公式展開兩邊取對數(shù),求極值即可得到隱因子特征矩陣U、I的解。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)改變了傳統(tǒng)神經(jīng)網(wǎng)絡(luò),使用以下網(wǎng)絡(luò)結(jié)構(gòu):
(1)卷積層,可以學(xué)習(xí)到局部特征,重用卷積參數(shù);
(2)池化層,能夠?qū)崿F(xiàn)特征轉(zhuǎn)換和參數(shù)降維。
CNN使用了不同大小的卷積核來提取輸入數(shù)據(jù)的特征,有效減少了神經(jīng)網(wǎng)絡(luò)的參數(shù);且每個(gè)卷積核只關(guān)注數(shù)據(jù)的一部分,因此可以更加準(zhǔn)確地學(xué)習(xí)到局部特征。同時(shí)使用池化層對局部特征進(jìn)行特征轉(zhuǎn)化和采樣,進(jìn)一步縮小參數(shù)空間。
由于其出色的特征提取功能,人工智能的各大領(lǐng)域都在使用卷積神經(jīng)網(wǎng)絡(luò)。近年來,推薦算法研究者們也在不斷地嘗試優(yōu)化推薦算法的模型。有研究者發(fā)現(xiàn)將神經(jīng)網(wǎng)絡(luò)加入到推薦算法中能夠提高算法的精度。因此CNN網(wǎng)絡(luò)也逐漸被使用在推薦算法領(lǐng)域。2016年Kim等首次將CNN使用在推薦算法中,提出了卷積矩陣分解模型[11]。Wang等為提高中文景點(diǎn)實(shí)體識別的準(zhǔn)確性,使用CNN網(wǎng)絡(luò)對文本中的信息進(jìn)行抽取,學(xué)習(xí)到文本中的上下文信息[12]。Pelchat等[13]使用CNN網(wǎng)絡(luò)來學(xué)習(xí)音樂的頻譜和音符等特征,把從歌曲的時(shí)間片生成的頻譜圖圖像作為神經(jīng)網(wǎng)絡(luò)的輸入,將歌曲分為各自的音樂流派。
PMF模型能夠增加矩陣分解算法的可解釋性和算法精度,但是忽略了項(xiàng)目的語義信息,重要特征缺失嚴(yán)重,導(dǎo)致推薦結(jié)果不精。不同于其他種類的商品,藥品蘊(yùn)含著豐富的專家領(lǐng)域知識。因此文中通過藥品類別和主治功能文本挖掘出藥品的語義知識,然后融合到PMF模型中,實(shí)現(xiàn)模型的更優(yōu)化。
藥品的分類屬性是一個(gè)藥品的重要信息。對藥品進(jìn)行分類,可以減小用戶的選擇范圍,節(jié)約用戶的時(shí)間成本。當(dāng)用戶購買一種藥品時(shí),首先會考慮此藥品是否符合其種類需求,如:高血壓類患者購買藥物時(shí)首先會關(guān)注此藥品是否為高血壓類藥物。假設(shè)藥品的分類集合為F={F1,F2,…,Fn},n代表分類個(gè)數(shù)。因此可以得到藥品-分類矩陣C。其中:藥品個(gè)數(shù)用m表示,F(xiàn)j代表藥品Ii的第j個(gè)類別信息。如果Fj值等于1,則表示藥品Ii屬于該分類的藥品;相反地,如果Fj值等于0,則表示藥品Ii不屬于該分類的藥品。根據(jù)各個(gè)藥品之間的類別標(biāo)簽矩陣,可以計(jì)算出推薦藥品之間的類別關(guān)聯(lián)度。藥品Ii和藥品Ij之間的類別關(guān)聯(lián)度計(jì)算公式為:
(5)
其中,F(xiàn)Ii,k表示藥品Ii是否屬于第k個(gè)分類,CIi,Ij表示藥品Ii和藥品Ij的類別關(guān)聯(lián)強(qiáng)度,CIi,Ij的值越大說明兩個(gè)藥品在分類上越相近,CIi,Ij可以在[0,1]之間取值。得到藥品之間的類別關(guān)聯(lián)關(guān)系,即可以構(gòu)造一個(gè)(m×m)維的藥品類別關(guān)系矩陣C'。對于藥品類別關(guān)系矩陣C',其后驗(yàn)概率分布可以表示為:
(6)
其中,g(x)=1/(1+exp(-x))為sigmoid函數(shù),是為了確保高斯分布的均值μ的取值范圍在[0,1]之間;Iij指數(shù)表示推薦藥品Ii和Ij的類別關(guān)聯(lián)關(guān)系,如果CIi,Ij為0,則Iij也為0;如果CIi,Ij不為0,Iij的值等于1。
通過上述公式便可以得到藥品的類別關(guān)聯(lián)度關(guān)系及其矩陣的貝葉斯概率分布?,F(xiàn)實(shí)場景中,在使用概率矩陣分解進(jìn)行藥品推薦時(shí),模型訓(xùn)練得到的藥品隱因子特征同樣應(yīng)該符合藥品的類別關(guān)聯(lián)關(guān)系。因此,文中將藥品的類別關(guān)系矩陣C'加入到PMF模型訓(xùn)練的過程,約束在原始評分矩陣高度稀疏的情況下,藥品隱因子特征在類別語義上的正確性。此時(shí),如果只考慮藥品類別信息對模型的影響,對PMF模型進(jìn)行優(yōu)化,便可以得到聯(lián)合藥品類別的PMF模型。其概率圖如圖2所示。
在以上模型中,藥品特征矩陣I加入了藥品的類別信息,新的概率公式可以表示為:
(7)
上述模型加入了藥品類別信息的約束,補(bǔ)充了藥品的部分語義,來改善模型的性能。但是藥品的類別信息無法完整地表達(dá)出藥品的語義知識,還缺少藥品主治功能的文本信息。因?yàn)樵卺t(yī)藥領(lǐng)域,類別和功效才是藥品語義的完整表示。
即使是同一類別的藥品,在功能功效上也會存在著細(xì)微的差別。正如平時(shí)所看到的說明書一樣,藥品的功能效用主要以文本的形式存儲。其文本描述包含了大量的專業(yè)術(shù)語、關(guān)鍵性詞匯等,表達(dá)簡約主題鮮明。因此,如果能夠得到藥品功效的數(shù)學(xué)表示,將其加入到PMF模型中,約束藥品隱因子向量,就可以進(jìn)一步優(yōu)化文中算法。
為了獲取藥品主治功能的語義特征,文中預(yù)處理藥品的主治功能文本,拿到關(guān)鍵性的詞句:(1)對藥品主治功能文本分詞;(2)去掉停用詞、符號;(3)提取關(guān)鍵詞,將文本長度設(shè)置為k個(gè)單詞長度。
對藥品主治功能文本預(yù)處理后,使用CNN來提取藥品功能文本中深層次的語義信息,從而生成藥品主治功能的特征向量表示。CNN網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 CNN結(jié)構(gòu)
(1)輸入層/嵌入層。
輸入層/嵌入層將預(yù)處理后的藥品主治功能文本詞序列轉(zhuǎn)化為文本矩陣,作為下一層卷積層的輸入。預(yù)處理后的一個(gè)藥品的功能文本是由l個(gè)單詞構(gòu)成的序列。首先利用單詞嵌入模型將每個(gè)單詞轉(zhuǎn)換為數(shù)字向量;然后藥品功能文本的詞向量可以連接起來,形成一個(gè)矩陣。
該矩陣可被表示為:
D=[d1,d2,…,di,…,dl]∈Rl×k
(8)
其中,l為單詞的個(gè)數(shù),也即藥品功能文本的長度,di表示一個(gè)單詞嵌入后的詞向量,k為每個(gè)藥品詞向量的嵌入維數(shù)。
(2)卷積層。
(9)
這里,選用relu作為激活函數(shù);*是卷積操作,D:,i:i+s-1表示滑動窗口取得的藥品局部特征,輸入是藥品功能文本矩陣D第i到i+s-1列的詞向量。通過上式可以得到藥品深層次語義文本特征向量ci:
(10)
(3)池化層。
將卷積運(yùn)算后得到的藥品功能文本特征輸入到池化層,進(jìn)行max-pooling池化,其目的是固定藥品功能的特征長度,實(shí)現(xiàn)特征卷積的不變性。
x=[max(c1),max(c2),…,max(ci),…,max(cl)]
(11)
其中,x表示經(jīng)過池化層池化后的藥品功能特征;ci表示卷積后的藥品功能特征向量。
(4)輸出層。
輸出層的輸入是池化層輸出的結(jié)果,通過神經(jīng)網(wǎng)絡(luò)全連接層使用非線性投影產(chǎn)生藥品功能文本語義特征向量。其中,第i個(gè)神經(jīng)元的權(quán)重是wi,第i個(gè)神經(jīng)元的偏執(zhí)是bi:
S=relu(wl·…·relu(w1·x+b1)+…+bl)
(12)
綜上所述,藥品的功效文本通過多層網(wǎng)絡(luò)操作,被轉(zhuǎn)為數(shù)學(xué)向量,作為最終的特征向量輸出。文中將上述過程表示為一個(gè)函數(shù),該函數(shù)接受藥品原始功能的描述文本作為輸入,輸出藥品功能特征向量,用于約束矩陣分解后得到的藥品隱式特征值:
tj=cnn(P,Xj)
(13)
因此,對于藥品隱因子特征矩陣I,其條件概率分布應(yīng)滿足:
(14)
在使用PMF模型進(jìn)行藥品推薦時(shí),由于評分矩陣稀疏性問題,得到的藥品隱式特征不符合藥品的真實(shí)語義。利用錯(cuò)誤的藥品特征進(jìn)行推薦便丟失了原有的精度。
圖4 H-DS概率圖
根據(jù)貝葉斯公式,聯(lián)合藥品的類別標(biāo)簽和主治功能特征兩方面的語義信息,U、I的后驗(yàn)概率分布可以表示為:
(15)
為了求解U、I,首先對以上概率公式取對數(shù),然后約簡式子可得損失函數(shù)為:
(16)
有了損失函數(shù),便可以對Ui和Ij求偏導(dǎo),分別得到對應(yīng)的偏導(dǎo)函數(shù):
(17)
λI(Ij-cnn(P,Xj))
(18)
根據(jù)用戶和項(xiàng)目隱向量Ui和Ij的偏導(dǎo)函數(shù),文中使用梯度下降法[14]對用戶和項(xiàng)目隱向量Ui、Ij交替更新,反向傳播算法更新CNN網(wǎng)絡(luò),來優(yōu)化模型。
文中算法的整體流程可概括如下:
算法:融合藥品語義的混合推薦算法(H-DS)。
輸入:用戶-藥品評分矩陣、藥品的分類信息以及主治功能文本;
輸出:用戶-藥品組合對的喜好預(yù)測值。
步驟1:根據(jù)藥品分類信息構(gòu)造藥品分類矩陣,使用公式(5)計(jì)算藥品間關(guān)聯(lián)度。
步驟2:預(yù)處理藥品主治功能文本數(shù)據(jù),提取文檔中的關(guān)鍵詞,使用詞向量模型將單詞編碼成向量,經(jīng)過CNN模型得到最終的特征。
步驟3:在滿足高斯分布的前提下,將用戶和藥品的特征矩陣進(jìn)行初始化。
步驟4:固定藥品特征矩陣,計(jì)算用戶特征向量與藥品特征向量乘積與原始評分的誤差,根據(jù)公式(17)使用梯度下降的方式更新用戶特征向量。
步驟5:固定用戶特征矩陣,計(jì)算用戶特征向量和藥品特征向量乘積與原始評分的誤差以及藥品特征向量與類別關(guān)聯(lián)度、主治功能文本特征間的誤差總和,根據(jù)公式(18)使用梯度下降的方式更新藥品特征向量。
步驟6:重復(fù)步驟4和步驟5,持續(xù)訓(xùn)練模型。觀察損失函數(shù)(16)的變化情況,待其不在大幅波動。
步驟7:輸入用戶和藥品ID,得到H-DS算法的預(yù)測評分值。
文中的實(shí)驗(yàn)數(shù)據(jù)來源于某連鎖藥店提供的線上真實(shí)銷售數(shù)據(jù)。這些數(shù)據(jù)反映了該藥店的一個(gè)門店在半年之內(nèi)主營藥品的銷售情況,包含了325個(gè)主營藥品、26 937個(gè)會員、94 817條消費(fèi)記錄,數(shù)據(jù)稀疏度為98.9%。實(shí)驗(yàn)時(shí)隨機(jī)劃分?jǐn)?shù)據(jù)集。文中選用的估算模型預(yù)測準(zhǔn)確性的指標(biāo)有:平均絕對誤差MAE和均方根誤差RMSE。定義如下:
(19)
(20)
在公式(19)和公式(20)中,n表示測試數(shù)據(jù)樣本空間大小,pi表示使用算法產(chǎn)生的預(yù)測評分,ri表示用戶和藥品的真實(shí)交互值,可以是評分、購買等行為表示。如果算法的性能很好,那么相應(yīng)的MAE和RMSE值應(yīng)該越小。
模型的參數(shù)直接影響著模型的學(xué)習(xí)能力,選取合理的參數(shù)值能夠極大地提高模型的精度。本節(jié)主要針對參數(shù)λC、λI、λU以及隱因子特征維數(shù)d進(jìn)行實(shí)驗(yàn),估算最優(yōu)的參數(shù)組合。
圖5顯示了隱因子特征維數(shù)d在RMSE和MAE這兩個(gè)指標(biāo)上對H-DS算法的影響趨勢。MAE和RMSE的值隨著參數(shù)d的變化而變化,維數(shù)d的值越大,其對應(yīng)的誤差值越小。因?yàn)樘卣骶S數(shù)越高,用戶和藥品特征矩陣就越大,特征分類越具體;當(dāng)參數(shù)d達(dá)到70之后,MAE和RMSE逐漸穩(wěn)定了下來,在一定的范圍內(nèi)持續(xù)波動,因此本算法的參數(shù)d設(shè)置為70。
圖5 參數(shù)d對文中算法的影響
圖6~圖8分別顯示了參數(shù)λU、λC、λI對算法的影響。在圖6中,當(dāng)λU增大到1時(shí),MAE和RMSE的值漸漸減??;當(dāng)λU大于1之后,MAE和RMSE的值又逐步增大;在λU=1處,誤差取得最小值。從圖7和圖8可以看出,MAE和RMSE對參數(shù)λC和參數(shù)λI十分敏感,說明融入藥品語義對算法的性能十分重要。圖7中MAE和RMSE的值剛開始迅速縮小,而后縮小趨勢減弱最后趨近于穩(wěn)定。圖8中顯示λI對文中算法的影響與參數(shù)λU類似,隨著λI的變化MAE和RMSE同樣先減小后增大,當(dāng)λI=0.1時(shí),MAE和RMSE值最小。
圖6 參數(shù)λU對文中算法的影響
圖7 參數(shù)λC對文中算法的影響
圖8 參數(shù)λI對文中算法的影響
在分析了上述超參數(shù)對文中算法的影響后,最終將參數(shù)的值設(shè)置如下:d=70、λU=1、λC=1、λI=0.1。然后進(jìn)行不同算法的對比實(shí)驗(yàn),進(jìn)而分析出各種算法的性能。
文中旨在解決由數(shù)據(jù)稀疏性導(dǎo)致的藥品推薦不準(zhǔn)確問題,提出一種包含了藥品語義的模型。此方法主要考慮了藥品語義的兩方面內(nèi)容:類別關(guān)聯(lián)度和主治功能文本特征,采用了矩陣分解和卷積神經(jīng)網(wǎng)絡(luò)的相關(guān)技術(shù)。
為了更加準(zhǔn)確地評估算法(H-DS)的性能,設(shè)計(jì)了幾組對比實(shí)驗(yàn),比較的方法有:
(1)PMF[10]是最原始的概率矩陣分解算法。該算法使用概率論來解釋推導(dǎo)模型。
(2)ConvMF[11]在模型中加入了評論文本的特征,約束項(xiàng)目隱因子特征,保證模型的準(zhǔn)確性。
(3)CTR[15]是一個(gè)混合模型,其將主題模型(LDA)和PMF算法結(jié)合,綜合考慮了用戶評分信息和用戶對項(xiàng)目的描述文字信息。
(4)CDL[16]是一種結(jié)合了棧式降噪自編碼(SDAE)的算法模型,該模型部分利用了輔助信息,以此來提高推薦精度。
與以上方法進(jìn)行對比,實(shí)驗(yàn)結(jié)果如表1所示。
表1 實(shí)驗(yàn)結(jié)果
通過上述實(shí)驗(yàn)結(jié)果可以看出,提出的推薦算法H-DS要優(yōu)于實(shí)驗(yàn)中的其他推薦算法,在藥品推薦領(lǐng)域表現(xiàn)更優(yōu)。H-DS相較于基本的概率矩陣分解算法(PMF)在MAE和RMSE評估指標(biāo)上分別提升了6%和7%,性能提升最為明顯。CTR、CDL、ConvMF三種算法在數(shù)據(jù)集上的表現(xiàn)相近,均優(yōu)于PMF。它們都是PMF的改進(jìn)模型,使用了藥品有關(guān)的部分特征屬性。H-DS與CTR、CDL、ConvMF相比,降低了2%~4%左右的誤差值。說明,雖然CTR、CDL和ConvMF三種模型也使用到了藥品的特征,但是對藥品的數(shù)據(jù)信息利用較為簡單。H-DS更加充分地挖掘了藥品的語義信息,將藥品的語義知識很好地融入到模型中,有效提升了藥品推薦的精度。
把現(xiàn)有推薦算法應(yīng)用在藥品推薦領(lǐng)域時(shí),算法原有精度的丟失,無法滿足藥品推薦要求。因此文中提出了新的改進(jìn)方法。該方法從兩個(gè)方面挖掘藥品的語義信息:首先使用藥品類別信息構(gòu)造藥品分類矩陣計(jì)算出藥品間的類別關(guān)聯(lián)度,然后為了提取藥品主治功能文本內(nèi)容中的語義特征,把卷積神經(jīng)網(wǎng)絡(luò)使用到推薦算法中;把概率矩陣分解作為基礎(chǔ)模型,同時(shí)融入藥品的類別關(guān)聯(lián)度和主治功能文本語義來訓(xùn)練模型,學(xué)習(xí)藥品更深層的特征。實(shí)驗(yàn)表明,該算法充分挖掘了藥品的語義信息,降低了模型誤差,推薦效果更好。但是,該算法主要使用藥品信息改進(jìn)算法模型,具有一定局限性。未來將研究用戶屬性和時(shí)序行為對藥品推薦的影響,并將用戶行為和藥品語義結(jié)合在一起,進(jìn)一步提高藥品推薦的精度。