醫學文獻含有豐富的有價值的醫學知識。目前,在醫學文獻上的實體關系提取研究已經得到了很大的進步,但是隨著醫學文獻數量以指數形式增加,醫學文本的標注工作成為一個很大的問題。為解決人工標注耗時長、工作量大的問題,研究者提出了遠程監督標注的方法,但這種方法會引入大量噪聲。本文提出了一種基于卷積神經網絡的新型神經網絡結構,可以解決大量噪聲問題。該模型可以利用多窗口卷積神經網絡自動提取句子特征,在得到句子向量后,通過注意力機制選擇對真實關系有效的句子。特別地,提出實體類型(ET)嵌入方法,通過加入實體類型特征用于關系分類。我們針對訓練文本存在不可避免的標注錯誤問題,提出句子級別的注意力機制用于關系提取。使用 968 份糖尿病醫學文獻進行實驗,結果表明,與基線模型相比,本文模型在醫學文獻中得到了較好的效果,F1 分數達到 93.15%。最后,我們將提取的 11 類關系以三元組的形式存儲,并利用這些三元組制成具有 33 347 個節點、43 686 條關系邊的復雜關系醫學知識圖譜。實驗結果證明,本文所使用的算法明顯優于用于關系提取的最佳基準系統。
引用本文: 范智淵, 何璇, 梁品, 呂晶, 康雁. 中文醫學文獻的實體關系提取研究及在糖尿病醫學文獻中的應用. 生物醫學工程學雜志, 2021, 38(3): 563-573. doi: 10.7507/1001-5515.202001009 復制
引言
隨著科技的不斷發展,智慧醫療的不斷興起,醫學文本的存儲已經從厚重的紙質文檔轉變為便捷的電子文本,這為醫學文本的研究提供了一條便捷的道路。醫學文本中蘊含著豐富的醫學知識,具有極高的臨床價值,如何利用計算機智能地在醫學文本中挖掘出更多更有效的醫學信息,是當下人們關注的重點問題之一。為了解決這些問題,研究人員提出了很多實體關系提取算法。早期通常采用基于機器學習的方法實現。鄭潔瓊[1]在采用基本特征的基礎上,加入詞向量、布朗聚類特征、外部資源特征、實體類型(entity type,ET)特征進行關系抽取,構建了一個基于支持向量機(support vector machine,SVM)的簡單高效的關系抽取系統,并取得了不錯的成績。Munkhdalai 等[2]使用 SVM 對醫學文本中 7 種不同類型的關系進行識別,最終在數據集上取得了 F1 值為 89.1% 的成績。雖然機器學習方法在關系提取任務上取得了不錯的成績,但是由于機器學習方法需要大量的包括詞匯、句法分析等特征工程工作,導致模型過于依賴特征,較好的特征才能得到好的模型。因此,眾多學者開始關注不需要抽取特征的深度學習方法。Luo 等[3]提出了一種特殊的卷積神經網絡(convolutional neural network,CNN)——Seg-CNN 模型,用于從臨床記錄中對關系進行分類。Seg-CNN 僅使用詞嵌入功能,無需手動特征工程。He 等[4]的研究提出了一種具有多池化操作的 CNN 模型結構,用于對臨床記錄進行醫學關系分類并探索了具有類別級約束矩陣的損失函數。Luo[5]提出了基于遞歸神經網絡的一個模型結構,用于對臨床記錄中的關系進行分類。該方法僅使用詞嵌入功能,沒有使用特征工程。該模型使用分段長短時記憶網絡結構實現了對醫學文本的關系分類。
然而對于電子醫學文本的知識挖掘還面臨著許多問題,由于海量的醫學文本標注需要有經驗的醫生參與,所以對數以億計的句子進行標注費時費力,代價昂貴。有學者提出遠程監督的方法,使用已存在的知識圖譜或知識庫對齊包含實體對的句子。具體來說,如果現有醫學知識庫標定了某實體對的關系,那么遠程監督思想就認為所有包含這兩個實體對的句子表達的都是這個關系。雖然這種思想可以為我們提供大量的訓練數據,但是在實體識別過程中也加入了很多噪聲,因為實體對間的關系并不是單一的,有可能含有其他關系。
針對以上問題,本文在對醫學文本進行實體關系識別時引用了 Lin 等[6]所提出的多示例學習的方法并加入注意力機制(attention,ATT)[7],將句子級別的實體關系任務轉化為包級別的實體關系識別任務,并引入注意力機制,降低噪聲句的影響。特別的,加入了實體類型嵌入,以強化實體關系識別任務的分類效果。
作為危害全球健康的重要慢性非傳染性疾病之一,糖尿病給患者和社會帶來了巨大的經濟負擔[8]。它是由遺傳因素、環境因素和行為因素等多種致病因素導致的以血糖升高為主要標志的內分泌代謝性疾病,其致病因素已經得到國內外專家共識。隨著我國經濟的快速發展,人們的飲食結構及生活方式發生很大變化,糖尿病人數急劇增加。因此,早期發現及干預糖尿病前期對降低糖尿病發病率有重大意義[9]。我們將本文提出的模型應用于糖尿病臨床醫學研究類醫學文獻,從全新的角度為治療糖尿病提供方法。
1 方法
1.1 卷積神經網絡模型
CNN[10]自誕生以來,在圖像領域的應用效果非常好,由于 CNN 在分類任務上表現優越,隨后開始有學者將其應用到自然語言處理(natural language processing,NLP)領域,用于文本分類、閱讀理解等自然語言處理的任務。
文字與圖像不同,圖像輸入到神經網絡中的是圖像像素,而大多數自然語言處理任務是將句子或文檔表示成的矩陣作為神經網絡模型的輸入。矩陣的每一行對應一個“標簽”,通常是一個字或者是一個詞,每一行都是代表一個單詞的向量。這些向量是詞嵌入(低維表示),通常使用的是 Word2vec[11]詞向量嵌入技術,如果一個句子有 10 個字,詞向量維度是 100 維,則這句話將以 10 × 100 的矩陣作為輸入。在圖像領域上,濾波器會在圖像的局部位置上滑動,而在自然語言處理任務中,我們通常會使用在矩陣的整行上滑動的濾波器。因此,濾波器的“寬度”通常與輸入矩陣的寬度相同,一次滑動窗口在 2~5 個字之間。自然語言處理任務中使用 CNN 的過程如圖 1 所示。

