李文鋒 朱 威 王曉玲 吳苑斌 紀文迪 湯步洲
(華東師范大學 上海 200062) (哈爾濱工業(yè)大學(深圳)鵬城實驗室 深圳 518055)
作為人工智能在醫(yī)學領域的重要應用,臨床決策支持系統(tǒng)(Clinical Decision Support System,CDSS)受到研究者們的廣泛關注[1]。CDSS可以輔助醫(yī)務人員更加高效地做出診療決策,幫助醫(yī)學生學習臨床診療知識,或者為患者提供醫(yī)療建議[2]。作為CDSS的核心,診療決策規(guī)則指將給定的條件與醫(yī)療決策聯(lián)系起來的,能夠幫助醫(yī)生、患者和其他利益相關者對特定的臨床問題做出適當?shù)墓芾?、選擇和決定的規(guī)則[3]。這種規(guī)則可以從臨床診療指南與醫(yī)學教科書中的文本中獲取,通常被建模為診療決策樹,見圖1。然而,現(xiàn)有診療決策樹構建依賴于醫(yī)學專家手工標注[4],這種方法不但耗時費力,而且不能及時納入最新研究成果。因此,探索如何從龐大且快速增長的臨床診療文本中精確提取診療決策樹的信息抽取技術,是構建、維護和發(fā)展大規(guī)模CDSS,實現(xiàn)臨床診療智能化的基礎支撐。
圖1 癲癇全面強直陣攣發(fā)作患者選藥的文本與其蘊含的診療決策樹
本文提出一個全新的信息抽取任務,從臨床診療文本中抽取診療決策樹(Extracting Medical Decision Trees from Medical Texts,Text2DT)來探索面向臨床診療文本的決策規(guī)則自動化抽取,其中臨床診療文本是指來自臨床診療指南或醫(yī)學教科書中蘊含診療決策規(guī)則的文本,診療決策樹則建模了文本中的診療決策規(guī)則。本文的主要貢獻如下:一是現(xiàn)有的診療決策樹缺乏統(tǒng)一的形式結構,導致對診療決策規(guī)則的理解可能產(chǎn)生歧義,因此對診療決策樹進行了規(guī)范化和結構化。二是目前學界缺乏針對診療決策樹抽取任務的基準數(shù)據(jù)集,在醫(yī)學專家的幫助下構建了學界第1個從臨床診療文本到診療決策樹的數(shù)據(jù)集。三是設計診療決策樹抽取方法,并與主流方法進行對比,為未來高效精確的診療決策樹抽取算法開發(fā)奠定基礎。
Text2DT任務關注于從蘊含診療決策規(guī)則的臨床診療文本中抽取出診療決策樹,見圖2。對于給定的含有n_text個字的臨床診療文本序列X=[x1,x2,……,xn_text],Text2DT的任務目標是生成決策樹中節(jié)點的前序序列T=[N1,N2,……,Nn_node]。
圖2 從臨床診療文本中抽取診療決策樹
2.2.1 條件/決策節(jié)點 使用三元組與邏輯關系符號對診療決策樹進行規(guī)范化和結構化,并使用二叉樹結構來建模診療決策流程。診療決策樹中節(jié)點可以被表示為N={C/D,L(t1,……,tn_tri)}。其中C/D表示該節(jié)點是一個條件/決策節(jié)點;t=(sub,rel,obj)是一個描述診療知識或臨床信息的三元組,是診療決策關鍵信息的結構化表示;L表示多個三元組之間的邏輯關系(and,or,null,當三元組的個數(shù)小于等于1時邏輯關系為null);L(t1,……,tn_tri)表示條件判斷或診療決策的內(nèi)容。例如,{C,or((患者,臨床特征,肌陣孿發(fā)作),(患者,臨床特征,青少年肌陣孿癲癇))}表示做出條件判斷:患者的臨床特征是否為肌陣孿發(fā)作或青少年肌陣孿癲癇。
2.2.2 樹結構 診療決策樹表示簡化的決策過程,即根據(jù)條件判斷的不同結果做出下一個條件判斷或決策。一旦做出決策,診療過程終止。因此,本文將診療決策樹定義為由條件節(jié)點和決策節(jié)點組成的二叉樹,二叉樹中的非葉子節(jié)點為條件節(jié)點,葉子節(jié)點為決策節(jié)點。對于條件節(jié)點,當條件判斷結果為“是”(“否”)時,則通過左(右)分支進入左(右)子節(jié)點進行下一個條件判斷或決策。注意每個條件節(jié)點都有左、右子節(jié)點。如果條件判斷的結果為“是”(“否”)后需要進行的后續(xù)操作未在文本中體現(xiàn),則添加一個三元組為空的決策節(jié)點,表示下一步的行為未知。經(jīng)以上操作后,一棵診療決策樹可以用它的節(jié)點的前序序列唯一表示。前文圖2中的診療決策樹建模了如下診療決策規(guī)則,判斷條件為“全身強直性發(fā)作患者的臨床特征是否是丙戊酸適用”:如果條件判斷的結果為“是”,患者丙戊酸適用,則進入左側(cè)分支并做出相應的診療決策,使用丙戊酸作為患者的治療藥物;如果條件判斷的結果為“否”,即患者丙戊酸不適用,則進入右側(cè)分支,進行下一個條件判斷,并根據(jù)條件判斷的結果進入不同分支。
Text2DT數(shù)據(jù)集的數(shù)據(jù)源為臨床診療指南和醫(yī)學教科書,是醫(yī)務工作者做出臨床診療決策的主要支撐。本文收集了2011—2021年由權威醫(yī)療機構出版的關于30個臨床科室的100多部臨床指南和由人民衛(wèi)生出版社出版的本科臨床醫(yī)學教材來構建Text2DT數(shù)據(jù)集。
本文使用醫(yī)學專家編寫的模版與規(guī)則來定位數(shù)據(jù)源中蘊含診療決策規(guī)則的文本片段,并對定位到的文本片段進行人工標注。數(shù)據(jù)集的注釋過程包括6名注釋者和2名醫(yī)學專家。本文采取了多輪標注的方法。一人標注完成后,另一人進行二次標注,兩次標注不一致的地方交由醫(yī)學專家進行討論,形成最終的三標版本。對于無法在醫(yī)學專家的討論中達成一致或有歧義的語料將被丟棄。在此過程中,根據(jù)標注人員的反饋,本研究也在不斷優(yōu)化、更新標注規(guī)范,使其更加貼合語料自身特點。本文計算了三元組標注和決策樹標注兩個方面的科恩一致性系數(shù)(Cohen’s Kappa系數(shù)),以衡量兩名注釋者標注的一致性。其中,三元組標注的計算結果為0.83,表明三元組標注的一致性較高;診療決策樹標注的計算結果為0.37,表明診療決策樹的標注具有一定一致性。
Text2DT數(shù)據(jù)集共包含500例文本-決策樹對。診療決策樹的深度為2~4層,其中2層樹有134棵,3層樹有302棵,4層樹有64棵。Text2DT數(shù)據(jù)集共包含1 896個有實義的節(jié)點,其中有934個條件節(jié)點,962個決策節(jié)點,476個邏輯關系為or的節(jié)點,367個邏輯關系為and的節(jié)點,1 053個邏輯關系為null的節(jié)點。Text2DT數(shù)據(jù)集中三元組關系的統(tǒng)計情況,見表1。Text2DT數(shù)據(jù)集中的三元組共有6種關系,其中關系“禁用藥物”的三元組數(shù)僅占總?cè)M數(shù)量的2.57%,因此數(shù)據(jù)集存在長尾分布問題。
表1 Text2DT數(shù)據(jù)集三元組關系統(tǒng)計情況
三元組是診療決策樹的主要組成部分,模型的第1部分首先進行三元組抽取,見圖3。三元組抽取算法將輸入的臨床診療文本中蘊含的代表條件或決策的三元組提取出來,見公式(1)。
(1)
其中,ti=(subi,reli,obji)表示抽取的第i個三元組;TEModel是基于級聯(lián)二值標注算法(CasRel)[5]、基于令牌對鏈接算法(TPLinker)[6]和實體關系聯(lián)合抽取(UniRE)[7]等先進的三元組抽取方法。
圖3 模型整體架構
(2)
在獲得概率張量P∈R|ntri|×|ntri|×|Y|后,模型的最后一步是將概率張量解碼為診療決策樹。本文的解碼算法分為3步:節(jié)點解碼、邏輯關系預測和樹結構解碼,見圖4。
圖4 診療決策樹解碼算法
4.3.1 節(jié)點解碼 節(jié)點解碼的關鍵在于處于同一節(jié)點的三元組,與其他任意三元組在診療決策樹中的關系都是相同的,因此在概率張量P中對應的行或列應該是相似的,反之則亦然。計算張量P中兩列(兩行)的余弦相似度,相似度大于閾值的兩行(兩列)對應的三元組屬于同一節(jié)點。根據(jù)實驗結果取余弦相似度閾值為0.7。
4.3.2 邏輯關系預測 如果多個三元組屬于同一節(jié)點,需要預測多個三元組之間的邏輯關系。將屬于同一節(jié)點的三元組拼接在臨床診療文本后,通過預訓練語言模型和線性層來預測邏輯關系。
4.3.3 樹結構解碼 本文將三元組對的概率張量P轉(zhuǎn)換為節(jié)點對的概率張量Pnode。類似于P,Pnode中的第j列第i行的單元格的標簽表示其對應的節(jié)點Ni和Nj在診療決策樹中的關系。Pnode的計算方式,見公式(3)。
(3)
其中,Pnode∈R|nnode| ×|nnode| ×|Y|,n-trii和n-trij表示節(jié)點Ni和Nj中三元組的數(shù)量。|tri|表示三元組tri在P中對應的索引。在得到Pnode后,為每個單元格分配概率最高的標簽。
解碼的最后階段是將Pnode轉(zhuǎn)化為診療決策樹。如果能找到診療決策樹的根節(jié)點,非葉子節(jié)點的左右子節(jié)點,以及葉子節(jié)點,則可以很容易地完成決策樹的解碼。首先尋找根節(jié)點:根節(jié)點不作為任何一個節(jié)點的子節(jié)點,只需計算Pnode中每一列的標簽只為P或N的概率,選擇概率最大的一列對應的節(jié)點作為根節(jié)點。接著尋找非葉子節(jié)點的左右子節(jié)點:Pnode中與非葉子節(jié)點的關系為L(R)的節(jié)點即為左(右)子節(jié)點。最后尋找葉子節(jié)點:Pnode中沒有標簽P的一列所對應節(jié)點即為葉子節(jié)點。
節(jié)點是診療決策樹的重要組成部分,本文將節(jié)點抽取的F1分數(shù)作為一項評價指標。當抽取的節(jié)點與標注節(jié)點完全一致時認為這個節(jié)點是正確的。診療決策樹抽取的準確率作為本文最嚴格的評估指標。當抽取的診療決策樹與標注完全一致時認為這棵診療決策樹是正確的。本文從不同的角度提出以下兩項評估指標。一是決策路徑的F1得分:將樹從根節(jié)點到葉子節(jié)點的路徑稱為決策路徑。一棵診療決策樹包含多個決策路徑。完整的決策路徑對臨床診療決策是有意義的,因此本文使用決策路徑的F1得分作為一項評價指標。二是診療決策樹的編輯距離:與字符串的編輯距離類似,診療決策樹中的編輯距離是指從一棵樹轉(zhuǎn)換到另一棵樹所需的最小樹編輯操作數(shù)。
本文的代碼是用Pytorch實現(xiàn)的。線性層的維度設置為150,并使用GELU作為激活函數(shù)。模型優(yōu)化使用Adam優(yōu)化器,學習率設置為1e-5。對于超參數(shù)設置,dropout值設置為0.5,訓練批次大小為8。在訓練過程中,需要100個輪次來訓練模型。Text2DT數(shù)據(jù)集被隨機分為訓練集(60%,300對)、驗證集(20%,100對)和測試集(20%,100對)。
診療決策樹的抽取分為三元組的抽取和樹結構的生成,本實驗主要使用UniRE作為三元組抽取算法,著重比較樹結構的生成方法。比較方法使用序列解碼(Seq2Seq)[9]或樹形解碼器(Seq2Tree)[10]在每個時間步驟生成節(jié)點表示,并使用多層感知機來匹配節(jié)點和三元組。將PCL-MedBERT[11]、BERT-wwm-ext[12]和RoBERTa_wwm_ext[13]作為預訓練語言模型。
對于三元組的抽取,UniRE算法在使用不同預訓練語言模型作為編碼器時的F1得分如下。PCL-MedBERT:0.917 6,BERT-wwm-ext:0.936 0,RoBERTa_wwm_ext:0.938 2。PCL-MedBERT雖然在預訓練階段引入醫(yī)學知識,但由于引入的醫(yī)學語料有限,其性能表現(xiàn)不及使用更大規(guī)模的預訓練語料BERT-wwm-ext與RoBERTa_wwm_ext。由于使用了動態(tài)遮蔽策略以及對預訓練任務進行了優(yōu)化,RoBERTa_wwm_ext的性能表現(xiàn)略優(yōu)于BERT-wwm-ext。因此,本文使用UniRE算法在預訓練模型RoBERTa_wwm_ext下的結果作為下一步診療決策樹生成的基礎。
診療決策樹抽取的實驗結果,見表4。本文提出的方法在所有指標上明顯優(yōu)于傳統(tǒng)方法,甚至于本文提出的方法使用表現(xiàn)較差的PCL-MedBERT獲得的結果都遠優(yōu)于Seq2Seq與Seq2Tree使用表現(xiàn)較好的RoBERTa_wwm_ext獲得的結果。Seq2Seq與Seq2Tree在每一時間步生成一個節(jié)點,當前節(jié)點的生成依賴于上一個時間步生成的節(jié)點,因此會由于訓練和測試階段的差異產(chǎn)生暴露偏差。而本文提出的方法在進行三元組在診療決策樹中關系的預測時使用的是一個一階段的模型,保證訓練與測試一致性,避免暴露偏差的產(chǎn)生。對于預訓練語言模型,RoBERTa_wwm_ext在總體上取得最佳的性能表現(xiàn),BERT-wwm-ext與RoBERTa_wwm_ext相近,PCL-MedBERT表現(xiàn)最差。雖然PCL-MedBERT使用了醫(yī)學文本作為預訓練數(shù)據(jù),但BERT-wwm-ext與RoBERTa_wwm_ext采用了更多的預訓練數(shù)據(jù)以及更有效的預訓練策略,因此取得遠優(yōu)于PCL-MedBERT的性能表現(xiàn)。
表4 主要實驗結果
本文抽取診療決策樹方法的錯誤及其分布為:三元組抽取錯誤(45.5%)、節(jié)點解碼錯誤(20.3%)、診療決策樹結構錯誤(18.4%)、三元組間的邏輯關系錯誤(15.8%),其中,三元組抽取錯誤所占比例最大。本文提出的抽取方法是一個多階段方法,作為診療決策樹抽取的第1步,三元組抽取錯誤會導致錯誤級聯(lián),影響后續(xù)節(jié)點和診療決策樹的生成,以及邏輯關系的判斷。雖然現(xiàn)有的三元組抽取方法已經(jīng)在Text2DT數(shù)據(jù)集上取得很好的效果,但錯誤級聯(lián)導致三元組抽取錯誤占據(jù)較大比例。通過對邏輯關系預測錯誤的數(shù)據(jù)進行分析,本文發(fā)現(xiàn)部分三元組之間的邏輯關系判斷需要借助外部知識,例如,如果兩個三元組代表的決策是互斥的(互斥判斷無法從文本中獲得,需要借助醫(yī)學知識和經(jīng)驗),則這兩個三元組之間邏輯關系應為or而非and。因此引入醫(yī)學背景知識能夠幫助模型進行三元組間邏輯關系判斷。
本文是對從臨床診療文本中自動抽取診療決策樹的首次探索,難免存在一些局限性。首先,節(jié)點的邏輯表達能力是有局限的。節(jié)點中三元組之間的邏輯關系僅有“和”,而在更復雜的場景中,三元組之間的邏輯關系會存在“和”的多種組合。其次,臨床診療文本的長度是有限制的。本文關注于從一段文本中抽取診療決策樹。事實上,完整的診療決策規(guī)則需要基于多個段落甚至章節(jié)進行抽取。這些局限將在未來的工作中得到完善。
本文提出了一個全新的自然語言處理任務Text2DT,其目的是從臨床診療文本中自動提取診療決策樹。在醫(yī)學專家的參與下,構建自然語言處理社區(qū)的第1個臨床診療文本-診療決策樹對的數(shù)據(jù)集。提出一個樹結構生成方法,即預測三元組在決策樹中的關系并利用解碼算法獲得最終的決策樹。實驗表明,本文提出的方法與同類方法相比有明顯改進,為未來診療決策樹的自動抽取與大型臨床決策支持系統(tǒng)自動化構建奠定了基礎。