曹明宇,李青青,楊志豪,王 磊,張 音,林鴻飛,王 健
(1. 大連理工大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,遼寧 大連 116024;2.軍事醫(yī)學(xué)科學(xué)院,北京 100850)
隨著大數(shù)據(jù)時代的到來,知識工程受到了廣泛關(guān)注,如何從海量的數(shù)據(jù)中提取有用的知識,是大數(shù)據(jù)分析的關(guān)鍵。知識圖譜技術(shù)提供了一種從海量文本和圖像中抽取結(jié)構(gòu)化知識的手段,并且已被廣泛應(yīng)用于智能搜索、智能問答、個性化推薦等領(lǐng)域,因而受到了廣泛的關(guān)注。
知識圖譜于2012年被Google正式提出[1],其初衷是為了提高搜索引擎的能力,增強用戶的搜索質(zhì)量及搜索體驗。目前,已經(jīng)存在的大規(guī)模知識庫如Freebase、Wikidata、DBpedia、YAGO中,不僅包含大量的半結(jié)構(gòu)化、非結(jié)構(gòu)化數(shù)據(jù),是知識圖譜數(shù)據(jù)的重要來源,而且具有較高的領(lǐng)域覆蓋面,與領(lǐng)域知識庫存在大量的鏈接關(guān)系。除此之外,一些行業(yè)知識庫(也稱為垂直型知識庫),如MusicBrainz、IMDB、豆瓣等也已經(jīng)構(gòu)建起用來描述特定行業(yè)領(lǐng)域的知識。值得注意的是,在中文知識圖譜構(gòu)建方面,中文開放知識圖譜聯(lián)盟OpenKG搭建了OpenKG.CN技術(shù)平臺,吸引了國內(nèi)最著名知識圖譜資源的加入,如Zhishi.me、CN-DBPedia、PKUBase,并已經(jīng)包含了來自于常識、醫(yī)療、金融、 城市、出行等15個類目的開放知識圖譜[2]。同時,由于與人類健康密切相關(guān),生物醫(yī)學(xué)領(lǐng)域的知識受到密切關(guān)注。我們建立了一個生物醫(yī)學(xué)領(lǐng)域的與肝細胞癌(Hepatocellular carcinoma,HCC)相關(guān)的知識圖譜。肝細胞癌是成人中最常見的原發(fā)性肝癌,并且是肝硬化患者最常見的死亡原因[3]。構(gòu)建肝細胞癌相關(guān)的知識圖譜,結(jié)構(gòu)化地表示肝細胞癌與其相關(guān)的蛋白質(zhì)、藥物、疾病、病癥等之間的關(guān)系,對于醫(yī)學(xué)研究者來說具有重要的意義。
問答系統(tǒng)是自然語言處理領(lǐng)域的一個重要方向。它接受自然語言問題的輸入,從知識庫中查詢到相應(yīng)的答案,并以自然語言文本的形式返回給用戶。傳統(tǒng)上人們獲取知識的途徑主要依賴于搜索引擎,然而搜索引擎只是單純的關(guān)鍵字查詢,缺乏對用戶意圖的理解,需要用戶從返回的網(wǎng)頁中篩選自己想獲取的信息。與傳統(tǒng)的搜索引擎相比,問答系統(tǒng)極大地增強了用戶獲取知識的便捷性,不但節(jié)省了篩選信息的時間,還能精確地獲得更符合需求的答案。
傳統(tǒng)的問答系統(tǒng)大多基于文檔檢索,使用爬蟲從網(wǎng)絡(luò)上爬取百科數(shù)據(jù)、問答對等知識,再使用關(guān)鍵詞檢索或模板匹配的方式查詢答案。這種方式的知識來源并非結(jié)構(gòu)化,包含大量的冗余信息,需要時間來進行檢索。而知識圖譜作為一種結(jié)構(gòu)化、關(guān)聯(lián)化的數(shù)據(jù)來源,可以為問答系統(tǒng)提供更加高質(zhì)量的數(shù)據(jù)信息,面向領(lǐng)域的問答系統(tǒng)也層出不窮。杜澤宇等[4]利用哈工大LTP 語義依存分析SDP及基于Word2Vec(https://code.google.com/archive/p/word2vec/)的語義相似度計算,開發(fā)了面向電商領(lǐng)域的問答系統(tǒng),極大地增強了電商網(wǎng)站用戶溝通的便捷性與時效性。
近年來,隨著“看病難”“掛號難”等社會問題出現(xiàn),很多在線求醫(yī)問藥的網(wǎng)站興起,用戶可以更便捷地在網(wǎng)絡(luò)上描述自己的病情并得到醫(yī)生的指導(dǎo)。但是這種方式仍然需要人力的維護,并且醫(yī)生通常推薦面診來確定病情。同時,由于大眾對疾病的知識了解過少,常常不能對醫(yī)生給予的治療方案的合理性進行判斷。針對以上問題,本文提出了一個面向肝細胞癌的基于知識圖譜的自動問答系統(tǒng),可以回答與肝癌相關(guān)的藥物、疾病、表征等問題,幫助用戶更充分地了解肝癌相關(guān)知識,緩解醫(yī)療機構(gòu)的壓力。
本文提出的基于肝細胞癌知識圖譜的問答系統(tǒng)有一套流水線式的結(jié)構(gòu)。首先,基于當(dāng)前主流的BiLSTM-CRF神經(jīng)網(wǎng)絡(luò)模型,對問題中的藥物、疾病等實體進行識別; 然后將結(jié)合TFIDF與預(yù)訓(xùn)練的詞向量,得到問題向量,將其與預(yù)先定義 的問題模板進行相似度匹配,得到最相似的問題模板;再根據(jù)模板對應(yīng)的語義信息,使用Cypher查詢語句到知識圖譜中查詢答案;最后生成自然語言回答并返回給用戶。
海量生物醫(yī)學(xué)文本中蘊含著大量醫(yī)學(xué)實體及關(guān)系,新實體和新關(guān)系的更新速度比專業(yè)的數(shù)據(jù)庫系統(tǒng)更快,而專業(yè)數(shù)據(jù)庫中的知識更加精準可靠?;谏鲜鰞煞N知識來源的特點,本文同時使用以下兩種方式獲取肝細胞癌相關(guān)知識:①應(yīng)用深度學(xué)習(xí)技術(shù)。對醫(yī)學(xué)指南和PubMed摘要文本進行命名實體識別,再對實體對進行關(guān)系分類,從中抽取出與HCC相關(guān)的三元組; ②從SemMedDB[5]中抽取所有與HCC相關(guān)的三元組。
具體的知識獲取步驟描述如下。
首先獲取了UpToDate臨床顧問(http://www.uptodate.com)中與肝細胞癌相關(guān)的醫(yī)學(xué)指南,以及在PubMed中下載與肝細胞癌相關(guān)的1 000篇MEDLINE摘要,然后使用基于深度學(xué)習(xí)的方法,對文本進行命名實體識別和關(guān)系抽取,得到與肝細胞癌相關(guān)的關(guān)系三元組。對得到的三元組進行去重,將實體和關(guān)系映射到生物醫(yī)學(xué)本體中,形成了肝細胞癌與其相關(guān)的基因、蛋白質(zhì)、單個藥物、藥物組合、疾病、病癥以及治療方法之間的關(guān)系三元組。
SemMedDB是使用SemRep工具(https://semrep.nlm.nih.gov)從MEDLINE摘要中進行關(guān)系抽取得到的,包含9 100萬個關(guān)系預(yù)測的數(shù)據(jù)庫[5]。該數(shù)據(jù)庫支持Semantic MEDLINE Web應(yīng)用程序,它集成了PubMed搜索、SemRep預(yù)測、自動匯總和數(shù)據(jù)可視化。我們使用SQL語句從該數(shù)據(jù)庫中檢索與肝細胞癌直接相關(guān)的實體以及關(guān)系三元組,共得到46 172個三元組。然后對三元組進行去重,去重后得到4 547個三元組。在這些三元組中,每個實體的類型定義為概念唯一標(biāo)識符、實體標(biāo)準名、實體類型以及實體在文本中的名字。關(guān)系屬性定義為關(guān)系類型和關(guān)系來源。
結(jié)合以上兩種方式,我們得到了與肝細胞癌相關(guān)的實體和關(guān)系三元組。其中,使用深度學(xué)習(xí)的方法從醫(yī)學(xué)指南和PubMed文摘中獲得416個實體和500條關(guān)系;從SemMedDB中抽取了共2 723個實體和4 547條關(guān)系。對于實體和關(guān)系的詳細統(tǒng)計,如表1所示。
表1 肝細胞癌相關(guān)的實體和關(guān)系數(shù)據(jù)統(tǒng)計
三元組是知識圖譜的一種通用表示方式,即g=(e,r,s),其中e={e1,e2,…,e|E|} 是知識庫中的實體集合,共包含|E|種不同實體;R={r1,r2,…,r|E|}是知識庫中的關(guān)系集合,共包含|R|種不同關(guān)系;S∈E×R×E代表知識庫中的三元組集合。三元組的基本形式主要包括實體1、關(guān)系、實體2和概念、屬性、屬性值等,實體是知識圖譜中的最基本元素,不同的實體間存在不同的關(guān)系。概念主要指集合、類別、對象類型、事物的種類,例如,藥物、疾病等;屬性主要指對象可能具有的屬性、特征、特性、特點以及參數(shù),例如實體名、實體概念標(biāo)識符等;屬性值主要指對象指定屬性的值,例如“肝細胞癌”“Q1148337”等。每個實體(概念的外延)可用一個全局唯一確定的ID來標(biāo)識,每個屬性—屬性值對(attribute-value pair,AVP)可用來刻畫實體的內(nèi)在特性,而關(guān)系可用來連接兩個實體,刻畫它們之間的關(guān)聯(lián)[6]。
目前,圖結(jié)構(gòu)有兩種通用的存儲方案:RDF存儲和圖數(shù)據(jù)庫(Graph Database)。圖數(shù)據(jù)庫的結(jié)構(gòu)定義相比RDF數(shù)據(jù)庫更為通用,實現(xiàn)了用圖結(jié)構(gòu)中的節(jié)點、邊以及屬性來進行圖數(shù)據(jù)的存儲。我們使用當(dāng)前流行的開源圖數(shù)據(jù)庫Neo4j(https://neo4j.com/)進行知識圖譜的存儲,優(yōu)點是數(shù)據(jù)庫本身提供完善的圖查詢語言,支持各種圖挖掘算法。
Neo4j提供Cypher語句來導(dǎo)入數(shù)據(jù)和查詢圖形數(shù)據(jù),Cypher是描述性的圖形查詢語言,語法簡單,功能強大。除此之外,對于大規(guī)模的數(shù)據(jù),Neo4j還提供了neo4j-import 工具,可以快速地將大量的節(jié)點(實體)和邊(關(guān)系)導(dǎo)入圖數(shù)據(jù)庫。我們將醫(yī)學(xué)指南、PubMed摘要文本和SemMedDB中抽取的肝細胞癌相關(guān)的三元組通過Cypher CREATE 語句、Cypher LOAD CSV 語句以及neo4j-import 工具導(dǎo)入Neo4j數(shù)據(jù)庫。圖1展示了肝細胞癌知識圖譜的部分關(guān)系三元組。
圖1 肝細胞癌知識圖譜中的部分關(guān)系三元組
本文設(shè)計并實現(xiàn)了基于肝細胞癌知識圖譜的英文問答系統(tǒng),為用戶在線求醫(yī)提供了更加智能化的方式,提升了在線求醫(yī)的便捷性及實時性。該系統(tǒng)主要包括以下幾個模塊:①疾病和藥物的實體識別; ②問題的模板匹配; ③基于Neo4j數(shù)據(jù)庫的查詢; ④基于Web的圖形化展示。具體的流程如下所述:
(1) 輸入問題:在對話框內(nèi)輸入與疾病、藥物、表征相關(guān)的英文醫(yī)學(xué)問題,如:“Whichmedicinecantreataids?”“WhatarethemanifestationsofHCC”。
(2) 問題的預(yù)處理及分詞:由于醫(yī)學(xué)領(lǐng)域的命名實體識別是以單個詞為單位,而很多實體常與標(biāo)點符號直接相連,如果問題的分詞不準確,則會直接影響實體識別的準確性,也會對之后的模板匹配造成影響。比如上述問題中的“aids?”被分解為“aids”和“?”兩個單詞。
(3) 醫(yī)學(xué)實體識別:由于本文實現(xiàn)的問答系統(tǒng)主要是面向普通用戶的,所以在這一環(huán)節(jié)識別出問題中最常涉及的問題,包括疾病名、藥物名及表征名。識別結(jié)果是一個形如[entity name1,label1]的列表,例如,問題“Whichmedicinecantreataids?”,識別結(jié)果為[‘a(chǎn)ids’ ,‘disease’]。
(4) 問題模板匹配:根據(jù)識別出的實體信息,將問題與相應(yīng)的問題模板集進行匹配。本文分別從Literal、Synonym兩個層面,利用TFIDF及基于Word2Vec詞向量的匹配方式,為原問題匹配到最相似的問題模板。這一環(huán)節(jié)實現(xiàn)了問題理解的功能,可以得到問題中蘊含的關(guān)系,如:疾病—藥物、疾病—表征等。
(5) 基于圖形化數(shù)據(jù)庫的查詢:根據(jù)環(huán)節(jié)(3)、(4) 識別出的實體名及關(guān)系類型,理解問題的語義,使用Python語言中的Neo4j-driver模塊,在本文構(gòu)建的肝細胞癌知識圖譜中查詢對應(yīng)的實體或?qū)傩浴?/p>
(6) 答案生成:根據(jù)問題的意圖及查詢到的結(jié)果,生成符合對話邏輯并且語法通順的自然語言答案,返回給用戶。
針對醫(yī)學(xué)實體識別、問題模板匹配和基于知識圖譜的查詢的詳細介紹如下。
本文實體識別模型的訓(xùn)練使用biocreative評測提供的 CDR語料集。傳統(tǒng)的命名實體識別使用統(tǒng)計學(xué)習(xí)的機器學(xué)習(xí)方法,如條件隨機場(conditional random fields,CRF),對文本中的人名、地名、機構(gòu)名等實體進行識別。而醫(yī)學(xué)領(lǐng)域的實體通常命名規(guī)則復(fù)雜,實體名中可能包含數(shù)字或符號,并且實體的邊界更容易被誤識別。針對這些問題,本文使用當(dāng)前流行的BiLSTM(Bi-directional LSTM)+CRF模型[7],在疾病、藥物和表征實體上分別達到了0.887、0.905和0.866的綜合分類率(F1值)。
長短時記憶模型(long short-term memory,LSTM)[8]是循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)的一種。RNN的最大特點是可以接受序列的輸入,產(chǎn)生對應(yīng)的序列輸出,不同時刻的輸入之間存在著依賴關(guān)系,當(dāng)前時刻的輸出不僅取決于當(dāng)前時刻的輸入,還和上一時刻的輸出有關(guān)。由于這樣的特點,RNN很適合用于學(xué)習(xí)單個詞的上下文信息。但是RNN仍然存在著長距離依賴的問題,即當(dāng)前時刻的輸入受距離當(dāng)前更近的時刻影響更大,而受距離較遠的之前時刻輸出的影響相對較小,這就導(dǎo)致RNN不能充足地學(xué)習(xí)到遠距離的上下文信息。LSTM在RNN的基礎(chǔ)上增加了門機制,可以控制信息在時刻之間傳遞的程度,更好地學(xué)習(xí)當(dāng)前詞的上下文信息。雙向長短時記憶循環(huán)模型由兩個不同方向的LSTM組成,兩個LSTM分別從前向和后向?qū)W習(xí)單詞的上下文信息,再將二者拼接起來,作為當(dāng)前時刻的輸出。
本文的命名實體工作,首先使用預(yù)先訓(xùn)練好的詞向量,將詞映射為低維空間中稠密的50維詞向量,隨后將句子的詞向量序列輸入到BiLSTM中,用神經(jīng)網(wǎng)絡(luò)自動學(xué)習(xí)前向及后向的上下文特征,最后在輸出層使用softmax來預(yù)測每個單詞的標(biāo)簽。這種方法的缺陷是對每個詞的標(biāo)簽都進行獨立的預(yù)測,不能參考上下文中已經(jīng)預(yù)測出的標(biāo)簽,導(dǎo)致預(yù)測出的標(biāo)簽序列可能是不合邏輯的。例如,標(biāo)簽I后面是不可能緊跟著標(biāo)簽B的,但神經(jīng)網(wǎng)絡(luò)無法利用到這個信息。為了實現(xiàn)標(biāo)簽級別的全局優(yōu)化,本文在神經(jīng)網(wǎng)絡(luò)的輸出后增加一個條件隨機場層進行句子級的序列標(biāo)注。CRF層的參數(shù)是一個 (k+2)×(k+2)的矩陣A(之所以要加2是因為要為句子首部添加一個起始轉(zhuǎn)移狀態(tài),在句子尾部添加一個終止轉(zhuǎn)移狀態(tài)),Aij表示的是從第i個標(biāo)簽到第j個標(biāo)簽的轉(zhuǎn)移得分,進而在為一個位置進行標(biāo)注的時候可以利用此前已經(jīng)標(biāo)注過的標(biāo)簽。結(jié)合了BiLSTM和CRF的命名實體識別,可以充分學(xué)習(xí)每個單詞的上下文信息及上下文標(biāo)簽信息,從局部和全局兩個層面,對詞標(biāo)簽的分類進行更好的優(yōu)化,達到良好的實體識別效果。
常見的用于問題理解的技術(shù)有基于模板匹配[9]、基于檢索模型及基于深度學(xué)習(xí)的模型方法[10]。本文實現(xiàn)的問答系統(tǒng)使用了模板匹配的方式。與其他兩種問題理解的方式相比,模板匹配只需要根據(jù)常見的問題設(shè)計問題模板,并實現(xiàn)匹配模板(即計算問題與模板間的相似度)的算法,無須對大量人工標(biāo)注的語料進行深度學(xué)習(xí),也不需要從大量的QA文本中檢索相似的問題。本文模板匹配的具體流程如下。
(1) 根據(jù)問題中可能包含的實體數(shù)量及實體類別,針對每一種情況,本文設(shè)計了6種情況共107個問題模板,問題模板集的信息見表2。
表2 不同實體情況的問題模板集
(2) 根據(jù)實體識別環(huán)節(jié)中識別出的實體類別及數(shù)量,在與實體情況對應(yīng)的問題模板集中進行相似度匹配,選擇相似度最高的問題模板。本文的相似度匹配結(jié)合TFIDF算法[11]與Word2Vec詞向量[12],對于輸入的問題中的每個詞,首先計算該詞的TF(term frequency,詞頻),即在該問題中出現(xiàn)的頻率,詞的TF越高就越表明它能代表這個問題。然后計算該詞的IDF(inverse document frequency,逆向文件頻率),由總模板問題數(shù)目除以包含該詞的模板問題數(shù)目得到,IDF可以衡量一個詞的區(qū)分能力。TF和IDF的乘積便代表這個詞在當(dāng)前問題中的權(quán)重,將問題中所有詞的詞向量加權(quán)求和,得到問題的向量。我們分別計算模板問題及用戶提出問題的問題向量,再分別計算句子向量之間的Cosine和 Euclidean距離,最后取平均作為提出問題與模板問題的相似度。
本文使用Cypher語言在圖形數(shù)據(jù)庫中查詢答案。該語言是neo4j圖形數(shù)據(jù)庫的查詢語言,遵循SQL(structured query language)語法。問題模板中包含著問題的語義,根據(jù)預(yù)先定義的模板問題到數(shù)據(jù)庫中關(guān)系的映射可以得到關(guān)系名,結(jié)合識別出的醫(yī)學(xué)實體名,根據(jù)規(guī)則生成Cypher語句。
用于查詢與已知實體具有特定關(guān)系的相關(guān)實體名的Cypher語句模板如下:Match (a)-[: RelationName]-(b) where b.name=‘EntityName’ return a.name。其中,EntityName和RelationName用之前得到的實體和關(guān)系名替換。例如,對于問題“Which medicine can treat HCC?”,首先識別出實體[HCC, drug],匹配問題模板可以得到該問題在數(shù)據(jù)庫中的對應(yīng)關(guān)系為“Treats”,然后根據(jù)實體名、實體類別和關(guān)系名,按照規(guī)則生成Cypher語句:Match (a)-[: Treats]-(b) where b.name=‘HCC’ return a.name,根據(jù)返回的結(jié)果,生成自然語言回答:“HCC can be treated by acrylamide, transaminase, Bortezomib, etc.”
由于目前沒有肝細胞癌相關(guān)的標(biāo)準問答語料,我們?nèi)斯ぴO(shè)計了50個與模板問題語義相近的肝細胞癌相關(guān)問題,對其答案進行評測,以驗證本文提出的問答系統(tǒng)的性能。除此之外,也從英文醫(yī)療問答網(wǎng)站(https://www.drugs.com)中爬取了100個與肝細胞癌相關(guān)的真實問題進行了實驗。
(1) 由于本文提出的問答系統(tǒng)知識來源是結(jié)構(gòu)化的知識圖譜,因此,對于一個問題,當(dāng)其命名實體識別結(jié)果準確、問題模板匹配符合語義且返回有效自然語言回答時,就認為該問題得到了正確回答。
從實驗結(jié)果可以看出,76%人工設(shè)計的問題可以得到正確回答。盡管有些問題使用了與模板問題不同的表示方式來表示語義,基于問題向量進行相似度匹配的方式仍然可以為大多數(shù)問題匹配到語義相同的模板。對于醫(yī)療問答網(wǎng)站爬取的問題,28%可以得到正確回答,例如“Should I take Cipro for HCC?”,這類包含藥物-疾病關(guān)系語義信息的問題大多可以被正確地理解。對于網(wǎng)絡(luò)爬取的問題,實體識別的準確性良好,但語義理解的準確度偏低。一些不能準確回答的問題,例如,“Does Xgeva need to be refrigerated?”,問題的語義是咨詢藥物的保存事宜。由于本文搭建的知識圖譜側(cè)重于藥物、疾病、表征等實體關(guān)系,而藥物的保存事宜、服用方法等應(yīng)該被存儲于實體屬性中,由于信息抽取的并不完備,未能返回滿意的答案,這也是未來知識圖譜需要完善的部分。
(2) 現(xiàn)有實驗說明本文提出的問答系統(tǒng)可以有效地基于肝細胞癌知識圖譜,對肝細胞癌相關(guān)的藥物—疾病、疾病—表征、藥物—藥物及藥物—表征等問題進行回答。同時由于本文使用流水線式的結(jié)構(gòu),每個子模塊都具備進一步優(yōu)化的可能性。結(jié)合回答失敗問題的原因,本文的未來工作包括:①將實體的屬性信息補充加入知識圖譜; ②擴充知識圖譜的疾病覆蓋率; ③使用深度學(xué)習(xí)技術(shù)對問題理解進行更深入的研究。
本文針對成人中常見的原發(fā)性肝細胞癌,從醫(yī)學(xué)指南和相關(guān)醫(yī)學(xué)文摘及SemMedDB知識庫中抽取其知識三元組,構(gòu)建了原發(fā)性肝細胞癌的知識圖譜。在此基礎(chǔ)上,實現(xiàn)了流水線式的問答系統(tǒng)。實驗表明,該問答系統(tǒng)可以回答藥物—疾病、藥物—表征、藥物-藥物等語義信息的問題。下一步的工作包括使用深度學(xué)習(xí)方法來提高問題理解的準確度、擴展該問答系統(tǒng)可回答問題的種類以及豐富知識圖譜中實體的屬性信息。