王忠民王永慶郭建軍劉 云
隨著科學的進步與時代的發展,知識的爆炸式增長對醫師工作提出了嚴峻挑戰。藥物的多樣性和患者不同的病理特點使藥物治療復雜化,多種因素都會對用藥種類和劑量產生影響,單靠醫師的個人判斷力往往不夠。傳統合理用藥系統中藥學知識庫主要依靠專業人員手工構建,人力成本較高,但知識庫準確度不高,無法滿足院內電子處方審核的要求[1-3]。
藥品說明書是藥品說明的重要來源之一,也是醫師、藥師、護士對患者治療用藥時的科學依據。由于藥品說明書是由沒有計算機背景知識領域內專家制定編寫的,其文本都是無結構的自然語言形式的自有文本,因此增加了機器理解的難度。藥品說明書中的醫療實體識別和關系抽取是一個復雜的問題,尤其是藥物的用法、用量、適應癥和相互作用[4-5]。知識圖譜由于包含了豐富的語義信息,故可以將海量知識以更直觀的方式展示在用戶面前。目前已有一些學者對基于國內外藥品說明書所有藥物實體關系(包含給藥途徑、重復用藥、藥物相互作用、適應癥、不良反應、禁忌癥、老年用藥、兒童用藥、妊娠用藥等)構建的“藥物-診斷-臨床”診療數據形成的知識圖譜進行了研究[6-7]。如上海曙光醫院構建的中醫藥知識圖譜[8]、本體醫療知識庫 SNOMED-CT[9],IBM Watson Health等應用近2年也開始進入人們視線。現有技術中雖然已有藥品知識圖譜的構建方法,但大量知識圖譜都是依靠人工或正則表達式規則提取結構化數據構建。人工方法提取的結構化知識雖然比較精確,但是人力消耗大、花費時間較多,并且人工長時間操作因容易引起疲勞而造成誤差;基于正則表達式規則的方法依靠機器,雖然比較節省時間,但是正則方法只適合簡單的規則,針對中文的復雜情況,正則表達式的誤差會比較高。
目前醫學實體的抽取方法主要有基于醫學詞典及規則的方法[10]、基于醫學數據源的統計學[11]和機器學習方法與深度學習方法3類[12-13]。機器學習方法以及深度學習方法通過使用統計學和機器學習方法,結合醫學數據源的特點訓練模型,進行實體識別。目前傳統機器學習方法有隱馬爾可夫模型(Hidden Markov Model,HMM)、條件隨機場模型(Conditional Random Field,CRF)、支持向量機模型(Support Vector Machine,SVM)等,深度學習方法有BiLSTM、BiLSTM-CRF、BERT等[14-15]。在醫學領域,命名實體識別的痛點在于數據質量的良莠不齊以及人工標注的專業性要求高。目前有關于如何降低對數據標注依賴的研究,其原理主要是利用海量未標注數據持續提升模型性能,從小樣本中進行學習,自我探索逐步學習新知識,形成一個交互學習過程,但效果都不理想。
綜上所述,藥品說明書中的醫療實體和關系抽取是一個復雜的問題,尤其是藥品的用法、用量、適應癥和相互作用。隨著人工智能技術的發展,知識圖譜、醫學命名實體識別、圖像識別等方法已成為人工智能醫學領域應用的基礎技術。藥品說明書由于其格式不一、種類繁多,如何采用智能化手段結構化藥品說明書,自動抽取說明書中的藥學實體和關系構建合理的用藥知識圖譜,并基于知識圖譜提供臨床用藥決策支持成為了關鍵問題[16]。
本文構建藥品知識庫的數據來源于我國國家食品藥品監督管理總局、美國食品藥品監督管理總局(Food and Drug Administration,FDA)及江蘇省人民醫院(以下簡稱“我院”)的院內藥品庫。借助python語言,開發爬蟲程序,進行藥品說明書的抓取,解析之后存儲到本地數據庫中。從國家食品藥品監督管理總局獲取了21 000條藥品數據,從美國食品藥品監督管理總局獲取了18 645條藥品數據,從我院院內藥品庫獲取了1 827條數據。
基于機器學習算法,由藥學專家總結歸納出完整的藥品實體和關系,構建基于藥品說明書的合理用藥知識圖譜,提高合理用藥知識圖譜構建自動化程度和精度,保障患者用藥安全。
具體流程見圖1。

