來自首席AI科學家的乾貨!臨床電子病歷自然語言處理中的挑戰與應對

動脈網VCBEAT發表於2019-08-05

隨著醫療資訊化建設的普及,醫療大資料這個詞在過去一段時間如明星一般吸引著醫療界、學術界、工業界以及政府機構廣泛關注的目光。資料之中,臨床電子病歷無可厚非地成為了這股浪潮中被關注的焦點,很多有識之士異口同聲:“這是一個巨大的寶藏”。

我們要醫療AI大發展,靠什麼?我們要真實世界資料研究,靠什麼?一切都離不開以臨床電子病歷為代表的醫療大資料。然而,寶藏在那裡,可通往寶藏之路並不平坦,很多尋寶人都曾經歷“看得見,卻摸不著”的痛楚。

這是為什麼呢?資料不開放、資料孤島、資料隱私、倫理問題等等都是背後的原因。但在這裡,我們重點看其中的技術問題。

技術層面上,當前的瓶頸問題在於:海量的醫療資料對計算機而言並不可計算。通俗的解釋是:這些以文字為主的電子病歷資料雖然可以讓專業人士看懂,但計算機理解不了,也就沒法發揮其計算能力,就更別提到應用端的價值體現。

舉個例子,若想知道國內排名前十的腫瘤醫院收治的、沒有家族病史的肺部惡性腫瘤患者總數,數學上看起來足夠簡單,但即便這些醫院真把資料貢獻出來也未必數的準。

為什麼?家族病史都藏在病歷中的一段段的自然語言文字中,要讓計算機先把它們識別出來,這事靠人力可就“勞民傷財”了。

可即使識別出來也還不夠,如果我們的計算機不知道“非小細胞肺癌”就是一種肺部惡性腫瘤,那計算機仍不會去數這個數。這只是一個再普通不過的例子,在通往資料寶藏之路上,為了讓資料可計算,隱藏的陷阱常常讓尋寶人跌倒。可是比跌倒更可怕的,是有些陷阱能把尋寶人迷暈,讓其沉浸在尋到寶的幻覺中不自知,拿著石頭當金子,最後害人害己,貽笑大方。

我們在這裡具體討論的是在臨床電子病歷自然語言處理上的三個陷阱和一些識別陷進的方案,分別是:資料質量問題、資料結構化問題、資料標準化問題。配合前邊的例子,這些幾乎是在電子病歷為代表的醫療大資料尋寶路上的必過之關卡。

資料質量問題

先聊資料質量問題。臨床電子病歷的質量真的有問題,如果這些問題不解決,我們隨後的許多努力就將白白浪費。無論資料的資訊提取和標準化做的多好,無論構建出多麼美妙的AI模型,因為原始資料是錯的,得到的所有模型和結論也就跟著錯了。

來自首席AI科學家的乾貨!臨床電子病歷自然語言處理中的挑戰與應對

圖片來源:https://www.123rf.com.cn

那麼資料質量有什麼問題呢?舉些個例子,如果我們發現一個患者的診斷結論為卵巢癌,而患者性別為男,還會用這個資料做進一步的臨床研究嗎?如果我們發現病理報告彙總中當天來檢查的二十多個患者的生日全部是同一天,這得是多麼大的“緣分”?如果我們發現肺炎患者大面積缺失血常規檢查的結果;如果我們發現…這一切都會導致我們的資料產出錯誤的結論。

因此,在所有的NLP技術模型構建之前,先要想辦法發現這些問題。不難看出,上述例證有一個共同的特點,即與正常的醫學邏輯、HIT邏輯、常識邏輯相違背。

當然,有足夠經驗的醫生可以發現並判斷這裡大部分問題,但在海量的電子病歷中靠人工發現的辦法肯定不靠譜。因此,自動化的資料質量問題發現就變得很重要了。於是很自然的就要構造符號化的資料質控知識庫,基本上採用基於一階邏輯的數理邏輯表達,配合上概率就可以做到。這裡真正的難點是資料質控規則的構建,包括質控規則的人工定義與符號化,自動化的質控規則挖掘與人工校驗。

