楊 波,孫曉虎,黨佳怡,趙海燕,金 芝+
1.北京林業大學 信息學院,北京 100083
2.國家林業和草原局林業智能信息處理工程技術研究中心,北京 100083
3.北京大學 計算機學院,北京 100871
4.高可信軟件技術教育部重點實驗室(北京大學),北京 100871
近年來,醫療領域的信息化建設不斷推進,各種電子病歷系統、醫學影像系統、藥物信息系統等醫療信息管理系統層出不窮。而在這些系統中,醫療命名實體識別(medical named entity recognition,MNER)是非常重要的一環。MNER 是指通過對醫學文本進行分析,自動識別出其中涉及到的疾病、藥物、治療方式等醫學實體,并將其分類和標注,以便更好地管理和利用這些數據。
醫療領域的命名實體識別方法主要經歷了3 個階段,分別是基于規則的方法、基于傳統機器學習的方法和基于深度學習的方法。基于規則的方法首先需要制作全面涵蓋醫療領域的中文醫學名詞詞典,通過與之相適應的匹配算法完成醫療命名實體識別,詞典的規模和質量是影響識別結果的關鍵因素。例如:楊錦鋒等人[1]在醫生的參與和指導下,構建了規模較大、質量較高的標注語料庫;Wang等人[2]建立的腫瘤相關的語料庫對識別腫瘤相關的信息有明顯的效果。基于規則的方法還需要對待處理的文本進行分析并構建規則模板,之后在同類型文本上使用特定規則模板,通過模式匹配的方法實現命名實體識別。例如:Quimbaya等人[3]提出了一種基于規則和字典的醫療命名實體識別方法;Gorinski 等人[4]通過對比實驗證明基于規則的方法可以非常有效地進行醫療實體識別并進一步提高機器學習方法的準確率。
基于傳統機器學習的方法在醫療領域實體識別的應用較為廣泛。例如:Zhang 等人[5]提出了一種無監督的生物醫學命名實體的方法,在該領域取得了不錯的效果;McCallum等人[6]提出了一種基于條件隨機場的命名實體識別方法。
但是,傳統的基于規則或模板的MNER 方法需要專業人員創建大量的模板和規則,不僅耗費大量時間和人力,而且沒有辦法解決醫療領域知識不斷迅速更新的問題。
近年來,隨著深度學習技術的不斷發展,以深度學習為基礎的MNER算法越來越受到研究人員的關注。例如:Santos等人[7]利用CNN(convolutional neural network)來捕獲詞序列的語義信息,識別出醫療命名實體;Xu 等人[8]提出一種將預訓練語言模型BERT(bidirectional encoder representations from transformers)和雙向長短期記憶網絡(bi-directional long short-term memory,BiLSTM)、條件隨機場(conditional random fields,CRF)模型相結合應用于生物命名實體識別的模型;Su等人[9]利用全局歸一化的思路來進行命名實體識別,可以無差別地識別嵌套實體和非嵌套實體。
但是,深度學習方法通常使用固定大小的窗口或卷積核來處理文本,這就要求處理的文本是連續的,限制了其處理非連續和嵌套實體的能力。此外,深度學習模型通常需要大量的標注數據來訓練,以便有效地學習實體識別任務,而在醫療領域因大規模標注數據非常昂貴和耗時,標注數據的稀缺性可能限制了深度學習方法的性能。
例如:圖1中基于傳統機器學習技術的實體識別方法對于“真菌性和過敏性肺炎應該如何治療?”這一問題只能識別出來“過敏性肺炎”,對于“體溫較前下降了很多應該如何治療?”這一問題識別不出實體。

