吳 丹,周作建
(南京中醫(yī)藥大學(xué)人工智能與信息技術(shù)學(xué)院,江蘇南京 210023)
隨著社會經(jīng)濟(jì)不斷發(fā)展,人們生活方式發(fā)生了巨大變化。由于運(yùn)動量不足、飲食不健康、吸煙等因素導(dǎo)致我國患有冠心病、高血壓、高血脂等心血管疾病的人群數(shù)量在不斷增加,且心血管疾病的發(fā)病率和死亡率也在不斷升高[1]。據(jù)調(diào)查發(fā)現(xiàn),2018 年城鄉(xiāng)居民心血管疾病的患病人數(shù)仍在不斷增長[2-3]。由于我國醫(yī)療資分布不均,一直存在“看病難,掛號難”的問題[4]。隨著互聯(lián)網(wǎng)醫(yī)療發(fā)展,通過網(wǎng)絡(luò)問診的人數(shù)越來越多,市面上也出現(xiàn)了如好大夫[5]、尋醫(yī)問藥網(wǎng)等在線就醫(yī)平臺,但醫(yī)生線上診療效率不高,導(dǎo)致患者等待時(shí)間較長。為了提高醫(yī)療資源利用率,本文提出建立基于知識圖譜的心血管疾病自動問答系統(tǒng),該系統(tǒng)可實(shí)時(shí)、智能解答心血管疾病患者的相關(guān)問題,在一定程度上節(jié)約了醫(yī)療資源。
知識圖譜[6]最先由Google 于2012 年正式提出,在語義搜索[7]、智能問答[8]、個(gè)性化推薦[9]等領(lǐng)域都具有重要的研究價(jià)值。它是一種由多個(gè)節(jié)點(diǎn)和邊構(gòu)成的數(shù)據(jù)結(jié)構(gòu),主要用于優(yōu)化搜索結(jié)果。本質(zhì)上是一種用于描述物理世界中的概念及其之間關(guān)系的語義網(wǎng)絡(luò),通過將數(shù)據(jù)粒度從document 級降到data 級別,以聚合大量的知識信息,從而實(shí)現(xiàn)知識的快速響應(yīng)和推理。目前,知識圖譜已被廣泛應(yīng)用于工業(yè)領(lǐng)域。例如:Google 搜索、百度搜索、領(lǐng)英經(jīng)濟(jì)圖譜、天眼查企業(yè)圖譜[10]、金融風(fēng)控圖譜[11]等。
隨著互聯(lián)網(wǎng)+智慧醫(yī)療的發(fā)展,知識圖譜在醫(yī)學(xué)上的應(yīng)用也愈發(fā)廣泛。由于醫(yī)療數(shù)據(jù)的多樣性與多量性,使用知識圖譜管理醫(yī)療數(shù)據(jù)成為了一種便捷、高效的管理模式。目前,醫(yī)學(xué)知識圖譜主要應(yīng)用于智能導(dǎo)診、臨床輔助診療、輔助健康管理及醫(yī)療知識問答4 個(gè)方面。劉道文等[12]將知識圖譜與智能導(dǎo)診算法相結(jié)合,提升了科室推薦精度。劉勘等[13]將知識圖譜與深度神經(jīng)網(wǎng)絡(luò)、知識表示學(xué)習(xí)等方法相結(jié)合,構(gòu)建了并發(fā)癥輔助診斷模型,以診斷并發(fā)癥的相關(guān)問題。嚴(yán)越等[14]在構(gòu)建的腦卒中防治知識圖譜的基礎(chǔ)上,提出腦卒中風(fēng)險(xiǎn)預(yù)測模型,有助于加強(qiáng)對高危慢性病人群的健康管理。李賀等[15]將AC 多模式匹配算法引入疾病知識圖譜中,提升了疾病自動問答系統(tǒng)的準(zhǔn)確率。然而,現(xiàn)有知識圖譜的研究主要集中在全科診療,對特定種類疾病的研究較少。為此,本文構(gòu)建了心血管病知識圖譜,并基于該圖譜開發(fā)了一套自動問答系統(tǒng)。
模式層作為構(gòu)建知識圖譜的骨架部分,對知識圖譜的數(shù)據(jù)模式起著決定性作用[16]。本文通過爬取39 健康網(wǎng)的數(shù)據(jù)構(gòu)建模式層,采用自頂向下的方法構(gòu)建心血管疾病知識圖譜。模式層設(shè)計(jì)如圖1 所示,其中包含心血管疾病的癥狀、并發(fā)癥、掛號科室、檢查項(xiàng)目和治療藥物共5 類實(shí)體,各實(shí)體之間的關(guān)系如表1 所示,實(shí)體屬性如表2 所示。
Fig.1 Schema layer design圖1 模式層設(shè)計(jì)
Table 1 Entity relationship表1 實(shí)體關(guān)系
本文數(shù)據(jù)來源于39 健康網(wǎng),其涵蓋了大量醫(yī)學(xué)疾病信息,支持疾病自測、在線問醫(yī)、藥物推薦及醫(yī)生查詢等功能。該平臺收集了各類醫(yī)學(xué)疾病的基本信息,包括疾病別名、發(fā)病部位、典型癥狀、相關(guān)并發(fā)癥、掛號科室、治療方法(藥物、手術(shù))等。由圖2 可見,先通過爬蟲技術(shù)爬取心血管疾病的相關(guān)數(shù)據(jù),然后對爬取的數(shù)據(jù)進(jìn)行清洗及預(yù)處理,最終獲取392 個(gè)心血管疾病數(shù)據(jù)進(jìn)行試驗(yàn)。
Table 2 Entity property表2 實(shí)體屬性
Fig.2 Crawler technology flow圖2 爬蟲技術(shù)流程
由于網(wǎng)頁數(shù)據(jù)不規(guī)范,因此需要對爬取的數(shù)據(jù)進(jìn)行知識融合。心血管病知識圖譜的知識融合主要包括實(shí)體對齊與屬性對齊。
2.3.1 實(shí)體對齊
為了消除多源異構(gòu)數(shù)據(jù)導(dǎo)致的沖突、歧義等問題,需要對不同表達(dá)方式的同一實(shí)體進(jìn)行統(tǒng)一規(guī)范。例如:“高血脂”和“高脂血癥”是同一種疾病的不同表達(dá)方式,可統(tǒng)一表達(dá)為較為常見的“高血脂”。常見實(shí)體對齊方法主要通過相似度匹配方式實(shí)現(xiàn),實(shí)體間相似度計(jì)算的函數(shù)定義為:
其中,simc(A,B)表示基于實(shí)體對間的屬性相似函數(shù),α為可調(diào)節(jié)參數(shù),實(shí)體結(jié)構(gòu)相似函數(shù)采用Jaccard 系數(shù)計(jì)算方法,具體計(jì)算方式如式(2)所示。
其中,|A?B|表示實(shí)體A與實(shí)體B的交集,|A?B|表示實(shí)體A與實(shí)體B的并集,屬性相似函數(shù)采用余弦相似度計(jì)算方式,如式(3)所示。
2.3.2 屬性對齊
由于同一屬性的屬性值可能存在多種表達(dá)方式,例如一對多或多對一??蓪傩灾抵g相隔一個(gè)空格鍵以解決一對多問題,而對于后者,則需要通過人工標(biāo)注具有相同語義的屬性值進(jìn)行解決。具體標(biāo)注樣例如表3 所示。
Table 3 Annotation example表3 標(biāo)注樣例
知識存儲通常為RDF 和圖數(shù)據(jù)庫兩種方式,圖數(shù)據(jù)庫屬于NoSQL 數(shù)據(jù)庫之一,目前最常用的圖數(shù)據(jù)庫為Neo4j。Neo4j 是一種基于Java的開源圖數(shù)據(jù)庫,可將數(shù)據(jù)存儲于靈活的網(wǎng)絡(luò)結(jié)構(gòu)中,具備完整的ACID 特性,且具有高性能、高可靠性、高可擴(kuò)展性等優(yōu)勢[17]。由圖3 可見,Neo4j的基本組成單元為節(jié)點(diǎn)、邊和屬性。
Fig.3 Neo4j graph database model圖3 Neo4j 圖數(shù)據(jù)庫模型
心血管病知識圖譜使用Neo4j 數(shù)據(jù)庫中Cypher 語言的LOAD CSV 語句導(dǎo)入處理好的數(shù)據(jù),實(shí)現(xiàn)知識圖譜的存儲及可視化。圖4 展示了部分心血管病知識圖譜。
Fig.4 Part of the knowledge graph of cardiovascular diseases圖4 部分心血管病知識圖譜
由圖5 可見,系統(tǒng)包括以下6 個(gè)流程:輸入問題、分詞處理、實(shí)體識別、問題模板匹配、基于Neo4j的圖數(shù)據(jù)庫查詢及輸出答案。
3.2.1 問題輸入
用戶逐條輸入心血管疾病的相關(guān)問題。例如:“治療高血壓吃什么藥?”“治療高血壓要去哪個(gè)科室?”“高血壓有哪些并發(fā)癥?”等。
Fig.5 System design process圖5 系統(tǒng)設(shè)計(jì)流程
3.2.2 問題預(yù)處理
由于中文的詞和詞組邊界較模糊,如何讓計(jì)算機(jī)精確識別一直是目前的研究難點(diǎn)。為此,本文使用Python 提供的第三方依賴包jieba 分詞對完整的語句進(jìn)行分詞處理,將一句話分解為一個(gè)個(gè)符合邏輯的詞語。
3.2.3 醫(yī)學(xué)實(shí)體識別
常用的實(shí)體識別方法為卷積神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)、條件隨機(jī)場、遞歸神經(jīng)網(wǎng)絡(luò)等。由于醫(yī)學(xué)領(lǐng)域的實(shí)體相對較多且復(fù)雜,大部分疾病目前仍未有統(tǒng)一的規(guī)范標(biāo)準(zhǔn),極易發(fā)生誤識別。傳統(tǒng)方法多采用BiLSTM+CRF[18]模型進(jìn)行醫(yī)學(xué)實(shí)體識別,本文在此基礎(chǔ)上進(jìn)行改進(jìn)提出了BERT+BiLSTM+CRF 模型。該模型包括:BERT 嵌入層、BiLSTM 特征提取層和CRF 序列標(biāo)注層,具體做法是將問題中的字用BERT 模型轉(zhuǎn)換成字向量,然后將字向量輸入到BiLSTM 層進(jìn)行訓(xùn)練,最后引入CRF 層修正結(jié)果,輸出全局最優(yōu)序列。將兩種模型進(jìn)行對比評估,以準(zhǔn)確率、召回率和F1值作為評價(jià)指標(biāo),結(jié)果如表4 所示。
Table 4 Comparison of the results of two models表4 兩種模型結(jié)果對比
由表4 可見,相比BiLSTM+CRF 模型,BERT+BiLSTM+CRF 模型在準(zhǔn)確率和F1值上都提升了0.07,證明BERT+BiLSTM+CRF 模型可有效提升醫(yī)學(xué)實(shí)體識別的性能。
3.2.4 問題模板匹配
常用的問題理解方法一般為模版匹配[19]、檢索模型及基于深度學(xué)習(xí)方法。然而,基于檢索模型需要從海量問答文本中檢索類似問題,基于深度學(xué)習(xí)的方法需要人工標(biāo)注大量語料庫。鑒于此,本文選用模板匹配方法,將系統(tǒng)收集的問題與設(shè)計(jì)好的問題模板進(jìn)行相似度匹配計(jì)算,得到的最高相似度即為問題模板。不同實(shí)體的問題模板如表5所示。
Table 5 Question templates of different entities表5 不同實(shí)體的問題模板
3.2.5 基于Neo4j 圖數(shù)據(jù)庫的查詢
本文使用Cypher 語句對Neo4j 圖數(shù)據(jù)庫進(jìn)行查詢,查詢語句為:Match(a)-[:關(guān)系]-(b)where b.name=”實(shí)體”return a.name.。例如:查詢“治療高血壓吃什么藥”,對應(yīng)的Cypher 語句為:Match(a)-[:HAS_DRUG]-(b)where b.name=”高血壓”return a.name.;查詢“糖尿病有什么癥狀?”,對應(yīng)的Cypher 語句為:Match(a)-[:HAS_SYMPTOM]-(b)where b.name=”糖尿病”return a.name。根據(jù)查詢結(jié)果,系統(tǒng)會自動生成答案返回用戶。例如:“治療高血壓可以用利尿藥、β 受體阻滯劑、鈣通道阻滯劑等”“糖尿病的癥狀有多尿、多食、疲乏無力等”。
3.3.1 性能指標(biāo)
本文選用精確率(P)、召回率(R)及F1值作為性能指標(biāo),具體公式如式(4)。
其中,R1表示問答系統(tǒng)返回答案的全部數(shù)量,P1表示問答系統(tǒng)中返回正確答案的數(shù)量,T表示實(shí)際問題正確答案的數(shù)量。
實(shí)驗(yàn)通過人工手動選取150 個(gè)與心血管疾病相關(guān)問題作為該問答系統(tǒng)的測試數(shù)據(jù)并將問題輸入心血管疾病問答系統(tǒng),以統(tǒng)計(jì)P1和R1的值。
3.3.2 實(shí)驗(yàn)分析
由表4 可見,問答系統(tǒng)的精確率為0.95,召回率為0.93,F(xiàn)1值為0.94。說明本文構(gòu)建的心血管疾病知識圖譜問答系統(tǒng)可為用戶提供有效的問答服務(wù)。通過深入分析發(fā)現(xiàn),無論是與表5的問題模板表達(dá)方式相同的問題,還是與問題模板的實(shí)體和語義相同但表達(dá)方式不同的問題都能給出正確答案,說明該系統(tǒng)在問句理解與語義搜索方面效果較好。分析回答錯(cuò)誤的問題發(fā)現(xiàn),系統(tǒng)可正常識別問題中的實(shí)體,但無法識別在表5 問題模板中未出現(xiàn)的語義信息。如“高血壓會傳染嗎?”“糖尿病會遺傳嗎?”等,從而導(dǎo)致識別錯(cuò)誤。
本文通過爬取39 健康網(wǎng)的數(shù)據(jù)信息,采用自頂向下的方法構(gòu)建心血管疾病知識圖譜,并開發(fā)了基于心血管疾病知識圖譜的問答系統(tǒng)。該問答系統(tǒng)支持自動應(yīng)答疾病—藥物、疾病—癥狀等相關(guān)問題,實(shí)現(xiàn)了心血管病患者的初步自診自查。通過實(shí)驗(yàn)證明,該系統(tǒng)的精確率和召回率分別為0.95 和0.93,F(xiàn)1值為0.94。但本文構(gòu)建的心血管疾病知識圖譜數(shù)據(jù)源較為單一,知識圖譜信息不夠完整;問答系統(tǒng)設(shè)計(jì)簡單,僅支持基本的心血管疾病。下一步將擴(kuò)充實(shí)驗(yàn)數(shù)據(jù)集,并尋找更好的方法提升系統(tǒng)精度。