陳雪松,朱鑫海,王浩暢
(1.東北石油大學 電氣信息工程學院,黑龍江 大慶 163318;2.東北石油大學 計算機與信息技術學院,黑龍江 大慶 163318)
命名實體識別(named entity recognition,NER)作為信息抽取[1]的關鍵性任務,在關系抽取[2]、文本摘要[3]、機器翻譯[4]等任務中發揮著重要作用。醫學領域命名實體識別是指從海量的醫學數據中識別出有價值的信息的過程,包括癥狀信息、藥物信息、身體部位信息、疾病診斷信息等。有效的命名實體識別過程可以挖掘出醫學文本關鍵信息,對于電子病歷等文本的規范化和標準化有著重要的作用。
近年來有學者使用深度學習的方法[5-7]處理醫學領域命名實體識別任務,然而目前大多數醫學領域命名實體識別模型單獨使用字符級別向量或者詞匯級別向量,而忽略了將字符級別和詞匯級別特征相結合作為句子特征表示的問題。Yue Zhang等[8]創造性地提出一種Lattice LSTM模型,以字符級別的中文命名實體識別模型為基礎,融入大規模詞表匹配信息,在4個通用數據集上驗證引入詞匯信息之后效果可以有比較好的提升。為解決中文醫學文本結構復雜,且單純使用字符級別特征或者詞匯級別特征所導致的語義信息缺失問題,本文提出PMV-LSTM(pre-trained medical vectors long short term memory)方法,通過對大規模醫學領域文本進行詞向量和“字符分割”形式的字向量訓練,然后將字向量送入Lattice LSTM中,通過Lattice結構巧妙地將詞向量特征和字向量特征融合到一起,得到句子的特征表示,最后對特征表示經過CRF層進行解碼,得到最終的實體標注結果。經過實驗驗證,PMV-LSTM模型與同類型模型相比,在不同醫學領域文本命名實體識別任務中取得了優異效果。
基于深度學習的命名實體識別一般被看作是序列標注問題。通過特征抽取器對句子特征進行編碼,然后使用解碼器進行解碼來進行端到端的處理,得到標注結果。雖然深度學習的技術一定程度上解決了NER任務對詞典等外部信息的依賴,但只使用基于字符或者基于詞匯的NER方法也會影響到命名實體識別的效果。為此,根據中文命名實體識別的特點,設計出PMV-LSTM方法來對中文醫學文本進行命名實體識別。
本文所提出的PMV-LSTM模型結構分為3部分,嵌入層、Lattice LSTM層和CRF層。模型結構如圖1所示。首先通過對輸入的醫學文本進行詞級別和字符級別的Word2Vec訓練,利用“字符分割”的方式增加字符級別向量的數量,所謂“字符分割”指的是將醫學文本按字符進行切分,字符與字符之間以空格隔開,來達到字符分詞的效果。然后將得到的字符級別特征輸入到Lattice LSTM中進行編碼,在Lattice LSTM中巧妙地利用Lattice結構將詞級別特征結合到一起,最后輸入到CRF層中進行解碼,從而得到醫學文本命名實體識別的標注結果,整個模型處理過程屬于端到端的過程,不需要進行特征工程處理。

