吳 丹,周作建
(南京中醫藥大學人工智能與信息技術學院,江蘇南京 210023)
隨著社會經濟不斷發展,人們生活方式發生了巨大變化。由于運動量不足、飲食不健康、吸煙等因素導致我國患有冠心病、高血壓、高血脂等心血管疾病的人群數量在不斷增加,且心血管疾病的發病率和死亡率也在不斷升高[1]。據調查發現,2018 年城鄉居民心血管疾病的患病人數仍在不斷增長[2-3]。由于我國醫療資分布不均,一直存在“看病難,掛號難”的問題[4]。隨著互聯網醫療發展,通過網絡問診的人數越來越多,市面上也出現了如好大夫[5]、尋醫問藥網等在線就醫平臺,但醫生線上診療效率不高,導致患者等待時間較長。為了提高醫療資源利用率,本文提出建立基于知識圖譜的心血管疾病自動問答系統,該系統可實時、智能解答心血管疾病患者的相關問題,在一定程度上節約了醫療資源。
知識圖譜[6]最先由Google 于2012 年正式提出,在語義搜索[7]、智能問答[8]、個性化推薦[9]等領域都具有重要的研究價值。它是一種由多個節點和邊構成的數據結構,主要用于優化搜索結果。本質上是一種用于描述物理世界中的概念及其之間關系的語義網絡,通過將數據粒度從document 級降到data 級別,以聚合大量的知識信息,從而實現知識的快速響應和推理。目前,知識圖譜已被廣泛應用于工業領域。例如:Google 搜索、百度搜索、領英經濟圖譜、天眼查企業圖譜[10]、金融風控圖譜[11]等。
隨著互聯網+智慧醫療的發展,知識圖譜在醫學上的應用也愈發廣泛。由于醫療數據的多樣性與多量性,使用知識圖譜管理醫療數據成為了一種便捷、高效的管理模式。目前,醫學知識圖譜主要應用于智能導診、臨床輔助診療、輔助健康管理及醫療知識問答4 個方面。劉道文等[12]將知識圖譜與智能導診算法相結合,提升了科室推薦精度。劉勘等[13]將知識圖譜與深度神經網絡、知識表示學習等方法相結合,構建了并發癥輔助診斷模型,以診斷并發癥的相關問題。嚴越等[14]在構建的腦卒中防治知識圖譜的基礎上,提出腦卒中風險預測模型,有助于加強對高危慢性病人群的健康管理。李賀等[15]將AC 多模式匹配算法引入疾病知識圖譜中,提升了疾病自動問答系統的準確率。然而,現有知識圖譜的研究主要集中在全科診療,對特定種類疾病的研究較少。為此,本文構建了心血管病知識圖譜,并基于該圖譜開發了一套自動問答系統。
模式層作為構建知識圖譜的骨架部分,對知識圖譜的數據模式起著決定性作用[16]。本文通過爬取39 健康網的數據構建模式層,采用自頂向下的方法構建心血管疾病知識圖譜。模式層設計如圖1 所示,其中包含心血管疾病的癥狀、并發癥、掛號科室、檢查項目和治療藥物共5 類實體,各實體之間的關系如表1 所示,實體屬性如表2 所示。

Fig.1 Schema layer design圖1 模式層設計

Table 1 Entity relationship表1 實體關系
本文數據來源于39 健康網,其涵蓋了大量醫學疾病信息,支持疾病自測、在線問醫、藥物推薦及醫生查詢等功能。該平臺收集了各類醫學疾病的基本信息,包括疾病別名、發病部位、典型癥狀、相關并發癥、掛號科室、治療方法(藥物、手術)等。由圖2 可見,先通過爬蟲技術爬取心血管疾病的相關數據,然后對爬取的數據進行清洗及預處理,最終獲取392 個心血管疾病數據進行試驗。

Table 2 Entity property表2 實體屬性

Fig.2 Crawler technology flow圖2 爬蟲技術流程
由于網頁數據不規范,因此需要對爬取的數據進行知識融合。心血管病知識圖譜的知識融合主要包括實體對齊與屬性對齊。
2.3.1 實體對齊
為了消除多源異構數據導致的沖突、歧義等問題,需要對不同表達方式的同一實體進行統一規范。例如:“高血脂”和“高脂血癥”是同一種疾病的不同表達方式,可統一表達為較為常見的“高血脂”。常見實體對齊方法主要通過相似度匹配方式實現,實體間相似度計算的函數定義為:

其中,simc(A,B)表示基于實體對間的屬性相似函數,α為可調節參數,實體結構相似函數采用Jaccard 系數計算方法,具體計算方式如式(2)所示。

其中,|A?B|表示實體A與實體B的交集,|A?B|表示實體A與實體B的并集,屬性相似函數采用余弦相似度計算方式,如式(3)所示。

2.3.2 屬性對齊
由于同一屬性的屬性值可能存在多種表達方式,例如一對多或多對一??蓪傩灾抵g相隔一個空格鍵以解決一對多問題,而對于后者,則需要通過人工標注具有相同語義的屬性值進行解決。具體標注樣例如表3 所示。

Table 3 Annotation example表3 標注樣例
知識存儲通常為RDF 和圖數據庫兩種方式,圖數據庫屬于NoSQL 數據庫之一,目前最常用的圖數據庫為Neo4j。Neo4j 是一種基于Java的開源圖數據庫,可將數據存儲于靈活的網絡結構中,具備完整的ACID 特性,且具有高性能、高可靠性、高可擴展性等優勢[17]。由圖3 可見,Neo4j的基本組成單元為節點、邊和屬性。

