屈丹丹,楊 濤,胡孔法
(南京中醫藥大學人工智能與信息技術學院,江蘇南京 210023)
中醫醫案是中醫臨床診斷、治療的實錄,其保存了大量疾病診療一手資料,是醫家臨床經驗和辨治特點的集中反映,已成為中醫學術研究和名老中醫經驗及學術思想傳承的重要資源[1]。因此,充分挖掘與利用醫案信息、提煉名老中醫診療經驗,將會給人們的健康帶來福祉。然而,中醫醫案在記錄過程中存在主觀因素過多、隨意性強、結構復雜等問題。大量醫案信息不能直接指導臨床實踐,而是需要提煉、總結與學習,若采用傳統人工方式進行整理與總結,耗時耗力。
近年來,隨著科學技術的迅猛發展,將人類語言轉化為機器語言的自然語言處理技術(Natural Language Pro?cessing,NLP)逐漸被人們所熟知,并得到了廣泛應用。自然語言處理作為一個多學科交叉研究領域,涉及多種應用技術,包括信息抽取、文本挖掘、機器翻譯等[2]。信息抽取(Information Extraction,IE)是一種能從海量數據中準確、快速抽取出人們感興趣的事實信息,并將其以結構化形式存儲起來的技術[3]。在醫學領域,國外許多學者將醫學術語庫和自然語言處理技術相結合對醫案進行信息抽取,且取得了不錯的成效。但由于中文語言的特殊性,使得中文臨床醫案信息抽取成為一項具有挑戰性的任務。其中,陳德華等[4]主要借助詞庫,利用文本聚類的方法從病理文本中提取出模板信息用于文本結構化處理,該方法具有較好的結構化處理效果,但其詞庫構建需要人工進行整理,且兼容性較差;楊兵等[5]針對專業性強、內容豐富的醫學領域文本數據提出一種結構化信息抽取方法,主要利用文本聚類和關鍵詞提取生成醫學術語庫,再根據語法規則抽取關鍵指標實現醫學文本結構化信息的抽取,該方法信息抽取精度較高,但計算時間長,且時效性較差;吳歡等[6]利用基于規則的方法對乳腺癌病理報告進行信息抽取,雖然方法簡單、快速、易于實現,但前期需要人工大量進行歸納與總結,且通用性差。
鑒于此,本研究嘗試從自然語言處理技術入手,利用Word2vec 方法進行中醫醫案癥狀信息的自動化抽取,并將抽取結果與TFIDF 進行對比分析,探討更適用于中醫醫案癥狀信息抽取的研究思路,從而為進一步的中醫醫案自動化抽取研究提供參考。
在醫案信息抽取過程中,本研究采用的第一種方法是基于統計的加權技術——術語頻率—逆文檔頻數(Term Frequency-Inverse Document Frequency,TF-IDF)。該方法是一種常用于資訊檢索與探測的加權技術,本研究主要利用其評估癥狀在醫案中的重要程度。在研究中,TF 表示某個癥狀在醫案中出現的頻率,即:

其中,im,n表示某個癥狀m 在醫案n 中出現次數,本研究規定表示在醫案n 中出現的所有癥狀次數之和。
IDF 是一種度量癥狀普遍重要性(“權重”)的方法,以逆文本頻率指數表示,即:

其中,|D|表示語料庫中醫案總數,|Dtm|表示包含該癥狀的醫案數,1+|Dtm|表示防止當癥狀m 在醫案集合中不存在而出現分母|Dtm|為0 的情況。根據公式(2)可以看出,某個癥狀在醫案集合中出現的次數越多,該癥狀的IDF 值反而越小,即表示該癥狀區分醫案的能力越弱。因此,癥狀在醫案集合中出現次數與IDF 值之間是一個反比關系。某個癥狀的重要性與其出現的詞頻成正比,與其在醫案集中出現的頻率成反比,即一個癥狀在醫案中出現頻率越高,而醫案集中包含該癥狀的醫案數越少,則其得到的TF-IDF值越高,也即表示其越重要。
Word2vec 模型是本研究用于醫案信息抽取的第二種方法。Word2vec 于2013 年由Mikolov 等[7]提出,是一種神經網絡概率語言模型,其主要目的是將詞語轉換為包含語義的詞向量,從而達到詞與詞之間關系、與上下文關系都能以某種程度被表達出來的目的[8]。之后,Mikolov 等又通過對Word2vec 訓練出的詞向量進行距離計算,可有效發現語料庫中相近的詞匯[9]。Word2vec 模型一般分為CBOW和Skip-gram 兩個基礎模型[10],其中CBOW 模型是基于數據上下文內容預測目標詞,而Skip-gram 模型思路與之相反。Skip-gram 主要根據指定詞預測該指定詞的上下文詞向量,即發現語料庫中局部詞匯之間的共現關系,也是本研究需要用到的模型。本研究主要思路是將處理后的數據映射成一個多維實數向量,在新的高維空間中,癥狀等詞匯會以詞向量形式存在。相比傳統文本表示方式,Word2vec 生成的詞向量不僅可以避免“維度災難”,而且能夠將詞匯之間的語義關系較好地呈現出來。
K-均值(K-means)算法是一種已知聚類類別數的劃分算法,且作為一種無監督學習算法,應用較為廣泛。本研究利用Word2vec 中的Skip-gram 模型進行醫案癥狀抽取時過于依靠指定詞,無法實現癥狀信息的自動化抽取,且抽取結果受主觀因素影響較大。因此,本研究在此基礎上,利用K-means 聚類算法進行醫案癥狀信息抽取研究。但實驗過程中發現,在處理高維數據時,聚類很難保證對其有效進行劃分。因此,研究借助于一種通用的降維和數據分析工具——主成分分析法(PCA),通過線性變換將高維空間中的樣本投影到低維空間中,同時盡可能保留原始數據特征[11]。研究在保留原始數據95%以上信息的情況下,利用PCA 將Word2vec 生成的高維詞向量降到4 維,再利用K-means 算法進行劃分。實驗選取K 個聚類中心,計算各個詞匯與聚類中心的距離,通過不斷迭代得到最終聚類結果。通過對聚類結果進行purity 評價發現,當K=2 時,purity 值最高,為0.92。最后,實驗選擇癥狀明顯較多的一組作為醫案信息抽取最終結果,實現中醫醫案癥狀信息的自動化抽取。
本研究先從原始數據中抽取出實驗所需數據,再對抽取出的醫案數據進行預處理,之后進入分詞操作階段。但在研究過程中發現,由于缺乏較完整、系統化的心系醫案相關癥狀術語集,導致現有分詞工具分詞效果較差,需創建自定義心系醫案癥狀詞典。因此,本文的分詞和去停用詞操作是在構建后的詞典基礎上進行的。最后利用TFIDF和Word2vec 方法分別對醫案癥狀相關信息進行自動化抽取,并通過精確率、召回率評估兩種方法的優劣。醫案信息抽取流程如圖1 所示。

Fig.1 Medical information extraction process圖1 醫案信息抽取流程
本文實驗數據來源于某三甲中醫醫院心內科的438 條臨床數據,數據真實可靠。原始數據以Excel 形式存在,主要內容包括:總編號、病歷號、來源、姓名、性別、年齡、診次、就診日期、病史、方藥等內容。由于本次研究主要針對心系醫案的癥狀相關信息進行抽取,而病史中包含了病人大量癥狀信息,因此病史相關數據是研究中需要重點挖掘的內容。
數據清理主要通過填寫缺失值、光滑噪聲數據、識別或刪除離群點并解決格式的不一致性,達到格式標準化、清除異常與重復數據、糾正錯誤的目的[12]。因此,為提高醫案信息抽取的準確性,本研究對原始數據中存在的前后詞語不一致問題進行預處理,處理結果如表1 所示。
分詞操作是醫案信息抽取的基礎,本研究采用的是Py?thon 的jieba 分詞。jieba 分詞是一種應用較為廣泛的概率語言模型分詞工具,其主要任務是在切分得到的所有結果中求某個切分方案S,使得P(S)最大。由于本研究是對特定領域進行分詞,jieba 的基礎庫中并沒有醫學領域專有詞匯,因此需要創建自定義詞典。創建本研究所需的心系醫案數據詞典流程描述如下:①讀取100 條心系醫案數據,jieba 分詞并進行去停用詞操作;②構建詞典:遍歷分詞結果,構建“字詞—頻數”詞典,按詞頻降序排列:{‘word’:freq},之后遍歷詞典,保留詞數>1 的詞語并進行一定的人工干預,構建自定義詞典;③讀取100 條醫案數據,依據自定義詞典進行jieba 分詞;④保留分詞結果中詞頻>1 的詞語,與自定義詞典進行比較,加入未登錄新詞,更新詞典;⑤重復步驟③、④,直到全部醫案數據讀取完畢。最終分詞結果如表2 所示。

Table 1 Data cleaning表1 數據清洗

