劉一斌,葉 輝,易 珺,曹 東**
(1. 廣州中醫藥大學醫學信息工程學院 廣州 510006;2. 廣東藥科大學醫藥信息工程學院 廣州 510006)
電子病歷是指醫務人員在醫療活動過程中,使用醫療機構信息系統生成的文字、符號、圖表、圖形、數據、影像等數字化信息,并能實現存儲、管理、傳輸和重現的醫療記錄[1]。中醫電子病歷則是特指中醫師在為患者治療疾病時,記錄診療過程的一種方式,主要包含了中醫“望聞問切”的具體內容、治法和處方等信息。中醫電子病歷可供醫護人員進行診療經驗的分享,有利于中醫的傳承和創新,對臨床決策支持、循證醫學實踐和個性化醫療服務等具有重要意義。在現今大數據時代背景下,中醫電子病歷對中醫藥信息的數據挖掘也起到十分重要的作用,因為它們往往是最直接的數據來源。一個完整的中醫門診電子病歷通常記錄了較多信息,如癥狀、處方、治法等,這些信息以純文本、非結構化的形式記錄在電子病歷中,不利于進行專門的數據挖掘與分析。以往的醫學科研人員往往是人工抽取自己需要的病歷文本信息進行研究,在有效數據的抽取上耗費了大量的人力和時間,增加了科研成本。因此,研究如何通過計算機算法,把一個完整的中醫電子門診病歷文本的有價值信息自動分類輸出,對中醫診療經驗的傳承與中醫電子病歷的數據挖掘,以及更有效率地進行相關領域科研工作有著十分重要的作用。
如何有效地抽取中醫電子病歷中的特定內容,必須先對電子病歷文本中的各種醫學命名實體進行有效識別。目前,醫學命名實體識別的方法主要有基于字典、基于規則和基于機器學習的方法,隨著人工智能時代的逐漸到來,基于機器學習甚至是深度學習的方法體現出了較大的優勢,并成為當前研究方法的主流[2]。
樸素貝葉斯算法與詞向量(word2vec)都是比較成熟的文本分類機器學習算法。如詹鵬偉等[3]使用樸素貝葉斯算法過濾垃圾郵件,羅杰等[4]使用樸素貝葉斯對QQ 群信息進行文本分類。樸素貝葉斯基于古典數學貝葉斯理論,假設樣本各屬性間相互條件獨立。判斷文本屬于哪個類別,根據文本屬于哪個類別的條件概率越大就判定為哪類,其中屬于某類別的條件概率是依據貝葉斯公式計算樣本的關鍵詞屬于各類別的條件概率乘積。從其原理可以看出,樸素貝葉斯算法忽視了詞條間的相互依賴關系,不注重文本的上下文聯系,且忽略了同義詞的影響,適用于提取文本中內容較短、同義詞少的字段[5],如‘舌’‘脈’信息。與之不同的是,word2vec 算法是把每個分詞轉化為向量[6],從而可以刻畫每個分詞及其上下文的分詞集合。利用其上下文聯系強的特點,詞向量(word2vec)適合于語段較長、有強上下文關聯的中文語句分類。如張謙等[7]使用word2vec 進行微博文本內容分類,陳杰等[8]利用word2vec對不同類型的文檔進行分類。
在醫學文本信息處理方面,楊錦峰等[9-10]基于UMLS 語義類型進行了中文電子病歷命名實體和實體關系語料庫的構建,并且在電子病歷命名實體識別和實體關系抽取方面做了研究[11];栗偉等[12]采用CRF 與規則相結合的方法識別電子病歷命名實體。但是,前人主要是在西醫中文電子病歷中進行探索,而在中醫電子病歷信息抽取領域的相關研究并不充分,有大量的中醫電子病歷文本數據亟待挖掘。中醫電子病歷與西醫電子病歷有著很大的不同,西醫電子病歷中的醫學命名實體涉及很多病理生理詞匯、解剖位置詞匯等各種西醫專有名詞,中醫電子病歷也會包含這些信息,但是除此以外,更多的是描述中醫“望聞問切”四診相關的內容信息,而這些信息需要采取特定的算法進行識別。如中醫的各種描繪脈象、舌象、苔象的詞匯,以及說明中醫治療手段(疏肝健脾、疏風解表等)的詞匯,這些中醫的專有詞匯在以往的研究中還是難以識別。本文在此方面做了初步研究,完成了一個中醫電子門診病歷命名實體識別信息分類抽取過程。利用本研究所掌握的數據,識別并抽取中醫電子病歷文本中的10個不同類別的內容,很好地抽取了中醫領域特定命名實體。對數據集進行訓練集和測試集的劃分,根據不同算法的特異性,運用算法進行訓練形成模型。其中,樸素貝葉斯算法提取舌象、脈象、治法、診斷等信息,word2vec 算法提取處方、癥狀等長文本信息。經過測試集的測試,模型較好地完成了中醫電子病歷文本內容分類抽取任務。
設訓練樣本集分為k類,記為C={C1,C2,…,Ck},則每個類的先驗概率為P(Ci),i=1,2,…,k,其值為Ci類的樣本數除以訓練集總樣本數。對于新樣本d,其屬于Ci類的條件概率是P(Ci|d),根據貝葉斯定理,有:

