梁立榮 李長偉 沈 曄 周立娟 景 行 童朝暉
1(首都醫科大學附屬北京朝陽醫院北京市呼吸疾病研究所臨床流行病學研究室 北京 100020)2(喬治亞大學公共衛生學院流行病學與生物統計學系 佐治亞 雅典 30602)3(北京無極慧通科技有限公司 北京 100085)4(首都醫科大學附屬北京朝陽醫院北京市呼吸疾病研究所呼吸與危重癥醫學科 北京 100020)
隨著“互聯網+”、“大數據”等概念的提出及發展,各行各業在概念基礎上加以探索,以謀求其在實踐中的落地應用,醫療行業也不例外。自2010年國家衛生計生委醫政醫管局出臺《電子病歷基本規范(試行)》之后[1],各級醫療機構廣泛實施了電子病歷,醫療信息化程度逐漸加強,數據積累也達到了一定的規模,醫院每天產生大量的非結構化文本數據,主要包括住院病程記錄、檢查與檢驗信息等。這些海量的電子病歷數據蘊含著大量的醫療知識和患者的診療信息,是重要的醫療大數據資源,對其挖掘分析,有助于提升醫院的醫療與管理水平,促進臨床研究應用等。目前面臨的挑戰是大量電子病歷信息以文本形式存在,而文本描述的信息通常存在歧義和很多非標準化描述,需要使用機器學習方法進行結構化和標準化處理以達到提高信息抽取的能力和效率的目標[2-3],這已成為醫療大數據領域的研究熱點[4-5]。
早期的研究大多數通過人工構造規則的方法,現在多采用監督學習的方法。有監督學習方法將命名實體識別看作序列標注問題,常用的序列標注模型包括:隱馬爾可夫模型(Hidden Markov Models,HMM)、最大熵馬爾可夫模型(Maximum Entropy Markov Models,MEMM)和條件隨機場。這三種模型各自的特點和適合的序列及場景有所不同:隱馬爾可夫模型存在2個假設條件,一是輸出結果值之間嚴格獨立,二是狀態轉移過程中當前狀態只與前一狀態有關。因此,隱馬爾可夫模型適合比較小的數據集,但實際上在大量真實觀察序列中更多的是以一種多重交互特征形式存在,觀察元素之間廣泛存在長程相關性,這樣隱馬爾可夫模型的假設條件使它無法在實際大量數據中應用。而最大熵馬爾可夫模型克服了觀察值之間嚴格獨立產生的問題,但狀態之間的假設理論依然存在,使得該模型存在標注偏置問題。條件隨機場模型(Conditional Random Field, CRF),去除了隱馬爾可夫模型中兩個不合理的假設,解決了最大熵馬爾可夫模型的標注偏置問題,并能充分表達上下文關系,方便表述節點間的交疊性與長距離相關性,能全局歸一化所有特征來獲取全局最優值,進而能避免標注偏置情況的出現[6]。
近幾年進行電子病歷文本信息抽取(即命名實體識別)技術中[7-8],公認的文本信息抽取性能較好的機器學習算法是CRF[6-9]。我國醫學類自然語言處理技術應用起步較晚,多數基于語料庫或采用語料庫與規則相結合的方法,且評估的樣本例數較少,多為1 000例以下[10-12];近年來有采用語料庫與機器學習算法相結合的方法,如俞鴻魁等[13]通過建立實體語料庫,運用隱馬爾可夫模型實現中文命名實體的識別。此外,李麗雙等[14]通過構建CNN-BLSTM-CRF深層神經網絡模型對生物醫學命名實體進行識別。限于中文電子病歷嵌套嚴重、結構復雜、語義繁瑣等情況,直接將CRF應用于非結構化電子病歷文本信息抽取的研究較少[7,15-16]。因此,改進的CRF即層疊條件隨機場模型(Cascaded conditional random field,CCRF)已被提出和應用[17-18]。但是該模型用于電子病歷信息抽取的研究證據較少。王云吉等[19]采用CCRF對90份中文電子病歷進行疾病和臨床癥狀2類實體識別,得到整體F值達97.64%,準確率可達97.89%,召回率可達97.38%。鑒于目前尚不清楚CCRF對大樣本電子病歷多種類型的實體識別效果,因此,本文結合層疊條件隨機場模型,對3萬余例非結構化醫療電子病歷文本進行全面的信息抽取,驗證其應用效果。
北京某大型三甲綜合醫院對醫院不同信息系統的醫療數據進行集成,形成了臨床數據中心,并基于該院呼吸專科在國內的優勢,建立了以呼吸專病電子病歷資源應用為基礎的京津冀呼吸疾病綜合防治大數據共享平臺。本文研究從該平臺整合的住院患者電子病歷數據信息中,選取2013.1.1-2017.12.31期間出院診斷包含呼吸疾病的所有患者住院電子病歷信息,共計38 218份,對其非結構化的文本數據采集、清洗并轉換入庫備用。數據采集前所有患者的隱私信息包括個人基本信息、家庭住址、聯系方式等均已進行去隱私化處理。
醫療電子病歷的信息抽取并非一刀切,需要根據業務及應用場景對電子病歷數據進行精細化歸類處理。通常以三級分類作為主題,進行初始目標數據的篩選定位,亦稱為主模型的建立,即:一級分類,包括電子病歷、影像學檢查和實驗室檢查等;二級分類中,以電子病歷為例,可分為入院記錄、出院記錄等;三級分類中,入院記錄進一步分為主訴、現病史和既往史等。
如圖1所示,預處理包括如下幾個步驟:① 建立特定的數據預處理規則:依據文本信息特點,結合醫療專業知識與業務應用需要,制定相應的規則,包括電子病歷文本信息定位與分段截取、文本符號(換行符、空位符、回車符等)處理轉換等;② 批量處理備用數據:將預處理規則用計算機語言進行轉化,并對不同的備用數據進行批量處理;③ 處理結果核查:主要是對規則的準確性、全面性,以及計算機語言轉化過程的準確性、全面性等進行校驗;④ 預處理規則或腳本優化:是指針對結果核查情況,從預處理規則和編寫腳本方面來改善預處理效果;⑤ 預處理規則固化:特指將人工定位的規則進行計算機語言的轉化,以實現后續數據預處理的自動化。

