杜睿山,張軼楠,田 楓,王 梅,李婷玉,張 蕾,程有為,趙崇志
(1.東北石油大學 計算機與信息技術學院,黑龍江 大慶 163318;2.中國石油天然氣股份有限公司 冀東油田分公司,河北 唐山 063004)
肝病有多種,常見的肝病有病毒性肝炎、酒精性肝炎、非酒精性脂肪性肝病、原發性肝癌等,其中病毒性肝炎最常見的是乙肝。乙肝病毒傳染性極強,遍布全球,其中母乳傳播比較明顯[1]。雖然中國現在脫掉了乙肝大國的帽子,乙肝治療技術和藥物研發也在不斷改進,2019年國內乙型肝炎發病率仍達71.77/10萬人,死亡率達0.032/10萬人。脂肪肝這一疾病患者人數也在不斷攀增,因此對于健康人和肝病患者來說,及早熟悉肝病知識、匹配疾病與自身癥狀關系是非常重要的。
在肝病診斷時,通常需要醫生與患者一對一診療和儀器檢查的配合。如果在問醫之前患者就可以了解自己大概病癥,能夠快速地告知醫生自己的身體狀況,這無疑可以減少醫生的工作量。并且醫生少數情況下也會受到主觀因素的影響導致診斷不準確,很多患者也因相關肝病知識的匱乏導致就醫不及時,病情惡化。目前越來越多的在線醫療問答小程序出現,如“阿里醫生在線咨詢”、“平安好醫生”、“39健康網”等,患者可以及時在線咨詢相關疾病信息,方便快捷,但是這種問答系統需要大量醫生入駐小程序并上線才能響應患者的問題。針對以上問題,文中開發了基于知識圖譜的肝病智能問答系統,基于垂直類醫療網站,囊括肝病絕大多數數據,為病患提供肝病自助查詢服務。該問答系統及時解決患者問題,不用再等待,實現了醫療行業的智能化。
問答系統概念提出的時間并不長,但發展迅速,已經形成了一些相對完整的體系。國內復旦大學開發的原型系統(FDUQA)已經具有初步效果,同時哈爾濱工業大學(金山客服)和中國科學院計算技術研究所也正在進行這一領域的研究。國外發展比較成熟,全球第一個基于互聯網的問答系統,即START系統,使用知識倉庫+信息搜索混合模型,知識庫包括“START+KB”、“Internet+Public+Library”[2]。而華盛頓大學開發的第一個自動問答系統——MULDER系統更進一步,它沒有知識庫,而是充分獲取互聯網的數據進行分析并給出一組候選答案。每個候選答案都會被賦予一個置信度,可以被用戶當作參考的條件[3]。
國內的智能問答技術發展較晚,這是由于中文的語法和語義十分復雜,現在是以人工模板和智能檢索技術為主,典型代表有華為小E、小米小愛等。國際上目前的主要智能問答技術為計算機檢索、知識網絡、深度學習這三大技術,蘋果的Siri、微軟的Cortana和谷歌的GoogleNow均十分具有代表性。與此同時,知識圖譜的快速發展,為智能問答系統的實現提供了優質的知識來源,大大加速了問答系統在醫療領域的發展[4]。這項技術可以使專業人員更好地幫助用戶去學習、沉浸使用真實世界中各類實體概念之間的聯系。
知識圖譜(knowledge map)又稱科學知識圖譜,它在2012年由Google最先提出,并發表了基于Freebase[5]知識庫和維基百科的大規模知識圖,為世界以及領域知識的構建提供了一個可借鑒的手段[6]。知識圖譜的結構與圖是一樣的,都是由節點和邊組成的,圖中的節點對應知識圖譜中的實體,邊表示實體與實體之間的關系[7]。
知識庫則比知識圖譜容納更多的知識信息,知識庫中的知識有很多種不同的形式,例如本體知識、關聯性知識、規則庫、案例知識。知識庫問答(knowledge base question answer)任務是指利用知識庫中的一個或多個知識三元組〈Sub,Re,Obj〉來回答自然語言問題。比如提出一個自然語言問題“Where is Beijing?”可以運用
相比兩者的概念,知識圖譜更加側重于關聯性關系的構建和可視化,可借助知識推理(如規則等)快速進行知識挖掘和推理獲取新知識,發現實體或概念之間的新關聯。因此,文中基于知識圖譜進行肝病問答系統開發,這對于解決國內優質醫療資源供給不足和醫療服務需求持續增加的矛盾將產生重要的作用[8]。
智能問答系統開發中所需的語義分析技術,通過使用不同的方法,了解和學習一段文字所表示的語義內容,對語言的各種理解可以被歸類為語義分析。一段文字一般由單詞、句子和段落組成,根據語言單元理解對象,語義分析可以分為詞匯級語義分析、句子級語義分析和章級語義分析[9-11]。
語義分析是編譯過程中不可或缺的邏輯階段,它對源程序上下文的相關性進行分析檢查,保證代碼結構必須正確。語義分析階段就是檢查源程序有無語義錯誤,為代碼生成階段收集信息。
本系統主要運用句子級語義分析,主要包括淺層語義分析和深層語義分析。
2.1.1 淺層語義分析
淺層語義分析,又被稱作語義單元表示(semantic unit representation)。這一現象將深層語義分析簡單化,在文章中明示與文字研究相關的語義單元。比如施事者、受事者、時間和地點狀語等[12]。目前NLP技術和人工智能技術的成熟,可以令淺層語義分析真正在實踐中發揮作用,同時對于智能問答、智能翻譯等功能系統產生巨大幫助。
2.1.2 深層語義分析
深層語義分析,又可直接稱作語義分析(semantic parsing)。它會將問句翻譯為一種特定形式化體現出來,不再以謂詞為中心。其在中英文轉換中經常使用,由于漢語和英語的外層構造之間聯系密切,對應關系復雜,如果想要發現其中的規律是十分困難的,在進行研究和使用過程中必須發現兩類不同語言之間共有的更深一層關系,即深層語義結構。
本系統通過語義分析有監督學習。也就是說,通過現有的訓練樣本(即已經知道的數據和對應的輸出)進行訓練,獲得最好的模型(該模型屬于特定函數的集合,最優模型表示在特定的評價準則中是最好的)。然后利用該模型將所有輸出進行相應的映射,得到結果輸出,通過對該結果進行簡單的判斷來實現分類目的,同時也學習到了對未知數據進行分類的能力。描述了知識圖譜對于用戶提出的問句文本進行語義理解過程,如圖1所示。

