1. 程式人生 > >利用深度學習病歷分析前沿進展

利用深度學習病歷分析前沿進展

鄧侃博士又一力作,看深度學習如何讓電子病歷分析取得突破:Word2Vec、AutoEncoder讓文字轉換為張量,有助於更精準的預測;醫學知識圖譜,讓我們能夠清晰、量化地定義疾病表型;將影象也編碼成張量,構建統一的患者畫像,完整表達病情描述,實現臨床導航和發病預測……曾經是冷門中的冷門,正在迎來一個又一個的進展。

2018年1月,谷歌頭號技術大神 Jeff Dean,攜手谷歌大腦專案組 30 餘名研究人員,聯袂發表了一篇論文,題為 “Scalable and accurate deep learning for electronichealth records”。

把深度學習技術應用於病歷資料分析,原先是深度學習這個熱門領域中的冷門。谷歌大腦這篇論文,把冷門引爆成了熱門。

其實,把深度學習技術應用於病歷資料分析,並非只有谷歌大腦在做。2018年2月,佛羅里達大學的幾位學者,梳理了這個領域的前沿進展,在 Arxiv 上發表了一篇綜述,題為 “Deep EHR: A Survey of Recent Advances in Deep LearningTechniques for Electronic Health Record (EHR) Analysis”。

縱覽性的論文,總是值得讀讀。瞭解同行,促進自己。

建模,編碼,把病情描述轉換為數值張量

利用深度學習病歷分析前沿進展利用深度學習病歷分析前沿進展

病歷資料是一條時間序列,記錄著收集病情、診斷、治療的過程。

病歷資料也是一條空間路徑。不妨把症狀、體徵、化驗和檢查指標、疾病、藥品、手術等等,都視為離散的點。診斷和治療的過程,是把這些離散的點,串連在一起,成為一條路徑。

不論是用時間序列,還是空間路徑,給病歷資料建模,驗證模型是否正確的辦法之一,是驗證模型的預測是否精準。譬如輸入病情描述,預測罹患什麼疾病。

學者們遇到的第一個問題是,如何表達病情描述?一個辦法是直接用詞彙,例如 “胃痛”、“腹瀉”、“白細胞計數超標” 。也可以換一個辦法,先做編碼(encoding),把詞彙轉換成張量,然後把張量作為模型的輸入。

研究發現,先做編碼預處理,會使預測精度大大提高

。為什麼會這樣?

想一想地圖,標定位置的辦法有兩個,一個是用名稱,譬如 “清華大學正門” ,另一個是用座標(lat,lon)。很顯然,用座標數值來標定位置,更有利於規劃導航路線。

原因是,座標數值更容易表達各個位置之間的空間距離。而名稱詞彙卻無法做到相同效果,單從名稱詞彙來看,誰知道 “清華大學正門” 與 “五道口” 的距離有多遠?

如何把醫學詞彙轉換成數值張量?老套路,word2vec。外加一些改進,譬如 autoencoder。

數值張量有多神奇?“胃痛” 與 “腹瀉”,無一字相同,但是兩個張量,距離相近。

醫學知識圖譜,張量超點,精確定義疾病表型

編碼,把文字詞彙轉換為數值張量,不僅能夠提高疾病預測的精度,而且有利於病歷結構化。

“患者無誘因出現咳嗽,持續三日,夜間加劇,濃痰”,咳嗽是主詞,其餘是屬性。用傳統方法提煉主詞與屬性,非常吃力。

把文字詞彙轉換成數值張量,相當於把這段話,投射到醫學知識圖譜上去,誰是主詞,誰是屬性,一清二楚。

知識圖譜,無非是點和邊的關係。用數值張量而不是用文字詞彙,來表達圖譜中的點,是共識。更大的挑戰,是如何表達圖譜中的邊。

不存在單一症狀與單一疾病之間的靜態關係。臨床實踐表明,多個症狀多個化驗和檢查指標,組合在一起,才能正確診斷罹患的是什麼疾病。而且病情組合與疾病之間的關係,往往是非線性的,不能用一個靜態常數來表達。

也就是說,醫學知識圖譜與電子地圖相比,點相似,而邊不同

一個解決辦法是把小點聚合成大點,譬如把與某個疾病相關的,多個症狀體徵和多個化驗檢查指標的組合,聚合在一起,形成一個超點(hypernode),然後把這個超點與這個疾病關聯在一起。

病情組合的超點,與疾病之間的關聯,不再是複雜的非線性關係,而是簡單的常數關係。病情組合的超點與疾病,是一對一對等關係。一對一對等關係意味著什麼?病情組合的超點變成疾病表型(phenotyping)。