圖1 PMV-LSTM模型結構
Word2Vec是一種新的詞向量表示方法[9],通過Skip-gram和CBOW兩種可選的訓練方式將詞匯之間的關系轉化成空間中向量的距離問題,距離越近的向量所代表的詞匯越相似。例如,醫學文本中,“關節炎”和“風濕病”的相似度和相關度明顯比和“新冠肺炎”要高。
本文采用Word2Vec中的Skip-gram模型學習得到詞向量,PMV-LSTM模型需要將字符級別特征和詞匯級別特征都學習到。另外,為了保證字符級別特征的質量,所以將詞向量和字向量分開訓練。首先從網絡中爬取醫學文本語料,對其進行去停用詞處理,利用pkuseg分詞工具[10]進行醫學領域文本分詞,同時為了保證分詞質量,加入自定義的醫學領域詞典,然后利用gensim工具包[11]進行詞向量訓練,維度為300維。將得到的詞向量中字符級別向量單獨取出,余下的向量作為詞匯級別向量使用。字符級別向量訓練過程類似,不同的是醫學文本不需要進行分詞處理,而是對每個字符以空格隔開,得到類似于字符級分詞的效果,然后再進行Word2Vec訓練,得到的向量全部都是模型中可以使用的字符級向量。此時得到醫學領域向量有542 554條,包括詞匯級別向量534 427條,字符級別向量8127條。最后將字向量和詞向量輸入到Lattice LSTM中融合,以提高模型的性能。
不同于英文文本的命名實體識別,中文文本的命名實體識別通常需要以字符級別為單位進行序列標注。這主要是因為中文文本的特點,并沒有像英文那樣以空格作為天然的分隔符,需要進行分詞處理。然而中文分詞由于文本的領域不同和模型準確率的原因會存在誤差,導致基于字符級別的命名實體識別模型效果要優于基于詞匯級別的命名實體識別模型。但并不是NER任務不需要詞匯信息作為輔助,在NER模型中加入詞匯信息不僅可以強化命名實體的實體邊界,也可以看作是一種數據增強方式,以詞匯信息作為輔助信息來使模型學習到更多的句子深層語義特征。
本文提出的PMV-LSTM模型,引入Lattice LSTM,重新訓練適用于醫學領域的詞向量,以詞匯作為外部資源信息,Lattice結構能夠動態引入詞匯信息,用特殊的門控機制來控制詞信息流,對句子中所有可能存在的詞和詞典進行匹配來編碼。

(1)
(2)

首先Lattice LSTM以字符級別的LSTM模型為基礎,如果句子s中字符cj在詞典中沒有相匹配的詞,也就是說當前位置j沒有對應的詞序列,則在此位置Lattice LSTM就是基于字符級別的LSTM模型。

(3)
(4)


(5)
其中,WlT和bl為模型訓練參數。
(6)
(7)
(8)
(9)
在NER模型訓練過程中,反向傳播參數Wc,bc,Ww,bw,Wl和bl,使模型動態的關注標注過程中更相關的詞,選出最適合當前的字詞表征。
最后加入CRF層,通過計算CRF中的發射分數和轉移分數來對標注結果進行約束,學習到相鄰標簽的結果,保證最終預測結果的準確性。
訓練出合適的詞向量是PMV-LSTM模型的基礎,本文用來訓練詞向量的醫學文本語料有兩部分,第一部分是采用爬蟲技術從39健康網、99健康網、A+醫學百科爬取的身體部位、疾病癥狀、診斷治療等信息。第二部分是cMedQA中文社區醫療問答數據和互聯網中搜集到的中文醫療對話數據集,涉及到疾病診斷、身體部位、治療藥物等信息,共約100萬個問答對。最后經過數據清洗得到的有效醫學文本語料約144萬行,語料規模為650 MB大小。
分詞是利用Word2Vec進行詞向量訓練的關鍵,在NLP領域中,一般使用jieba分詞工具[12]進行分詞操作,在通用領域取得了較好的效果。但是在中文醫學領域,通用的分詞工具在醫學文本上并不一定有較好的效果。所以,本文使用北京大學開發的具有領域分詞功能的pkuseg分詞工具,該分詞工具可以根據待分詞文本的特點選擇對應領域的分詞模型。
本文在使用了醫學領域的分詞模型之后,為了確保分詞的準確性,另外添加了一個自定義的醫學詞典。所構造的詞典是從互聯網中搜集到的符合ICD10標準[13]的疾病名稱、藥名、癥狀詞典和醫院用電子病歷詞庫[14,15],共77 487條醫學詞匯。
經過上述的分詞處理之后,本文使用Python中的gensim工具包進行訓練詞向量。由于Lattice LSTM的特點,需要使用句子的詞向量信息和字向量信息,首先對上述分詞之后的醫學文本進行普通的詞向量訓練,得到大規模的醫學詞向量539 809條,其中詞匯級別向量534 427條,字符級別向量5382條。這里只選擇詞匯級別的向量作為所需要的詞向量。然后對字符級別向量進行訓練,所使用的方法和之前類似,將獲取的醫學文本以字符為單位用空格分隔,相當于分詞操作,然后對此時的文本進行Word2Vec訓練,得到字符級別的向量,共8127條。此時得到最終的醫學領域詞向量有542 554條,包括詞匯級別向量534 427條,字符級別向量8127條。
在訓練過程中,Word2Vec模型選擇Skip-gram算法,窗口大小為5,最小詞頻選擇1,采用層次softmax技巧進行訓練,字詞向量的維度選擇300維。為了更直觀體現出字嵌入和詞嵌入的效果,分別選取“痛”和“心臟病”來對其字嵌入相關性和詞嵌入相關性進行分析。如圖2所示,可以看出通過Word2Vec訓練得到的兩個詞,在向量空間上距離相近時,實際詞義也相關。