圖1 知識圖譜文本語義理解
智能問答系統在用戶輸入問題后,將問題分為兩類,求知性問題和求證性問題。求知性提問就是在知識圖譜中為用戶獲得他們的未知知識,填充用戶問題,比如“什么是乙肝”;求證性提問則是在用戶對一個專業性問題模棱兩可時,向智能問答系統尋求幫助。進行提問之前用戶已經了解關于問題的部分信息,主要目的是通過該系統對不完整知識或模糊信息進行彌補、證明或肯定,比如“長期大量酗酒、過度暴飲暴食是脂肪肝的病因嗎”。
從問句的形式上來說,分為疑問句、反問句、設問句和是非問句、特指問句[13-14];從問題目的上分為查找數據、驗證事實、收集信息等;從性質上分為封閉型和開放型問句;按照問題復雜程度分為七大類別:語境性問題、是非問題、推理性問題、選擇問題、特指性問題、專家性問題、概括性問題。測試結果問句如表1所示。
對于專家性問題,目前分類不是很明確。因為該類問題應該既包括推理性問題,也會含有概括性問題,特指性也較強。問句進行分類之后,對各個類型布置特定的答案抽取規則,能夠更加快速地在該階段利用規則來獲得問題最終的結果。現在市面上大多智能問答系統都是已經提前將問題歸好類,但是分類方法還不是很科學,不確定因素太多,并且太繁雜,不能從根本上滿足用戶的需求。

