孫健,高大啟,劉珉,高炬,阮彤*
(1.華東理工大學 信息科學與工程學院,上海 200237;2.上海曙光醫(yī)院,上海 200021)
近年來,隨著醫(yī)療信息化的不斷推進,電子病歷系統(tǒng)也隨之出現(xiàn)[1]。電子病歷(Electronic Medical Record,簡稱EMR)詳實地記錄了患者從入院到出院期間所有的診斷和治療信息,具有供用戶訪問完整準確的數(shù)據(jù)和幫助醫(yī)生臨床診斷的能力。電子病歷中包含大量實體,包括癥狀、疾病、檢查、手術和用藥等。其中,時間實體是描述患者信息的一個重要維度[2],反映了患者的病情發(fā)展情況,如“患者因2009年7月起無明顯誘因下出現(xiàn)反復胃痛后于2010.3.8 15:00入院”、“患者因十二指腸癌術后6年零3月有余于2012-04-03 10:00:00由門診擬十二指腸癌術后入院”等等。電子病歷文本的用語較為自由,時間的表達也有多種形式,例如上述的2010.3.8 15:00可用以下形式表示:2010-3-8 15:00:00,2010/3/8下午3點,2010年3月8日15時等。另外,電子病歷文本中時間識別存在這樣的難題:由于基于事件的時間短語太長而不能準確定位其邊界?;谑录臅r間是指由表示事件的名詞、動詞,后面可跟介詞或方位詞,并且可有時間信息組合表示的時間短語,例如上述例子中的“十二指腸癌術后6年零3月有余”等。由于這類時間短語太長,在識別過程中無法將基于事件的時間中的事件完整無誤地識別出來導致邊界錯誤,且因短語表現(xiàn)形式靈活多變而無明顯的語言學特征可利用,所以識別時存在較大障礙。
早在2007年,SemEval就已經(jīng)將時間識別作為一個任務納入評測[3]。在最近有關英文病歷文本的時間表達式識別研究中,Clinical TempEval 2016對來自癌癥患者的600份臨床筆記和病理文本進行時間識別、醫(yī)療事件識別以及時間關系識別[4]。而關于中文電子病歷文本中時間識別的研究比較稀少,學界較多關注于新聞報道中的時間識別[5-6]。
本文將電子病歷文本中的時間分為兩類:獨立時間和基于事件的時間,并針對這兩類時間分別提出了基于bootstrapping的識別算法和基于條件隨機場(Conditional Radom Field,簡稱CRF)的識別算法。本文的貢獻點如下:(1)基于bootstrapping算法識別獨立時間,解決了正則表達式識別時間會覆蓋不全的問題;(2)識別基于事件的時間時,引入中文癥狀知識庫,很好地解決了基于事件的時間短語太長而不能準確定位其邊界的問題。
時間信息能標識事件發(fā)生的時序性,故而時間識別是自然語言處理中的一個研究重點。時間表達式識別的常用方式有兩種:一種是基于統(tǒng)計機器學習的方法;另一種是基于規(guī)則的方法,通過定義規(guī)則模板來實現(xiàn)時間抽取。由于時間表達式的結(jié)構(gòu)通常較為規(guī)范,故近年來多采用基于規(guī)則的方法來抽取時間信息。
朱莎莎等[7]采用統(tǒng)計機器學習的方法識別時間短語,將時間短語分為日期型和事件型兩種類型,提出基于條件隨機場的時間短語識別方法。他們以詞為基本處理單元生成一系列特征向量,然而如果前期分詞有誤的話(一般這種情況很難避免),就會導致錯誤的層層傳導與放大,而難以保證識別的準確性。吳瓊等[8]采用條件隨機場識別時間單元而非時間表達式整體,提高了結(jié)果的準確性;制定規(guī)則確定時間表達式的邊界補充時間單元,提高了結(jié)果的召回率。Str?tgen等[9]提出了一個基于規(guī)則的時間標注系統(tǒng)HeidelTime,它的目標是將英文文檔中的時間表達式抽取出來,并對該表達式分配正確的類型和標準化后的值。Hao等[10]利用啟發(fā)式規(guī)則和模板學習來抽取英文電子病歷中的時間表達式。他們觀察時間表達的特征生成規(guī)則識別時間,然后,挖掘所有出現(xiàn)時間的模板并計算每個模板的置信度,以高置信度的模板來抽取新的時間表達式。Xu等[11]基于正則表達式識別中文電子病歷中的日期型時間。然而,電子病歷文本的用語較為自由,定義的規(guī)則很難覆蓋到所有的時間信息。除了朱莎莎等[7]考慮了基于事件的時間表達,其他人都沒有考慮基于事件的時間表達。而在電子病歷文本中,基于事件的時間在臨床時間推理中具有重要意義。
本研究通過對1 500份上海中醫(yī)藥大學附屬曙光醫(yī)院的電子病歷進行分析,將文本中的時間表達分為兩類:獨立時間和基于事件的時間。
獨立時間可分為簡單時間和復合時間。基于TIMEX2標注規(guī)范[12],本文將簡單時間又分為精確時間表達和模糊時間表達,如表1所示。其中,精確時間表達是指時間表達具有精確的時間點或時間段,模糊時間表達是指時間表達包含模糊修飾詞且無法推算出精確的時間點或時間段。由于文本中時間信息的描述具有靈活性,幾類簡單時間可以進行組合構(gòu)成復合時間表達,如“2015年8月18日下午5點”。
表1 簡單時間表達類別
基于事件的時間是指由表示事件的名詞、動詞,后面可跟介詞或方位詞,并且可有時間信息組合表示的時間短語。在電子病歷文本中,基于事件的時間是指以臨床事件如入院、住院、出院、化療、癥狀、疾病、手術等作為參考時間,如“入院第三天”、“腸癌術后第6年”等。
本文針對獨立時間和基于事件的時間分別提出了基于bootstrapping的識別算法和基于條件隨機場的識別算法。圖1表示了本文方法的整個過程。
Fig.1 The overall workflow圖1 總體流程圖
如第1節(jié)所述,獨立時間可分為簡單時間和復合時間。觀察電子病歷文本發(fā)現(xiàn),簡單時間的格式具有一定的規(guī)律性;復合時間由兩個或兩個以上簡單時間直接組合或通過空格、逗號進行組合。利用正則表達式識別獨立時間時,如果醫(yī)生書寫不規(guī)范,例如出現(xiàn)多個空格、逗號或其他符號將導致正則表達式無法識別;或者,規(guī)則制定不全導致無法覆蓋全部的時間。故而本文結(jié)合了正則表達式和bootstrapping算法識別電子病歷文本中的獨立時間。
首先為獨立時間的識別去抽取種子。由于簡單時間的格式具有規(guī)律性,通過觀察簡單時間的特征總結(jié)一系列規(guī)則構(gòu)建正則表達式。表2給出了部分類型的簡單時間的正則表達式。另外,收集了修飾模糊時間表達的模糊修飾詞“近”、“前”、“后”、“約”等,共21個。電子病歷文本中的復合時間由多個簡單時間直接連接或通過空格、逗號進行連接,所以利用正則表達式對簡單時間進行識別后,通過相鄰原則進行復合時間的識別。本文將識別出的簡單時間和復合時間作為種子。
為了學習模板來抽取獨立時間,需要對電子病歷文本中的時間進行標注。利用基于正則表達式抽取出的種子自動對文本進行標注,這種方法大大減少了人工標注耗費的時間和人力。具體來說,首先收集包含種子的句子,并將種子用特殊符號進行替換,然后從這些包含特殊符號的句子中學習出新的模板,最后使用學習出來的模板去抽取新的時間作為種子。這一過程是迭代進行的,直到?jīng)]有新的時間被抽取出來時終止迭代。
表2 部分類型時間的正則表達式
2.2.1 模板學習
首先收集包含種子的句子,將句子中出現(xiàn)的種子用特殊符號“
2.2.2 模板打分
于
為了抽取出更多的時間,引入更少的噪聲時間,需要對模板學習過程中產(chǎn)生的候選模板進行打分篩選,得到最有效的模板。根據(jù)公式(1)為候選模板集合中的每一個模板計算分數(shù):
(1)
其中,Numrecognized(P)是利用模板P識別出來的獨立時間個數(shù),Numrecognized in seeds(P)是利用模板P識別出種子的個數(shù)。本文將模板分數(shù)閾值定為0.7。
2.2.3 獨立時間識別
對于每個模板P,首先檢索在病歷文本中符合模板P的句子,并抽取“
CRF模型是由Lafferty等人[13]于2001年提出的一種條件概率模型,它結(jié)合了隱馬爾可夫模型(HMM)和最大熵馬爾可夫模型(MEMM)的特點,通過全局歸一化避免了標記偏置問題,從而在命名實體識別任務中取得很好的效果。CRF模型是一種符合馬爾可夫隨機場的無向圖模型,基于觀測序列X,計算目標標簽序列Y的條件分布P(Y|X,λ)。目前常用的是線性CRF模型,其公式化為:
(2)
(3)
(4)
(5)
利用CRF模型將識別基于事件的時間問題轉(zhuǎn)化為序列標注問題。給定電子病歷文本中的一個序列X=
常用的序列標注策略是以詞為標注單元,以句子為標注序列。在中文文本中,詞與詞間沒有天然的分隔符,當以詞為標注單元時需要先利用分詞工具進行分詞。然而現(xiàn)有的分詞工具通常面向一般文本,對電子病歷這類專業(yè)性很強的文本分詞效果并不好。如果分詞錯誤的話,就不能保證訓練集百分之百的準確,所以本文以字為標注單元。由于醫(yī)生在記錄電子病歷時書寫不規(guī)范,隨意使用標點符號,所以本文以分句為標注序列(即以逗號、分號、句號對句子進行分割)。
除了選擇最基本的上下文特征、詞性特征和位置特征作為三種最基本的特征[14],還額外增加了4種適用于識別電子病歷文本中基于事件的時間的特征,如表3所示。采用Unigram,Bigram和Trigram這三種上下文特征,與上下文特征相對應,詞性特征同樣包含Unigram,Bigram和Trigram三組特征。對于詞性特征,使用漢語言處理包HanLP[15]對病歷文本進行分詞和詞性標注。由于本文以字為標注單元,故而當前字所在詞的詞性即是當前字的詞性。HanLP認為被標記為t的詞是時間詞,然而,像“第三天”、“2016.11.23”和“6月23號”等很多時間詞都不能被準確地識別出來。故而,本文將利用基于bootstrapping算法識別出來的獨立時間賦予新的詞性“tt”,并將識別出來的時間加入到用戶自定義詞典中,以確保分詞的準確性。位置特征用Subi-Posi表示,其中,Subi是當前標注對象Xi所處分句的索引位置,Posi表示Xi在分句中的位置。
表3 基于事件的時間識別模型特征
3.3.1 詞典特征
基于事件的時間是指由表示事件的名詞、動詞,后面可跟介詞或方位詞,并且可有時間信息組合表示的時間短語。在電子病歷文本中,基于事件的時間是指以臨床事件如入院、住院、出院、化療、癥狀、疾病、手術等作為參考時間,如“入院第三天”、“腸癌術后第6年”等。
類似“入院第三天”、“化療后第7天”等這些基于事件的時間中的事件較為簡單,即為入院、化療等這些關鍵詞。而類似“十二指腸癌術后兩年”、“乳腺癌術后4個月”、“反復腹脹腹痛后3年零2個月”等這些基于事件的時間中的事件較為復雜,在識別過程中會出現(xiàn)這樣的難題:基于事件的時間短語太長而不能準確定位其邊界的問題。觀察電子病歷文本發(fā)現(xiàn),這類基于事件的時間中的事件類型是癥狀、疾病或手術。其中,手術都是以“術”字結(jié)尾,且“術”字前面都是某個疾病,例如上述的“十二指腸癌術”和“乳腺癌術”。故而,為了提高識別基于事件的時間的準確率和召回率,本文利用已經(jīng)構(gòu)建了的癥狀知識庫[16]對電子病歷文本中的癥狀和疾病進行識別。
isSYMPTOMorDISEASE判斷當前標注序列中是否存在子字符串與癥狀知識庫中的實體名完全相同,并得到其類型是癥狀還是疾病。本文為識別出來的癥狀賦予新的詞性“symptom”,為疾病賦予新的詞性“disease”,并加入到用戶自定義詞典中。hasOPERATION判斷當前標注序列中是否包含字符串“手術之后”、“術之后”、“手術以后”、“術以后”、“術后”中的任意一個,當判斷結(jié)果為“是”時,特征值為1,否則為0。
3.3.2 關鍵詞特征
3.3.1節(jié)中提到了某些基于事件的時間中的事件較為簡單,即為一些關鍵詞。hasKEYWORDS判斷當前標注序列中是否包含字符串“入院”、“住院”、“出院”、“化療”、“檢查”、“治療”中的任意一個,當判斷結(jié)果為“是”時,當前標注單元的關鍵字特征的特征值為1;否則為0。
3.3.3 時間觸發(fā)詞特征
利用時間觸發(fā)詞特征可以有效地判斷當前標注序列是否可能包含基于事件的時間。本文收集了時間觸發(fā)詞例如“年、月、日、天、周”等等,總共11個。hasTIMETRIGGER判斷當前標注序列中是否出現(xiàn)了時間觸發(fā)詞中的任意一個,當判斷結(jié)果為“是”時,當前標注單元的時間觸發(fā)詞特征的特征值為1;否則為0。
3.3.4 數(shù)詞特征
一般時間中大多包含數(shù)字。hasNUMERAL判斷當前標注序列中是否包含數(shù)字0-9或“半一二三四五六七八九十”,當判斷結(jié)果為“是”時,當前標注單元的數(shù)詞特征的特征值為1;否則為0。
對來自上海中醫(yī)藥大學附屬曙光醫(yī)院的1 500個患者的病歷文本進行時間識別。其中,每個患者的病歷文本包均含以下記錄:首次病程記錄,首次主治查房記錄,首次主任查房記錄,主任查房記錄,主治查房記錄,交班記錄,住院記錄,日常病程記錄,出院小結(jié)。這些病歷存在大量的冗余信息,通過觀察發(fā)現(xiàn),出院小結(jié)中的信息最為完整地概括了住院過程中患者的病情隨時間的演變,包括入院情況、醫(yī)生診斷情況、檢查情況、治療情況、出院情況以及轉(zhuǎn)歸情況。所以,基于出院小結(jié),可以為每一個患者生成一個綜合病歷,總共1 500份。實驗所用的數(shù)據(jù)都是這1 500份綜合病歷。
通過準確率(Precision)、召回率(Recall)和F1值(F1-score)3個指標評測識別獨立時間和基于事件的時間的性能。它們的計算方法分別為:
(6)
(7)
(8)
其中,Numrecognized是利用bootstrapping算法或CRF模型識別出來的時間總數(shù);Numrecognized correct識別出來的時間中正確的個數(shù),也就是Numrecognized中正確的個數(shù);Numcorrect是測試語料中包含的時間總數(shù)。
4.3.1 獨立時間表達式識別結(jié)果和分析
將1 500份綜合病歷文本分為兩部分,1 000份作為訓練集用來學習模板,500份作為測試集用來測試模板的效果。表4給出了利用正則表達式和本文方法識別獨立時間的結(jié)果。
表4 不同方法對識別獨立時間的結(jié)果影響
利用正則表達式識別獨立時間時,如果醫(yī)生在書寫不規(guī)范,例如出現(xiàn)多個空格、逗號或其他符號將導致正則表達式無法識別;同時,相對時間和時間詞收集不完全也會影響識別結(jié)果。而利用本文提出的方法能解決這個問題。
對基于bootstrapping算法的獨立時間識別結(jié)果進行分析,發(fā)現(xiàn)錯誤類型主要包括以下兩個方面:(1)模板導致抽取出錯誤的時間,例如:模板“患者于
4.3.2 基于事件的時間表達式識別結(jié)果和分析
依然將1 500份綜合病歷文本分為兩部分,1 000份作為訓練集,500份作為測試集,考慮不同的上下文窗口大小和不同的特征模板對CRF模型結(jié)果的影響,如表5所示。其中,基準模板就是上下文特征、詞性特征和位置特征的組合。
表5 不同窗口大小和特征模板對CRF識別結(jié)果影響
通過實驗對比發(fā)現(xiàn),在基準實驗的基礎上,加上詞典特征后,CRF識別結(jié)果明顯變好。這是由于引入中文癥狀知識庫作為詞典特征很好地解決了基于事件的時間短語太長而不能準確定位其邊界的問題。而數(shù)詞特征對CRF的識別結(jié)果影響最小。結(jié)果顯示,當上下文窗口大小設為3,模板選擇為上下文、詞性、位置、詞典、關鍵詞、時間觸發(fā)詞和數(shù)詞特征的組合時,CRF識別結(jié)果最高,其準確率、召回率、F1值分別為95.94%、92.09%和93.98%。
將電子病歷文本中的時間分為獨立時間和基于事件的時間,提出了基于bootstrapping算法識別獨立時間和基于條件隨機場識別基于事件的時間的方法?;赽ootstrapping算法識別獨立時間,解決了正則表達式識別時間會覆蓋不全的問題;利用CRF模型將基于事件的時間識別問題轉(zhuǎn)化為序列標注問題,并引入癥狀知識庫來解決基于事件的時間短語太長而不能準確定位其邊界的問題。結(jié)果表明,這種方法在獨立時間和基于事件的時間識別上的F1值分別達到了92.57%和93.98%。在未來的工作中,將繼續(xù)識別電子病歷文本中的時間關系,包括事件-事件和事件-時間的時間關系,這對于研究患者的病情發(fā)展和治療效用至關重要。
[1] 馬錫坤,楊國斌,于京杰.國內(nèi)電子病歷發(fā)展與應用現(xiàn)狀分析[J].計算機應用與軟件,2015,32(1):10-12.DOI:10.3969/j.issn.1000-386x.2015.01.003.
[2] 楊錦鋒,于秋濱,關毅,等.電子病歷命名實體識別和實體關系抽取研究綜述[J].自動化學報,2014,40(8):1537-1562.DOI:10.3724/SP.J.1004.2014.01537.
[3] Liu Y K,Ray G.SemEval 2007 task 15:TempEval Temporal Relation Identification[C]∥International Workshop on Semantic Evaluations.Association for Computational Linguistics,2007:75-80.
[4] Bethard S,Savova G,Chen W T,etal.SemEval-2016 Task 12:Clinical TempEval[J].ProceedingsofSemEval,2016:1052-1062.DOI:10.18653/v1/S16-1165.
[5] 趙國榮.中文新聞語料中的時間短語識別方法研究[D].太原:山西大學,2006.
[6] 蔡華利,劉魯,劉志明,等.突發(fā)事件Web新聞中時間信息分析及抽取[J].計算機工程與應用,2010,46(34):107-110.DOI:10.3778/j.issn.1002-8331.2010.34.033.
[7] 朱莎莎,劉宗田,付劍鋒,等.基于條件隨機場的中文時間短語識別[J].計算機工程,2011,37(15):164-167.DOI:10.3969/j.issn.1000-3428.2011.15.052.
[8] 吳瓊,黃德根.基于條件隨機場與時間詞庫的中文時間表達式識別[J].中文信息學報,2014,28(6):169-174.DOI:10.3969/j.issn.1003-0077.2014.06.024.
[9] Str?tgen J,Gertz M.HeidelTime:High Quality Rule-based Extraction and Normalization of Temporal Expressions[C]∥International Workshop on Semantic Evaluation.2010:321-324.
[10] Hao T,Rusanov A,Weng C.Extracting and Normalizing Temporal Expressions in Clinical Data Requests from Researchers[J].LectureNotesinComputerScience,2013,8040:41-51.DOI:10.1007/978-3-642-39844-5-7.
[11] Xu D,Zhang M,Zhao T,etal.Data-Driven Information Extraction from Chinese Electronic Medical Records[J].PlosOne,2015,10(8):e0136270.DOI:10.1371/journal.pone.0136270.
[12] Ferro L,Gerber L,Mani I,etal.TIDES 2005 Standard for the Annotation of Temporal Expressions[S].2005.
[13] Lafferty J,McCallum A,Pereira F.Conditional Random Fields:Probabilistic Models for Segmenting and Labeling Sequence Data[C]∥Proceedings of the Eighteenth International Conference on Machine Learning,ICML,2001,1:282-289.
[14] Wang Y,Yu Z,Chen L,etal.Supervised Methods for Symptom Name Recognition in Free-text Clinical Records of Traditional Chinese Medicine:An Empirical Study[J].JournalofBiomedicalInformatics,2014,47:91-104.DOI:10.1016/j.jbi.2013.09.008.
[15] Hankcs.HanLP[CP].https:∥github.com/hankcs/HanLP,2014.
[16] Tong R,Wang M,Sun J,etal.An Automatic Approach for Constructing a Knowledge Base of Symptoms in Chinese[C]∥IEEE International Conference on Bioinformatics and Biomedicine.IEEE Computer Society,2016:1657-1662.DOI:10.1109/BIBM.2016.7822767.