知識庫的構建一定是來源於資料的,不是“拍腦袋”想出來的。上邊提到的資料質量問題得到一定程度的解決以後,就到了和我們後邊要介紹的自然語言處理技術非常相關的質量問題了,就是標註資料的質量問題。大部分AI模型的構建是需要人工標註的資料的,這裡就包括針對臨床電子病歷的結構化演算法和歸一化演算法模型訓練。

這裡最難的還不是標註工作的工作量本身,而是標註的標準問題。有些詞的實體類別判斷和詞的邊界切分很難達成共識。

比如:一個術語詞究竟是一種“症狀名稱”還是一種“疾病名稱”?這一辯論常常被專業的醫學標註人員所爭執。

此外,我們需要標註的結論往往不是直接從電子病歷的文字中識別出來的,而是要經過一系列的邏輯判斷得到的一個“新詞”。

舉個例子,在患者的“一述五史”中,我們需要提取一個欄位名稱叫做“是否有吸菸史”,因此我們需要標註的結論是“是”或者“否”,而這兩個字在病歷中是不直接出現的,那就需要拆解邏輯,要明確從病例中識別出什麼,最終判斷這個是否吸菸的結論。

而究竟要從病例中識別出哪些詞語?如何判斷這些詞語間的關係從而得到一個最後標註結論?一切都需要標註的標準和標註人員的共識才能保證質量。

這個問題的難點在於:我們需要標註判斷的欄位數量不是幾個,幾十個,而是數千個。僅針對資料的標註標準問題,就有大量的工作要做,並且要結合實際需要的科研及應用場景來做。這需要非常多的專家資源支援和大量的資料使用過程中積累的經驗才能做到。

只有這些做到了,我們的機器學習演算法才能發揮作用,對病歷中的自然語言做到真正的理解從而得到正確的模型。

由此可見,在自然語言處理的演算法之前,已經有很多挑戰性的問題需要提前解決,而這些問題解決的好壞,已經極大的影響後面的演算法設計與執行。

解決了這些,我們再來開始討論自然語言處理的實際技術問題。

病歷結構化問題

假設資料質量治理好了,接下來要讓資料可計算,第一個問題就是要從電子病歷的自然語言文字中提取出我們想要的關鍵內容。如從不同章節中識別診斷名稱,藥品名稱,用藥計量,腫瘤部位,腫瘤大小,手術名稱等。

自然語言處理的同仁一眼就看能這是實體識別(NER)和關係分類問題。這塊技術已經比較成熟,尤其是CNN+Bi-LSTM+CRF及其各種變種演算法,再用上BERT,是不是可以解決所有問題?

但這種機器學習方法在這個領域是否真的是一劑萬能良藥呢?很遺憾,雖然這是一系列好方法,但把主要精力放在這些模型上並非最明智的選擇。

我們分析一下原因,文字中實體的識別,也就是我們說的NER問題基本上靠兩類資訊的建模:第一類是讓計算機認識一個詞,比如一見到“血管減壓術”,就知道這極有可能是一種手術名稱;第二類是上下文資訊,因為很多詞或術語具有很強的歧義性,需要根據上下文語境判斷這個詞是否在這裡代表了其它的意思而並不是我們需要識別的實體名稱。

醫療資訊的NLP領域與傳統NER解決的諸如人名,地名,機構名等的識別不同的是,醫療術語的歧義性並不是很強,而且上下文提供的資訊相對偏弱。因此讓計算機本身就認識一個詞比利用上下文的判斷就顯得更加重要。

於是,比設計複雜模型、拼命的調整引數顯得更加實用的是:構建出一個針對目標實體的詞表。

由於臨床中目前為止術語的使用並不規範,想要事先靠專業知識直接把詞表定義好是一件很難的事情。那麼,如何從海量醫療文字中挖掘所需要的詞表就變得很重要了。

不難發現,詞表的挖掘一定程度上是依賴於實體的識別,而實體識別效果的好壞又依賴於詞表的覆蓋和構建質量。因此,這並不是兩個獨立的過程,實體識別與詞表的挖掘是需要迭代式的同時展開的。