表1 測試問句結果
因此本系統通過構建Aho-Corasick字符串匹配算法(AC算法)匹配問句中的領域詞(醫學本身就是一個封閉領域[15]),同時收集問句中提到的實體類型,確認其中是否包含該實體類型中的特定特征詞,從而判斷問句類型屬于哪一種。AC算法主要是解決多字符串匹配問題,采用多模式串建立一個樹形有限狀態機,即先以多模式串(短字符串)為基礎創建自動機[16]。以主串(長字符串)作為該自動機的輸入,也是就把長字符串在狀態機里面跑一遍,使狀態機進行各種狀態之間的轉換,當到自動機達某些特定的狀態時,用狀態表示字符是否匹配,即某些字符串是否匹配成功。
問答系統中,除了語義分析和問題分類十分重要外,不可或缺的還有問句相似度的計算。系統需要對用戶提出的問題進行解析,并進行問句相似度計算,得出每個相似問句的最終答案。
本系統采用新的問句相似度計算方法,主要包括詞形相似度、問句長度相似度、詞序相似度和距離相似度等[17]。詞形相似度計算方法主要是計算兩個問句等詞的數量,利用公式計算,兩個相同的疑問句中同一詞的數量越多,兩個疑問句就越相似。在分析問句的語義時,僅僅關注其中的詞語是遠不夠的,還需要考慮詞語間的結構[18]。因此,在詞性相似度計算方法的基礎上,引入了句法特征,從全新的角度考慮對應句法成分間的詞語相似度,進而衡量句子間的相似度。詞性相似度計算如公式(1)所示:
(1)
其中,q1和q2分別表示兩個問句,Len()表示問句的長度,SameWc()表示兩個問句中相同詞的個數。
若問句的長度相似,足以反映兩個問句形態之間的相似性,兩個問句的長度相似的話,兩個疑問句相似可能性很高。問句長度相似度計算如公式(2):
(2)
其中,q1和q2分別表示兩個問句,Len()表示問句的長度。
關鍵詞匯的順序也可以反映出兩個問句的相似度,因為兩個問句中如果相似或者相同意思的詞匯在同一位置上,足可以證明問句較為相似。在一個詞匯或者短語整體被大幅移動時,使用詞序相似度判斷可以快速準確地斷定是否與原來問句相似。
編輯距離是計算將一個句子換成另一個句子時所需的最少操作數,其中句子以文字為最小單元。編輯工作是指插入、刪除、替換,但是以字為單位的編輯操作代價太大,便用詞匯代替一個字的單詞,詞匯作為最基本的編輯單元參與計算,對于不同的編輯操作賦予不同的權重以代表相應的重要程度。
本系統是基于知識圖譜的智能問答,使用Python編程語言基于Github開源智能問答系統代碼進行開發。需要實現計算機與用戶快速對話的功能,可以在醫療領域肝臟疾病方面為用戶解惑,通過后臺數據庫智能分析給出準確答案,減輕醫生負擔。系統整體操作簡單,適合不同年齡的用戶使用。問答系統的開發分為問句分類、問句解析、查詢結果三個功能模塊。系統框架如圖2所示。