Table 2 Word segmentation表2 分詞結果
去停用詞是指在信息檢索中,通過對某些字或詞的過濾,達到節省存儲空間、提高搜索效率的目的,也是本研究分詞后需進行的操作。停用詞一般為醫案中出現頻率較高,但與心系醫案需抽取的癥狀沒有關聯或不影響抽取結果 的 一 些 詞,例 如“患 者”“約”“至”“門 診”“口 服”“我 院”“可以”“但”“仍”“突然”等詞語及常用標點符號。本文選取了493 個停用詞放于一個停用詞表中,并將停用詞表存放在以“stopwords.txt”命名的記事本文件中。為提高醫案信息抽取精確率、減少噪聲數據的干擾,本研究在分詞完成后利用Python 的open()函數加載stopwords 文件,以便對分詞后的數據進行去停用詞操作。
指小腿腓腸肌發生疼痛性攣縮,孕期任何時期均可出現,夜間發作較多。這種情況在懷孕5個月以上孕婦中為多見。系因增大的子宮壓迫下肢神經所致,疲倦、寒冷、不合理的體位以及體內鈣、磷比例失調致神經系統應激功能過強,均可促使發作。
不管在機器學習(ML)、信息搜索(IR)還是自然語言處理(NLP)等領域,評估是一項不可或缺的操作。本研究規定抽取到的癥狀為正類,其他為負類,評估設置如表3 所示。

Table 3 Assessment settings表3 評估設置
評價指標包括:精確率(precision)、召回率(recall),計算公式如下:

其中,TP 表示實驗抽取與人工標注相同的癥狀數量,TP+FP 表示抽取總數量,FN 表示未抽取到的癥狀數量。
實驗分別選取利用TFIDF 與Word2vec 方法抽取出的前20 條醫案癥狀信息,并按其重要性排序,結果如表4 所示。

Table 4 Top 20 extracted data表4 抽取出的前20 條數據
由表4 可知,TFIDF 根據權重值抽取出的20 條數據包括:胸悶、胸痛、心悸、氣喘、頭暈等。Word2vec 方法通過計算與聚類中心的距離抽取出的結果包括:心悸、胸痛、心慌、胸悶、氣喘等。由此可知,心系醫案中病人發病時,往往伴有心悸、胸悶、胸痛、氣喘、頭暈等癥狀的發生,其結果與已有文獻[13]的研究結果相似。
同時,在實驗不斷探索的過程中,還發現一個癥狀的出現往往伴隨另一種癥狀,比如:出現惡心時,往往也伴隨著嘔吐的發生。由此推論,癥狀與癥狀之間可能也存在著一定聯系。

Fig.2 Precision P圖2 精確率P

Fig.3 Recall R圖3 召回率R
通過以上實驗發現,由于TFIDF 與Word2vec 方法研究思維模式的不同,抽取效果也呈現出較大差異,其中Word2vec 方法更適用于心系醫案癥狀抽取研究。對比兩種癥狀信息抽取方法的準確率和召回率發現,Word2vec 方法的準確率和召回率均明顯高于TFIDF。主要原因在于利用TFIDF 方法進行中醫醫案癥狀信息抽取時,只注重了詞匯與整個醫案的聯系,而忽略了詞匯與其上下文之間的聯系。但在醫案信息抽取過程中,上下文之間的聯系是不可忽略的因素,因而其抽取結果的精確率和召回率偏低。
由圖2 可知,隨著抽取個數X 的增大,兩種方法的準確率總體呈下降趨勢,主要原因在于人工標注是依據詞頻大小及標注癥狀是否為醫案中的常見癥狀進行綜合考量,具體參照文獻[14],而兩種方法抽取結果是按其重要性進行降序排列。當X 為25 時,抽取癥狀與人工標注癥狀符合程度較高,對應準確率也偏高。當X>65 時,Word2vec 方法抽取結果趨于穩定,保持在80%左右,TFIDF 方法則在X=95時趨于穩定,只有60%左右。
由圖3 可知,隨著抽取個數X 的不斷增加,利用Word2vec 方法抽取的召回率逐漸趨于100%,而采用IFTDF方法的召回率穩定在80%左右。綜上所述,基于Word2vec方法的癥狀抽取結果與人工標注結果更為接近。
本研究利用基于統計的TFIDF 和Word2vec 方法分別從醫案數據中抽取醫案癥狀信息。實驗結果表明:病人發病時,往往伴有心悸、胸悶、胸痛、氣喘、頭暈等癥狀的發生,癥狀與癥狀之間也存在一定聯系。同時,對比TFIDF 與Word2vec 抽取結果發現,利用Word2vec 抽取醫案癥狀信息的效果優于TFIDF 方法。主要原因在于醫案信息抽取過程中,癥狀與其上下文之間的聯系是必須考慮的因素,而TFIDF 方法恰恰是在忽略上下文之間聯系的基礎上進行的,導致最終抽取結果的精確率和召回率偏低[15-17]。
現階段的研究只是初步探索,今后的研究可在此基礎上對醫案詞典作進一步擴展,使其更精確、應用范圍更廣。雖然利用Word2vec 方法的抽取效果較佳,但K-means 聚類本身存在時間復雜度高的局限性,因此需要進一步改進算法使其具有更好的擴展性,抽取出更多符合語義及實際情況的癥狀信息,為今后探索各癥狀與癥狀或體征之間的聯系打下基礎。