圖1 數據預處理流程
文本特征抽象指根據應用需求對數據進行有價值字段名稱的歸納總結;定義語法規則指依據數據特點,結合醫學專業知識,并在臨床專家的指導下,針對不同的文本特征分別從大量的數據中提煉出特征值存在的不同形式和規律。表1中列舉了兩個主題下文本特征抽取及對應的語法規則。其中,特征名稱亦為文本識別要建立的子模型名稱;語法規則是針對不同的數據給出相應的標注方法。在標注數據集上會將這些人工定義的規則轉化為機器學習的規則。

表1 文本特征抽取及語法規則示例

續表1
構建模型前,需要對同一主題(主模型)下的數據進行分析,判斷是否需要進一步分群以建立多個主模型。分群的角度包括科室、數據質量、數據規范、數據風格和數據內容等。
樣本分群明確后需要將不同群的樣本數據分別分成訓練集和測試集兩部分,訓練集和測試集的比例沒有統一的標準,通常依據數據結構的實際復雜性考量。與其他有監督學習方法不同,CCRFs的訓練是在“人工標注→機器學習→機器識別→人工修正”的閉環過程中進行的,這個過程需要借助人工,如果以傳統訓練集和測試集數據量的分配比例(7∶3)作為參考標準,必將耗費很多人力,也達不到提升效率的目的。因此以模型推廣應用為前提,兼顧模型的識別率,研究中訓練集和測試集數據量的分配以3∶7為主,并根據數據的實際情況(各類文本數據結構、數據質量、數據規范、數據內容多樣性等)調整訓練集所占比例,但訓練集最大占比不超過50%。
CRF是近幾年自然語言處理領域常用的算法之一,基于統計學的模型,是建立在隱馬爾可夫模型和最大熵模型的基礎上的,用于標記和切分有序數據, 即給定隨機變量X條件下的隨機變量條件隨機場,也稱為線性鏈條件隨機場(linear chain conditional random field)[17]。線性鏈條件隨機場可以用于標注等問題,這時,在條件概率模型P(Y|X)中,Y是輸出變量,表示標記序列,X是輸入變量,表示需要標注的觀測序列。
CRF數學定義:設X與Y是隨機變量,P(Y|X)是在給定X的條件下Y的條件概率分布。若隨機變量Y構成一個由無向圖G=(V,E)表示的馬爾可夫隨機場,P(Yv|X,Yw,w≠v)=P(Yv|X,Yw,w~v)對任意結點v成立,則稱條件概率分布P(Y|X)為條件隨機場。其中w~v表示在圖G=(V,E)中與結點v有邊連接的所有結點w,w≠v表示結點v以外的所有結點,Yv與Yw為結點v與w對應的隨機變量。
鑒于臨床電子病歷信息數據復雜的上下文關系以及醫學用語的復雜性,使得電子病歷文本實體識別難度較大。一方面一些醫學用語之間存在嵌套關系,同時這些嵌套詞語又可能與上下文形成更復雜的詞語,導致句子切分的歧義性;另一方面這些被嵌套的詞語包含的單字可能影響目標實體識別的準確性。基于此識別復雜嵌套的醫學實體需要考慮多層次的條件隨機場模型。目前建立多層條件隨機場模型主要有2種方法:按遞歸方式建立模型和按層疊加構建模型[17]。相較于遞歸方式層疊方式的訓練及解碼復雜度相對低,各層模型可以獨立存在,并且低層模型所產生的錯誤經過一定的過濾和調整再將結果傳遞給高層模型,可以避免錯誤的傳播和擴散。基于以上考慮,本文采用層疊條件隨機場模型(CCRFs)來抽取電子病歷信息。這里以“疾病”實體識別為例,在CCRFs中,首先在低層CRFs模型中對兩類簡單命名實體進行識別,即“身體基本部位名稱”與“基本疾病名稱”;然后將得到的標注結果傳送到第二層CRFs模型,并加入一個根據文本病歷特點設計的特征序列,這個自定義特征序列由詞性特征和實體特征交互融合而成,我們稱之為“自定義組合特征”。實體特征是指第一層CRFs模型的標注結果。第二層CRFs模型的輸入數據不僅包含有觀測序列,還包含第一層模型識別后的標注結果,這為進一步識別最終實體類別“復雜疾病名稱”提供更可靠的依據。層疊條件隨機場如圖2所示。