疾病表型的新方法,這事兒意義重大。

醫學教科書對各種疾病的表型定義,往往界定不清。同樣一個病情組合,可能符合多種疾病的表型。為什麼醫學教科書不把多種相似疾病之間的甄別邊界,描述得更清晰、更量化?因為文字詞彙很難把非線性的邊界,表達得很準確。

教科書的描述不清晰,醫生們如何甄別相似疾病呢?靠自己在實踐中摸索。醫生正式上崗前,都要有很長的實習期。一代又一代醫生,以一代又一代患者的生命為代價,自行總結疾病的甄別界定,而且這個經驗往往無法分享傳承。

如果醫學知識圖譜的張量超點,能夠精確地界定疾病表型,功德無量。

文字與影象的統一編碼、臨床導航、患者畫像與發病預測

不僅可以把文字詞彙,編碼成數值張量,而且也可以把醫學影像的畫素,也編碼成數值張量。

這樣不僅可以智慧地自動地讀片,撰寫檢查報告。而且,更大的意義在於,把文字與影象編碼成統一的數值張量,用一個張量,完整地表達患者的病情描述

完整的病情描述,大大便利了疾病的診斷,指導下一步需要做的化驗和檢查,推薦合理的用藥處方,為基層醫生提供智慧的臨床導航,大大提高基層醫生的臨床水平。

如果把患者歷次病歷,彙總起來,編碼成更大的張量,這個更大的張量,實際上等同於患者的健康畫像。精準的健康畫像,能夠預測未來幾年,該患者罹患各種疾病的概率。

發病預測的意義,不再侷限於臨床醫學,而且涉及到醫療保險,跨界到了經濟學領域。

診斷解釋、疾病表型的界定、患者畫像的聚類

深度學習模型的本質,是多層隱節點,通過非線性函式相連。輸入病情描述資料組合,輸出疾病診斷。但是光有結果,沒有解釋,很難贏得醫生和患者的信任。

如何解釋深度學習模型的內部推理過程?一個辦法是反向追溯。

輸入病情描述資料組合,深度學習模型輸出疾病診斷。從輸出的診斷,反向追溯。確定在最後一層隱節點中,哪些隱節點起了關鍵作用。然後追溯到倒數第二層隱節點,倒數第三層……漸次反向追溯到輸入,檢視輸入的病情描述組合中,哪些病情描述,對診斷起到決定性作用。

反向追溯,不僅僅可以用診斷解釋,也可以用於確定醫學知識圖譜中的超點的組合。譬如說,通過反向追溯,確定某個疾病與哪些病情描述有關。把這些病情描述,組合起來,構建成醫學知識圖譜中的超點(hypernode)。

同時,不斷變換病情描述的超點中,各個小點的取值,估算各個小點的取值分佈,確定什麼樣的取值分佈,會導致疾病的發生,從而界定疾病的表型(phenotyping)。

同理,不斷變換患者畫像中,各個小點的取值,估算各個小點的取值分佈,確定什麼樣的取值分佈,會增加未來發病的概率,從而把不同的患者,聚類成相似人群,方便醫保精算。

缺失資料的補足、時間跨度不一致的資料對齊、隱私資料的 HIPAA 脫敏

病歷資料處理,有四大難點:1. 多模態,2. 資料缺失,3. 時間跨度不一致,4. 脫敏。

多模態的問題,已經基本解決。把文字、音訊、畫素,全部編碼成統一的數值張量。換句話說,數值張量是超越語言音訊影象的數學語言,可以表述各種模態的語義

資料缺失的解決辦法,是通過其他相關資料,猜測缺失資料的取值。如何知道哪些資料之間有關聯?辦法是,預先構建醫學知識圖譜。

心電圖資料的時間跨度,以秒計;脈搏血壓的時間跨度,以小時計;查房記錄,以天計……不同資料的時間跨度不一致,如何把它們對齊?一個思路是卷積,分層次整合細粒度的資料。

HIPAA 法案規定,病歷中 18 項資料涉及患者隱私,譬如姓名和住址。脫敏的問題,等同於在病歷的各個段落中,識別這 18 項資料。數值張量的編碼,讓脫敏問題變得簡單。只需要用 attention,在病歷的各個段落,找到與患者姓名和住址相近的張量即可。

一句話的總結:深度學習技術,讓病歷分析取得突破性進展。

原文來自:https://yq.aliyun.com/articles/534213spm=a2c4e.11153940.bloghomeflow.58.4f73291aYdSC9Fhttp://news.51cto.com/art/201803/567349.htm