圖1 傳統機器學習與大語言模型的識別效果對比Fig.1 Comparison of recognition effects between traditional machine learning and large language models
但是,大型語言模型能夠捕捉文本中的上下文信息,并通過上下文來推斷實體的邊界和類型,這有助于識別出文本中的非連續實體。并且ChatGPT(chat generative pre-trained transformer)可以進行遷移學習,從其他領域的文本中學習到的知識可能有助于處理醫療文本中的實體。通過實驗發現,大語言模型可以識別出醫療文本的嵌套實體和非連續實體,并將它們轉化為規范化的醫療實體。為此,本文提出了一種基于大語言模型進行醫療命名實體識別的方法,并與傳統機器學習方法進行比較。使用大語言模型ChatGPT,提出了一種輸入的格式,包括要識別的實體類型列表、具體的需求指令和規定輸出格式的指令等。將實體識別的結果應用到醫療問答系統中的知識圖譜,能夠得到最終的醫療問題的答案。
本文的主要貢獻包括如下三點:
(1)提出了一種基于大語言模型的實體識別方法(named entity recognition method of large language model,NERLLM),該方法首先需要對數據集進行預處理,按照規定的指令格式,將問題輸入到ChatGPT中,然后將輸出的內容進行分類,根據不同的分類進行分析。
(2)將實體識別的結果作為輸入放入到醫療問答系統中,利用醫療問答系統中的知識圖譜,來進行推理分析,從而獲得相應問題的答案。
(3)在三個典型的醫療數據集上進行了實驗,研究結果表明,基于大語言模型的MNER 方法在醫學文本中具有較高的準確性和泛化能力,并且具有識別非連續實體和嵌套實體的能力,能夠較好地應用在醫療問答系統中。
命名實體識別方法主要包括基于規則的方法、基于傳統的機器學習方法和基于深度學習的方法。
基于規則的方法需要對待處理的醫療文本進行分析并建立規則模板。如Kim 等人[10]提出在對話輸入中使用Brill 規則推理方法,該工作實現了一個基于Brill 的詞性標注器自動生成方法;Hanisch 等人[11]提出了ProMiner,在生物醫學領域,它通過采用規則模板和近義詞詞典來識別生物醫學文本中的各種實體;Chen等人[12]在傳統的機器學習模型外,附加規則模板來抽取模型不能識別的實體;Gorinski 等人[4]通過對比實驗證明基于規則的方法可以非常有效地進行醫療實體識別,并進一步提高機器學習方法的準確率。
基于規則的方法優點是便于維護,缺點是需要大量人力和時間成本投入,規則的可移植性也較差。
利用傳統機器學習方法,可以對實體進行識別,其中主要包括有監督的實體識別和無監督的實體識別。
在有監督的學習過程中,實體的識別問題被轉換成了序列標注或者多類別分類問題。給出了帶標注的數據樣本,分別設計了不同特征來代表各個訓練的樣本。在此基礎上,采用機器學習方法對未知數據進行建模,并對其進行特征提取。特征向量表示是對文本的抽象,其中單詞由一個或多個布爾值、數值或標稱值[13-14]表示。共有三大類特征:第一類是單詞級特征,具體包括大小寫[15]、形態學[16]、詞性標簽[17];第二類是列表查找特征[18-21],具體包括維基百科地名錄和數據庫地名錄;第三類是文檔和語料庫特征[22-25],具體包括本地語法和多次出現。這三大類特征已被廣泛用于各種基于監督學習的NER系統。
基于上述三類特征,人們提出了大量的機器學習方法與命名實體識別任務進行結合,包括隱馬爾可夫模型(hidden Markov model,HMM)[26]、決策樹[27]、最大熵模型[28]、支持向量機(support vector machine,SVM)[29]和條件隨機場[30]。Bikel等人[31-32]提出了Identi-Finder 系統,該系統首次將HMM 應用在命名實體識別任務上。McNamee 等人[33]使用大量特征來訓練SVM分類器,從而進行實體的抽取。由于基于SVM的命名實體識別方法不能夠考慮上下文信息,Mc-Callum等人[6]將CRF應用到命名實體識別中,取得了顯著的效果。在此基礎上,Krishnan 等人[25]將兩個CRF 應用到命名實體識別中,他們將第一個CRF 的輸出利用在第二個CRF 中。通過調研表明,CRF 已經被廣泛應用于命名實體識別任務中,并且取得了很好的結果。
無監督的實體識別方法主要用到的是聚類[13]。該類方法根據上下文相似度,從群集中抽取出一個命名實體。該方法的核心思路是利用詞源、詞形以及在大規模語料庫上的統計信息,對命名實體進行推理。Collins 等人[34]首先使用兩個分類器識別實體的邊界,然后利用一個分類器進行實體類型的識別,提供了一種實體識別的思路。同樣,Etzioni等人[35]通過人工編寫規則模板從Web 中進行無監督的、獨立于領域和面向可伸縮的實體自動化匹配。
Nadeau 等人[36]提出一種無監督方法,可應用于地名錄的構建和命名實體消歧。此外,Zhang 等人[5]根據生物醫學領域相應實體類型的句法和詞法特征提出了一種無監督的方法。這兩種模型將監督學習替代為術語、語料庫統計和淺層句法知識。實驗結果表明,這兩種無監督學習方法在兩個主流生物醫學數據集上具有較高的識別效率和普適性。
基于深度學習的方法利用大規模高質量標注過的語料進行模型訓練,再利用模型完成對命名實體的識別,基于深度學習的方法在醫療命名實體識別上相較于基于詞典的方法和基于規則的方法表現出較好的實用性和可移植性。它不僅可以較好地解決中文電子病歷文本的非規范性和專業性造成的命名實體識別困難的問題,而且在特殊醫療命名實體識別上表現優異。
隨著深度學習技術的發展,由于其在命名實體識別任務上的優異表現,迅速成為研究熱點。從最初以長短期記憶網絡(long short-term memory,LSTM)為代表的單向循環神經網絡(recurrent neural network,RNN)到以BiLSTM為代表的雙向RNN網絡,從基本的卷積神經網絡(CNN)到其變種迭代膨脹卷積(iterated dilated convolution neural network,IDCNN)[37],從類似CRF 這樣的單一模型到諸如BiLSTM+CRF[8]的多模型融合,人工參與工作量不斷減少,識別精度也不斷提高。Santos 等人[7]利用CNN 來捕獲詞序列的語義信息,識別出醫療命名實體。
預訓練模型和遷移學習方法引入后,模型對語義的理解更進一步,首先在語料充足的領域上通過監督學習訓練出一個通用的預訓練模型,然后遷移到像實體識別這樣的特定領域的語言任務上。比如從Word2vec 到GloVE(global vectors for word representation),再到BiLSTM、BERT 以及以RoBERTa(robustly optimized BERT pretraining approach)[38]為代表的BERTology 系列,這些預訓練模型依次出現,在優化升級過程中不斷提高了命名實體識別的精度。Wang等人[39]首先使用RoBERTa-wwm(RoBERTawhole word masking)進行編碼,然后利用CNN 提取漢字特征,最后將多語義特征輸入到BiLSTM+CRF中從而實現實體識別。Hu等人[40]提出了一種基于協同決策策略的新型深度醫療命名實體識別方法,該方法可以識別在線健康專家問答環境中的標準和非標準醫療實體。Hofer等人[41]采用XLM-RoBERTa模型進行命名實體識別,并對英文數據的命名實體識別跨語言模型進行了微調。
深度學習方法通常使用固定大小的窗口或卷積核來處理文本,這限制了其處理非連續和嵌套實體的能力。并且,深度學習模型通常需要大量的標注數據進行模型的訓練,而在醫療領域標注數據的稀缺性會限制深度學習方法的性能。隨著大語言模型的出現,有效解決了標注數據不足的情況,因為大型語言模型是由大量的數據訓練而成,能夠捕捉文本中的上下文信息,并通過上下文來推斷實體的邊界和類型,這有助于識別出文本中的命名實體。目前有一些基于大語言模型做命名實體識別的研究,例如:Zheng等人[42]將命名實體識別任務分解為實體跨度提取和實體類型確定兩個子任務,然后利用大語言模型逐步解決問題。Wei 等人[43]將零樣本信息提取任務轉化為具有兩階段框架的多輪問答問題,借助ChatGPT的強大功能,在關系抽取、命名實體識別和時間抽取這三個信息提取任務上廣泛評估原文提出的框架方法。Polak 等人[44]提出了ChatExtract,該方法由一組經過設計的提示組成,這些提示既可以識別帶有數據的句子,提取數據,又可以通過一系列后續問題確保數據的正確性。Wang 等人[45]提出了GPT-NER,該方法首先將序列標記任務轉換為大語言模型可以輕松完成的生成任務,然后提出了一種自我驗證策略,通過向大語言模型詢問自己識別出的實體是否屬于標記的實體標簽,有效地解決大語言模型的“幻覺”問題。
系統整體框架如圖2所示,該系統包括數據預處理、實體識別、意圖識別、知識圖譜查詢和回答生成五部分。用戶的輸入文本為整個系統的輸入,經過系統的五個部分處理,最后以系統生成的回答作為輸出。

