病歷智能處理引擎的設計、實現和應用

作者簡介:

吳大帥,新嶼算法工程師,曾供職於宅米網、新達達,從事系統架構設計、算法設計等工作。 
李智慧,《大型網站技術架構:核心原理與案例分析》作者,從事大型網站、分佈式系統、大數據方面的研發工作。 
責編:錢曙光([email protected]) 
聲明:本文爲《程序員》原創文章,未經允許不得轉載,更多精彩文章請訂閱《程序員》。


人工智能的到來驅動着諸多領域的變革,但具體如何應用到行業實踐中一直是難題,本文介紹了人工智能是如何進一步提高醫療效率的曲折歷程,主要以病歷智能處理引擎爲例。

文本病歷的語義解析是進行病歷價值挖掘的基礎工作,本文介紹一個病歷智能處理引擎的設計,針對醫療病歷這種特殊的文本,如何確立文本知識結構,如何選擇應用自然語言處理算法,針對醫療科研與智能診療這個場景,如何根據模板抽取特定的知識信息,如何將該引擎應用於具體的生產系統中。

最近幾十年,隨着醫療信息化技術的不斷髮展,積累了大量的病歷數據,但是大部分的病歷都以無結構或半結構化文本方式存儲,這對病歷價值的挖掘帶來了很大的難度,也難以將這些寶貴的信息應用於醫療科研和智能診療等領域,阻礙了智能醫療的發展。

病歷智能處理引擎主要目標是將病歷文本自動轉化爲更便於醫療科研和機器學習的知識結構,這是開發所有基於病歷的應用的基礎,也是智能醫療領域的研究熱點之一。

一、病歷智能處理引擎設計思路

病歷是患者疾病發展以及診療的記錄,是對採集的資料歸納整理、綜合分析並按規定的格式和要求書寫的患者醫療健康檔案,對醫療、教學、科研以及醫院管理有重要的作用。

病歷的文本性確定了引擎以NLP(自然語言處理)爲核心,醫療科研等實際需求決定了引擎的上層結構,接下來,按照應用NLP的一般思路介紹病歷智能處理的過程。

1. 確立文本知識結構

病歷結構敘述一般都比較清晰,各種醫療事件描述集中,整體按照不同或相關醫療語義進行句段的過度,這裏我們按照原始文本的描述過程,使用遞歸層級結構來表示中間結果,層級中的節點,按照語法結構來存儲具體的醫療事件,方便對醫療事件進行語義提取。層級結構如圖1所示。

這裏寫圖片描述

圖1語義遞歸層級表示

醫學標準的不統一以及醫學術語口語化是影響病歷的共享和統計的重要原因,爲了提高病歷智能處理引擎的效率,需要將所有的輸出標準化,即所有對應同一醫學實體的醫學表達要統一。這裏我們引入了醫學知識庫作爲統一的標準,將所有的抽取結果轉化爲標準醫學敘詞或概念code輸出。整體結構如圖2所示。

這裏寫圖片描述

圖2 醫學知識庫與詞庫結構關係

醫學知識庫的建設繁雜,但是對於醫療業務的可持續發展意義重大,所有基於知識庫的工作成果,可以在任何時間任何地點無壁壘解讀,持續的放大價值,推動醫療領域的發展。需要注意的是,醫療知識庫處在不斷的迭代完善過程中,我們在建設知識庫的過程中,要充分考慮知識庫的擴展性。

2. 應用算法處理病歷文本

應用算法處理病歷文本的過程,包含以下幾個部分。

醫學實體標記(分詞+標註)

首先,需要分離醫學實體,這一步主要應用自然語言處理中的分詞算法來實現,分詞的算法有多種,每種算法有各自的優劣。我們在實際應用中在業務不同階段使用了不同的算法,主要考量包括:一是算法的效果是否能達到我們的需要;二是算法底層數據結構是否可以實時更新、實時生效,因爲我們無法一開始就建立一個非常完備的醫學詞庫,實際應用時需要可以隨時更新分詞詞庫(內存+外部詞庫),讓更新的詞項實時生效。