其中,P(d)對于所有類均為一個常數,可以忽略。對于待分類文本字段d,本文采用向量空間模型,其基本思想是將每一個文本字段表示為一個向量d=(w1,w2,…,wm),m是d的分詞個數(去除停用詞之后),wm代表分詞。有:

樸素貝葉斯分類器將待分類的文本樣本d歸于哪類,則是根據以下公式:

樸素貝葉斯算法比較成熟,是文本信息分類的一種常見算法。訓練完成形成各個類別的詞袋后,進行測試時該模型就會特異性地識別相關類別信息并進行分類結果輸出。
word2vec 是一種淺層的神經網絡算法,主要包括2 個模型,分別是連續詞袋模型模型(continuous bag of words,CBOW)和連續跳躍元語法模型(continuous Skip-gram model,Skip-gram),CBOW 模型通過詞的上下文對當前詞預測學習詞向量,而Skip-gram 是根據當前詞對其上下文進行預測來學習的[12-13]。本次研究采用了CBOW模型。
word2vec 算法用來訓練詞向量,它將詞映射到多維的向量空間中,將詞表征為一組低維實數向量,被稱為分布式表征(distributed representation)[6],它可以充分考慮上下文字段之間的關系,同時詞義相近或者相關性大的詞向量在距離上也更為接近。CBOW 模型是一個三層的網絡結構,輸入層(input layer)即目標詞w(t)的前后各c個分詞對應的詞向量,這些詞向量經過投射矩陣(projection matrix)映射到投影層(projection layer),輸出層則是以詞語在語料庫中的詞頻作為權值構造的一棵二叉樹,葉子節點對應詞匯表中的所有詞語。葉子節點和非葉子節點均對應一個向量,其中葉子節點對應的向量即為詞向量,而非葉子節點對應的向量是一個輔助向量,兩種向量都是需要通過訓練學習的參數。經過一定次數的迭代訓練以后,訓練的詞向量和輔助向量會逐漸趨于穩定,模型訓練完成后,這些向量均會被保存在模型中,當進行測試時,模型就會通過這些存儲的向量值對文本內容進行分類并輸出分類結果。
在原始數據的基礎上,進行數據預處理與清洗,得到初步加工的數據,本研究一共獲得了266 個中醫電子門診病歷,病歷中包含了患者姓名、性別、年齡、癥狀、檢查、處方等詳細信息,這些內容均以純文本形式存在。中醫電子病歷文本中有必要的換行符以進行分割。圖1 為一個中醫電子病歷,可以看出其結構化程度很低,包含多種信息,如患者姓名、性別、年齡等,還有中醫“望聞問切”的相關記錄和醫生所開處方的記錄。值得注意的是該文本中“患者病史”下所描述的內容,其實是患者的臨床表現,真正的患者病史應該是“既往史”字段下面的“膽囊炎”。最終訓練得到的模型需要準確分析判斷并且識別這些內容,輸出真正正確的結果。
為使研究更具科學性,本研究按照測試集與訓練集約為1/4 的比例,隨機從所有中醫電子病歷中抽取50個電子病歷作為測試集,其余作為訓練集。
分詞[15]是中文文本預處理最基礎也是最重要的步驟,分詞的好壞對接下來的任務處理有著直接影響。結巴分詞對中文文本分詞有良好的效果,利用結巴分詞對訓練集電子病歷文本進行中文分詞,并且刪除可能對后續實驗造成干擾的停用詞,如‘,。:().’等,只選取有價值的文字信息。分詞后的文本文件被保存下來,用于后續進行標簽標注。
對于有監督的機器學習來講,標簽是十分重要。將中醫電子門診病歷的所有有用信息全部進行分類抽取,標簽代號與其實際代表意義的對照見表1。
分詞之后,對分詞分屬類別進行標注。當某個類別結束時,用N 標注。如分詞之后的“理氣健脾疏肝通絡”,標注為“理氣ZF 健脾ZF 疏肝ZF 通絡N”。在進行標簽標注時,全程由相關醫學專業人員進行審核與校對,以確保其標注內容的準確性。當所有訓練數據的標簽標注完成后,則開始進行模型訓練。
2.3.1 樸素貝葉斯模型

圖1 該門診中醫電子病歷文本

表1 標簽代號與所屬類別的對照
如上所述,樸素貝葉斯算法適用于提取中醫電子病歷中字段較短、上下文聯系較少的信息,主要包括了舌象、脈象、苔象、病史、中醫治法、西醫檢查、中醫診斷、西醫診斷共8 個方面的內容。當訓練樸素貝葉斯分類器模型時,利用已有標簽的數據,進行下列流程操作,見圖2。
每個類別詞袋里面的分詞即為該類別所含有的獨立特征,有了每個類別詞袋中各個獨立特征的條件概率(即公式(1)中的P(d|Ci)),通過樸素貝葉斯公式(1)計算出后驗概率,再通過公式(3)取概率最大值,從而給某個中醫電子病歷文本字段進行類別判斷。
2.3.2 word2vec模型
如上所述,word2vec 算法適用于提取中醫電子病歷中字段較長、且上下文關聯較強的文本信息,包括患者的臨床癥狀和中醫處方兩方面內容。

