病历智能处理引擎的架构设计、实现和应用
作者簡介:
吳大帥,新嶼算法工程師,曾供職于宅米網(wǎng)、新達達,從事系統(tǒng)架構(gòu)設(shè)計、算法設(shè)計等工作。?
李智慧,《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》作者,從事大型網(wǎng)站、分布式系統(tǒng)、大數(shù)據(jù)方面的研發(fā)工作。?
責編:錢曙光(qianshg@csdn.net)?
聲明:本文為《程序員》原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載,更多精彩文章請訂閱《程序員》。
人工智能的到來驅(qū)動著諸多領(lǐng)域的變革,但具體如何應用到行業(yè)實踐中一直是難題,本文介紹了人工智能是如何進一步提高醫(yī)療效率的曲折歷程,主要以病歷智能處理引擎為例。
文本病歷的語義解析是進行病歷價值挖掘的基礎(chǔ)工作,本文介紹一個病歷智能處理引擎的設(shè)計,針對醫(yī)療病歷這種特殊的文本,如何確立文本知識結(jié)構(gòu),如何選擇應用自然語言處理算法,針對醫(yī)療科研與智能診療這個場景,如何根據(jù)模板抽取特定的知識信息,如何將該引擎應用于具體的生產(chǎn)系統(tǒng)中。
最近幾十年,隨著醫(yī)療信息化技術(shù)的不斷發(fā)展,積累了大量的病歷數(shù)據(jù),但是大部分的病歷都以無結(jié)構(gòu)或半結(jié)構(gòu)化文本方式存儲,這對病歷價值的挖掘帶來了很大的難度,也難以將這些寶貴的信息應用于醫(yī)療科研和智能診療等領(lǐng)域,阻礙了智能醫(yī)療的發(fā)展。
病歷智能處理引擎主要目標是將病歷文本自動轉(zhuǎn)化為更便于醫(yī)療科研和機器學習的知識結(jié)構(gòu),這是開發(fā)所有基于病歷的應用的基礎(chǔ),也是智能醫(yī)療領(lǐng)域的研究熱點之一。
一、病歷智能處理引擎設(shè)計思路
病歷是患者疾病發(fā)展以及診療的記錄,是對采集的資料歸納整理、綜合分析并按規(guī)定的格式和要求書寫的患者醫(yī)療健康檔案,對醫(yī)療、教學、科研以及醫(yī)院管理有重要的作用。
病歷的文本性確定了引擎以NLP(自然語言處理)為核心,醫(yī)療科研等實際需求決定了引擎的上層結(jié)構(gòu),接下來,按照應用NLP的一般思路介紹病歷智能處理的過程。
1. 確立文本知識結(jié)構(gòu)
病歷結(jié)構(gòu)敘述一般都比較清晰,各種醫(yī)療事件描述集中,整體按照不同或相關(guān)醫(yī)療語義進行句段的過度,這里我們按照原始文本的描述過程,使用遞歸層級結(jié)構(gòu)來表示中間結(jié)果,層級中的節(jié)點,按照語法結(jié)構(gòu)來存儲具體的醫(yī)療事件,方便對醫(yī)療事件進行語義提取。層級結(jié)構(gòu)如圖1所示。
圖1語義遞歸層級表示醫(yī)學標準的不統(tǒng)一以及醫(yī)學術(shù)語口語化是影響病歷的共享和統(tǒng)計的重要原因,為了提高病歷智能處理引擎的效率,需要將所有的輸出標準化,即所有對應同一醫(yī)學實體的醫(yī)學表達要統(tǒng)一。這里我們引入了醫(yī)學知識庫作為統(tǒng)一的標準,將所有的抽取結(jié)果轉(zhuǎn)化為標準醫(yī)學敘詞或概念code輸出。整體結(jié)構(gòu)如圖2所示。
圖2 醫(yī)學知識庫與詞庫結(jié)構(gòu)關(guān)系醫(yī)學知識庫的建設(shè)繁雜,但是對于醫(yī)療業(yè)務(wù)的可持續(xù)發(fā)展意義重大,所有基于知識庫的工作成果,可以在任何時間任何地點無壁壘解讀,持續(xù)的放大價值,推動醫(yī)療領(lǐng)域的發(fā)展。需要注意的是,醫(yī)療知識庫處在不斷的迭代完善過程中,我們在建設(shè)知識庫的過程中,要充分考慮知識庫的擴展性。
2. 應用算法處理病歷文本
應用算法處理病歷文本的過程,包含以下幾個部分。
醫(yī)學實體標記(分詞+標注)
首先,需要分離醫(yī)學實體,這一步主要應用自然語言處理中的分詞算法來實現(xiàn),分詞的算法有多種,每種算法有各自的優(yōu)劣。我們在實際應用中在業(yè)務(wù)不同階段使用了不同的算法,主要考量包括:一是算法的效果是否能達到我們的需要;二是算法底層數(shù)據(jù)結(jié)構(gòu)是否可以實時更新、實時生效,因為我們無法一開始就建立一個非常完備的醫(yī)學詞庫,實際應用時需要可以隨時更新分詞詞庫(內(nèi)存+外部詞庫),讓更新的詞項實時生效。
然后,需要對醫(yī)學實體做標注,這一步相對簡單,如果是使用HMM分詞,可以使用維特比算法標注,也可以依賴詞庫標注。我們在實際應用時,將詞性改造成“詞性+醫(yī)學實體TAG”的方式,這樣可以帶來兩個好處,一是一般分詞工具已經(jīng)把詞性標注集成到分詞算法中去了,這樣可以省去我們自己標注的工作;二是病歷文本的敘述也是遵循中文語法的,所以在做句法分析時,可以將醫(yī)學實體的通用詞性提取出來,然后使用通用的句法分析模型分析處理,避免在去做針對醫(yī)學領(lǐng)域句法分析語料標注、訓練的工作。
構(gòu)建語義層級
構(gòu)建語義層級的過程類似人閱讀的過程,以句子為單位從左向右讀取原始文本,然后由主控系統(tǒng)分析器對句子進行句法+規(guī)則分析,得到具體的按語法結(jié)構(gòu)組織的數(shù)據(jù),最后在由控制器根據(jù)語義建立新的語義節(jié)點并加入到新的層級。整體過程如圖3所示。
圖3 構(gòu)建語義層級過程這里需要注意問題有:
在醫(yī)學領(lǐng)域,很多表述按照醫(yī)學慣例是不符合常用的語法的,這部分的結(jié)構(gòu)需要單獨處理,如:PT2bN0M0,這里面包含了T腫瘤大小及局部浸潤范圍、N淋巴結(jié)受累情況、M遠處轉(zhuǎn)移三種分期指標信息,類似這種領(lǐng)域特有表示,一般需要特殊處理,然后映射到語義層級通用結(jié)構(gòu),方便后續(xù)跟著語義層級的其它信息統(tǒng)一處理。
一個語義節(jié)點的開始和結(jié)束的界限有時是非常模糊的,這需要我們預先做一個實體詞的關(guān)聯(lián)分析模型,以此來輔助判定后續(xù)的動作。另外,保證我們的系統(tǒng)針對層級誤差有一定的健壯性是非常有必要的。
3. 抽取信息
構(gòu)建完病歷文本的知識結(jié)構(gòu)之后,就是抽取數(shù)據(jù)進行實際應用的階段了,主要的步驟包括:構(gòu)建抽取模版、驗證抽取模版、實際抽取數(shù)據(jù)。
構(gòu)建抽取模版是確立結(jié)構(gòu)化目標以及定義抽取規(guī)則的過程,簡單的說就是定義一個Excel表頭并制定每一個列字段的數(shù)據(jù)抽取規(guī)則的過程。表頭的定義非常簡單,例如:姓名、年齡、癥狀等。抽取規(guī)則的定義要相對復雜,需要對語義層級有一定的了解,因為語義層級是一個樹狀結(jié)構(gòu),所以對應的抽取規(guī)則也是一個層級結(jié)構(gòu),并且最后一個層級要能真正定位我們關(guān)注的數(shù)據(jù)。
圖4是一個規(guī)則示例,語義層級的節(jié)點的TAG幫助我們定位到具體的語義層級節(jié)點,運算規(guī)則幫助我們進行匹配運算和對輸出結(jié)果的邏輯轉(zhuǎn)換,關(guān)鍵值標示了我們要抽取的目標。
圖4 單規(guī)則結(jié)構(gòu)示意圖5表示我們一個簡單的抽取模版的示意,姓名和CT是我們的表頭內(nèi)容,后續(xù)是我們每個字段的具體抽取規(guī)則鏈。規(guī)則鏈標示了尋找數(shù)據(jù)的層級結(jié)構(gòu),例如:抽取CT信息時要先找到現(xiàn)病史所在語義層級,然后在以此層級為基礎(chǔ)找到CT語義層級,進而獲取目標信息。
圖5抽取模版需要注意的點:
注意抽取模版和抽取規(guī)則的復用。
要同時支持規(guī)則組的抽取,以滿足的對醫(yī)療事件的抽取需求,例如我們的示例模版會將CT的全部信息給抽取出來,但是無法詳細的抽取出CT的事件、地點、結(jié)果等信息,這時便需要通過規(guī)則組先定位到CT語義節(jié)點,然后以此節(jié)點出發(fā),抽取此CT事件的詳細信息。
二、病歷智能處理引擎架構(gòu)
病歷智能處理引擎架構(gòu)主要分為六個子系統(tǒng),示意如圖6:
圖6 病歷智能處理引擎架構(gòu)病歷導入系統(tǒng):負責對各個來源的各種格式的病歷數(shù)據(jù)進行病歷文本的提取。
語義層級構(gòu)建系統(tǒng):病歷文本導入系統(tǒng)后,通過此系統(tǒng)進行語義層級上下文的構(gòu)建。此系統(tǒng)依賴自然語言處理系統(tǒng)、知識庫詞庫維護系統(tǒng)。
自然語言處理系統(tǒng):負責對病歷文本進行分詞、句法分析、語義分析的工作,除了封裝通用的處理算法,還定制了醫(yī)學特有的處理算法。
知識庫詞庫維護系統(tǒng):負責知識庫、詞庫的維護工作,是自然語言處理系統(tǒng)的基礎(chǔ)。
CRF(Case Report Format)規(guī)則定制系統(tǒng):負責定制抽取規(guī)則。
結(jié)構(gòu)化抽取系統(tǒng):以語義層級上下文為基礎(chǔ),通過CRF抽取規(guī)則進行結(jié)構(gòu)化的抽取。
以上是六個子系統(tǒng)的職責與關(guān)系的介紹,每個子系統(tǒng)中又包含了多個職責模塊,具體如圖7:
圖7 病歷智能處理引擎模塊示意模塊劃分主要分為四層,從上到下分別對應病歷導入系統(tǒng)、語義層級處理系統(tǒng)、自然語言處理系統(tǒng)以及結(jié)構(gòu)化抽取系統(tǒng)。
這里沒有突出知識庫詞庫維護系統(tǒng)以及CRF規(guī)則定制系統(tǒng)的具體模塊,因為對整個系統(tǒng)來講,我們僅需要以上兩個系統(tǒng)的產(chǎn)出,即詞庫知識庫以及CRF抽取規(guī)則。
病歷導入的模塊主要是為了兼容不同的格式,所以對主流的Word、Excel等做了支持策略,同時為后續(xù)的擴展提供了保障。
語義層級處理系統(tǒng)的核心是層級的動作分類器,構(gòu)建整個語義上下文的骨架。
自然語言處理系統(tǒng)構(gòu)建填充了語義層級上下文的內(nèi)容,語義處理管道是主要的處理流,保證了自定義處理的擴展。
結(jié)構(gòu)化抽取系統(tǒng)的核心是抽取器,這里包含了一個任務(wù)中心,在此可以對抽取結(jié)果進行下載以及查看正在抽取任務(wù)的進度。
三、病歷智能處理引擎在臨床科研自動化中的應用
科研對很多醫(yī)生而言是一個剛需,評職稱需要論文,寫論文需要做科研。臨床科研的主要方式是選定一個課題,然后選擇病歷,對病歷進行結(jié)構(gòu)處理,錄入結(jié)構(gòu)化病歷記錄表中,再對這些數(shù)據(jù)進行統(tǒng)計分析,以分析結(jié)果得到的統(tǒng)計圖表為基本架構(gòu),撰寫科研論文。
在這個過程中,最耗費時間和精力的,最容易出錯的,就是病歷的結(jié)構(gòu)化處理,而這正是前文闡述的病歷智能處理引擎的強項,一個使用病歷智能處理引擎的的科研過程如下圖。
圖8 醫(yī)療科研的一般過程新嶼作為一家醫(yī)療大數(shù)據(jù)服務(wù)公司,為醫(yī)療科研過程開發(fā)了數(shù)款產(chǎn)品,構(gòu)成了一個醫(yī)療科研數(shù)據(jù)自動化處理平臺。整體架構(gòu)如圖9所示。
圖9 新嶼醫(yī)療科研數(shù)據(jù)自動化處理平臺病歷文本通過病歷智能處理引擎進行自然語言處理后,處理結(jié)果寫入科研寶,并使用易統(tǒng)計進行分析,產(chǎn)生分析報表。
四、病歷智能處理引擎在智能輔助診療中的應用
病歷,特別是專家寫的病歷,本身就是一筆巨大的知識財富,將這些知識進行處理、分析、統(tǒng)計、挖掘,可以構(gòu)成一個病歷知識庫,供更多的人共享,即構(gòu)成一個智能輔助診療系統(tǒng)。整體架構(gòu)如圖10所示。
圖10 智能輔助診療系統(tǒng)架構(gòu)病歷知識庫、循證醫(yī)學知識庫、科研文獻知識庫、用藥知識庫共同構(gòu)成一個輔助診療知識庫,通過知識匹配搜索引擎對外提供服務(wù)?;颊呋蛘哚t(yī)生錄入病史、檢查結(jié)果等信息,系統(tǒng)匹配初步診斷結(jié)果,搜索診療計劃,產(chǎn)生多個輔助診療建議,供患者和醫(yī)生進行參考。
目前新嶼輔助診療系統(tǒng)尚在原型驗證階段,受醫(yī)療管理、醫(yī)學倫理的限制,大規(guī)模商業(yè)應用目前看來還為時尚早,但是利用大數(shù)據(jù)技術(shù)支持下的智能醫(yī)療,實現(xiàn)多專家會診定制最優(yōu)診療方案是一件值得所有人期待的事。
五、總結(jié)
使用傳統(tǒng)IT技術(shù),通過信息化手段提高醫(yī)療效率的工作已經(jīng)做了幾十年了,醫(yī)療機構(gòu)信息化程度也越來越高,對效能提升、信息快速流通起到了巨大的作用,但是,僅僅通過信息化手段進一步提高效率的空間越來越小,邊際效益越來越少。通過引入更多人工智能的因素,輔助醫(yī)生更快、更準確、更全面地開展醫(yī)療與科研工作,將會是下一階段IT技術(shù)的發(fā)展趨勢,但是新的道路總是曲折的,期待我們共同去探索。
訂閱《程序員》(含iOS、Android及印刷版)請訪問?http://dingyue.programmer.com.cn
訂閱咨詢:
在線咨詢(QQ):2251809102
電話咨詢:010-64351436
更多消息,歡迎關(guān)注“程序員編輯部”
總結(jié)
以上是生活随笔為你收集整理的病历智能处理引擎的架构设计、实现和应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从核心技术到高可用实践——解密数据库深度
- 下一篇: 企业年金提取 想辞职的时候就领走能行吗