圖2 系統框架圖Fig.2 System framework diagram
數據預處理主要完成對輸入數據的處理。在問答系統的日常使用中,用戶有時候因為手誤或者相關知識的欠缺,輸入的文本可能會出現錯誤,例如“小兒氨酚那敏顆立”其中“顆粒”被誤寫。針對這種情況,需要進行錯誤詞的處理。處理后的語句,系統會將其進行問題分類。這一工作是為了方便第三部分的意圖識別和槽位填充,然后對識別出來的問題進行解析。
其中錯誤詞處理,在實驗訓練階段,使用人工處理的方式,主要方式是人工針對數據集中的錯誤詞進行改正。在系統中,增加了的相應的錯誤詞表對用戶輸入進行更改。
命名實體識別主要實現對輸入文本的實體抽取。在自然語言處理中,實體識別指的是將文本中的特定實體(如人名、地名、組織機構名等)標記或識別出來。對于醫療問答系統,需要識別出用戶輸入文本中的疾病、癥狀和藥物等實體。命名實體識別可以幫助更好地理解文本,并且可以用于后續的語句意圖識別和方便進行鏈接知識圖譜的查詢。
大語言模型可以較好地應用于實體識別任務。由于大語言模型通常使用的是預訓練加微調的方式進行訓練,可以充分利用大規模的文本數據對實體識別任務進行建模。
在具體實現上,一種常見的方法是將實體識別任務看作一種序列標注(sequence labeling)問題,將每個輸入的單詞作為模型的輸入,并輸出相應的實體類別。大語言模型通常采用Transformer 架構,通過堆疊多層Transformer 編碼器來學習輸入句子中各個位置之間的關系,從而更好地捕捉上下文信息。同時,還可以引入自注意力機制(self-attention),使得模型能夠更好地處理長文本輸入和序列中的依賴關系。
2.2.1 輸入與輸出
輸入是一個由N個字組成的序列,也叫作“符號”。結果就是一個詞,它最有可能被放在一個詞的后面。以GPT模式為基礎的各種應用,例如對白、事例、事例產生等,都采用了這個輸入-輸出模式:先給出一系列的輸入,然后得出下一個詞。
在NERLLM里,給定ChatGPT一些提示,讓其按照提示返回答案,在具體的實驗中,規定提示的模板分為以下四部分:
1.待識別的醫療文本。
2.要識別的實體類型列表。
3.具體的需求指令。
4.規定輸出格式的指令。
例如,待識別的醫療文本為“流行性感冒應該吃什么藥”,規定輸入為:
給定的句子為:“流行性感冒應該吃什么藥”
給定的實體列表為[疾病,癥狀,治療方式,藥物,檢查]
在這個句子中,可能包含了哪些實體和實體類型
按照字典的形式給出,兩個key 值分別是“實體”和“實體類型”
由于ChatGPT 具有一定的隨機性,即使給出返回格式為字典的指令,它也不像機器學習方法能夠返回規范化的結果,經過統計,ChatGPT 會返回8 種格式的結果,如表1所示。