圖2 字詞嵌入相關性
本文實驗使用Python語言進行編寫,深度學習框架選擇Pytorch,在Ubuntu 5.4.0系統,Intel(R) Core(TM) i7-9700K處理器,Nvidia RTX2080 Super顯卡環境下進行本實驗。醫學領域命名實體識別的性能評估采用精確率(precision,P)、召回率(recall,R)和F1值3個指標。
為了驗證本文模型對醫學領域命名實體識別任務的普適性,使用了3個醫學領域的數據集來進行實驗,涉及到醫學電子病歷領域和醫學社區問答領域,分別是CCKS2017命名實體識別數據集[16]、cEHRNER命名實體識別數據集和cMedQANER命名實體識別數據集[17]。
CCKS2017(China conference on knowledge graph and semantic computing 2017)為2017年全國知識圖譜與語義大會的評測任務數據,有4種類型的電子病歷,一般項目、病史特點、診療經過和出院情況,其中有身體部位、癥狀和體征、疾病和診斷、檢查和檢驗、治療5種類型的醫學領域實體需要識別出來,實體數量分別為20 077個、14 583個、5205個、19 959個和5456個,標注模式為BIO模式。
cEHRNER為從中國電子健康記錄(Chinese electronic health records)標記的數據集。有癥狀、手術、疾病和診斷、解剖部位、藥物、實驗室檢驗、影像檢查7種醫學領域實體,標注模式為BIO模式。其中訓練集914條電子病歷數據,驗證集44條電子病歷數據,測試集41條電子病歷數據。
cMedQANER為從中文醫學社區問答中標記的數據集。有癥狀、患者類型、疾病、藥物、治療、身體部位、特征、測試、時間、科室、生理機能11種醫學領域實體,標注模式為BIO模式。其中訓練集1673條醫學問答數據,驗證集175條醫學問答數據,測試集215條醫學問答數據。
詞向量的優劣對于本文模型的效果有著重要的影響。為了得到合適的醫學領域詞向量,首先需要對醫學語料進行文本分詞,然后再進行詞向量的訓練。本文從所使用的分詞工具、詞向量訓練的維度兩個角度進行實驗,充分驗證不同的方式對于醫學命名實體識別效果的影響,尋找到使得模型效果最好的參數。
本文選取目前自然語言處理中常用的jieba分詞和具有領域分詞功能的pkuseg分詞兩種工具,并且從50維、100維、200維、300維4個維度進行對比,在CCKS2017數據集上進行實驗驗證。此時所使用的詞匯級別向量和字符級別向量為Word2Vec直接訓練得出,從中提取出字符級別的向量為字符向量,共5382條,其余部分為詞匯級向量,共534 427條。不同分詞工具和詞向量維度的醫學實體識別結果如圖3所示。