然後,需要對醫學實體做標註,這一步相對簡單,如果是使用HMM分詞,可以使用維特比算法標註,也可以依賴詞庫標註。我們在實際應用時,將詞性改造成“詞性+醫學實體TAG”的方式,這樣可以帶來兩個好處,一是一般分詞工具已經把詞性標註集成到分詞算法中去了,這樣可以省去我們自己標註的工作;二是病歷文本的敘述也是遵循中文語法的,所以在做句法分析時,可以將醫學實體的通用詞性提取出來,然後使用通用的句法分析模型分析處理,避免在去做針對醫學領域句法分析語料標註、訓練的工作。

構建語義層級

構建語義層級的過程類似人閱讀的過程,以句子爲單位從左向右讀取原始文本,然後由主控系統分析器對句子進行句法+規則分析,得到具體的按語法結構組織的數據,最後在由控制器根據語義建立新的語義節點並加入到新的層級。整體過程如圖3所示。

這裏寫圖片描述

圖3 構建語義層級過程

這裏需要注意問題有:

  • 在醫學領域,很多表述按照醫學慣例是不符合常用的語法的,這部分的結構需要單獨處理,如:PT2bN0M0,這裏麪包含了T腫瘤大小及局部浸潤範圍、N淋巴結受累情況、M遠處轉移三種分期指標信息,類似這種領域特有表示,一般需要特殊處理,然後映射到語義層級通用結構,方便後續跟着語義層級的其它信息統一處理。
  • 一個語義節點的開始和結束的界限有時是非常模糊的,這需要我們預先做一個實體詞的關聯分析模型,以此來輔助判定後續的動作。另外,保證我們的系統針對層級誤差有一定的健壯性是非常有必要的。

3. 抽取信息

構建完病歷文本的知識結構之後,就是抽取數據進行實際應用的階段了,主要的步驟包括:構建抽取模版、驗證抽取模版、實際抽取數據。

構建抽取模版是確立結構化目標以及定義抽取規則的過程,簡單的說就是定義一個Excel表頭並制定每一個列字段的數據抽取規則的過程。表頭的定義非常簡單,例如:姓名、年齡、症狀等。抽取規則的定義要相對複雜,需要對語義層級有一定的瞭解,因爲語義層級是一個樹狀結構,所以對應的抽取規則也是一個層級結構,並且最後一個層級要能真正定位我們關注的數據。

圖4是一個規則示例,語義層級的節點的TAG幫助我們定位到具體的語義層級節點,運算規則幫助我們進行匹配運算和對輸出結果的邏輯轉換,關鍵值標示了我們要抽取的目標。

這裏寫圖片描述

圖4單規則結構示意

圖5表示我們一個簡單的抽取模版的示意,姓名和CT是我們的表頭內容,後續是我們每個字段的具體抽取規則鏈。規則鏈標示了尋找數據的層級結構,例如:抽取CT信息時要先找到現病史所在語義層級,然後在以此層級爲基礎找到CT語義層級,進而獲取目標信息。

這裏寫圖片描述

圖5抽取模版

需要注意的點:

  • 注意抽取模版和抽取規則的複用。
  • 要同時支持規則組的抽取,以滿足的對醫療事件的抽取需求,例如我們的示例模版會將CT的全部信息給抽取出來,但是無法詳細的抽取出CT的事件、地點、結果等信息,這時便需要通過規則組先定位到CT語義節點,然後以此節點出發,抽取此CT事件的詳細信息。

二、病歷智能處理引擎架構

病歷智能處理引擎架構主要分爲六個子系統,示意如圖6:

這裏寫圖片描述

圖6 病歷智能處理引擎架構

  • 病歷導入系統:負責對各個來源的各種格式的病歷數據進行病歷文本的提取。
  • 語義層級構建系統:病歷文本導入系統後,通過此係統進行語義層級上下文的構建。此係統依賴自然語言處理系統、知識庫詞庫維護系統。
  • 自然語言處理系統:負責對病歷文本進行分詞、句法分析、語義分析的工作,除了封裝通用的處理算法,還定製了醫學特有的處理算法。
  • 知識庫詞庫維護系統:負責知識庫、詞庫的維護工作,是自然語言處理系統的基礎。
  • CRF(Case Report Format)規則定製系統:負責定製抽取規則。
  • 結構化抽取系統:以語義層級上下文爲基礎,通過CRF抽取規則進行結構化的抽取。