在迭代的過程中,要有足夠大量的文字資料。我們想挖掘的詞表要曾經出現在這些文字中才有可能被挖掘出來,而且為保證詞表質量和產出效率,這個過程還需要人機的協同並使用主動學習的方式進行取樣。

對於臨床電子病歷的結構化,實體的識別僅僅是第一步。這是因為,真正需要結構化的內容會遠比能從病歷裡邊直接識別出來的實體更加複雜。這裡還需要實體間關係的判定和很強的醫學邏輯推理,最終產出一個需要的欄位。

舉個例子,對於乳腺癌患者的病歷,醫生常常不會在病例中顯式寫明當前患者的分期,但這又是臨床研究中非常重要的欄位。這種情況下,我們就需要從病理報告中識別出腫瘤原發病灶大小和淋巴結轉移部位及個數等並且準確判斷出他們之間的關係,從影像檢查報告中識別出遠處轉移、淋巴結轉移及腫瘤周邊浸潤資訊,按照NCCN指南對TNM分期的定義,分別基於腫瘤大小及周邊浸潤資訊推理T分期,淋巴結轉移部位及個數推理N分期,遠處部位輸出M分期……通過一系列的醫學邏輯推理,最終得到患者完整的TNM分期。

因此,對於臨床電子病歷的結構化,我們需要準確的實體識別,針對識別出的基礎實體進行關係判定。例如,我們必須弄清識別出的多個個數究竟哪一個是針對淋巴轉移的。因此,最後經過醫學邏輯的知識推理才能完成一個高質量的複雜欄位。

來自首席AI科學家的乾貨!臨床電子病歷自然語言處理中的挑戰與應對

圖片來源:https://www.123rf.com.cn

那麼,能否採用端對端的模型呢?如果有大量的標註語料,端對端模型的訓練確實可實現比較好的效果,但是資料標註的成本不可忽視,畢竟我們要處理的是成百上千的目標欄位。

另外,端對端的機器學習模型在實際應用中最大的一個弊端是其“黑盒效應”。如果發現了錯誤,工作人員無法判斷錯誤出現在哪個環節,很難下手去修正錯誤。

在實際應用中,我們建議將基於詞表構建和識別模型構建結合的方式進行實體識別;通過關係分類的機器學習模型與規則模型混合的方式進行關係判定;再經過醫學邏輯知識庫經過知識推理來實現高質量的電子病歷結構化。這個過程是符號知識與統計機器學習演算法整合在一起的系統工程。

病歷標準化問題

資訊提取工作完成,也就是電子病歷的結構化工作做好了。是不是資料可計算性得到解決了呢?還沒時間慶祝,因為資料依然不可用。下一個棘手的問題已經等在那了。這就是識別出的實體的標準化問題,也稱為術語歸一化問題。

這裡不討論通過正規表示式就可以解決的格式標準化問題,比如時間日期的表達,用藥劑量的單位統一等問題。重點討論需要自然語言的語義資訊和知識才能做到的術語標準化。 

舉個例子,“雙側交感神經鏈切斷術” 是一種手術名稱,而在某個手術標準表中其標準表達方式是 “交感神經或神經節的切斷術”。如果我們不能把各種不同的表達方式歸結到一些標準的說法,就真的會出現前邊提到過的數數數不準的問題。

臨床病歷中術語表達不標準這個問題有多嚴重?如果給醫生一個醫療術語名稱,讓醫生自己想各種可能的等價或下位提法,醫生能想出多少個?在臨床實踐中,輕鬆找出幾十個提法的比較多見,幾百個的也不少,如果見到上千個的也不用吃驚,因為它是真實的存在。

自然語言處理的角度看,這似乎是一個典型的實體連結問題。然而,一般的實體連結問題在標準目標實體部分往往有充足的相關描述資訊,而且待標準化的實體也會有足夠的相關描述用於幫助模型的訓練。但在醫療術語的標準化這個問題中,很多標準術語表只有這個術語名稱本身,並沒有其它資訊可用,這給我們的很多標準演算法帶來了極大的挑戰。