圖3 不同分詞和詞向量維度實體識別結果對比
從圖3中可以看出,詞向量維度為50維、100維、200維和300維情況下,pkuseg和jieba均對醫學實體識別的效果有所影響。當選擇迭代次數為50次時,隨著迭代次數的增加,醫學實體識別的F1值在各個維度均處于先上升然后趨于平緩的狀態。詞向量維度在50維、100維、200維及300維時,使用pkuseg分詞工具進行分詞,然后進行實體識別的效果要好于使用jieba分詞的結果,最好的結果處于使用pkuseg分詞工具,并且詞向量維度為300維時。因此,本文選取pkuseg分詞工具進行分詞,以確保分詞效果,詞向量維度選擇300維,可以更大程度上體現出語義信息。
為了進一步探討PMV-LSTM模型的有效性,本文在多個醫學領域數據集上進行驗證,并且與幾組基線模型進行對比。
表1中列出了幾種對比模型的具體信息,其中字符向量訓練方式中分開訓練指Lattice LSTM字符向量是利用Giga-Word經過大規模標準分詞后的語料[18]訓練得到,詞匯向量是使用CTB6.0(Chinese treebank 6.0)語料庫[19]訓練得到;聯合訓練是指利用Word2Vec在醫學文本語料上將字符和詞匯向量一起訓練得到;字符分割訓練指字符級別向量是在醫學文本語料上利用字符分割的方式訓練得到,詞匯級別向量取聯合訓練中的詞匯級向量。

表1 對比模型信息
另外,BiLSTM、LSTM-CRF和BiLSTM-CRF是經典的命名實體識別模型,BiLSTM模型通過利用詞向量信息,然后將其輸入到BiLSTM中進行中文醫學命名實體識別。LSTM-CRF模型使用單向LSTM進行編碼,然后使用CRF進行解碼,BiLSTM-CRF在LSTM-CRF的基礎上使用了雙向LSTM,能更好捕獲雙向的語義依賴信息。以上3種命名實體識別模型均采用隨機初始化詞序列特征表示,利用NCRFpp框架[20]進行復現。
PMV-LSTM模型在CCKS2017、cEHRNER和cMedQANER數據集的測試集結果見表2~表4,與其它經典模型比較的結果見表5。

表2 CCKS2017上識別效果對比

表3 cEHRNER上識別效果對比

表4 cMedQANER上識別效果對比