表1 ChatGPT的返回格式Table 1 Return format of ChatGPT
針對ChatGPT 返回結果不規范的問題,將返回的結果重新輸入到ChatGPT,并且再次給出更加具體的規定返回格式的指令,該指令如下所示:
返回json格式,例如:[{'實體':'','實體類型':''},{'實體':'','實體類型':''}]
具體的ChatGPT輸入例子如下所示:
實體:流行性感冒,感冒
實體類型:疾病,疾病
返回json格式,例如:[{'實體':'','實體類型':''},{'實體':'','實體類型':''}]
2.2.2 編碼和向量化
GPT 的第一個步驟就是把所有的字集合起來,形成一個詞匯庫,這樣就可以給每一個字賦值。最后,可以把每一個字轉化成一個單獨的點編碼向量,在這個向量中,只有指數i的維數是1,其他的維數都是0。ChatGPT是利用字節對編碼(byte pair encoding,BPE)的符號化來實現高效的編碼。這表示詞匯表內的“單詞”并非全詞,而只是文字中頻繁出現的一群字符。
GPT使用的向量維度是50 257,這是一個非常大的向量,它的大多數內容是0,但是這樣的設定太浪費空間,為了解決這個問題,模型使用一個自動復制函數:一個接受長度為50 257 的1 和0 向量,并輸出長度為n的數字向量的神經網絡。
2.2.3 解碼
假設下游任務的標注數據為C,其中每個樣例的輸入為x=x1,x2,…,xn構成的長度為n的文本序列,與之對應的標簽為y。獲取通過GPT3模型訓練得來的最后一層的最后一個詞對應的隱含層輸出
緊接著將該隱含層輸出通過一層全連接層變換,來預測最終的標簽。
其中,Wy∈Rd×k表示全連接層權重(k表示標簽個數)。最終,通過優化以下損失函數來進行具體任務優化:
2.2.4 其他模型
BiLSTM+CRF方法,對輸入的文本進行編碼,將單詞映射到詞嵌入空間,以便模型能夠理解每個單詞的語義,利用兩個方向的LSTM 層,分別從前向和后向掃描輸入序列,以捕獲上下文信息,添加一個CRF 層,它用于建模標簽之間的依賴關系。CRF 考慮了整個序列的標簽分布,以確保生成合理的實體邊界。CRF層的轉移矩陣表示從一個標簽到另一個標簽的可能性。
本文也選取四種預訓練模型(BERT、ALBERT、ERNIE、RoBERTa)作為與本文模型進行對比的方法,輸入文本經過錯誤詞處理,問題分類和問題分析后會輸入各預訓練模型,對于各預訓練模型處理得到的結果,無需像2.2.1 小節對于輸出部分介紹的那樣進行人為處理,因為其本身就能對模型結果進行解碼和實體邊界的劃分,達到預期輸出的要求。
系統中查詢使用到的知識圖譜,為北京大學提供的中文醫療問答知識圖譜[46]。知識圖譜中包含的實體類型有疾病、癥狀、檢查、藥物、病原體和治療方式。
該知識圖譜,將以往的實體三元組進行關系抽取,抽取出29 種關系,將關系直接設為圖譜的節點。這樣設計可以避免傳統知識圖譜三元組(<實體1,關系,實體2>)的弊端,舉一個例子,假如感冒必須同時吃布洛芬、阿司匹林和三九感冒靈才能治好,僅用三元組的形式可以表示為:
<感冒,藥物治療,布洛芬>
<感冒,藥物治療,阿司匹林>
<感冒,藥物治療,三九感冒靈>
但這樣沒有辦法表示出“同時吃布洛芬、阿司匹林和三九感冒靈才能治療感冒”,只能表示出“感冒可以吃布洛芬”“感冒可以吃阿司匹林”“感冒可以吃三九感冒靈”。
對關系進行抽象后,可以用圖3所示的形式表示“感冒必須同時吃布洛芬和阿司匹林才能治好”并且可以很清晰地表示出多路方法的查詢,如“感冒的檢查方式”,根據圖4的表達,可以很清楚地看到兩種檢查方式。