1.2 注意力機制
在自然語言處理中,處理文本序列的通常的配置是“編碼-解碼”(encoder-decoder)結構,即由“編碼”讀取輸入的序列將其轉換為定長的一個向量,再由“解碼”翻譯這個向量。然而這個模型會因長序列到定長向量轉化而造成信息損失。為了解決這個問題,學者們提出了注意力機制。
如圖 2 所示,注意力機制的“編碼-解碼”模型是要從序列中學習到每一個元素的重要程度,然后按重要程度將元素合并。因此,注意力機制可以看作是“編碼”和“解碼”之間的接口,它向“解碼”提供來自每個“編碼”隱藏狀態的信息。通過該設置,模型能夠根據注意分數(attention score)選擇性地關注輸入序列的有用部分,從而進行有效學習。這就表明,在由“編碼”將輸入的序列元素進行編碼時,得到的不再是一個固定的語義編碼 ,而是存在多個語義編碼,且不同的語義編碼由不同的序列元素以不同的權重參數
組合而成。

1.3 基于實體類型嵌入的注意力卷積神經網絡
本文提出的基于實體類型嵌入的注意力卷積神經網絡(CNN+ATT+ET)模型結構如圖 3 所示。我們對醫學文本進行分析,針對醫學文本的特點,在網絡中引入了實體類型特征。由于醫學領域文本的特殊性,醫學實體間關系與醫學實體類型有一定的關系,比如實體類型是 Symptom 的實體,與實體類型是 Disease 的實體間關系不可能是 Frequency-Drug,所以在識別醫學實體間關系時,加入實體類型特征,對于模型效果有很大的提升。通過將本文提出的模型結構與其他模型進行對比實驗,所得結果證實了我們的方法對模型精度有了進一步的提升。