表5 與其它經典研究比較結果
由表2可知,在CCKS2017數據集上PMV-LSTM(dict)模型比PMV-LSTM(no dict)模型的F1值高了0.3%,表明在分詞過程中加入自定義的醫學領域詞典對詞向量的訓練有著積極的作用。與PMV-LSTM(dict)模型相比,PMV-LSTM模型F1值也有著0.16%的效果提升,表明使用“字符分割”來得到字符級向量的方式,能夠增加醫學詞匯的匹配度。同時PMV-LSTM模型比Lattice LSTM基線模型效果提升0.92%,說明PMV-LSTM模型在醫學領域專門訓練詞向量,使用“字符分割”來得到字符級向量的方式,能夠提升醫學領域命名實體識別的效果。
進一步對比表3和表4,在cEHRNER和cMedQANER數據集中PMV-LSTM(dict)模型比PMV-LSTM(no dict)模型同樣都有一定的提升,F1值提升幅度分別為0.93%和0.1%,這也說明詞典作為額外的資源對醫學領域復雜的專業名詞分詞有著幫助作用。PMV-LSTM模型比PMV-LSTM(dict)模型在兩個數據集中F1值分別提升了2.47%和0.39%,進一步說明字符級向量的數量會影響模型的結果。通過對醫學文本語料進行空格分隔操作,可以得到更多的字符級向量,增加數據集中字符的匹配度,減少遇到詞庫外字符的情況,提升模型的識別效果。總體來看cEHRNER上PMV-LSTM模型比Lattice LSTM基線模型提升幅度巨大,精確率、召回率、F1值分別提升了32.49%、39.54%、37.34%。主要有兩個原因,首先在此數據集中,“手術”、“疾病和診斷”兩類實體相對于其它實體而言長度較長,平均長度分別為13個字符和7個字符,而在用Word2Vec訓練詞向量時會有窗口大小限制,沒有學習到窗口外的上下文信息,所以會影響“手術”、“疾病和診斷”這兩類實體的識別準確性,進而影響整體識別效果;其次Lattice LSTM基線模型中的詞向量在此數據集上沒有得到很好的匹配,導致出現了較多“未登錄詞”的情況,所以識別效果較差,而用醫學文本訓練出來的詞向量可以達到更高的匹配度,緩解OOV(out of vocabulary)的問題。cMedQANER上PMV-LSTM模型相較于Lattice LSTM基線模型識別效果也有所提升,精確率、召回率、F1值分別提升了2.33%、3.36%、2.87%。在此數據集上達到的F1值為85.32%,相較于CCKS2017數據集的F1值低,這表明實體類別的增加對實體識別也會有所影響,但PMV-LSTM模型效果能夠在Lattice LSTM基線模型基礎上有所提升,說明特定領域的詞向量和大量的字向量的引入能夠有效解決實體類別多的問題。由表5可知,與其它經典研究相比,在CCKS2017上BiLSTM-CRF模型取得了87.97%的F1值,與BiLSTM模型相比提升2.34%,說明CRF可以在BiLSTM的基礎上進一步學習到相鄰實體的信息,而LSTM-CRF模型取得了86.31%的F1值,均低于PMV-LSTM模型識別效果。在cEHRNER和cMedQANER上BiLSTM-CRF模型分別取得了70.00%和80.63%的F1值,均高于BiLSTM模型和LSTM模型效果,而PMV-LSTM模型在兩個數據集上的F1值相較于BiLSTM-CRF模型分別提升了9.01%和4.69%,表明PMV-LSTM模型在使用了詞匯級特征和字符級特征之后,比單純使用詞級特征效果要好。
綜上所述,本文提出的PMV-LSTM方法將字符級命名實體識別方法進行改進,通過Lattice結構巧妙地將詞匯信息動態引入字符級命名實體識別方法中,在文本表示時既考慮字符信息,也考慮到詞匯信息,打破了純字符級命名實體識別和純詞匯級命名實體識別方法不能很好地編碼醫學文本語義信息的缺陷。另外,通過對醫學語料進行專門訓練,得到面向醫學領域的詞向量,并且使用了“字符分割”方法來增加字符級別向量的數量,使得訓練出來的向量能夠更好地匹配醫學領域文本,較好地適用醫學領域命名實體識別任務,通過實驗驗證了本文模型的有效性。
本文針對目前中文醫學領域命名實體識別大多只基于字符級別或者只基于詞匯級別進行實體識別的缺陷,提出PMV-LSTM模型,重新訓練醫學領域詞向量,將醫學文本中的詞匯信息通過Lattice結構引入基于字符級別的模型中,自動選擇適合當前上下文語義的詞匯信息,并且利用“字符分割”的方法得到更多的字符級別向量,提升醫學文本的匹配度。通過實驗驗證,本文提出的方法在3個醫學領域數據集上均取得了不錯的效果,并且相較于Lattice LSTM模型效果有所提升,能夠有效解決字符級別模型和詞匯級別模型的語義信息缺失問題,更好提取上下文信息。由于醫學文本命名實體識別非常依賴上下文的信息,本文下一步的研究將會探索使用更先進的預訓練語言模型進行命名實體識別任務。