圖2 系統框架
問句分類實現步驟如下:定義問題分類,在類中定義關鍵詞、詞典、領域樹、問句疑問詞等成員變量。特征詞除了七類實體關鍵詞以外,還包括了由這些實體詞構成的領域詞匯、否定詞匯。問句疑問詞包括用戶較常用的疾病屬性詞匯,構建領域樹和詞典均為調用函數實現,構建領域樹函數是通過Ahocorasick庫實現。
Ahocorasick是一種字符串匹配算法,由兩種數據結構實現:Trie和Aho-Corasick(AC)自動機。Trie是一個字符串索引的詞典,檢索相關項時時間和字符串長度成正比。AC自動機能夠在一次運行中找到給定集合所有字符串。AC算法其實就是在Trie樹上實現KMP,可以完成多模式串的匹配。
Sharmila Parmanand用六句話(六個話題)闡述了本場辯論的總話題(實行幫助婦女在立法機構保持一定席位的特殊政策)擬解決的問題,即婦女在當地或國家層面的政治機構中仍然沒有足夠的代表的問題。
通過問句類型_屬性函數,根據七類實體構造詞典,即關鍵詞+關鍵詞類型。利用函數進行對用戶問句的檢查,看其中是否有關于該系統包含實體類型的領域詞匯,若檢測到便進行問句過濾。
問句過濾則是通過Ahocorasick庫中特有的iter()函數來匹配領域詞,過濾具有相同字符的領域詞,選取字符串最長的領域詞并返回為用戶問句中的領域詞和詞匯對應的實體類型。
獲得問句領域詞和相關領域后,與問句相關的實體類型整合,調用相關函數判斷問句類型。比如用戶問題是疾病類型,那么返回關于該疾病的詳細信息;如果類型是藥物,那么返回該藥品的一切詳細信息。將所有結果合并整理,返回字典放置。
問句解析則是將問句分類結果傳入主函數后,調用提取關鍵詞函數,返回實體類型和領域詞形式的字典,然后將每一個問題類型都轉換為Cyper語言,便于查詢。需要注意的是疾病的附加癥狀需要雙向查詢;用戶問題可能是對于疾病節點的屬性提問,也可能查詢相連關系;食物包含用戶具體吃了什么和推薦吃什么;用戶提問藥物相關問題需要添加在售藥品和推薦藥品。
利用Neo4j圖數據庫進行知識圖譜的可視化,將肝病信息爬取后以三元組的形式導入其中。Neo4j使用圖形清楚明了地展示出數據之間的關系,其基本單元是節點、關系與屬性。本系統的數據庫設計屬性關系信息表如表2、表3所示,實體關系知識圖譜可視化如圖3~圖5所示。

表2 實體類型信息

表3 屬性信息

圖3 疾病所需檢查關系

圖4 藥品所在企業關系

圖5 藥品在售藥品關系
智能問答系統完全基于規則匹配實現,匹配關鍵字用于對問題進行分類。對醫學領域知識采用窮舉的方式逐一進行劃分,并使用Cypher的Match來查找Neo4j,根據返回的數據組裝問題答案,最后返回結果。問答框架則是通過三部分:問句分類、問句解析、查詢結果,調用大量函數實現的。Aho-Corasick字符串匹配算法負責構建封閉領域詞,使得系統可以更加快速地剔除用戶問句中重復的醫學知識,保留最長的領域詞后返回詞和詞對應的實體類型。問答框架如圖6所示。

圖6 基于知識圖譜的問答框架
為了驗證文中開發的基于肝病知識圖譜的智能問答系統的可行性與實用性,利用試用實驗的方法,隨機抽取出50名用戶作為測試對象,用戶在系統中輸入自己對于肝病知識的問題,再對用戶的疑惑是否得到解決進行調查以判斷該系統的可行性與實用性。測試包含三類問題:
(2)針對用戶提出的問題知識是否包括在構建的知識圖譜中,準確度為96%;
(3)針對用戶提出的問題能否被準確解析并響應答案,準確度為76%。
通過測試結果,可以看出該系統具有一定的實際應用價值,對其進行一個初步評估,主要反映出以下兩類問題:
(1)問題分類的不全面,個別問題類別系統無法識別,不能給出確切的答案;
(2)知識圖譜構建不全面,超出肝病知識的實體無法進行問答。
本系統基于肝病專業醫療知識建立了肝病知識圖譜,并在該知識圖譜的基礎上,通過問句分類、問句解析、查詢結果三個步驟,調用大量函數構建問答框架。基于規則匹配的問答系統沒有復雜的算法,一般采用模板匹配的方式尋找最優答案,響應結果依賴于判斷問句類型是否準確、知識庫覆蓋是否全面。用戶拋出一個知識圖譜中涵蓋的問題,可以及時準確地給出全面的答案。但是整個問答系統的優劣過度依賴于知識圖譜中知識的數量與質量,本系統還存在一定缺陷,如知識圖譜覆蓋面較窄(數據提取和推理演繹較為困難)、問句分類的算法不夠高效、在自然語言處理方面存在不足等,未來還需進一步完善。