Fig.3 Neo4j graph database model圖3 Neo4j 圖數據庫模型
心血管病知識圖譜使用Neo4j 數據庫中Cypher 語言的LOAD CSV 語句導入處理好的數據,實現知識圖譜的存儲及可視化。圖4 展示了部分心血管病知識圖譜。

Fig.4 Part of the knowledge graph of cardiovascular diseases圖4 部分心血管病知識圖譜
由圖5 可見,系統包括以下6 個流程:輸入問題、分詞處理、實體識別、問題模板匹配、基于Neo4j的圖數據庫查詢及輸出答案。
3.2.1 問題輸入
用戶逐條輸入心血管疾病的相關問題。例如:“治療高血壓吃什么藥?”“治療高血壓要去哪個科室?”“高血壓有哪些并發癥?”等。

Fig.5 System design process圖5 系統設計流程
3.2.2 問題預處理
由于中文的詞和詞組邊界較模糊,如何讓計算機精確識別一直是目前的研究難點。為此,本文使用Python 提供的第三方依賴包jieba 分詞對完整的語句進行分詞處理,將一句話分解為一個個符合邏輯的詞語。
3.2.3 醫學實體識別
常用的實體識別方法為卷積神經網絡、支持向量機、條件隨機場、遞歸神經網絡等。由于醫學領域的實體相對較多且復雜,大部分疾病目前仍未有統一的規范標準,極易發生誤識別。傳統方法多采用BiLSTM+CRF[18]模型進行醫學實體識別,本文在此基礎上進行改進提出了BERT+BiLSTM+CRF 模型。該模型包括:BERT 嵌入層、BiLSTM 特征提取層和CRF 序列標注層,具體做法是將問題中的字用BERT 模型轉換成字向量,然后將字向量輸入到BiLSTM 層進行訓練,最后引入CRF 層修正結果,輸出全局最優序列。將兩種模型進行對比評估,以準確率、召回率和F1值作為評價指標,結果如表4 所示。

Table 4 Comparison of the results of two models表4 兩種模型結果對比
由表4 可見,相比BiLSTM+CRF 模型,BERT+BiLSTM+CRF 模型在準確率和F1值上都提升了0.07,證明BERT+BiLSTM+CRF 模型可有效提升醫學實體識別的性能。
3.2.4 問題模板匹配
常用的問題理解方法一般為模版匹配[19]、檢索模型及基于深度學習方法。然而,基于檢索模型需要從海量問答文本中檢索類似問題,基于深度學習的方法需要人工標注大量語料庫。鑒于此,本文選用模板匹配方法,將系統收集的問題與設計好的問題模板進行相似度匹配計算,得到的最高相似度即為問題模板。不同實體的問題模板如表5所示。

Table 5 Question templates of different entities表5 不同實體的問題模板
3.2.5 基于Neo4j 圖數據庫的查詢
本文使用Cypher 語句對Neo4j 圖數據庫進行查詢,查詢語句為:Match(a)-[:關系]-(b)where b.name=”實體”return a.name.。例如:查詢“治療高血壓吃什么藥”,對應的Cypher 語句為:Match(a)-[:HAS_DRUG]-(b)where b.name=”高血壓”return a.name.;查詢“糖尿病有什么癥狀?”,對應的Cypher 語句為:Match(a)-[:HAS_SYMPTOM]-(b)where b.name=”糖尿病”return a.name。根據查詢結果,系統會自動生成答案返回用戶。例如:“治療高血壓可以用利尿藥、β 受體阻滯劑、鈣通道阻滯劑等”“糖尿病的癥狀有多尿、多食、疲乏無力等”。
3.3.1 性能指標
本文選用精確率(P)、召回率(R)及F1值作為性能指標,具體公式如式(4)。

其中,R1表示問答系統返回答案的全部數量,P1表示問答系統中返回正確答案的數量,T表示實際問題正確答案的數量。
實驗通過人工手動選取150 個與心血管疾病相關問題作為該問答系統的測試數據并將問題輸入心血管疾病問答系統,以統計P1和R1的值。
3.3.2 實驗分析
由表4 可見,問答系統的精確率為0.95,召回率為0.93,F1值為0.94。說明本文構建的心血管疾病知識圖譜問答系統可為用戶提供有效的問答服務。通過深入分析發現,無論是與表5的問題模板表達方式相同的問題,還是與問題模板的實體和語義相同但表達方式不同的問題都能給出正確答案,說明該系統在問句理解與語義搜索方面效果較好。分析回答錯誤的問題發現,系統可正常識別問題中的實體,但無法識別在表5 問題模板中未出現的語義信息。如“高血壓會傳染嗎?”“糖尿病會遺傳嗎?”等,從而導致識別錯誤。
本文通過爬取39 健康網的數據信息,采用自頂向下的方法構建心血管疾病知識圖譜,并開發了基于心血管疾病知識圖譜的問答系統。該問答系統支持自動應答疾病—藥物、疾病—癥狀等相關問題,實現了心血管病患者的初步自診自查。通過實驗證明,該系統的精確率和召回率分別為0.95 和0.93,F1值為0.94。但本文構建的心血管疾病知識圖譜數據源較為單一,知識圖譜信息不夠完整;問答系統設計簡單,僅支持基本的心血管疾病。下一步將擴充實驗數據集,并尋找更好的方法提升系統精度。