圖2 樸素貝葉斯模型訓練

圖3 CBOW模型網絡結構
在訓練word2vec 模型時,使用CBOW 模型(通過上下文預測中心詞)。比如當以“柴胡CF 黃芩”為語料訓練時,根據word2vec 的CBOW 模型,經過多次迭代訓練,即可從上下文語境“柴胡”“黃芩”預測出中間的標簽詞“CF”(實際代表含義為“處方”)。圖3 為CBOW 模型具體的網絡結構,模型中一共有n個分詞,輸出層V(葉子節點)為詞向量,P(非葉子節點)為輔助向量。通過訓練這兩種向量,使模型可以通過輸入的“柴胡”、“黃芩”最終得到并且輸出一個正確的標簽詞“CF”。在模型訓練的過程中,設置了一個較小的學習率,alpha = 0.001。此外,由于數據較少,設置參數最小詞頻min_count = 0,使模型不丟掉任何一個分詞。最終生成的模型文件以.bin二進制文件存儲。在接下來的模型調用和分類結果測試工作中,則可在python程序中直接利用該模型,輸入需要進行分類的中文電子病歷文本語句,分析該模型的輸出結果,從而進行該輸入文本類別的判斷。
訓練好模型并保存以后,則需要進行測試集的測試。在進行測試時,首先讀入一個完整的中醫電子病歷文本文檔,然后依次讀入文本中的每一行內容,進入模型進行判斷。分別計算屬于每個類別的權重,選擇最大的作為類別輸出,并且寫入至Excel 文件中相的應位置。其中樸素貝葉斯算法會特異性地識別舌象、脈象、治法等八個方面信息,word2vec 算法會針對性地識別處方和臨床癥狀兩個方面內容。
測試集進行測試的具體流程見圖4。這里需要指出的是,中醫電子病歷文本中有包含病人的相關個人數據,如姓名、性別、年齡等信息,這些信息也需要提取,因為這些數據也是醫學科研中不容忽視的信息,尤其是性別和年齡信息。對此,本研究采用了正則表達式進行抽取。
對圖1所示中醫電子病歷利用模型分類提取部分信息的結果見表2。
由表2 可知,模型將圖1 所示的病歷內容進行了較好地相關醫學命名實體識別及分類抽取,但仍存在一定的誤差。用正則表達式抽取的患者姓名、性別、年齡等信息均正確,既往史中的“1 型糖尿病”屬于模型誤判內容。舌象、脈象、苔象信息抽取良好,癥狀中的“初步診斷(或診斷)”屬于誤判內容。西醫檢查、中醫治法與中醫處方內容識別良好。
一般的文本內容信息抽取常見的評價標準有查準率(Precision)、召回率(Recall)以及F1測量值。查準率是模型實際抽取到的文本信息中的真正抽取正確的比例;召回率是模型應當抽取到的文本信息中的真正抽取正確的比例。考慮到查準率P與召回率R是相互影響的關系,F1測量值可以通過公式(4)求得。

經過統計分析,最終測試生成的結果見表3。
經測得精度P= 501/601 = 83.36%,召回率R=501/640 = 78.28%,并由公式(4)得到F1測量值為80.74%。經過相關醫學專業人員的分析與驗證,模型較好地完成了信息提取分類的任務,但是準確率和F1測量值與其他相關西醫醫學命名實體信息抽取[16]的準確率和F1測量值相比偏低,因此仍需要在跟進學術前沿的同時,探索出適合中醫電子病歷文本信息抽取的有效方法。在本研究中,可利用數據量偏少是其中的一個缺陷,除此以外,中醫有大量術語缺少統一的語義類型界定,如“咳嗽”一詞,既可以是臨床表現的某個癥狀,也可是一種中醫病名,這一問題也導致了中醫電子病歷信息分類提取的不準確性。這些都是今后亟需解決的問題。

圖4 測試集測試流程圖

表2 中醫電子病歷模型分類抽取結果

表3 模型測試結果
本文為了實現對中醫電子病歷相關命名實體與信息的分類提取,利用了樸素貝葉斯和word2vec 兩種機器學習算法。先是通過對訓練集的數據進行訓練,得到最終的模型,然后通過測試集進行生成模型的測試。經過對測試結果的分析,得到了一個較好的中醫電子門診病歷命名實體與信息抽取結果。不足之處在于總體數據有限,且可供訓練的中醫電子病歷文本格式相對單一,造成了最終訓練得到的模型對該種中醫電子病歷文本格式產生了一定的特異性。希望今后可用更為廣泛和多樣的數據來不斷完善模型,取得業內更為廣泛和深層次的認可。本研究為提取中醫電子病歷文本信息,從而進行更深一步的數據挖掘和科研任務做了基礎性工作,提出了一種值得推廣的方法。