導讀:本次分享的題目是圖表示學習技術在藥物推薦系統的應用。
主要包含以下四個部分:
醫療資源整體不足,分佈不均帶來沉重壓力
智慧醫療,人工智慧技術帶來了曙光
2、研究挑戰
藥品推薦系統的第二個挑戰是藥品之間存在著多種多樣的相互作用。有些藥品之間存在藥效互相促進的協同作用,有些藥品間存在藥效互相抵消的拮抗作用,甚至有些藥品的合用會導致毒性或其他副作用。圖中病人是患有某種腎臟疾病,左邊部分是醫生為病人所開藥品,其中部分藥品存在協同作用,可以促進藥效。右邊部分是統計分析出來的症狀高頻藥品。可以看到這些藥品可能是由於一些拮抗作用而沒有被選取,下面的藥品可能是跟已有的某種藥品產生了毒性,因此也沒有被此患者使用。
此外,藥品的交互作用影響是個人化的。我們在數據統計中發現有大量有拮抗作用、甚至是有毒性作用的藥品同時使用。根據分析,其實醫師是會根據病人的病情考慮交互作用影響而開立藥物。例如一些腎臟健康的病人,他往往可以承受一定的藥品腎臟毒性的,因此我們需要對藥品之間的相互作用進行個性化的建模和分析。
總結來說,結合以上的挑戰,圖表示學習技術是非常適合解決藥品推薦系統中存在的問題。隨著圖神經網路的快速發展,人們意識到圖神經網路技術可以非常有效的建模節點之間的組合效應與節點之間的關係,這啟發我們圖表示學習技術或許將會成為建構藥品推薦系統的一個利器。
二、判別式藥品包推薦
#電子病例資料
首先介紹工作中所使用的資料描述。
我們在研究工作中使用的電子病歷是來自大型三甲醫院的真實電子病歷資料庫,其中每條電子病歷都包括了以下幾類資訊:一是病患的基本訊息,包括病患的年齡、性別、健保等等;二是病患的化驗訊息,包括醫師關注的化驗結果的異常,以及異常的種類:偏高、偏低、是否陽性等等;三是醫師為病人撰寫的病情描述:包括病人為何入院、以及初步身體檢查等資訊;最後是醫師為病人開的一組藥品。
藥品資料
##################為了研究藥品之間的相互作用,我們從 DrugBank 與藥製網兩個大型在線開源藥品知識庫裡收集了部分藥品的屬性及相互作用數據。藥品交互作用是基於一些模板的自然語言描述,如上圖中 description 一欄是在講某種藥品可能可以增加代謝或減弱代謝等,中間話是模板,前後是填充的藥品名字。因此只要清楚模型分類,就可以把資料庫裡所有的藥品交互作用進行標記。
因此,我們在專業醫師的指導下,把藥品相互作用考慮了無交互作用、協同作用和拮抗作用三類,把模板進行了標註,得到了藥品交互作用的分類。
#資料預處理來說,對於電子病歷數據,我們將其分為了兩個部分:患者的基本資訊和化驗訊息,我們將其處理為一個One-hot 的向量;病情描述文字部分,我們透過一些Padding 與Cut off 將其轉換為定長文字。對於藥品交互作用數據:我們將其轉化為一個藥品的相互作用矩陣。
同時問題定義如下:給定一組患者的描述以及對應Ground-truth 藥品包,我們將訓練一個個性化的評分函數,該函數可以輸入給定病患和樣本包,輸出一個匹配程度打分。很明顯,這是一個判別式模型的定義方式。
#本文提出的論文題目是DPR:Drug Package Recommendation via Interaction -aware Graph Induction。模型包括三個部分:
預訓練部分,我們基於 NCF 框架得到病人與藥品初始表徵。
藥品包建構部分,我們提出了一種基於藥品交互作用關係類型,將藥品包建構成藥品圖的方法。
最後一個部分是基於圖的藥品包的推薦框架,其中設計了兩個不同的變種,從兩種不同的角度去理解如何建造模藥品之間的相互作用。
首先預訓練部分是按照傳統的一對一推薦方式進行的。給定一個病例,醫師為病人使用過的藥品是正例,未使用過的藥品是負例。透過 BPRLoss 進行預訓練,使用過的藥品得分比沒使用過的高。
預訓練部分主要是要捕捉基本的藥效訊息,為後面捕捉更複雜的交互作用提供基礎。對於 One-hot 部分,我們使用 MLP 來提取特徵;對於文字部分,我們使用LSTM來提取文字特徵。
###################### ####與傳統推薦相比,藥品推薦的核心問題是如何考慮藥品間的互動關係,並得到藥品包的表徵。基於此,本文提出了基於圖模型的藥品包建模方法。 ##########
首先,已標註好的藥品交互作用關係會轉化成一個藥品交互作用矩陣,其中不同的數值表示不同的交互作用類型。隨後基於此矩可以將任意一個給定的藥品包轉換成一個異構藥品圖,圖中節點對應藥品包中的藥品,節點屬性是節點對應上一個步驟中的預訓練過的Embedding。同時為了避免計算量過大,我們並沒有把藥品圖建構成完全圖,即沒有讓任意兩個藥品之間都有一條邊,而是有選擇的進行保留,具體而言只保留了那些被標註過的藥品對的邊以及頻率超過一定閾值的邊。
#為了對藥品圖進行有效表徵,我們提出了兩種方式對藥品圖上的邊屬性進行形式化。
第一種形式是 DPR-WG,使用帶權圖表示藥物圖。首先是根據標註好的藥品交互作用,對邊全值進行初始化,其中使用-1表示拮抗, 1表示協同,0 是表示無交互作用或未知。隨後使用了遮罩向量對藥品圖中的邊權值進行個人化的更新。
此掩碼向量反映了不同藥品的相互作用,對於個病人的個人化的影響程度,它的計算方法是使用一個非線性層加Sigmoid 的函數使得每一個維度取值都是從0~1 之間,從而實現特徵選擇的作用,對藥品的相互作用進行個性化調整。藥品圖更新過程是在 DPR-WG 中先算出一個更新因子,更新因子與對應邊上的權重相乘或相加等進行更新。後續實驗中發現其實更新方法對結果影響不大,在藥品圖表徵過程中,我們設計了基於帶權圖的表示藥品的方法。
總結來說,我們首先設計了一個針對帶權圖的信息更新過程:聚合鄰居信息,在聚合的過程中,根據邊的權重,個性化調整它聚合程度。接著我們使用了一個 Self Attention 機制把不同節點之間的權重計算,使用一個聚合 MLP 把圖聚合起來得到最終整個藥品圖的表徵。後續把病人表徵與藥品圖表徵輸入到打分函數裡面去,可以得到輸出推薦。
此外,本文使用 BPRLoss 訓練模型,引入負採樣方法,對應 1 個正樣本有 10 個負樣本。
第二個變種是使用屬性圖表示藥品圖。首先是透過一個 MLP 融合邊兩端的節點向量初始化邊向量。接著同樣使用遮罩向量對邊向量進行更新,此時更新方法就不再是更新因子,而是計算一個更新向量,使用更新向量與藥品的邊向量進行逐元素相乘,得到更新後的邊屬性向量。我們特別設計了針對屬性圖的 GNN,其 message passsing 過程首先是根據邊向量及兩端的節點 Embedding計算出message進行傳播,透過self attention及聚合方法得到Graph Embedding。
同樣我們可以採用BPRLoss 進行訓練,不同的是我們額外引進了一個針對邊分類的交叉熵損失函數,希望邊向量可以包含藥品相互作用的類別資訊。因為上一個變種中初始化的正負號天然的保留了此訊息,但此變種的圖沒有,因此透過引入損失函數來把此資訊補上。
從實驗結果來看,我們的兩個模型都在不同的評估指標上超越了其他判別式模型。同時我們也進行了案例分析:採用 t-SNE 方法,把先前提到的掩碼向量投影到一個二維的空間上。圖中所示,例如孕婦、嬰兒以及肝臟病人等,他們使用的藥物有非常明顯的聚集成簇的趨勢,證明了我們方法的有效性。
#以上判別式模型只能在已有藥品包中進行挑選,沒有產生新的藥品包能力,會影響推薦效果,接下來我們將會介紹發表在TOIS 期刊上的針對上一篇工作的擴展工作,目的是希望模型能夠產生全新的為新病人量身定做藥品包。
此工作是保留了上一篇論文中圖表示學習的核心思想,同時完全改變問題定義,把模型定義成生成模型,引入序列生成與強化學習技術,大幅的提升了推薦效果。
#判別式模型與生成式模型的核心差異是判別式模型是給定病人與給定藥品包的匹配程度打分,而生成式模型是為病人生成候選藥品包並挑選最佳藥品包。
#針對上文所提出的判別式模型的缺點,我們設計了一些啟發式生成方法:透過在相似病人的藥品包中進行增加和刪除部分藥品的操作,形成一些歷史記錄中從來沒有出現過的藥品包供模型挑選。實驗結果證明這種簡單的方法十分有效,為後續方法提供了基礎。
#接下來是發表在TOIS 的Interaction-aware Drug Package Recommendation via Policy Gradient 文章。文中提出的模型叫做 DPG,不同於上一篇的 DPR,這裡的 G 是 Generation。
此模型主要包含三個部分,分別是藥物交互作用圖上的訊息傳播,病人的表徵以及藥品包產生模組,與上文的最大的區別是藥品包生成模組。
首先建構藥品交互作用圖部分,文中保留了圖神經網路捕捉藥品間交互作用的方法,不同的是判別式模型中,藥品包是給定的,可以方便的轉化為藥品圖,而在生成式模型中,藥品圖是不固定的,由於計算量原因,無法把所有的藥品包都建構成圖。
#########本文把所有的藥品全部包含在了一個藥品交互作用圖中,同樣採用Attributed graph 進行圖形式化,同時也保留了邊分類損失函數,保留邊的Embedding 訊息,最後也建構了基於此藥品交互作用圖上的GNN。 ##################經過幾輪(一般為2)的 message passing 後,我們提取其中節點 Embedding 作為要使用的藥品 Embedding。 ###########病人表徵部分,同樣採用了MLP 和LSTM 提取病人的表徵向量,同時也會計算掩碼向量,後續用於捕捉病人個人化表示向量。
藥品包產生任務可以視為一個序列產生任務,採用循環神經網路RNN 實作。但此方法也帶來了兩大挑戰:
第一個挑戰是在生成過程中如何考慮生成的藥品和現有的藥品之間的相互作用。為此我們提出了一種基於藥品交互作用向量的方法明確建模藥品之間的交互作用。
第二個挑戰是樣品包是一個集合,本質是無序的,但是序列產生任務往往針對有序序列順序的方法。為此我們提出了一種基於策略梯度的強化學習方法,同時增加了基於SCST的方法來提升此演算法的效果和穩定性。
##首先介紹如何在基於極大自然的藥品包生成過程中考慮藥品間的相互作用,此部分也是後面用強化學習部分的基礎。基於極大似然的序列生成方法在 NLP 領域已經被廣泛使用,在生成過程中,每生成一個藥品都依賴了先前生成的其他藥品。
為了考慮到藥品間的相互作用,同時又不為模型帶來過大的計算負擔,我們提出在每一個時間步,顯式計算最新生成的藥品與先前藥品的相互作用向量,此向量計算方法來自於先前圖神經網路裡的一個層。
同時我們增加掩碼向量與交互作用向量進行對應元素相乘,引入患者的個人化資訊。
最後把所有藥品的相互作用向量求和,使用 MLP 將其融合得到綜合的相互作用向量。
後續把此向量融入經典的序列模型中進行生成,則是解決了第一個挑戰。
與經典的序列生成不同的是藥品包其實是一個集合,不應該出現重複藥品,因此我們後續增加了一個限制,讓模型不能產生這個已經產生過的藥品,確保產生結果一定是集合。最後我們採用了基於極大似然的 MLE 損失函數訓練模型。
以上基於最大似然的方法最大的缺點是藥品包具有嚴格順序,部分人工為藥品指定順序的方法,如根據頻率排序,根據首字母排序等等,會破壞藥品包集合的特性,同時也會損失掉部分模型的performance,因此我們提出了基於強化學習的藥品包生成模型。強化學習中模型的目標是最大化人工設定的 reward 函數,在模型產生完整的藥品包之後,給予一個和順序無關的 reward 損失函數,則可以減弱模型對順序的依賴性。
本文採用的是 F-value 作為 reward,它是一個順序無關的函數,同時也是我們所關注的評價指標。本文採用 F-value 作為評估指標,在訓練方式上採用了基於策略梯度的訓練方式,在此就不進行詳細推導。
基於策略梯度的訓練方法中,其重一個廣為人知的方法是使用一個baseline 來減少梯度估計的方差,從而增加訓練的穩定性。因此我們使用了基於 SCST 的訓練方式,即 Self-critical sequence training 方法。 baseline 同樣來自於模型本身產生的這個藥品包所獲得的 reward,自己生成的方式我設計為 Greedy search 的正常序列生成方法。
我們希望模型根據 Policy gradient 採樣出來的藥品包的 reward 要高於傳統給予 Greedy search 產生出來藥品包。基於這篇本文設計了強化學習的損失函數,如圖所示,這裡就不詳細的介紹推導過程。
此外,強化學習的一個特性是訓練較難,因此我們結合了以上兩種訓練方式,首先採用極大自然的估計方法對模型進行預訓練,隨後採用強化學習的方法,對模型參數進行微調。
#接下來是模型的實驗結果。
在上表中,所有的藥品包都是用 Greedy search 產生的。首先基於生成式模型的表現普遍優於基於判別式模型方法,該實驗證明了生成式模型將會是更優秀的選擇。此模型在 F value 上超越了其他所有的 Baseline。此外,基於強化學習的模型表現大大超越了基於極大似然模型,證明了強化學習方法的有效性。
後續我們也進行了一系列的消融實驗。我們分別去掉了相互作用圖,包括相互作用的掩碼向量以及強化學習的模組進行消融,結果證明我們的各個模組都是有效的。同時可以看到,把 SCST 模組去掉,模型效果下降非常多,因此也證明了強化學習確實比較難訓練。如果不加 Baseline 限制,整個訓練過程會非常抖動。
最後我們也做了大量的個案分析,可以看到孕婦和嬰兒有明顯的個人化偏好。同時我們額外加了一些常見病如胃病、心臟病等,這些病的遮罩向量分佈非常分散,沒有形成簇。常見疾病的患者情況多種多樣,不會有特別個性化的情況出現,不像孕婦和嬰兒有著非常明顯的對於藥品的篩選,如某些需要指定小兒藥品,有些藥品孕婦不能使用等。
同時我們對藥品的交互作用向量進行了投影,可以看到協同作用和拮抗作用兩種藥品相互作用形成了兩個不同的對立情況,說明模型捕捉了兩種不同交互作用帶來的不同效果。
#來說,我們的研究主要是互動感知的個人化藥品包推薦,包括判別式的藥品包推薦以及生成式的藥品包推薦。
兩者共同點是都使用了圖表示學習技術來建模藥品間的相互作用、都使用了掩碼向量考慮病人病情對於相互作用的個性化的感知。
兩項工作最大的差異是問題定義差別,對於判別模型我們要的是一個打分函數,那麼對於生成模型我們要的是一個生成器,透過實驗證明,生成式模型其實是對於問題更好的一個定義。
#以上是這張圖說明了學習技術在藥物推薦系統的應用。的詳細內容。更多資訊請關注PHP中文網其他相關文章!