圖2 CCRFs模型
本研究中,收集的非結構化電子病歷文本經過采集、清洗、轉換等一系列操作最后存儲在數據倉庫中,并以數據倉庫為起始點,利用CCRFs模型進行信息抽取,如圖3所示。

圖3 CCRFs模型構建流程圖
(1) 特征標注:選取標注樣本,依據前面指定的語法規則,對每個文本特征進行標注,將人腦中的規則映射到機器中。
標注方法:本文采用Unigram模板生成CRF的狀態特征函數,采用的特征模板如表2所示。

表2 特征模板
共有10個模板,U00:%x[-2,0]表示當前詞和前面的第二個詞組成的特征;U02:%x[0,0]表示當前詞的特征;U03:%x[1,0]表示當前詞和后面的第一個詞組成的特征;U05:%x[-2,0]/%x[-1,0]/%x[0,0]表示當前詞和前面的第二個詞以及前面的第一個詞共同組成的特征,以此類推。
以“考慮診斷為自發性氣胸”為例,我們以B(表示一個詞的開頭)、M(表示一個詞的中間字)、E(表示一個詞的結尾)、S(表示由單個字構成的詞)、O(無用的詞或字)作為標記符號,符合CRF處理格式的這句話應該變成如下形式:
考 B
慮 E
診 B
斷 E
為 S
自 B
發 M
性 E
氣 B
胸 E
如果當前詞是“診”,那-2位置對應的字為“考”,根據第一個模板U00:%x[-2,0]能得到的轉移特征函數如下:
func1=if(output=B and feature=’U00:考‘)
return 1
else return 0
其中output=B 指的是當前詞(字)的預測標記,也就是“考”的預測標記。每個模板會把所有可能的標記輸出都列一遍,然后通過訓練確定每種標記的權重,合理的標記在訓練樣本中出現的次數多,對應的權重越高,反之對應的權重越低。
語料庫:這里選取1 000份呼吸科患者電子病歷信息,組織實習醫生在高年資呼吸科醫生的指導下,采用如上所述BMESO標簽進行手工標注,形成相應的語料庫。
分詞:在進行正式的實體識別前,我們嘗試使用諸如結巴分詞、THULAC、LTP、NLPIR等工具進行分詞,鑒于電子病歷的專業性和復雜性,實驗結果并不理想,醫學專業詞分錯的概率很大,產生誤差傳遞,故本研究放棄分詞,嘗試直接識別實體名稱。
(2) 特征集生成:將每個文本特征標注的初始規則轉化成計算機語言。
(3) CCRFs模型訓練:如果數據區分不同的群,則在特征集的基礎上,同時輸入每個群的訓練集數據,并輔以人工反復矯正。
將測試集數據導入上述訓練好的各CCRFs模型進行預測,針對結果逐個對模型核查。常見的導致模型未達到理想效果的原因有樣本量不足、語法規則定義精細程度不足、特征標注不夠充分、當前模型和輸入不匹配等。如果評估指標未達到指定的閾值(基礎閾值0.9),則需從以上角度進行分析,針對特定問題選擇優化模型。同時,在達到基礎閾值后,隨著應用場景變化、模型版本迭代等,逐漸將評估指標提升到更高的水平(比如0.95)。
對于信息抽取結果評價,我們采用精確率、召回率兩個指標作為評估指標,相應的計算公式為:

(1)

(2)
P和R有時會出現矛盾的情況,這時需要進行綜合考慮,最常采用精確率和召回率的加權調和平均值,本文采用F1指標值進行評價,表示為:
(3)
3.4.1研究數據選擇
本研究主要針對呼吸疾病住院患者醫療電子病歷數據,根據需求及應用場景,重點選取入院記錄、出院記錄、輔助檢查報告3大類非結構化文本數據進行研究,納入分析的各部分病歷來源豐富,數量較大,可確保后續訓練建立的模型覆蓋性較為理想。另外,經人讀各類文本數據,發現各分析模塊內部數據之間無特別明顯的細分特征。對于訓練集和測試集的分配比例上,采用非固定比例的3∶7。研究所用的各類非結構化文本數據量見表3。

表3 研究數據來源及數量
3.4.2預處理信息
對各重點研究的文本數據預處理量和對應的預處理操作如表4所示。

表4 預處理信息及操作
3.4.3特征標注情況
通過人讀非結構化文本,結合應用場景,歸納總結出22種實體分類,每類實體下有更細的實體分類,比如疾病下會有既往疾病、家族疾病、住院確診疾病等。在文本中,其上下文信息均是與某類特定實體相關的有效信息,可作為特征提取時的候選特征。基于這些特征,同時為了提升工作效率,我們設計了在線標注審核功能。針對每類細實體標注人員會標記一部分典型實體值,同時審核人員對上述標注結果進行審核修正最終確定標注結果。通過上述特征標注,將獲取部分規則集。表5展示了部分實體歸類數據。

表5 特征標注情況
3.4.4CCRFs模型構建情況
為了提升CCRFs模型的準確性和后續的可應用性,在對文本數據進行處理前,針對非結構化的醫療電子病歷進行結構拆分、數據拆分和數據重組等操作,以便對待處理文本數據進行分群,并盡可能實現群之間數據差異最大化、群內部數據差異最小化。對于單個群內的數據,需根據先前的文本特征情況,構建對應各文本特征的CCRFs模型。本研究重點關注的非結構化文本所建立的CCRFs模型部分示例見表6。

