劉園園 李勁華 趙俊莉
(青島大學數(shù)據(jù)科學與軟件工程學院 山東 青島 266071)
問答系統(tǒng)由于具有簡單、準確的回答而越來越成為自然語言處理、信息檢索等領(lǐng)域研究的重點,與傳統(tǒng)的搜索引擎相比,問答系統(tǒng)不僅能接受用戶直接的自然語言方式提問,而且能夠更深層次地理解用戶的查詢意圖,返回精準的答案。
中國每年參加高考的學生越來越多,高考結(jié)束后所有考生都將面臨艱難的志愿選擇問題,學生需要在有限的時間內(nèi)充分地了解學校信息、選擇合適的學校,一旦報名時選擇有誤,就可能會與理想的學校失之交臂,因此,能夠快速、準確地了解學校信息非常重要。目前對學?;拘畔⒌牟樵冎饕腔谒阉饕?,但是這種方式返回的是成百上千的網(wǎng)頁,學生從中定位到所需要的信息需要耗費大量精力,而且每查詢一個學校的信息都需要進行一次網(wǎng)頁檢索,做出很多無用功,另外單個學校的搜索也無法實現(xiàn)對學校信息整合、比較。因此研究并開發(fā)一款面向考生的、綜合各學校信息的高考咨詢領(lǐng)域的智能問答系統(tǒng),具有現(xiàn)實意義且十分必要。
問答系統(tǒng)按其問題答案的來源可以分為基于Web的問答系統(tǒng)[1]、基于社區(qū)的問答系統(tǒng)[2]、基于知識圖譜的問答系統(tǒng)[3]等。知識圖譜能夠通過建立數(shù)據(jù)之間的關(guān)聯(lián)鏈接,將碎片化的數(shù)據(jù)有機地組織起來,更易于信息的搜索、挖掘和分析[4],因此成為問答系統(tǒng)常用的數(shù)據(jù)存儲形式。
基于知識圖譜的問答方法(KBQA)主要分為基于語義解析[5]的方法和基于信息檢索[6]的方法?;谡Z義解析的方法通過對自然語言進行語義解析,將其轉(zhuǎn)換成邏輯形式,然后生成相應(yīng)的結(jié)構(gòu)化查詢語句,在知識庫中檢索得出答案。基于信息檢索的方法可以看作是答案的排序算法,從知識庫中檢索候選答案的集合,根據(jù)問題特征和候選答案特征對候選答案進行評分和排序,選擇得分最高的作為最終答案。
現(xiàn)有的KBQA方法大多集中在簡單的問題上,即僅涉及一個實體和一個關(guān)系,常見的解決方法是將問題映射到知識圖譜中的三元組查詢,即能得到答案;而涉及多個實體和關(guān)系的復(fù)雜問句,一般的KBQA方法則不能很好的工作[7]。高考咨詢領(lǐng)域的問句大多是含有多實體或關(guān)系的復(fù)雜問句,如問句“山東省排名第一的大學是哪個?”中就包含多個約束:1) 問句意圖是學校;2) 學校位于山東??;3) 學校排名第一。因此,為了能回答多約束問題, 本文設(shè)計一個基于語義解析的問答模型,首先通過主題實體和查詢意圖生成核心推理鏈,然后通過添加約束生成最終的查詢圖,從而將語義解析轉(zhuǎn)化為查詢圖生成,最后將查詢圖轉(zhuǎn)換為知識庫查詢語句。
知識圖譜是一種新的知識表示方法,最先由谷歌提出以提供更加智能的搜索服務(wù)。知識圖譜本質(zhì)是具有一個有向圖結(jié)構(gòu)的知識庫,以結(jié)構(gòu)化的方式描述了現(xiàn)實世界中存在的實體、概念,以及它們之間的語義關(guān)系,以更好地組織、管理和理解互聯(lián)網(wǎng)時代產(chǎn)生的海量信息[8]。目前知識圖譜已經(jīng)在醫(yī)學[9]、電商[10]等多個領(lǐng)域得到廣泛研究。
知識圖譜的構(gòu)建方式有兩種,一種是自頂向下的構(gòu)建方式,一種是自底向上的構(gòu)建方式。前者指的是預(yù)先為知識庫定義好本體或數(shù)據(jù)模式,然后再將實體加入到知識庫中;后者指的是先利用相關(guān)技術(shù)把文本中的有用實體提取出來,從中選擇置信度較高的添加到知識庫中,從而構(gòu)建出頂層本體模式[11]。本文高校信息知識圖譜的構(gòu)建大體分為三個步驟:1) 設(shè)計知識圖譜本體;2) 采集數(shù)據(jù);3) 數(shù)據(jù)導(dǎo)入與可視化。構(gòu)建流程如圖1所示。
圖1 知識圖譜構(gòu)建流程
構(gòu)建知識圖譜之前要了解構(gòu)建的領(lǐng)域,然后設(shè)計知識圖譜的結(jié)構(gòu)。為了能了解到學生在高考報名時最常咨詢的信息,本文在一些大學的貼吧、高考咨詢類網(wǎng)站等收集相關(guān)的問句,對其進行整理分類,可以了解到,學生想要知道的信息大體分為三種情況:1) 學?;拘畔?。如地址、排名、是否是985、獎學金政策、宿舍環(huán)境等。2) 學院信息。如招生計劃、學院特色、招生專業(yè)等。3) 專業(yè)信息。包括未來就業(yè)方向、所學課程、錄取分數(shù)等。
知識圖譜包括實體、屬性和關(guān)系,一些信息點既可以作為實體存儲,也可以作為實體的屬性存儲,為了有效地劃分實體和屬性,本文首先列舉出所有的信息點,然后把其中與其他實體有聯(lián)系的、易成為比較點的、易反向詢問的、帶有屬性的信息點歸為實體類,其他的歸為屬性類。如“專業(yè)的錄取分數(shù)”這個信息點由于具有錄取時間、錄取省份和錄取類別等多個屬性,因此不能作為“專業(yè)”這個信息點的屬性,而是作為一個單獨的節(jié)點,與“專業(yè)”節(jié)點建立聯(lián)系;而如“學校地址”這個信息點由于是學校單獨有的,而且各個學校的地址都不相同,不太可能與其他實體相連,因此,將其劃分為屬性。
為了能更清晰地了解各個實體之間的聯(lián)系,本文選用protege構(gòu)建高校知識圖譜的本體模型。如圖2所示,共構(gòu)建了12個實體,14種關(guān)系,每個實體有不同的屬性。
圖2 高校信息知識圖譜本體
構(gòu)建完本體之后,下一步就是數(shù)據(jù)的獲取,本文主要通過Python爬蟲的方式獲取數(shù)據(jù),主要數(shù)據(jù)來源如下: 學校的基本信息從百度百科等半結(jié)構(gòu)化數(shù)據(jù)進行爬??;院系設(shè)置、專業(yè)錄取分數(shù)線和招生計劃等從各學校官網(wǎng)和中國教育在線-高考數(shù)據(jù)庫網(wǎng)站獲??;學校排名、院校特性和宿舍條件等從陽光高考網(wǎng)站進行獲取。陽光高考網(wǎng)站是教育部高校招生陽光工程指定平臺,集合了一些院校信息、就業(yè)率、錄取分數(shù)線等信息,爬取的部分信息如圖3所示。另外還有一部分數(shù)據(jù)來自于中文開放知識圖譜CN-DBpedia。
圖3 基于陽光高考網(wǎng)站爬取的數(shù)據(jù)示例
知識圖譜的存儲可以分為基于表結(jié)構(gòu)的存儲和基于圖結(jié)構(gòu)的存儲,基于圖結(jié)構(gòu)的存儲用節(jié)點表示實體,用邊表示實體之間的關(guān)系,能夠直接準確反映知識圖譜的內(nèi)部結(jié)構(gòu),有利于對知識的查詢。本文采用屬性圖數(shù)據(jù)庫Neo4j進行知識存儲,為實現(xiàn)高考咨詢領(lǐng)域的問答系統(tǒng)提供底層的數(shù)據(jù)支持。
Neo4j是目前最廣泛流行的屬性圖數(shù)據(jù)庫,具有成熟數(shù)據(jù)庫的所有特性,能夠?qū)?shù)據(jù)進行高效的處理。另外,Neo4j還支持以圖的方式對數(shù)據(jù)進行可視化展示。Neo4j自帶一個大數(shù)據(jù)量的導(dǎo)入工具neo4j-import,支持并行、可擴展地大規(guī)模導(dǎo)入CSV數(shù)據(jù),導(dǎo)入的CSV文件一般至少包含一個實體文件和一個關(guān)系文件。實體文件的格式一般包括“:ID”“name”“:LABEL”等欄,關(guān)系文件的格式包括“:START_ID”“:END_ID”“name”“:TYPE”等欄,其中“:LABEL”和“:TYPE”分別代表實體的類型和關(guān)系的類型,“:START_ID”和“:END_ID”分別是關(guān)系中開始節(jié)點和結(jié)束節(jié)點的ID,二者缺一不可,因為關(guān)系不能指向空也不能從空發(fā)起。本文將爬取的信息數(shù)據(jù)轉(zhuǎn)換成以上的CSV文件,然后進行數(shù)據(jù)導(dǎo)入。導(dǎo)入后的可視化效果如圖4所示,單擊節(jié)點可以看到該節(jié)點的屬性,有向邊代表兩個實體的關(guān)系,為了方便查詢,本文將一些時間、省份等屬性添加到關(guān)系中,如圖5所示。
圖4 知識圖譜的可視化展示
圖5 知識圖譜中關(guān)系的屬性展示
本文主要采用基于語義解析的方法實現(xiàn)問答系統(tǒng),通過添加約束到核心推理鏈[12]以生成查詢圖,然后將查詢圖映射成Cypher語句。采用的方法如下:1) 識別問句意圖以生成答案節(jié)點。2) 將問句進行實體識別并提取出主題實體。3) 根據(jù)問句類別和主題實體生成核心推理鏈,并通過相似度計算模型對其進行質(zhì)量評估。4) 對每條核心推理鏈添加約束,生成查詢圖,對生成的查詢圖再次進行相似度計算,并得到最終的得分。5) 將得分最高的查詢圖轉(zhuǎn)換為Cypher查詢語句,到知識庫中檢索答案返回給用戶。其架構(gòu)如圖6所示。
圖6 問答系統(tǒng)流程
意圖分類的目的是知道用戶的查詢意圖,即最終要返回給用戶的節(jié)點類型。例如,當意圖分類的結(jié)果是“專業(yè)”,那么也就知道最終返回給用戶的實體必須屬于“專業(yè)”類型;當意圖分類的結(jié)果是“學校-屬性”,那么就知道答案節(jié)點是“學?!鳖愋?,且詢問的是其某個屬性,因此,將答案節(jié)點限制為學校類型,并且通過“RETURN 學校.屬性”的方式返回給用戶所想要的答案。
本文定義分類的類別包括所構(gòu)建的本體中的所有實體類型(12種)、實體-屬性類型(5種)、關(guān)系類共18個類別。實體-屬性類型是指詢問的不是某個實體本身,而是實體的某個屬性,如問句“青島大學文學院在哪”的類別就屬于“學院-屬性”類,實體-屬性類只有5種是因為一些實體類型如“省份”沒有給其設(shè)置屬性。關(guān)系類是指詢問兩個實體之間的關(guān)系,如“青島大學是985高校嗎”就屬于關(guān)系類。
意圖分類是本文問答系統(tǒng)的關(guān)鍵環(huán)節(jié),其準確率較大地影響到問答系統(tǒng)的準確率,經(jīng)過多種分類器的實驗比較,本文選擇BERT[13]微調(diào)模型用于本文的問句分類。微調(diào)模型如圖7所示,將句子的每個字分割成一個token,即圖7中的Toki,BERT的輸入是Toki對應(yīng)的表征Ei,然后通過堆疊的Transform編碼器生成字向量Ti,由于句子頭部的[CLS]對應(yīng)的向量C包含了整個句子的語義信息,因此被送到輸出層用于分類。
圖7 BERT分類微調(diào)模型
主題實體是問句查詢的核心實體。大多數(shù)問題的答案都與核心實體有著直接或間接的聯(lián)系,因此只需要找到一個核心實體,然后通過邊的連接搜索其子圖即可找到問題的答案[14]。
主題實體的識別分為兩步。首先,通過命名實體模塊識別所有實體;然后,根據(jù)設(shè)定的規(guī)則對其進行打分排序,設(shè)置排序第一的實體為主題實體。
2.2.1實體識別
實體識別的目的是識別句子中的實體信息,本文設(shè)計的問答系統(tǒng)面向的是高考咨詢領(lǐng)域,因此涉及到的實體主要有省份、城市、學校、專業(yè)、學院、校區(qū)、年份、人名、錄取分數(shù)、院校特性、排名等。對于類別有限、固定且易統(tǒng)計的實體,如省份、城市、年份、人名、學校名、錄取批次等,本文通過調(diào)用HanLP的Python接口pyhanlp,利用其CRF實現(xiàn)并加上添加專業(yè)字典的方式來進行實體的識別,pyhanlp詞性標注功能可以準確地實現(xiàn)大部分實體的識別。對于其他容易造成混淆的實體以及不能用詞性標注解決的實體,如“青島大學是211嗎?”中“211”在詞性標注里的結(jié)果是數(shù)詞“m”,但在這里指的是學校特性。因此,對于這些實體,本文選擇了BiLSTM-CRF的NER模型,這個模型在實體識別方面具有較好的效果,其數(shù)據(jù)集的標注格式如圖8所示。
圖8 實體識別數(shù)據(jù)集標注示例圖
實體識別之后通過同義詞典或正則對其進行改寫,改寫成在知識庫中存儲的標準形式,如“山東省”和“山東”都統(tǒng)一為“山東”。
2.2.2實體排序
在實體識別模塊之后,獲得了一系列實體,本文根據(jù)高考領(lǐng)域的本體模型以及常見問題,設(shè)置了如下的打分規(guī)則:
(1) 類型優(yōu)先級。由于大部分問題是圍繞學校的,因此學校類型的實體具有最高的優(yōu)先級,分數(shù)為0;其余的實體類型按照到學校類型的最短距離來計算,距離越近優(yōu)先級越高。
(2) 指向關(guān)系。指向關(guān)系是指優(yōu)先選擇指向其他實體的節(jié)點,而不是被指向的節(jié)點。對每個實體,計算指向此實體的邊數(shù),每條邊計一分。
(3) 距離疑問詞的距離。計算每個實體到問句疑問詞的距離,將距離值作為分數(shù)添加給每個實體。
最后,將每個實體按其得分由低到高進行排序,分數(shù)最低的那個實體為主題實體?!芭判颉睂嶓w不算在主題實體中,如果問句中沒有實體可以作為主題實體,用問句的答案節(jié)點作為主題實體。
核心推理鏈是指主題實體到答案節(jié)點的路徑,比如問句“青島大學有哪些專業(yè)在中心校區(qū)?”中主題實體節(jié)點“<青島大學>”到答案節(jié)點“:專業(yè)”之間的路徑就有四種情況,如圖9所示,其中:“:”后的詞表示實體的類型;“<>”中的詞表示實體的值。本文將有實體值的節(jié)點稱為實體節(jié)點,僅有實體類型而無具體值的節(jié)點稱為變量節(jié)點,代表答案的節(jié)點稱為答案節(jié)點,答案節(jié)點也屬于變量節(jié)點。圖9顯示了四條路徑:“青島大學-屬于-屬于”“青島大學-招生專業(yè)”“青島大學-院系設(shè)置-招生專業(yè)”“青島大學-包含校區(qū)-所屬校區(qū)-招生專業(yè)”。
圖9 核心推理鏈示例圖
雖然這四條路徑均能與答案節(jié)點相連,但是無疑第四條路徑的質(zhì)量最高,為了評估每條路徑的質(zhì)量,本文通過計算每條路徑與問句的相似度,對每條路徑進行評分排序。
通過觀察本體圖,我們發(fā)現(xiàn)任意兩個實體的距離不超過3,而且問句中的答案大多數(shù)都在三跳以內(nèi),因此,我們只考慮三跳以內(nèi)的核心推理鏈,具體步驟如下:
首先,通過查詢知識庫,計算主題實體節(jié)點與答案節(jié)點的最短距離,如果等于1,那么從知識庫中查詢主題實體節(jié)點到答案節(jié)點的所有一跳、兩跳、三跳的路徑;如果等于2,那么查詢所有兩跳、三跳的路徑;如果等于3,那么僅查詢一條路徑即可。
在獲得所有核心推理鏈之后,計算與問題之間的相似性。本文使用BERT初始化詞向量,將兩個句子分別輸入到Siamese循環(huán)神經(jīng)網(wǎng)絡(luò)[15]來生成句子的語義表示,然后利用曼哈頓距離計算語義相似度,搭建的模型(BERT-Siamese模型)結(jié)構(gòu)如圖10所示,其中hleft和hright分別是兩個BiLSTM的輸出向量,將其進行曼哈頓距離計算后輸出相似度結(jié)果y。
圖10 本文相似度計算模型
在得到核心推理鏈之后,還需要解析問句中的約束,問句中的約束是指對答案的限定,將答案聚焦在想要的范圍。約束一般分為實體約束、非實體約束、排序約束,以及計數(shù)約束等[16]。
約束一般加在實體節(jié)點或者中間的變量節(jié)點處。核心推理鏈的實體節(jié)點就是主題實體,變量節(jié)點就是推理鏈中沒有具體值的節(jié)點,如圖11所示。對于問句“青島大學哪些專業(yè)2019年的錄取分數(shù)小于560?”,其核心推理鏈之一為“青島大學-招生專業(yè)”,對于剩余實體“560”和“2019”即是對答案節(jié)點“:專業(yè)”約束,把剩余實體與答案節(jié)點建立連接,即生成最終的查詢圖。
圖11 添加約束示例
添加約束的算法如算法1所示,由于已經(jīng)將時間約束歸為實體約束里,因此本文就依次考慮對實體約束、排序約束和計數(shù)約束的添加。
算法1添加約束算法
輸入:核心推理鏈t,待添加的實體集合E。
輸出:G。
1 G = ?
2 insertttoT
3 foreache∈Edo
4Temp(t) = ?
5 foreacht∈Tdo
6g=AddConstraint(t,e)
7 insertgtoTemp(t)
8 end
9T=Temp(t)
10 end
11 insertTtoG
12 ifpaixu==True:
13 foreachg∈Gdo
14 if “分數(shù)” or “排名”or “招生人數(shù)” ∈g:
15 insert paixuConstraint tog
16 else
17g1 =AddConstraint(g, “分數(shù)”)
18g2 =AddConstraint(g, “排名”)
19g3 =AddConstraint(g, “招生人數(shù)”)
20 insertg1,g2,g3 toG
21 end
22 ifisJishu==True:
23 foreachg∈Gdo
24 insertjishuConstrainttog
25 end
26 returnG
對于實體約束,首先判斷此約束是實體類約束(如“中心校區(qū)”)還是屬性類約束(如錄取分數(shù)的屬性“2019年”),如果是屬性類約束,則先將其轉(zhuǎn)換為具有此屬性的實體類型。然后在推理鏈中查詢是否有此實體類型的節(jié)點,如果有,則直接將約束添加給那個變量節(jié)點;如果沒有,則與其中的變量節(jié)點建立關(guān)系,建立關(guān)系的原則是選擇與距離最近的變量節(jié)點建立關(guān)系,如果與多個變量節(jié)點的最近距離相同,則分別與之建立關(guān)系,生成多個不同的查詢圖,如果與任一節(jié)點均無法建立關(guān)系,則舍棄掉此實體約束。另外對于類型為“分數(shù)”的實體進行額外檢測,利用字符串匹配方法判斷問句中是否在其前面出現(xiàn)“大于”或“小于”等詞語,如果存在,則將約束中的“=”改為“>=”或“<=”。
對于排序約束,能進行排序的實體類型包括“排名”“分數(shù)”“招生人數(shù)”,因此如果有排序?qū)嶓w的存在,那么就查詢此時的查詢圖中是否存在上述變量節(jié)點之一,如果有,則將此約束加到這個變量節(jié)點當中,如果查詢圖中沒有上述變量節(jié)點,則分別添加上述節(jié)點和對應(yīng)的排序約束,生成多個查詢圖。
對于計數(shù)約束,本文通過訓(xùn)練一個二分類的分類器,判斷需要返回的是實體還是實體的數(shù)量。
最后采用2.3節(jié)的相似度計算模型對生成的每個查詢圖進行評分,此得分加上生成此查詢圖的推理鏈的分數(shù)為查詢圖最終的得分,選擇最終得分排名第一的查詢圖作為最終的查詢圖。
得到最終的查詢圖之后要將其轉(zhuǎn)換為Neo4j數(shù)據(jù)庫語句,Neo4j數(shù)據(jù)庫使用的是Cypher查詢語句,圖12描述了程序運行中查詢圖的自動生成過程以及查詢語句的轉(zhuǎn)換。
圖12 查詢語句生成示例圖
問句數(shù)據(jù)集:本文通過人工構(gòu)建問句以及在一些大學的貼吧、百度知道等網(wǎng)站爬取高考咨詢相關(guān)問句的方式,得到3 000條事實類問句作為數(shù)據(jù)集。本文的問句分類(意圖分類和計數(shù)約束二分類)和命名實體識別均使用此數(shù)據(jù)集。
相似度計算數(shù)據(jù)集:相似度計算模型的輸入為兩個句子及其相似性標簽,第一個句子來自于爬取的3 000條問句,第二個句子來自于知識庫,從生成的核心推理鏈和查詢圖中人工選取其中最正確的數(shù)據(jù),標簽設(shè)置為1,其余的標簽為0。為了讓數(shù)據(jù)集的正負樣本均衡,將正樣本重復(fù)2次進行過采樣。經(jīng)過以上處理,得到一個含有29 000個句子對的數(shù)據(jù)集,將其按7∶3的比例分為訓(xùn)練集和測試集。
本文采用微調(diào)BERT的方法進行問句分類,在測試集上的準確率分別為97%和100%,另外本文也探索了其他方法進行問句分類效果對比,實驗結(jié)果如表1所示。
表1 問句分類實驗結(jié)果(%)
BiLSTM-CRF模型的命名實體識別結(jié)果為:精確率為93%,召回率為92%,F(xiàn)1值為92%。BERT-Siamese模型的相似度計算結(jié)果為:精確率為79%,召回率為85%,F(xiàn)1值為81%。整個問答系統(tǒng)隨機采取100道進行測試,其中84%的問題回答正確,從而驗證了本文所提出的問答模型的合理性,也說明本文系統(tǒng)基本可以滿足用戶對高考咨詢的一般問答需求。
為了方便用戶使用,利用Python的Flask框架搭建問答系統(tǒng),運行界面如圖13所示。考生可以查看各個省份的學校,或者根據(jù)分數(shù)選專業(yè)或者根據(jù)專業(yè)選大學,還可以查看學校之間的關(guān)系等。
圖13 本文的問答系統(tǒng)界面
本文基于高考報名時考生經(jīng)常咨詢的問題,利用protégé設(shè)計高考領(lǐng)域的知識圖譜本體,構(gòu)建了高校信息知識圖譜。在此基礎(chǔ)上,對多限制問句的問答方法進行了研究,采用基于深度學習和語義解析相結(jié)合的方法,將用戶的問句自動轉(zhuǎn)換成知識庫查詢語句,實現(xiàn)了高考咨詢問答系統(tǒng)。
本文的問答系統(tǒng)也有不足之處,本文系統(tǒng)只可以回答高考咨詢領(lǐng)域的事實類問句,對于非事實類問句或者知識庫中沒有存入的知識無法回答;另外查詢圖的相似度計算的準確率也有待提高,因此今后的工作將在數(shù)據(jù)源、相似度計算算法等方面進行深入研究。