雷鋒網按:騰訊AI Lab高級研究員孫鐘前日前對外分享了騰訊AI Lab在應用AI技術進行食道癌識別和輔助診斷方面的探索和心得, 雷鋒網對其分享做了不改變願意的整理和編輯:
今天主要跟大家分享一下我們在AI+醫學方向上的探索和嘗試。
今年早些時候, 穀歌發表了兩篇醫學影像科技類的文章, 其中一篇是關於皮膚癌的檢測。 AI在皮膚癌檢測上的敏感性和特異性上都超過了人類專家。 這兩篇文章繼AlphaGo之後, 再次引爆了AI熱潮。 現在各大公司也在積極佈局醫療行業, AI+醫療市場百花齊放。 在這樣的背景下, 我們也做了一些嘗試, 我們的嘗試主要集中在以下幾個方面:
在醫學影像識別方面, 我們主要做了食管癌的識別和輔助診斷。 輔助診斷主要做兩件事情, 一是醫學知識圖譜構建, 二是基於疾病的診斷。
經過半年的研發, 我們取得了一些進展, 這次我主要跟大家介紹一下我們在食道癌識別和輔助診斷方面做的一些工作。
首先是食道癌。 食道癌是世界五大惡性腫瘤之一, 我國又是食道癌的高發地區。 這個專案的目標是通過影像判別病人是否可能患有癌症。
專案的整體流程如下:內窺鏡探頭一般從鼻腔進入, 然後經過咽和食管, 最後到達胃。 我們採集食管資料的時候, 可能會引入大量非食管資料。 因此, 我們做的第一件事情就是對這些資料做區分, 通過食管判別模型, 只保留食管資料。 然後將食管資料送到下一個模型, 這個模型只做一件事情, 就是把正常的食管和異常的食管區別開來。 區分之後, 再把病變的食管資料送到下一個環節, 判斷這個圖像代表的是癌症還是炎症。
食管判別模型
首先是食管判別模型。 這個模型其實是一個比較典型的分類任務, 但是我們遇到了一個難點——醫療圖像的資料非常稀缺。 與通常的圖像分類任務動輒幾十萬、上百萬, 甚至上千萬的資料量相比, 它的資料量是非常少的。 同時, 由於設備參數、醫生的拍照手法或拍攝角度、光照的明暗不同, 食管的表觀變化非常複雜。 因此, 我們面臨著一個矛盾, 即少量資料跟複雜表觀的矛盾。
在這樣的條件下, 我們怎樣才能得到一個魯棒的模型?通常情況下, 分類任務已經非常成熟, 一般圖像經過特定提取的網路, 再經過分類模型,
我們的做法是讓變換之後的圖片經過一個網路, 得到它的Featruemap。 兩個圖像相差有多大, 主要是看Featruemap的差異有多大。 我們希望原圖和變換之後的圖像間, 差異盡可能的小。 因此我們對模型做了一些改變, 增加了一個約束。
異常判別模型
拿到食管資料之後, 下一步是判別這個食管屬於正常食管還是病變食管。 我們的目標是保留病變的食管資料, 並輸入到下一個環節。 這個問題跟前面的問題比較類似, 也是一個判別模型。 它們的不同之處在哪呢?當我們判斷一個食管是否異常食管時, 只需要找到一個病變區域, 就能夠說明這個食管是異常的。 但反過來, 在正常圖像中, 並不能說找到一個正常特徵, 就說明這個食管是正常的。 只能說在這張圖像中我們沒有找到異常特徵, 它可能是正常的。 因此, 在正常特徵和異常特徵之間, 我們更傾向於提取病變特徵, 抑制正常特徵。
我們是怎麼做到呢?病變和正常的case都會經過神經網路, 以得到特徵向量。對於這個向量,我們希望盡可能凸顯異常特徵,讓正常特徵趨近於0。我們是如何把這種資訊建模到模型中的呢?我們對模型進行了重新建模,最後準確率大概在97%左右。
癌症判別模型
前面的模型相對來說比較容易。第三個模型主要是區分炎症和癌症,它與前兩個問題不大一樣。一般情況下,病變的食管圖像裡都會伴隨著一些炎症的特徵。我們對癌症的判斷往往是通過一個紋理特別小的區域得出的,因此需要提取出更加精細化的特徵。比較好的做法就是讓很多專家把病灶區非常嚴謹地標注出來,這樣我們只需要對這個區域進行識別就好了。
這個標注量非常大,因此資料異常匱乏。我們沒有癌症區域的標注資料,但又希望得到非常精細化的特徵,如何解決這個矛盾呢?
幸運的是,我們雖然無法獲取到非常精准的病變區域標注影像,卻能夠相對容易地知道一張圖像是否包含癌症,因為只需要跟病例對應起來就好了。這樣一來,我們可以更容易地得到圖像全域的標籤。如果一張圖像包含了癌症,必然會有一個或幾個區域包含了癌症的特徵。也就是說,如果我們把圖像切分成幾個patch,必然會有某個或某幾個patch包含癌症特徵。基於這樣一種思路,我們採取了多序列的學習方式。這個方法的內在思想很簡單,就是把圖像切分成若干個patch,然後對每個patch建模,判別這個patch發生癌症的概率。我們最後把所有patch裡面癌症概率最高的那塊,作為圖像是否包含癌症的標籤。
做的過程當中,我們會逐漸積累精准標注的資料,這些資料非常少,不足以虛擬一個模型。但圖像中的特徵都是最精准的,是經過人為校驗和標注的。我們怎樣才能把這種少量的、精准的資料強化到癌症識別中去呢?這是個非常有意思的問題,如果能解決這個問題,即使只有少量標準資料,我們也能不斷提升。
這裡主要採用了多工學習的方法,這個方法需要完成兩個任務:一是基於有病變區域標注的資料建立有監督的學習任務;二是對於沒有病變區域標注的資料,建立前面提到的多序列學習任務。這兩個模型共用特徵提取網路,特徵提取網路必須同時滿足兩大任務,這樣才能把精准標注的特徵強化到癌症識別中去。
以上是我們食道癌專案的簡單介紹,下面再簡單介紹一下我們在輔助診斷方面做的一些工作。
輔助診斷輔助診斷的目的是什麼呢?我們希望機器最終能夠像臨床醫生一樣具備診斷疾病的能力。在介紹輔助診斷項目之前,我們先來看看一個醫生或者一個普通的學生是如何成長為一名專家的。一個學生從剛入學開始,學習了大量專業課程,閱讀了大量專業醫學文獻後,就可以積累一定程度的醫學知識。當醫學知識達到一定程度之後,就可以去醫院裡面實習,由臨床醫生結合一些真實案例,指導他去學習診斷的技能。當我們具備了這些技能,就能夠成為一名普通的醫生,醫生可以看到大量的病人,學習大量經驗,經驗足夠豐富之後就成了專家。機器成長的過程與人類大致相似。
我們可以將其分為三個階段:第一階段是醫學知識圖譜的構建,也就是機器學習知識的過程;第二階段相當於有了知識之後學習診斷的能力,也就是建立疾病判別的一些模型;最後階段是讓機器在與專家的博弈過程中,不斷提升診斷水準,逐漸逼近甚至超過專家。
醫療知識圖譜構建
醫療知識圖譜的構建過程中,我們首先要對文本資料進行處理。文本資料分成兩類,一類是半結構化資料,一類是非結構化資料。這裡我列舉一個例子,說明我們如何把非結構化的文本變成結構化文本,也就是電腦可以理解的形式。我們可以把病史分為幾個部分:疾病的情況、入院的治療經過、入院的依據等。把病史分為這樣幾部分資訊後,再對每一類資訊進行細化和提取。經過提取之後,非結構化的文本就變成了電腦能夠理解的結構化文本。我們會把這些資訊轉化為醫學知識圖譜存在電腦裡,於是電腦就把這個知識學會了。以上就是醫學知識圖譜的構建過程。
診斷模型
第二步我們會有一個診斷模型。診斷的過程是這樣的,首先把一段人類語言描述的病情轉化成電腦可以理解的結構化知識。有了結構化的知識以後,機器就能理解這個人的情況,把知識推送到疾病診斷模型當中,模型將給出一個疾病列表。診斷模型的流程大致就是這樣。
下面我們來看一個病情理解的實例。通過技術對病人病情的理解可以得到一些基本資訊,其中包含性別、年齡,這個人的主動描述、現病史和既往史等。主動描述裡會提到症狀以及持續的時間,甚至一些更複雜的資訊,比如說唾沫是什麼樣子的,咳嗽是否帶痰。這些資訊都會詳細刻畫出來,按照前面提到的模式畫出病歷,完成對病情的理解。
理解病情以後,將其輸入診斷模型當中。診斷的demo包含幾個部分:第一部分是對病情的人類語言的描述,通過病情理解後得到結構化的病情表示,之後得出機器診斷的結果,按照概率從高到低給出5個結果。我們還給醫生留了一個介面,醫生可以對診斷結果評分,通過評分將結果回饋到模型當中。通過醫生和機器之間的交互,可以將模型反覆運算得越來越好。我們在實驗室資料裡選擇了大概10萬個真實病例進行測試,TOP1的結果與醫生的一致率大概是92%,TOP3是90%。但這種模型還需要更多臨床病例做驗證。雷鋒網
以得到特徵向量。對於這個向量,我們希望盡可能凸顯異常特徵,讓正常特徵趨近於0。我們是如何把這種資訊建模到模型中的呢?我們對模型進行了重新建模,最後準確率大概在97%左右。癌症判別模型
前面的模型相對來說比較容易。第三個模型主要是區分炎症和癌症,它與前兩個問題不大一樣。一般情況下,病變的食管圖像裡都會伴隨著一些炎症的特徵。我們對癌症的判斷往往是通過一個紋理特別小的區域得出的,因此需要提取出更加精細化的特徵。比較好的做法就是讓很多專家把病灶區非常嚴謹地標注出來,這樣我們只需要對這個區域進行識別就好了。
這個標注量非常大,因此資料異常匱乏。我們沒有癌症區域的標注資料,但又希望得到非常精細化的特徵,如何解決這個矛盾呢?
幸運的是,我們雖然無法獲取到非常精准的病變區域標注影像,卻能夠相對容易地知道一張圖像是否包含癌症,因為只需要跟病例對應起來就好了。這樣一來,我們可以更容易地得到圖像全域的標籤。如果一張圖像包含了癌症,必然會有一個或幾個區域包含了癌症的特徵。也就是說,如果我們把圖像切分成幾個patch,必然會有某個或某幾個patch包含癌症特徵。基於這樣一種思路,我們採取了多序列的學習方式。這個方法的內在思想很簡單,就是把圖像切分成若干個patch,然後對每個patch建模,判別這個patch發生癌症的概率。我們最後把所有patch裡面癌症概率最高的那塊,作為圖像是否包含癌症的標籤。
做的過程當中,我們會逐漸積累精准標注的資料,這些資料非常少,不足以虛擬一個模型。但圖像中的特徵都是最精准的,是經過人為校驗和標注的。我們怎樣才能把這種少量的、精准的資料強化到癌症識別中去呢?這是個非常有意思的問題,如果能解決這個問題,即使只有少量標準資料,我們也能不斷提升。
這裡主要採用了多工學習的方法,這個方法需要完成兩個任務:一是基於有病變區域標注的資料建立有監督的學習任務;二是對於沒有病變區域標注的資料,建立前面提到的多序列學習任務。這兩個模型共用特徵提取網路,特徵提取網路必須同時滿足兩大任務,這樣才能把精准標注的特徵強化到癌症識別中去。
以上是我們食道癌專案的簡單介紹,下面再簡單介紹一下我們在輔助診斷方面做的一些工作。
輔助診斷輔助診斷的目的是什麼呢?我們希望機器最終能夠像臨床醫生一樣具備診斷疾病的能力。在介紹輔助診斷項目之前,我們先來看看一個醫生或者一個普通的學生是如何成長為一名專家的。一個學生從剛入學開始,學習了大量專業課程,閱讀了大量專業醫學文獻後,就可以積累一定程度的醫學知識。當醫學知識達到一定程度之後,就可以去醫院裡面實習,由臨床醫生結合一些真實案例,指導他去學習診斷的技能。當我們具備了這些技能,就能夠成為一名普通的醫生,醫生可以看到大量的病人,學習大量經驗,經驗足夠豐富之後就成了專家。機器成長的過程與人類大致相似。
我們可以將其分為三個階段:第一階段是醫學知識圖譜的構建,也就是機器學習知識的過程;第二階段相當於有了知識之後學習診斷的能力,也就是建立疾病判別的一些模型;最後階段是讓機器在與專家的博弈過程中,不斷提升診斷水準,逐漸逼近甚至超過專家。
醫療知識圖譜構建
醫療知識圖譜的構建過程中,我們首先要對文本資料進行處理。文本資料分成兩類,一類是半結構化資料,一類是非結構化資料。這裡我列舉一個例子,說明我們如何把非結構化的文本變成結構化文本,也就是電腦可以理解的形式。我們可以把病史分為幾個部分:疾病的情況、入院的治療經過、入院的依據等。把病史分為這樣幾部分資訊後,再對每一類資訊進行細化和提取。經過提取之後,非結構化的文本就變成了電腦能夠理解的結構化文本。我們會把這些資訊轉化為醫學知識圖譜存在電腦裡,於是電腦就把這個知識學會了。以上就是醫學知識圖譜的構建過程。
診斷模型
第二步我們會有一個診斷模型。診斷的過程是這樣的,首先把一段人類語言描述的病情轉化成電腦可以理解的結構化知識。有了結構化的知識以後,機器就能理解這個人的情況,把知識推送到疾病診斷模型當中,模型將給出一個疾病列表。診斷模型的流程大致就是這樣。
下面我們來看一個病情理解的實例。通過技術對病人病情的理解可以得到一些基本資訊,其中包含性別、年齡,這個人的主動描述、現病史和既往史等。主動描述裡會提到症狀以及持續的時間,甚至一些更複雜的資訊,比如說唾沫是什麼樣子的,咳嗽是否帶痰。這些資訊都會詳細刻畫出來,按照前面提到的模式畫出病歷,完成對病情的理解。
理解病情以後,將其輸入診斷模型當中。診斷的demo包含幾個部分:第一部分是對病情的人類語言的描述,通過病情理解後得到結構化的病情表示,之後得出機器診斷的結果,按照概率從高到低給出5個結果。我們還給醫生留了一個介面,醫生可以對診斷結果評分,通過評分將結果回饋到模型當中。通過醫生和機器之間的交互,可以將模型反覆運算得越來越好。我們在實驗室資料裡選擇了大概10萬個真實病例進行測試,TOP1的結果與醫生的一致率大概是92%,TOP3是90%。但這種模型還需要更多臨床病例做驗證。雷鋒網