於是,這要求我們一邊要充分利用醫療術語本身的字面資訊,另一方面要構建每個標準術語的相關描述型資訊用於計算其與非標準化臨床用語間的關係。

這裡邊有兩個關鍵字,一個是“知識”,一個是“特徵”。對於字面資訊的使用主要依靠的是知識。舉個例子,標準術語體系中有一個詞叫做“面神經微血管減壓術”,而實際在臨床病歷中我們更常見的是非標準化的提法,比如“左側三叉、面、後組顱神經MVD”。

在這個例子中,如果我們的計算機掌握著知識知道左側三叉包含於面神經,微血管減壓術與MVD所指基本無異,那麼我們已經判斷計算機已經可以判斷的八九不離十了。

另一方面,如果我們知道了每個手術主要針對哪些疾病,哪些人群,這些人治療後的常規用藥等資訊,都可以當作特徵通過機器學習的方法將臨床術語與標準術語關聯起來。

抓住這兩點是解決這個問題的關鍵,具體方法上,有生成模型,翻譯模型,規則體系,語義相似度計算等等,但無論採用哪種模型方法,都離不開諸如上例中的身體部位本體知識等知識形式,同樣也離不開來自真實病歷,醫學典籍,網際網路等資訊來源的實體描述所產生的特徵。

另外,這個問題的另一個大挑戰是長尾問題,很多非標準術語出現的次數很少,所以要求我們演算法是迭代進行的。當被歸結到標準詞的術語數量越大,我們所獲得的標準詞特徵表達就越豐富,相關知識也就越完備,對長尾的覆蓋能力也就越強。

需要標準化的術語型別非常多,除了上邊舉例的手術,還有診斷,檢查,檢驗,藥品,症狀等等。但無論哪一類,其基本方法和道理都是類似的,既需要知識,同時也需要豐富的特徵和機器學習的模型用來刻畫裡邊深藏的語義。

其它問題

除了以上談到的挑戰問題,在具體臨床電子病歷處理任務執行落地的過程中,還有很多陷阱需要邁過。這裡推薦幾個大家並不陌生而且行之有效的機器學習框架。它們看似無奇但十分重要,可以讓我們的工作效率和效果大幅提升。

第一個是針對資料標註的主動學習;第二個是針對跨醫療機構資料處理場景的遷移學習;第三個是對資料進行進一步挖掘應用的聯邦學習。讓我們一個一個簡單解釋一下他們為什麼重要。希望能給實際應用中遇到的具體困難帶來一些啟發。

1、主動學習問題

眾說周知,要訓練機器學習模型,離不開高質量標註的訓練資料,臨床電子病歷也是如此。醫療領域的資料標註是個複雜的工作,這裡邊對醫學專業知識的要求是非常高的,有些情況甚至需多位資深臨床專家共同判斷才能達成共識。

這意味著臨床電子病歷文字資料標註的成本和很多人人都可以理解的通用領域文字標註相比會更高。因此標註資料需要精選才行,每一條標註資料都應該有其代表性,還要積累到一定數量形成統計意義且擬合真實資料分佈。

這個時候,“主動學習”就變得非常重要了。“主動學習”可以在資料標註平臺上根據無標註資料的分佈情況,結合已經初步預訓練的演算法模型在新標註資料上邊的表現,來動態決定下一步需要標註的樣本。這一過程經常是在無監督學習監督學習的框架下進行的。

2、遷移學習問題

如果真的動手處理過多家醫療機構的臨床電子病歷資料就會發現,各個醫療機構之間——甚至同一家醫療機構的同一個科室內的不同醫生之間——在病歷書寫上的習慣不盡相同。

這不光體現在用詞上,還體現在語言的模式上。這意味著我們在一個醫療機構訓練出來的NLP模型,放在另外一個機構資料上邊,其表現可能會大相徑庭。

如果每家醫療機構的資料都重新標註,我們就會再一次面臨成本高企問題,這裡的成本不僅僅是標註的人力,還有非常昂貴的時間投入。這個時候一種可以把已經有過很多標註資料的場地訓練的模型遷移到另一個只有少量標註資料的新場地就變得尤為重要了,這也是遷移學習在這個問題上的重要價值。