以上是六個子系統的職責與關係的介紹,每個子系統中又包含了多個職責模塊,具體如圖7:

這裏寫圖片描述

圖7 病歷智能處理引擎模塊示意

模塊劃分主要分爲四層,從上到下分別對應病歷導入系統、語義層級處理系統、自然語言處理系統以及結構化抽取系統。

這裏沒有突出知識庫詞庫維護系統以及CRF規則定製系統的具體模塊,因爲對整個系統來講,我們僅需要以上兩個系統的產出,即詞庫知識庫以及CRF抽取規則。

病歷導入的模塊主要是爲了兼容不同的格式,所以對主流的Word、Excel等做了支持策略,同時爲後續的擴展提供了保障。

語義層級處理系統的核心是層級的動作分類器,構建整個語義上下文的骨架。

自然語言處理系統構建填充了語義層級上下文的內容,語義處理管道是主要的處理流,保證了自定義處理的擴展。

結構化抽取系統的核心是抽取器,這裏包含了一個任務中心,在此可以對抽取結果進行下載以及查看正在抽取任務的進度。

三、病歷智能處理引擎在臨牀科研自動化中的應用

科研對很多醫生而言是一個剛需,評職稱需要論文,寫論文需要做科研。臨牀科研的主要方式是選定一個課題,然後選擇病歷,對病歷進行結構處理,錄入結構化病歷記錄表中,再對這些數據進行統計分析,以分析結果得到的統計圖表爲基本架構,撰寫科研論文。

在這個過程中,最耗費時間和精力的,最容易出錯的,就是病歷的結構化處理,而這正是前文闡述的病歷智能處理引擎的強項,一個使用病歷智能處理引擎的的科研過程如下圖。

這裏寫圖片描述

圖8 醫療科研的一般過程

新嶼作爲一家醫療大數據服務公司,爲醫療科研過程開發了數款產品,構成了一個醫療科研數據自動化處理平臺。整體架構如圖9所示。

這裏寫圖片描述

圖9 新嶼醫療科研數據自動化處理平臺

病歷文本通過病歷智能處理引擎進行自然語言處理後,處理結果寫入科研寶,並使用易統計進行分析,產生分析報表。

四、病歷智能處理引擎在智能輔助診療中的應用

病歷,特別是專家寫的病歷,本身就是一筆巨大的知識財富,將這些知識進行處理、分析、統計、挖掘,可以構成一個病歷知識庫,供更多的人共享,即構成一個智能輔助診療系統。整體架構如圖10所示。

這裏寫圖片描述

圖10 智能輔助診療系統架構

病歷知識庫、循證醫學知識庫、科研文獻知識庫、用藥知識庫共同構成一個輔助診療知識庫,通過知識匹配搜索引擎對外提供服務。患者或者醫生錄入病史、檢查結果等信息,系統匹配初步診斷結果,搜索診療計劃,產生多個輔助診療建議,供患者和醫生進行參考。

目前新嶼輔助診療系統尚在原型驗證階段,受醫療管理、醫學倫理的限制,大規模商業應用目前看來還爲時尚早,但是利用大數據技術支持下的智能醫療,實現多專家會診定製最優診療方案是一件值得所有人期待的事。

五、總結

使用傳統IT技術,通過信息化手段提高醫療效率的工作已經做了幾十年了,醫療機構信息化程度也越來越高,對效能提升、信息快速流通起到了巨大的作用,但是,僅僅通過信息化手段進一步提高效率的空間越來越小,邊際效益越來越少。通過引入更多人工智能的因素,輔助醫生更快、更準確、更全面地開展醫療與科研工作,將會是下一階段IT技術的發展趨勢,但是新的道路總是曲折的,期待我們共同去探索。

發佈了30 篇原創文章 · 獲贊 67 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章