圖3 知識圖譜實例1Fig.3 Knowledge graph example 1

圖4 知識圖譜實例2Fig.4 Knowledge graph example 2
在系統的意圖識別模塊,將意圖與知識圖譜的關系進行映射連接,關系對應如表2所示。

表2 對應關系映射表Table 2 Correspondence mapping table
為了驗證實驗的效果,提出以下3個研究問題:
RQ1:大語言模型和傳統方法在實體識別上的效果對比如何?
RQ2:數據集的質量,對大語言模型實體識別的影響是怎樣的?
RQ3:實體識別的效果對整個問答系統的效果是怎樣的?
在3 個中文醫療數據集上進行實驗,如表3 所示。它們分別是中文醫療信息處理挑戰榜(Chinese Biomedical Language Understanding Evaluation,CBLUE)中的CMeEE(https://tianchi.aliyun.com/dataset/95414)和IMCS-NER(https://tianchi.aliyun.com/dataset/95414)以及ChineseBLUE 中的cMedQANER(https://tianchi.aliyun.com/dataset/81513?spm=a2c22.28136470.0.0.1726cc93snEzMC)。
CMeEE中文醫療對話數據集將醫學文本命名實體劃分為九大類,包括:藥物(dru)、醫療程序(pro)、疾病(dis)、醫學檢驗項目(ite)、科室(dep)、臨床表現(sym)、醫療設備(equ)、身體(bod)、微生物類(mic)。該數據集訓練集數據15 000條,驗證集數據5 000條,測試集數據3 000 條。標注數據總字數達到220 萬,包含47 194 個句子,938 個文件,平均每個文件的字數為2 355。數據集包含7 085 種身體部位、4 354 種醫療程序、504 種常見的兒科疾病、12 907 種臨床表現等9大類醫療實體。
IMCS-NER 中文醫療對話數據集訓練集樣本2 472 條、驗證集樣本833 條、測試集樣本811 條。共包含5類命名實體,分別是:癥狀、藥物、藥物類別、檢查、操作。標注方式采用BIO三位字符級標注,其中B-X代表實體X的開頭,I-X代表實體的結尾,O代表不屬于任何類型。
cMedQANER 中文醫療數據集由中國社區問答標記,共包含疾病、治療方式、藥物等10類實體,訓練集1 673條、驗證集175條、測試集215條。
數據集中的訓練集用于訓練文中復現模型的參數,測試集用于驗證模型的效果,驗證集的作用是通過監控模型在驗證集上的性能,在模型性能達到最佳時停止訓練,避免過擬合,從而提高模型的泛化能力。
命名實體識別的可量化評價指標有3個,分別是準確率(Precision,簡記為Prec)、召回率(Recall,簡記為Rec)和F1-Score(簡記為F1)值。其中,準確率衡量命名實體識別模型正確識別實體的能力,召回率衡量命名實體識別模型識別整個語料庫中全部實體的能力,F1取兩者的調和平均值。
設模型正確識別的相關實體數為TP,模型錯誤識別的不相關實體數為FP,模型未識別的相關實體數為FN,則:
本文利用了HMM[26]、CRF[30]、Lattice LSTM[47]、BiLSTM+CRF[8]等模型,以及包括ALBERT(a lite BERT)、ERNIE(enhanced representation through knowledge integration)、BERT、RoBERTa 在內的預訓練模型和大語言模型ChatGPT 進行實驗,實驗參數如下所示。
對于RQ1,比較了HMM[26]、CRF[30]、Lattice LSTM[47]、BiLSTM+CRF[8]和GlobalPointer[9]5 種傳統機器學習實體識別方法。對于BiLSTM+CRF,python 版本為3.6,pytorch 工具包版本為1.8.1。在訓練的過程中,采用Adam優化算法進行參數優化,初始學習率設置為0.01。同時,為了防止過擬合化,采用early-stop和dropout 策略,并通過梯度裁剪來解決梯度爆炸問題。具體實驗參數設置如表4所示。

表4 本文方法實驗參數設置Table 4 Parameter configurations of proposed approach
GlobalPointer 中采用BERT 對輸入進行向量化,在此基礎上,將BERT 替換為RoBERTa、ERNIE 和ALBERT 進行實驗,在Hugging Face 調用,直接使用原有模型的參數。
使用ChatGPT 大語言模型,采用其中的textdavinci-002 模型,它可以理解并生成自然語言或代碼,并且與text-davinci-003 類似的能力,但使用監督微調而不是強化學習進行訓練,當沒有上下文示例、零樣本的時候,text-davinci-002 在零樣本任務完成方面表現更好。從這個意義上說,text-davinci-002 更符合人類的期待。為了探究本文提出的方法是否適用于其他大語言模型,在Llama2-13B 模型上進行同樣的實驗,查看實驗效果。
對于RQ2,是基于對3 個典型的數據集進行分析,發現其中存在少量質量較差的數據,主要分為以下3類:
(1)數據集標注不全。例如“水腫”“靜脈充血”“血紅蛋白下降”等實體沒有標注出來。
(2)實體標注不完整。例如“喉嚨疼痛”原始數據集只標注出“疼痛”,具體哪里疼痛卻沒有標注出。
(3)實體標注錯誤。例如“腫瘤”原始數據集標注的是癥狀類型,實際上應該是疾病類型。
針對這種情況,在RQ2對應的實驗中,對沒有更正的數據集和更正后的數據集,進行了實體識別對比實驗。
對于RQ3,采用基于規則的方法識別出問題的意圖,結合ChatGPT識別出的實體,通過關系鏈接將意圖鏈接到知識圖譜中的具體關系,最后查詢出答案。
在3 個數據集上,復現了5 個實體識別方法,分別是HMM[26]、CRF[30]、Lattice LSTM[47]、BiLSTM+CRF[8]和GlobalPointer[9],其中,GlobalPointer 中采用BERT對輸入進行向量化,在此基礎上,將BERT 替換為RoBERTa、ERNIE 和ALBERT 進行實驗,共8 組實驗。在下面的表中,GlobalPointer簡寫成GP,括號內的內容表示對輸入進行向量化的預訓練模型,實驗結果如表5所示。

表5 機器學習方法的比較Table 5 Comparison of machine learning methods
從表5可以看出,預訓練模型RoBERTa在3個數據集上的F1 都是最高的,它的效果與BERT 相差不大;在Recall 評價指標上,RoBERTa 在CMeEE 和IMCS-NER數據集上的表現是最好的,分別能夠達到66.53%和94.85%,在cMedQANER 數據集上能夠達到79.40%,僅比最好的BERT 相差0.005 4;這表明RoBERTa 模型在醫療命名實體識別任務中具有更好的泛化能力,能夠識別出更多的實體。在Precision評價指標上,RoBERTa 和BERT 在IMCS-NER 和cMedQANER 兩個數據集的效果比其他方法好。綜上所述,RoBERTa 和BERT 預訓練模型具備識別出更多醫療實體的能力,并且在IMCS-NER 和cMedQANER數據集上識別得更加精確,說明RoBERTa和BERT 比其他預訓練模型更加適合做醫療命名實體識別任務。
復現的方法在數據集CMeEE、IMCS-NER 和cMedQANER上的loss曲線圖分別如圖5~圖7所示。

圖5 CMeEE數據集上的loss曲線圖Fig.5 Loss curve graph on CMeEE dataset

圖6 IMCS-NER數據集上的loss曲線圖Fig.6 Loss curve graph on IMCS-NER dataset

圖7 cMedQANER數據集上的loss曲線圖Fig.7 Loss curve graph on cMedQANER dataset
監控訓練過程中的損失函數值,隨著訓練的進行,損失函數逐漸減小,CMeEE、IMCS-NER 和cMedQANER 數據集分別在第7 輪、第3 輪和第5 輪的loss值趨于穩定或不再減少,表示模型已收斂。
由于人工標注和訪問ChatGPT 接口成本較高,cMedQANER 數據集采用全集進行實驗,CMeEE 和IMCS-NER 各從中抽取100 條數據。由于這兩個都是中文多輪醫療問答數據集,里面包含了很多噪聲語句,例如“你好”“謝謝幫助”和“再見”等。在抽取時先對整個數據集進行分層處理,針對每一層進行隨機抽樣,根據具體數據集的情況,進行了長度篩選,去除文本長度小于6 個中文字符的樣本(日常問候語等不包含實體和明確意圖的數據),從而組成測試集。在隨機抽取的測試集上的實驗結果如表6所示。
從表6 可以看出,在F1 評價指標上,ChatGPT 在CMeEE 數據集上的表現是最好的,在IMCS-NER 和cMedQANER 兩個數據集上效果不如傳統機器學習的方法,主要有以下兩點原因:(1)IMCS-NER是一個多輪對話數據集,里面包含了大量的不存在醫療實體的數據;(2)IMCS-NER 和cMedQANER 這兩個數據集存在大量標注錯誤、標注不全和標注不完整的問題,降低了實驗的結果。因此在RQ2 中將標注錯誤的數據進行人工糾正,并且進行實驗。在Recall評價指標上,ChatGPT 在CMeEE 和cMedQANER 兩個數據集上的表現比傳統機器學習方法好,說明像ChatGPT 這樣的大語言模型比RoBERTa 和BERT 預訓練模型具有更強的泛化能力,大語言模型能夠更加充分地挖掘文本中的語義信息,對于文本中有錯別字的情況,大語言模型可以很好地識別,因此能夠識別出更多的醫療實體,隨之帶來的是精確率的下降。另一個導致精確率降低的原因是:這兩個數據集是多輪中文醫療對話數據集,隨機抽取出來的測試集中包括一些不包含醫療實體的對話文本。綜上所述,ChatGPT 具備識別醫療命名實體的能力,在數據集標注準確的情況下,能夠比傳統機器學習方法識別出更多的醫療實體。
從表6的最后兩組實驗可以看出,采用本文的方法,在3 個評價指標上,大語言模型Llama2 比ChatGPT低2~5個百分點,因此本文提出的方法同樣適用于像Llama2 這樣的大語言模型,但是由于Llama2 的模型大小是13 billion,導致識別效果不如ChatGPT。
針對數據集標注不全、標注不完整和標注錯誤3類問題,本文根據國際疾病分類(international classification of diseases,ICD)標準,人工進行數據集的補全和糾錯,根據從原始數據集中隨機抽取的結果,共更正了416 條數據。數據集更正后的醫療實體識別效果如表7所示。

表7 數據集進行更正后的識別效果Table 7 Recognition effect after correcting dataset
在RQ1 的實驗中,針對實驗中的結果進行了分析,發現原始數據集在標注上有較多的錯誤,有的實體還未標注,或者實體屬于非連續性和嵌套實體,這些情況傳統機器學習方法并未很好地識別出來,但ChatGPT識別出來了,因此降低了實驗得分。針對數據集做了人工的更正后,再次進行實驗,由表6和表7的結果可以看出,在數據集進行更正之后,各個數據集上的實驗效果得到了明顯的提升,并且明顯高于其他機器學習方法,這表明數據集的質量對實體識別的效果有很大影響。綜上所述,ChatGPT在CMeEE、IMCS-NER 和cMedQANER 數據集上能夠識別出更多的醫療實體,在醫療實體豐富的文本上,ChatGPT比傳統機器學習方法更加適合做醫療命名實體識別任務。另外,ChatGPT 相較于其他傳統機器學習方法,在高得分的情況下,還能夠識別出非連續性實體和嵌套實體,應用在對話系統中,會得到更好的效果。
將ChatGPT 識別出來的實體應用到醫療問答系統上,采用自己構建的問答數據集,該數據集共225條,每條數據由醫療問題和問題答案組成,包含治療、相關導致和檢查等類型的問題,部分問題中包含嵌套實體和非連續性實體,問題的答案通過百度和智慧問診系統獲得,問答結果如表8所示。

表8 問答結果Table 8 QA result
從表8可以看出,將ChatGPT識別出來的實體應用到醫療問答系統里,在3個評價指標值上相較傳統機器學習方法有明顯提升,這表明ChatGPT 能夠識別出更多的并且更加適用于醫療問答系統的實體。綜上所述,ChatGPT不僅在中文醫療實體識別上有較好的效果,應用到系統中也有較好的效果。
(1)輸入形式對大語言模型實體識別有影響
在實驗過程中,首先可以發現大語言模型實體識別中輸入和輸出對識別效果影響較大。對于輸入的文本,需要給定預期輸出的格式,但大語言模型返回的輸出格式還是具有多樣性,這樣就會導致不適用于下游任務,需要進行處理,否則會有許多的實體遺漏,造成結果的不準確。比如在最開始使用ChatGPT完成實體識別任務的時候,并沒有對輸出格式進行規定,這樣得到的結果五花八門,格式也較為混亂,因此對ChatGPT 輸出的結果進行了人為的規定,例如表1中所提到的8種格式。
(2)數據集的質量對結果有影響
在針對RQ1 的實驗中,發現數據集的質量存在問題,并且影響實驗結果。主要體現在兩方面:
一方面,數據集中有些實體標注錯誤,有些實體并未標注出來。例如:“患者的神經細胞質中發現內基小體”,在原始數據集中,“內基小體”并未標注出來,這類情況在一定程度上影響整個實驗結果,因此人為對數據集進行了更新,修正了這部分錯誤。
另一方面,數據集中存在著錯別字以及語序混亂的情況。例如“氨酚黃那敏顆粒”,原始數據集給出的是“氨酚黃那敏科利”,錯別字對模型識別的時候有一定的影響,模型就只能識別出“氨酚黃那敏”,這樣該實體并沒有識別完全。
對數據集進行更新并再次進行了實驗,實驗結果證明了利用大語言模型識別出的醫療實體應用在醫療問答系統上更具優勢。
(3)大語言模型對識別非連續性實體、嵌套實體效果好
通過對ChatGPT 問答結果的分析,發現大語言模型具有識別非連續性實體、嵌套實體的能力。
對于嵌套實體,例如在“它能應對各種原發及繼發性腎臟疾病”這一醫療文本的識別中,傳統的機器學習方法只能識別出“原發及繼發性腎臟疾病”,但是大語言模型可以識別出“原發性腎臟疾病”和“繼發性腎臟疾病”兩個實體。
對于非連續性實體,例如“體溫較前已在下降了”,傳統的機器學習方法未能識別出實體,但是大語言模型可以識別出“體溫下降”這個實體。
這兩種情況在日常的醫療問診對話里經常出現,因此將大語言模型應用到醫療問答系統中更具優勢。
本文首先分析了以往醫療文本實體識別問題的局限性。為解決醫療文本實體識別存在非連續實體和嵌套實體識別的問題,提出了大語言模型的實體識別方法。該方法首先需要對醫療文本進行預處理,然后使用大語言模型,使得能夠識別其中的非連續實體和嵌套實體。其次,大語言模型實體識別的輸出沒有統一的格式,為此進行了分類和分析。提出的大語言模型實體識別方法在三個公開的數據集上有著優秀的表現,實驗結果表明了方法的有效性。
由于大語言模型的訓練數據是通用領域的數據,沒有專業領域的數據,導致大語言模型對醫學領域的問題回答不專業或不準確,未來考慮使用醫療領域的語料微調目前的大語言模型,例如Llama2、miniGPT和GPT4等,進一步優化任務表現。