圖1 基于深度學習構建藥品知識庫的流程
利用互聯網搜尋可靠、權威的醫療數據來源,按照疾病所屬用藥利用多線程技術分段爬取全部數據,保證涵蓋全部藥品大類內容,并在數據爬取過程中分析包括藥物間相互作用、適應癥、禁忌癥、用法、用量等數據結構。
按照藥理學分類對爬取的說明書進行分類整理,并隨機抽取包含抗高血壓類、抗生素類、抗腫瘤類等500份藥品說明書用于人工標注。
通過已標注的數據,訓練機器學習模型,使用已訓練好的機器學習模型預測未標注的藥品說明書。本文使用基于BERT的深度學習算法進行命名實體識別,BERT本質上是一個兩段式的NLP模型。第一個階段叫做“Pre-training”,跟WordEmbedding類似,利用現有無標記的語料訓練一個語言模型;第二個階段叫做“Fine-tuning”,利用預訓練好的語言模型完成具體的NLP下游任務。Google已經投入了大規模的語料和昂貴的機器幫我們完成了Pre-training過程,因此在藥品說明書命名實體識別任務中,我們只需要少量已標注的藥品說明書數據就可以完成Fine-tuning。
使用 Neo4j 圖形數據庫存儲一部分結構化的數據,便于進行算法設計,搭配分詞、檢索、排除、統計等算法提升用藥正確率,最終形成可以推理的知識圖譜合理用藥數據庫。
知識圖譜構建的核心是抽取實體和實體之間的關系。
本文基于開源標注工具brat進行人工標注,詳見圖2。其中,標注實體包括但不限于“不良反應-疾病”“貯藏-溫度-光照-濕度”“用法用量-起始劑量-低值”“相互作用-其他”“注意事項-檢驗相關”“藥物禁忌-人群”“不良反應-癥狀”“用法用量-疾病狀態-低值”“相互作用-藥品名稱”“適應癥-疾病類別”“相互作用-結果”“藥品名稱、藥物禁忌-禁用”“相互作用-藥品類別”“用法用量-給藥頻次-低值”“規格”“給藥途徑”“注意事項-人群”“注意事項-疾病相關”“用法用量-疾病名稱”等。

圖2 brat標引工具
將標注的數據劃分為訓練集、測試集、驗證集。通過訓練集訓練模型和驗證集驗證訓練過程中的性能,訓練后通過測試集測試模型性能。以藥品名稱作為第一實體,藥品說明書中的實體作為第二實體,其與藥品名稱對應的關系作為關系,最終得到“第一實體-關系-第二實體”的三元組數據。構建的知識圖譜如圖3所示,三元組分別為“氨茶堿片-主要成分-氨茶堿”“氨茶堿注射液-主要成分-氨茶堿”“氨茶堿片-適應癥-慢性喘息性支氣管炎”。以氨茶堿為例,它既作為自身的第一實體,也可能在別的說明書中以第二實體出現。其中氨茶堿片可以治療支氣管病,同時又與其他藥品、人群或者診斷有禁忌作用,當醫生開立該處方時會提醒其用藥合理性。

圖3 生成的藥物知識圖譜示例
知識圖譜是基于圖的數據結構,通常用圖數據庫進行存儲。Neo4j圖形數據庫以其對復雜關系獨特的表達能力、關系型數據庫無法比擬的查詢速度及完整的事務性,使其廣泛應用于人工智能醫療領域。本文通過對爬取的4萬余份藥品說明書進行預測,共得到“實體-關系-實體“三元組關系30余萬條。部分三元組關系示例見圖4。
本文基于深度學習算法實現藥品說明書命名實體識別,極大地節省了人力、物力和財力,實現了藥品的結構化,構建了全說明書實體關系的合理用藥知識圖譜。
首先,基于半監督學習算法構建命名實體識別的規則。由領域專家制定標引規則是目前命名實體識別的主要手段。文中通過半監督學習算法,結合人工的手段,自動構建標引規則,對領域專家跨域研究提供了重要的技術支撐。
其次,利用小數據量訓練集命名實體識別提高識別準確率。大數據量文本標注是當前命名實體識別的主要方法。文中通過深度學習算法,在樣本量較小的情況下,提高命名實體識別的效率,對醫療領域自然語言處理具有推動作用。
第三,構建全說明書實體關系知識圖譜。全藥品說明書實體關系知識圖譜的構建,對降低臨床不合理用藥、患者不良反應等具有重大的社會價值。
本文還存在一些不足,如僅對藥品說明書進行命名實體識別。后續還應從醫學文獻、醫學詞典、醫學指南和專家共識等數據中提取知識,同時不斷提高模型預測的精度,為提高患者用藥安全提供有力的技術保障。

圖4 Neo4j三元組關系示例