模型一共分為 6 層,分別為輸入層、嵌入層、多窗口卷積神經網絡層、池化層、句子級別注意力機制和輸出層。
1.3.1 嵌入層
嵌入層的作用是將句子中每一個字用向量進行表示,為了便于機器的理解和之后的神經網絡層的計算,在嵌入層,本文將字向量和位置向量相結合表示每一個字[12]。
Character Embedding:首先利用 968 份糖尿病醫學文獻作為訓練語料,利用 Word2vec 的 Skip-Gram[13]模式訓練得到的字向量矩陣 ,作為輸入特征的一部分。其中
表示訓練語料中的不重復字數,
表示字向量的維度。
Position Embedding[14]:距離目標實體較近的詞通常會對句子中實體之間的關系產生重大影響,而且兩實體間的詞揭示實體對關系的可能性更大。位置嵌入用于表示從當前單詞到頭部或尾部實體的相對距離,并由矩陣 進行編碼,其中
是位置向量的維度,而
是固定大小的位置表,
需要通過模型學習。
最后將 Character Embedding 與 Position Embedding 結合成為一個向量,形成輸入特征序列 即輸入表示形式,其中
(d = dw + 2 ×
。
1.3.2 多窗口卷積神經網絡層和池化層
在這一層中,將表示句子的矩陣 輸入到卷積層來提取更高級別的特征。給定窗口的大小
,一個濾波器可以被看作是權重矩陣
。這一層的核心是將卷積運算應用到兩個矩陣
和
上,得到一個分數序列
,計算方式如式(1)。其中,
是一個偏差項,
是一些非線性函數。
![]() |
我們針對具有不同窗口大小的各種濾波器重復以上過程,以增加模型的 n-gram 覆蓋率。對于關系提取任務,我們將帶有目標詞匯相對位置的 n-gram 稱為增強 n-gram。將濾波器 看作是增強 n-gram 的某個隱藏類,將分數
看作是測量位置
處增強 n-gram 屬于相應的隱藏類的可能性。濾波器
的訓練權重等于一個特征檢測器,該特征檢測器可識別增強 n-gram 的隱藏類。
池化層進一步抽象卷積層產生的特征,將每個濾波器的分數相加,引入絕對位置的不變性,同時保留 n-gram 與實體頭之間的相對位置。
1.3.3 實體類型嵌入
將每個濾波器的池化分數合并為 來代表整個句子的向量,其中
的表示如式(2)。
![]() |
此處, 是模型中濾波器的數量,
是第
個濾波器的池化分數。然后接入一個全連接層,得到整個句子的向量表示,并在此處的句子向量表示后加入實體對類別特征,將頭實體的實體類型嵌入
且尾實體的實體類型嵌入
,與
合并得到最終向量表示如式(3)所示,其中
是實體類型嵌入的向量維度。
![]() |
1.3.4 句子級別注意力
關系抽取模型常常對句子級別語料進行關系分類。為了更高效地抽取實體間關系,學者們提出了遠程監督的想法,它有一個非常重要的假設:對于一個已有的知識圖譜中的三元組,假設外部文檔庫中任何包含這對實體的句子,在一定程度上都反映了這種關系。基于這個假設,遠程監督算法可以基于一個標注好的小型知識圖譜,給外部文檔庫中的句子標注關系標簽,相當于做了樣本的自動標注,因此是一種半監督的算法。但是,由于遠程監督算法會引入大量噪聲,所以本文采用多示例學習的方法,采用包級別語義關系抽取,不僅解決了句子級別關系抽取的低效率問題,也解決了遠程監督會引入大量噪聲的問題。
多示例學習將數據集劃分為多個包,其中每個包均為包含了相同實體對和關系的句子集,關系識別模型就變成了識別每個包的標簽,而不關注包里面的實例標簽,在訓練模型時每次選擇包里置信度最高的實例進行訓練。由于每個包是一個句子集,包中的句子都是包含相同實體對和相同關系的句子,在預測時,每個包的標簽就是包里句子集中每個句子的標簽。
假設包里 是含有
個句子的集合,
,
個句子通過卷積層和池化層,得到句子級別的表示,每個句子表示為
,句子級別的注意力(sentence level attention)計算過程如下。
注意分數定義如式(4)所示。
![]() |
其中 為句子向量,
為權重對角矩陣,
表示代表該關系的向量。
經過 SoftMax 將注意分數映射到 0 到 1 之間如式(5)所示。
![]() |
對于句子 S 加入句子級別注意力之后,將結果定義為向量 ,如式(6)所示。
![]() |
1.3.5 輸出層
加入注意力機制后得到句子集合向量 ,通過一層神經網絡層映射到輸出類別如式(7)所示。
![]() |
其中, 是所有實體關系的向量所組成的矩陣,
是偏置向量。網絡的輸出數目和關系數目相等,然后經過 SoftMax 層,得到最后的輸出概率向量如式(8)所示。其中,
代表所有關系類別的數目。
![]() |
最后使用交叉熵損失函數如式(9)所示。
![]() |
2 實驗
2.1 數據集
醫學文獻一共有以下幾個類別:社會分析類、研究進展類、指南共識類、疾病說明類、中醫類、護理類、臨床醫學研究類[15]。其中指南共識類文章和臨床醫學研究類文章是我們主要的知識挖掘對象。臨床實踐指南被定義為針對特定的臨床情況系統制訂的,幫助醫務人員和患者做出恰當處理決定的指導性建議。臨床實踐指南與專家共識作為醫學實踐中最重要的指導性文件,具有學術權威性。臨床醫學研究類文章則主要是針對某一項醫學研究進行臨床試驗并得到醫學結論。
由于電子病歷通常是患者一些癥狀、體征與醫生治療方案的陳列,其中明顯的實體關系非常少。所以本文選擇了天池大賽比賽官方提供的 968 份糖尿病專家共識類與臨床醫學研究類醫學文獻(https://tianchi.aliyun.com/dataset/dataDetail?dataId=22288),數據形式如圖 4 所示。每份文獻附有實體及實體關系標注文件一份,標注形式如圖 5 所示。其中以 T*開頭的為實體標注,共包含 15 個實體類型,以 R*開頭的為關系標注,共有 10 種關系類型。


2.2 預處理
進行實體關系識別的前提是實體提取。對于實體提取我們進行了如下處理。
數據清洗:為了使數據更符合模型的訓練,我們首先對數據進行了清洗和規范化。去掉所有空格和多余的標點符號,然后將所有的數字和英文分別用<NUM>、<ENG>替換
數據準備:通過數據清洗之后,得到的數據都是大段文字,而要進行實體識別大段的文字會對精度有所影響,所以在輸入到實體識別模型前需要對數據進行分句。但是由于醫學文獻數據特點,如果只使用“。”“!”“?”3 種標點符號分句,分句后依然會出現很多過長句子,最長的句子可達 600 字。因此我們提出一種多級別式分句法。首先使用一級標點符號對句子進行分句,得到若干子句;其次篩選出字數大于 200 字的子句,使用二級標點符號進行分句,得到二級子句;若這些二級子句的字數仍然大于 200 字,則使用三級符號繼續分句,直到最后所有子句的字數均小于 200 字。
數據標注:采用 BIOSE 標簽對文本進行標注,其中 B 表示一個實體的開始的字,I 代表一個實體中間的字,E 代表一個實體的結束的字,S 代表只有一個字的實體,O 代表不需要識別的字。
最后使用 Word2vec 對數據進行字嵌入處理并使用雙向長短時記憶網絡與條件隨機場結合(Bi-LSTM+CRF)的網絡進行實體識別。
為了得到大量有實際意義的實體關系訓練語料,我們對數據進行了如下處理:窮舉文章中所有實體,對所有實體進行排列組合,將存在于標注數據的實體對的關系按照標注關系分類,將不存在的關系歸為 None。醫學文獻具有實體多、段落大的特殊性[16],這種組合方式在產生大量訓練語料的同時,也會帶來很多噪聲。我們基于漢語的書寫習慣[17]及表 1 的測試結果,將實體間隔大于 150 個字的實體對歸類為噪聲并濾除。然后,截取文章中包含這個實體對的文字,頭實體向前截取 50 個字作為窗口,尾實體向后截取 50 個字作為尾窗口,添加上下文信息,使實體關系識別模型更理解上下文語義。最后,經過預處理得到 5 萬條訓練語料,訓練語料中 11 種關系分布如表 2 所示。


2.3 實驗環境
實驗使用的硬件設備如下:處理器,Inter(R) Core (TM) i7-8700K@3.70 GHz;內存(RAM)32.0 GB;獨立顯卡,GeForce GTX 1080 Ti;系統類型,Windows 10 家庭版;開發工具,Python 和 Tensorflow 框架。
2.4 模型設置
我們采用交叉驗證的方法,將數據中的 774 份作為訓練集,126 份作為測試集,68 份作為驗證集。本文實體關系識別模型選擇的參數設置如表 3 所示,其中 Window size 選取 4 種不同的大小,每種 Window size 有 128 個。

2.5 實驗評估方法
將模型預測結果分為下面四類:正確肯定(true positive,TP):預測為正,實際為正;正確否定(true negative,TN):預測為負,實際為負;錯誤肯定(false positive,FP):預測為正,實際為負;錯誤否定(false negative,FN):預測為負,實際為正。通過精確率(Precision,P)[18]、召回率(Recall,R)和 F1-score 三個評價指標來評估模型,其中精確率是指分類正確的正樣本個數占分類器判定為正樣本的樣本個數的比例,召回率是指分類正確的正樣本個數占真正的正樣本個數的比例,F1-Score 是精確率和召回率的調和平均值,它們的計算方法如下:
![]() |
![]() |
![]() |
3 實驗結果
我們將本文提出的模型分別與 RNN[19]、CNN[20-21]、Bi-LSTM+ATT[22]模型比較,同時還對 Bi-LSTM+ATT 模型增加了本文所提出的實體類型特征。實驗結果如表 4 所示。其中 ET 指實體類型嵌入。

對比實驗分析可以得到幾個結論:第一,可以看到本文所提出的多窗口 CNN+ATT 模型在沒有加入實體類型特征時,與 RNN、CNN 及 Bi-LSTM+ATT 模型相比性能最優,F1-Score 達到 87.62%。第二,對于 Bi-LSTM+ATT 模型和 CNN+ATT,加入實體類型特征后,模型的準確率都有不同程度的提升,其中 Bi-LSTM+ATT 模型加入實體類型特征后 F1-Score 達到了 92.64%,較原 Bi-LSTM+ATT 模型有較大性能提升。同樣,CNN+ATT 模型加入實體類型特征后 F1-Score 達到了 93.15%,較原 CNN+ATT 模型亦有較大性能提升。說明實體類型特征的加入,對于提高模型性能具有十分重要的作用。
同時,本文還對比了 11 種關系類型在不同模型下的 F1-Score,實驗結果如表 5 所示。分析實驗結果可以看到:本文提出的 CNN+ATT+ET 模型在大部分關系上是效果最佳的模型,對于 Test-Disease、Drug-Disease 和 Method-Drug 三種關系,Bi-LSTM+ATT+ET 模型效果最好。

模型對比 ROC 曲線如圖 6 所示,PR 曲線如圖 7 所示。通過多次實驗對比分析以及 ROC 曲線和 PR 曲線對比,可以看到針對醫學文本數據,本文提出的 CNN+ATT+ET 模型是效果最好的模型。


在得到具有良好性能的關系抽取模型后,將模型抽取的關系與實體組合成為三元組的形式儲存。通過將大量的三元組導入到圖數據庫 Neo4j 中,得到醫學知識圖譜。將數據知識三元組存儲到 Neo4j 數據庫后,在前端頁面即可詳細顯示整個知識圖譜結構。整個醫學文獻知識圖譜共有 33 347 個節點和 43 686 條關系邊。
圖 8 展示了知識圖譜的部分節點。圖中不同顏色的圓圈代表不同類型的實體,兩圓圈之間的線代表實體關系。其中,藍色代表癥狀,黃色代表疾病,粉色代表藥物,灰色代表不良反應,綠色代表原因。我們在圖譜上可以通過查詢語句查詢得到治療 1 型糖尿病的藥物有哪些,或者同時治療 1 型和 2 型糖尿病的藥物有哪些,如圖 9、10 所示。同時如圖 11 所示也可以反向查詢胰島素可以治療哪些疾病。可以看到,通過圖譜查詢得到的結果與臨床醫師給出的用藥意見相一致。




4 討論
本文以優化 CNN 提取實體關系為目的,對 CNN 進行改進。針對大量文本產生的噪聲問題,通過注意機制使模型能夠準確選擇真實有效的關系對。實驗表明,我們的方法相對于傳統 CNN 網絡,對實體關系提取有了較為明顯的提升。從表 4 中列出的 3 個評價指標可以看出,本研究的方法在提取醫學文本關系上要比 RNN 網絡好很多,稍優于 CNN 網絡,由此也可以看出相比于 RNN 網絡結構,CNN 網絡模型更適合自然語言處理的分類任務。CNN 網絡使用卷積層進行特征提取,使用最大池化層進行特征維度降低,通過不斷加深網絡層數,提取更深層次的特征,加入 Attention 機制后使網絡能夠在長句子中識別兩個距離較遠實體的真實關系。同時,由于醫學文本的關系識別與開放領域文本關系識別略有不同,即醫學領域的實體關系與實體類別有關,Symptom 和 Disease 的關系不可能是 Disease-Drug,而一定是 Symptom-Disease,因此針對這個特殊性,本文對上述模型進行改進,在醫學文本實體關系識別任務中加入了實體類型特征,對于模型效果有很大的提升。可以看到,實體類型在實體關系識別任務中是非常重要的。
除此之外,實體關系提取的最終目的是為了形成有研究價值的知識圖譜,而整個知識圖譜創建的優劣都是建立在實體關系識別的精度上,如果實體關系識別的準確率很低,則建立的知識圖譜將失去意義,所以提高實體關系識別精度意義重大[23]。查詢只是圖譜的一個基本應用,在后續的研究中,我們可以通過圖譜進行新知識的推理和發現。
5 結論
本文首先介紹了基于實體類型嵌入的多窗口 CNN+ATT 模型,該模型引入了實體類型特征,加入到句子向量表示中。本文將句子級別的實體關系識別任務轉化為包級別,并且引入了句子級別的注意力機制。與其他實體關系識別模型對比,結果表明本文提出的模型效果更好、性能更優。另外,本文還將提取的醫學知識三元組存儲到 Neo4j 圖數據庫中,將整個醫學知識圖譜以及在知識圖譜中搜索查詢的結果進行了展示。
雖然本文模型方法取得良好效果,但還有很多不足之處,有待進一步完善。在實體嵌入層中,Word2vec 嵌入方法無法顧及單詞一詞多義的情況,導致識別準確率下降,可以考慮在嵌入時改用 Bert[24]或 ELMO[25]方法,在單詞嵌入過程中得到更準確的表達。同時,本文實現的知識圖譜功能尚有不足,有待進一步拓展,例如可以嘗試將醫學知識擴展到語料庫,識別新的實體類型,構建新的實體關系,進一步完善醫療體系知識圖譜的應用性。
利益沖突聲明:本文全體作者均聲明不存在利益沖突。
引言
隨著科技的不斷發展,智慧醫療的不斷興起,醫學文本的存儲已經從厚重的紙質文檔轉變為便捷的電子文本,這為醫學文本的研究提供了一條便捷的道路。醫學文本中蘊含著豐富的醫學知識,具有極高的臨床價值,如何利用計算機智能地在醫學文本中挖掘出更多更有效的醫學信息,是當下人們關注的重點問題之一。為了解決這些問題,研究人員提出了很多實體關系提取算法。早期通常采用基于機器學習的方法實現。鄭潔瓊[1]在采用基本特征的基礎上,加入詞向量、布朗聚類特征、外部資源特征、實體類型(entity type,ET)特征進行關系抽取,構建了一個基于支持向量機(support vector machine,SVM)的簡單高效的關系抽取系統,并取得了不錯的成績。Munkhdalai 等[2]使用 SVM 對醫學文本中 7 種不同類型的關系進行識別,最終在數據集上取得了 F1 值為 89.1% 的成績。雖然機器學習方法在關系提取任務上取得了不錯的成績,但是由于機器學習方法需要大量的包括詞匯、句法分析等特征工程工作,導致模型過于依賴特征,較好的特征才能得到好的模型。因此,眾多學者開始關注不需要抽取特征的深度學習方法。Luo 等[3]提出了一種特殊的卷積神經網絡(convolutional neural network,CNN)——Seg-CNN 模型,用于從臨床記錄中對關系進行分類。Seg-CNN 僅使用詞嵌入功能,無需手動特征工程。He 等[4]的研究提出了一種具有多池化操作的 CNN 模型結構,用于對臨床記錄進行醫學關系分類并探索了具有類別級約束矩陣的損失函數。Luo[5]提出了基于遞歸神經網絡的一個模型結構,用于對臨床記錄中的關系進行分類。該方法僅使用詞嵌入功能,沒有使用特征工程。該模型使用分段長短時記憶網絡結構實現了對醫學文本的關系分類。
然而對于電子醫學文本的知識挖掘還面臨著許多問題,由于海量的醫學文本標注需要有經驗的醫生參與,所以對數以億計的句子進行標注費時費力,代價昂貴。有學者提出遠程監督的方法,使用已存在的知識圖譜或知識庫對齊包含實體對的句子。具體來說,如果現有醫學知識庫標定了某實體對的關系,那么遠程監督思想就認為所有包含這兩個實體對的句子表達的都是這個關系。雖然這種思想可以為我們提供大量的訓練數據,但是在實體識別過程中也加入了很多噪聲,因為實體對間的關系并不是單一的,有可能含有其他關系。
針對以上問題,本文在對醫學文本進行實體關系識別時引用了 Lin 等[6]所提出的多示例學習的方法并加入注意力機制(attention,ATT)[7],將句子級別的實體關系任務轉化為包級別的實體關系識別任務,并引入注意力機制,降低噪聲句的影響。特別的,加入了實體類型嵌入,以強化實體關系識別任務的分類效果。
作為危害全球健康的重要慢性非傳染性疾病之一,糖尿病給患者和社會帶來了巨大的經濟負擔[8]。它是由遺傳因素、環境因素和行為因素等多種致病因素導致的以血糖升高為主要標志的內分泌代謝性疾病,其致病因素已經得到國內外專家共識。隨著我國經濟的快速發展,人們的飲食結構及生活方式發生很大變化,糖尿病人數急劇增加。因此,早期發現及干預糖尿病前期對降低糖尿病發病率有重大意義[9]。我們將本文提出的模型應用于糖尿病臨床醫學研究類醫學文獻,從全新的角度為治療糖尿病提供方法。
1 方法
1.1 卷積神經網絡模型
CNN[10]自誕生以來,在圖像領域的應用效果非常好,由于 CNN 在分類任務上表現優越,隨后開始有學者將其應用到自然語言處理(natural language processing,NLP)領域,用于文本分類、閱讀理解等自然語言處理的任務。
文字與圖像不同,圖像輸入到神經網絡中的是圖像像素,而大多數自然語言處理任務是將句子或文檔表示成的矩陣作為神經網絡模型的輸入。矩陣的每一行對應一個“標簽”,通常是一個字或者是一個詞,每一行都是代表一個單詞的向量。這些向量是詞嵌入(低維表示),通常使用的是 Word2vec[11]詞向量嵌入技術,如果一個句子有 10 個字,詞向量維度是 100 維,則這句話將以 10 × 100 的矩陣作為輸入。在圖像領域上,濾波器會在圖像的局部位置上滑動,而在自然語言處理任務中,我們通常會使用在矩陣的整行上滑動的濾波器。因此,濾波器的“寬度”通常與輸入矩陣的寬度相同,一次滑動窗口在 2~5 個字之間。自然語言處理任務中使用 CNN 的過程如圖 1 所示。

1.2 注意力機制
在自然語言處理中,處理文本序列的通常的配置是“編碼-解碼”(encoder-decoder)結構,即由“編碼”讀取輸入的序列將其轉換為定長的一個向量,再由“解碼”翻譯這個向量。然而這個模型會因長序列到定長向量轉化而造成信息損失。為了解決這個問題,學者們提出了注意力機制。
如圖 2 所示,注意力機制的“編碼-解碼”模型是要從序列中學習到每一個元素的重要程度,然后按重要程度將元素合并。因此,注意力機制可以看作是“編碼”和“解碼”之間的接口,它向“解碼”提供來自每個“編碼”隱藏狀態的信息。通過該設置,模型能夠根據注意分數(attention score)選擇性地關注輸入序列的有用部分,從而進行有效學習。這就表明,在由“編碼”將輸入的序列元素進行編碼時,得到的不再是一個固定的語義編碼 ,而是存在多個語義編碼,且不同的語義編碼由不同的序列元素以不同的權重參數
組合而成。

1.3 基于實體類型嵌入的注意力卷積神經網絡
本文提出的基于實體類型嵌入的注意力卷積神經網絡(CNN+ATT+ET)模型結構如圖 3 所示。我們對醫學文本進行分析,針對醫學文本的特點,在網絡中引入了實體類型特征。由于醫學領域文本的特殊性,醫學實體間關系與醫學實體類型有一定的關系,比如實體類型是 Symptom 的實體,與實體類型是 Disease 的實體間關系不可能是 Frequency-Drug,所以在識別醫學實體間關系時,加入實體類型特征,對于模型效果有很大的提升。通過將本文提出的模型結構與其他模型進行對比實驗,所得結果證實了我們的方法對模型精度有了進一步的提升。

模型一共分為 6 層,分別為輸入層、嵌入層、多窗口卷積神經網絡層、池化層、句子級別注意力機制和輸出層。
1.3.1 嵌入層
嵌入層的作用是將句子中每一個字用向量進行表示,為了便于機器的理解和之后的神經網絡層的計算,在嵌入層,本文將字向量和位置向量相結合表示每一個字[12]。
Character Embedding:首先利用 968 份糖尿病醫學文獻作為訓練語料,利用 Word2vec 的 Skip-Gram[13]模式訓練得到的字向量矩陣 ,作為輸入特征的一部分。其中
表示訓練語料中的不重復字數,
表示字向量的維度。
Position Embedding[14]:距離目標實體較近的詞通常會對句子中實體之間的關系產生重大影響,而且兩實體間的詞揭示實體對關系的可能性更大。位置嵌入用于表示從當前單詞到頭部或尾部實體的相對距離,并由矩陣 進行編碼,其中
是位置向量的維度,而
是固定大小的位置表,
需要通過模型學習。
最后將 Character Embedding 與 Position Embedding 結合成為一個向量,形成輸入特征序列 即輸入表示形式,其中
(d = dw + 2 ×
。
1.3.2 多窗口卷積神經網絡層和池化層
在這一層中,將表示句子的矩陣 輸入到卷積層來提取更高級別的特征。給定窗口的大小
,一個濾波器可以被看作是權重矩陣
。這一層的核心是將卷積運算應用到兩個矩陣
和
上,得到一個分數序列
,計算方式如式(1)。其中,
是一個偏差項,
是一些非線性函數。
![]() |
我們針對具有不同窗口大小的各種濾波器重復以上過程,以增加模型的 n-gram 覆蓋率。對于關系提取任務,我們將帶有目標詞匯相對位置的 n-gram 稱為增強 n-gram。將濾波器 看作是增強 n-gram 的某個隱藏類,將分數
看作是測量位置
處增強 n-gram 屬于相應的隱藏類的可能性。濾波器
的訓練權重等于一個特征檢測器,該特征檢測器可識別增強 n-gram 的隱藏類。
池化層進一步抽象卷積層產生的特征,將每個濾波器的分數相加,引入絕對位置的不變性,同時保留 n-gram 與實體頭之間的相對位置。
1.3.3 實體類型嵌入
將每個濾波器的池化分數合并為 來代表整個句子的向量,其中
的表示如式(2)。
![]() |
此處, 是模型中濾波器的數量,
是第
個濾波器的池化分數。然后接入一個全連接層,得到整個句子的向量表示,并在此處的句子向量表示后加入實體對類別特征,將頭實體的實體類型嵌入
且尾實體的實體類型嵌入
,與
合并得到最終向量表示如式(3)所示,其中
是實體類型嵌入的向量維度。
![]() |
1.3.4 句子級別注意力
關系抽取模型常常對句子級別語料進行關系分類。為了更高效地抽取實體間關系,學者們提出了遠程監督的想法,它有一個非常重要的假設:對于一個已有的知識圖譜中的三元組,假設外部文檔庫中任何包含這對實體的句子,在一定程度上都反映了這種關系。基于這個假設,遠程監督算法可以基于一個標注好的小型知識圖譜,給外部文檔庫中的句子標注關系標簽,相當于做了樣本的自動標注,因此是一種半監督的算法。但是,由于遠程監督算法會引入大量噪聲,所以本文采用多示例學習的方法,采用包級別語義關系抽取,不僅解決了句子級別關系抽取的低效率問題,也解決了遠程監督會引入大量噪聲的問題。
多示例學習將數據集劃分為多個包,其中每個包均為包含了相同實體對和關系的句子集,關系識別模型就變成了識別每個包的標簽,而不關注包里面的實例標簽,在訓練模型時每次選擇包里置信度最高的實例進行訓練。由于每個包是一個句子集,包中的句子都是包含相同實體對和相同關系的句子,在預測時,每個包的標簽就是包里句子集中每個句子的標簽。
假設包里 是含有
個句子的集合,
,
個句子通過卷積層和池化層,得到句子級別的表示,每個句子表示為
,句子級別的注意力(sentence level attention)計算過程如下。
注意分數定義如式(4)所示。
![]() |
其中 為句子向量,
為權重對角矩陣,
表示代表該關系的向量。
經過 SoftMax 將注意分數映射到 0 到 1 之間如式(5)所示。
![]() |
對于句子 S 加入句子級別注意力之后,將結果定義為向量 ,如式(6)所示。
![]() |
1.3.5 輸出層
加入注意力機制后得到句子集合向量 ,通過一層神經網絡層映射到輸出類別如式(7)所示。
![]() |
其中, 是所有實體關系的向量所組成的矩陣,
是偏置向量。網絡的輸出數目和關系數目相等,然后經過 SoftMax 層,得到最后的輸出概率向量如式(8)所示。其中,
代表所有關系類別的數目。
![]() |
最后使用交叉熵損失函數如式(9)所示。
![]() |
2 實驗
2.1 數據集
醫學文獻一共有以下幾個類別:社會分析類、研究進展類、指南共識類、疾病說明類、中醫類、護理類、臨床醫學研究類[15]。其中指南共識類文章和臨床醫學研究類文章是我們主要的知識挖掘對象。臨床實踐指南被定義為針對特定的臨床情況系統制訂的,幫助醫務人員和患者做出恰當處理決定的指導性建議。臨床實踐指南與專家共識作為醫學實踐中最重要的指導性文件,具有學術權威性。臨床醫學研究類文章則主要是針對某一項醫學研究進行臨床試驗并得到醫學結論。
由于電子病歷通常是患者一些癥狀、體征與醫生治療方案的陳列,其中明顯的實體關系非常少。所以本文選擇了天池大賽比賽官方提供的 968 份糖尿病專家共識類與臨床醫學研究類醫學文獻(https://tianchi.aliyun.com/dataset/dataDetail?dataId=22288),數據形式如圖 4 所示。每份文獻附有實體及實體關系標注文件一份,標注形式如圖 5 所示。其中以 T*開頭的為實體標注,共包含 15 個實體類型,以 R*開頭的為關系標注,共有 10 種關系類型。


2.2 預處理
進行實體關系識別的前提是實體提取。對于實體提取我們進行了如下處理。
數據清洗:為了使數據更符合模型的訓練,我們首先對數據進行了清洗和規范化。去掉所有空格和多余的標點符號,然后將所有的數字和英文分別用<NUM>、<ENG>替換
數據準備:通過數據清洗之后,得到的數據都是大段文字,而要進行實體識別大段的文字會對精度有所影響,所以在輸入到實體識別模型前需要對數據進行分句。但是由于醫學文獻數據特點,如果只使用“。”“!”“?”3 種標點符號分句,分句后依然會出現很多過長句子,最長的句子可達 600 字。因此我們提出一種多級別式分句法。首先使用一級標點符號對句子進行分句,得到若干子句;其次篩選出字數大于 200 字的子句,使用二級標點符號進行分句,得到二級子句;若這些二級子句的字數仍然大于 200 字,則使用三級符號繼續分句,直到最后所有子句的字數均小于 200 字。
數據標注:采用 BIOSE 標簽對文本進行標注,其中 B 表示一個實體的開始的字,I 代表一個實體中間的字,E 代表一個實體的結束的字,S 代表只有一個字的實體,O 代表不需要識別的字。
最后使用 Word2vec 對數據進行字嵌入處理并使用雙向長短時記憶網絡與條件隨機場結合(Bi-LSTM+CRF)的網絡進行實體識別。
為了得到大量有實際意義的實體關系訓練語料,我們對數據進行了如下處理:窮舉文章中所有實體,對所有實體進行排列組合,將存在于標注數據的實體對的關系按照標注關系分類,將不存在的關系歸為 None。醫學文獻具有實體多、段落大的特殊性[16],這種組合方式在產生大量訓練語料的同時,也會帶來很多噪聲。我們基于漢語的書寫習慣[17]及表 1 的測試結果,將實體間隔大于 150 個字的實體對歸類為噪聲并濾除。然后,截取文章中包含這個實體對的文字,頭實體向前截取 50 個字作為窗口,尾實體向后截取 50 個字作為尾窗口,添加上下文信息,使實體關系識別模型更理解上下文語義。最后,經過預處理得到 5 萬條訓練語料,訓練語料中 11 種關系分布如表 2 所示。


2.3 實驗環境
實驗使用的硬件設備如下:處理器,Inter(R) Core (TM) i7-8700K@3.70 GHz;內存(RAM)32.0 GB;獨立顯卡,GeForce GTX 1080 Ti;系統類型,Windows 10 家庭版;開發工具,Python 和 Tensorflow 框架。
2.4 模型設置
我們采用交叉驗證的方法,將數據中的 774 份作為訓練集,126 份作為測試集,68 份作為驗證集。本文實體關系識別模型選擇的參數設置如表 3 所示,其中 Window size 選取 4 種不同的大小,每種 Window size 有 128 個。

2.5 實驗評估方法
將模型預測結果分為下面四類:正確肯定(true positive,TP):預測為正,實際為正;正確否定(true negative,TN):預測為負,實際為負;錯誤肯定(false positive,FP):預測為正,實際為負;錯誤否定(false negative,FN):預測為負,實際為正。通過精確率(Precision,P)[18]、召回率(Recall,R)和 F1-score 三個評價指標來評估模型,其中精確率是指分類正確的正樣本個數占分類器判定為正樣本的樣本個數的比例,召回率是指分類正確的正樣本個數占真正的正樣本個數的比例,F1-Score 是精確率和召回率的調和平均值,它們的計算方法如下:
![]() |
![]() |
![]() |
3 實驗結果
我們將本文提出的模型分別與 RNN[19]、CNN[20-21]、Bi-LSTM+ATT[22]模型比較,同時還對 Bi-LSTM+ATT 模型增加了本文所提出的實體類型特征。實驗結果如表 4 所示。其中 ET 指實體類型嵌入。

對比實驗分析可以得到幾個結論:第一,可以看到本文所提出的多窗口 CNN+ATT 模型在沒有加入實體類型特征時,與 RNN、CNN 及 Bi-LSTM+ATT 模型相比性能最優,F1-Score 達到 87.62%。第二,對于 Bi-LSTM+ATT 模型和 CNN+ATT,加入實體類型特征后,模型的準確率都有不同程度的提升,其中 Bi-LSTM+ATT 模型加入實體類型特征后 F1-Score 達到了 92.64%,較原 Bi-LSTM+ATT 模型有較大性能提升。同樣,CNN+ATT 模型加入實體類型特征后 F1-Score 達到了 93.15%,較原 CNN+ATT 模型亦有較大性能提升。說明實體類型特征的加入,對于提高模型性能具有十分重要的作用。
同時,本文還對比了 11 種關系類型在不同模型下的 F1-Score,實驗結果如表 5 所示。分析實驗結果可以看到:本文提出的 CNN+ATT+ET 模型在大部分關系上是效果最佳的模型,對于 Test-Disease、Drug-Disease 和 Method-Drug 三種關系,Bi-LSTM+ATT+ET 模型效果最好。

模型對比 ROC 曲線如圖 6 所示,PR 曲線如圖 7 所示。通過多次實驗對比分析以及 ROC 曲線和 PR 曲線對比,可以看到針對醫學文本數據,本文提出的 CNN+ATT+ET 模型是效果最好的模型。


在得到具有良好性能的關系抽取模型后,將模型抽取的關系與實體組合成為三元組的形式儲存。通過將大量的三元組導入到圖數據庫 Neo4j 中,得到醫學知識圖譜。將數據知識三元組存儲到 Neo4j 數據庫后,在前端頁面即可詳細顯示整個知識圖譜結構。整個醫學文獻知識圖譜共有 33 347 個節點和 43 686 條關系邊。
圖 8 展示了知識圖譜的部分節點。圖中不同顏色的圓圈代表不同類型的實體,兩圓圈之間的線代表實體關系。其中,藍色代表癥狀,黃色代表疾病,粉色代表藥物,灰色代表不良反應,綠色代表原因。我們在圖譜上可以通過查詢語句查詢得到治療 1 型糖尿病的藥物有哪些,或者同時治療 1 型和 2 型糖尿病的藥物有哪些,如圖 9、10 所示。同時如圖 11 所示也可以反向查詢胰島素可以治療哪些疾病。可以看到,通過圖譜查詢得到的結果與臨床醫師給出的用藥意見相一致。




4 討論
本文以優化 CNN 提取實體關系為目的,對 CNN 進行改進。針對大量文本產生的噪聲問題,通過注意機制使模型能夠準確選擇真實有效的關系對。實驗表明,我們的方法相對于傳統 CNN 網絡,對實體關系提取有了較為明顯的提升。從表 4 中列出的 3 個評價指標可以看出,本研究的方法在提取醫學文本關系上要比 RNN 網絡好很多,稍優于 CNN 網絡,由此也可以看出相比于 RNN 網絡結構,CNN 網絡模型更適合自然語言處理的分類任務。CNN 網絡使用卷積層進行特征提取,使用最大池化層進行特征維度降低,通過不斷加深網絡層數,提取更深層次的特征,加入 Attention 機制后使網絡能夠在長句子中識別兩個距離較遠實體的真實關系。同時,由于醫學文本的關系識別與開放領域文本關系識別略有不同,即醫學領域的實體關系與實體類別有關,Symptom 和 Disease 的關系不可能是 Disease-Drug,而一定是 Symptom-Disease,因此針對這個特殊性,本文對上述模型進行改進,在醫學文本實體關系識別任務中加入了實體類型特征,對于模型效果有很大的提升。可以看到,實體類型在實體關系識別任務中是非常重要的。
除此之外,實體關系提取的最終目的是為了形成有研究價值的知識圖譜,而整個知識圖譜創建的優劣都是建立在實體關系識別的精度上,如果實體關系識別的準確率很低,則建立的知識圖譜將失去意義,所以提高實體關系識別精度意義重大[23]。查詢只是圖譜的一個基本應用,在后續的研究中,我們可以通過圖譜進行新知識的推理和發現。
5 結論
本文首先介紹了基于實體類型嵌入的多窗口 CNN+ATT 模型,該模型引入了實體類型特征,加入到句子向量表示中。本文將句子級別的實體關系識別任務轉化為包級別,并且引入了句子級別的注意力機制。與其他實體關系識別模型對比,結果表明本文提出的模型效果更好、性能更優。另外,本文還將提取的醫學知識三元組存儲到 Neo4j 圖數據庫中,將整個醫學知識圖譜以及在知識圖譜中搜索查詢的結果進行了展示。
雖然本文模型方法取得良好效果,但還有很多不足之處,有待進一步完善。在實體嵌入層中,Word2vec 嵌入方法無法顧及單詞一詞多義的情況,導致識別準確率下降,可以考慮在嵌入時改用 Bert[24]或 ELMO[25]方法,在單詞嵌入過程中得到更準確的表達。同時,本文實現的知識圖譜功能尚有不足,有待進一步拓展,例如可以嘗試將醫學知識擴展到語料庫,識別新的實體類型,構建新的實體關系,進一步完善醫療體系知識圖譜的應用性。
利益沖突聲明:本文全體作者均聲明不存在利益沖突。