技術層面有意思的一點是,傳統的遷移學習模型往往定義一個原始域(source domain)和一個目標域(target domain),在給定的兩個域上邊進行模型遷移。而實際情況是,我們需要處理的醫療機構一旦數量多起來,就會出現多個source domains和多個target domains。而他們資料之間用語與語言模式的相似程度,是可以通過語言模型和詞表挖掘等方式度量的。

這種情況下,我們需要處理的資料來源就會形成一張網,我們的模型就會在這張網上邊流轉起來,模型就像“課程學習”一樣先走到最可遷移的部分,然後逐步擴散,各個域都可以相互影響,最終形成了一個新的網路優化問題。這個問題在這裡不做更深入介紹。

3、聯邦學習問題

正如前邊提到的,我們經常要同時處理多家醫療機構的資料,用於自然語言處理模型的訓練。但醫療資料有著極高的敏感性,包括資料的權屬問題、資料的隱私問題、資料的合規問題等等,都要求我們要在保證資料絕對安全、合規的前提下進行機器學習模型的訓練。

那麼如何做到呢?聯邦學習的框架和方法在這裡將起到關鍵作用。在資料絕對安全隔離的前提下,如何在每個醫療機構的私有云進行模型訓練,而將模型引數彙總、優化、分發進行整體優化。

基於以上介紹的幾類機器學習方法和思路,在實際問題的解決中經常要幾類框架方法混合使用。而如何綜合運用這些方法達到低成本可以解決問題的程度,就需要在工程實踐中不斷地探索和積累經驗了。

總結

大規模臨床電子病歷要真的發揮其價值需要解決很多問題。上邊提到過的資料質量治理問題、資料結構化資訊提取問題、資料歸一標準化問題都非常難以處理。這些問題的解決單純靠人工是無法規模化的,必須用自然語言處理技術作為支撐。這裡不僅需要自然語言處理的演算法技術、計算技巧和工程能力,更需要很強的醫學背景知識。所以要採用知識工程與機器學習相結合的技術。

為了讓更多的研究者參與進來,我們分別在中文資訊學會的兩個專委會年會:CCKS和 CHIP上與清華大學和哈爾濱工業大學一起組織了相關評測任務,開放了部分無敏感資訊的人工改造模擬資料。所有的評測任務都將循序漸進的越來越逼近真實應用場景。

比如在CCKS2018的評測任務中,我們採用同分布的訓練和測試資料集進行電子病歷結構化任務評測,將這個實際問題簡化成一個可以相對容易建模的演算法問題。而在CHIP2018我們增加了難度,測試集與訓練集的分佈並不相同,這給有監督學習帶來了更大的挑戰也更接近實際的場景。

在CCKS2019的評測任務中,我們新增了無標註資料,這為監督學習帶來了可能,並保持了實際中常見的資料分佈不一致情況。在接下來,我們將繼續釋出資料標準化等任務,讓整個問題的各個挑戰環節逐步的全面開放出來。

所有的評測任務資料將通過OPENKG等組織轉化為長期維護、更新的線上評測。希望醫療界,學術界,工業界的各界同仁可以一同迎接挑戰,推動學術研究,最後推動基於真實世界資料的醫學進步,實現綠色醫療。

關於作者

閆峻,醫渡雲首席人工智慧科學家。曾任微軟亞洲研究院資深研究經理;哈佛大學醫學院訪問學者研究助理;多個國際期刊的審稿人、頂級國際會議程式委員會委員,資深委員。

來自首席AI科學家的乾貨!臨床電子病歷自然語言處理中的挑戰與應對他的博士畢業於北京大學數學學院資訊科學系,曾任微軟北京大學聯合實驗室副主任、CCKS 工業論壇主席、世界人工智慧技術大會青年科學家論壇主席,中山大學博士生導師、人民大學工程碩士導師。

在加入醫渡雲後,閆峻擔任醫渡雲首席人工智慧科學家,深耕NLP,擁有豐富的人工智慧應用經驗。

相關文章