表6 不同非結構化文本CCRFs模型構建示例
3.4.5信息抽取結果樣例
鑒于篇幅有限,本研究僅以吸煙史為例進行非結構化文本數據經過CCRFs模型處理后的結果展示。如圖4所示,經過結構化處理后的數據結構清晰,能夠很好地應用于各種搜索與研究中。

圖4 CCRFs模型下的信息抽取結果示例
3.4.6信息抽取驗證結果
總體驗證結果表明,CCRFs模型對38 218份病歷各類文本信息抽取的精確率、召回率和F1均較高,如圖5所示,分別為92.12%、92.42%和92.27%。

圖5 CCRFs模型對病歷文本信息抽取驗證的總體結果
進一步比較39種不同類型病歷文本識別的驗證效果,如表7所示,各子模型對應的文本信息處理速度較快,最大運行速度為66.5 s;并且CCRFs模型對各子模型文本識別的結果差別較小,不足2%。就精確率而言,最高及最低識別準確率分別為93.0%和91.18%,差值僅為1.82%;召回率最高及最低值分別為93.0%和91.29%,差值為1.71%;F1最高及最低值分別為92.95%和90.99%,差值僅為1.96%。由此可見,病歷文本類型雖不同,但CCRFs模型識別的效果差別不大,表明該CCRFs模型對不同類型的病歷文本信息抽取具有較好穩健性和魯棒性。需要說明的是,既往史中的手術史子模型、肺CT檢查報告中癥狀和分支1子模型、胸片檢查報告中的疾病和癥狀子模型識別效果相對較差,其精確率、召回率和F1值均未達92.0%,存在一定的誤識別現象。

表7 不同類型電子病歷文本信息抽取的驗證結果

續表7
此外,對上述39種文本信息處理的運行時間存在差別。其中,家族史、出院醫囑、主訴、個人史的運行時間均較短,而肺CT檢查報告及胸片檢查報告下的各子模型(除外側別子模型)運行時間較長,這與影像檢查報告的數據相對復雜有關,導致運行速度相對較慢。另外出院醫囑的總樣本量比較大但運行時間只有2.851 s,主要考慮出院醫囑文本書寫規律性強,格式清晰,易于處理。由于樣本量、數據結構等的不同,比較各主模型間子模型的運行時間無實際意義,只比較同一主模型下的各子模型間的運行時間,發現肺功能檢測報告、肺CT檢查報告以及胸片檢查報告中的側別子模型和否定詞子模型較其他子模型運行時間短,主要與這兩類子模型對應的實體值較少有關(如側別子模型基本上只有簡單的左側、右側、雙側)。這個原因也能解釋其他主模型下個別子模型運行速度較快(如家族史、既往史主模型中對應的否定詞模型)。
本研究采用機器學習算法建立CCRFs模型,對3萬余例較大樣本涉及39種類型的呼吸疾病住院電子病歷文本信息抽取,結果顯示,CCRFs模型可準確、快速識別多種電子病歷文本信息,具有良好的應用前景。
但是,本研究也發現CCRFs用于電子病歷文本信息抽取還存在以下問題:① CCRFs模型雖然能識別錯別詞及相似詞,但也會把錯誤詞當成正確詞來識別,甚至會識別出標點符號及數字。② 對特定文本類型尤其是影像檢查報告,由于數據結構相對復雜,導致模型存在一定的誤識別現象,識別率有待提高。③ CCRFs模型文本特征抽取和語法規則定義的合理性有賴于有豐富臨床診療經驗的醫生做指導,否則模型的提取結果將很難滿足臨床應用的需求。針對上述問題下一步可嘗試:① 建立一套對于錯誤詞、標點符號、數字等的標準化流程,對識別錯誤的詞進行修正。② 嘗試采用神經網絡+層疊CRF模型進行優化。