鄭泳智 吳惠粦 朱定局 陳炳旭 李文景
(1.華南師范大學計算機學院 廣州 510631)(2.廣東省農(nóng)業(yè)科學院植物保護研究所 廣州 510640)(3.廣州國家現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)科技創(chuàng)新中心 廣州 510500)
知識圖譜的提出源自于谷歌優(yōu)化其搜索引擎的初衷,其前身是Berners-Lee[1]提出的語義網(wǎng)(Semantic Web),本質(zhì)是用圖來表示知識,如圖1所示,其中使用節(jié)點表示實體概念,邊表示關系,既清晰明了又可用于推理。自2002年來,許多機構和公司都采用了自動和半自動化形式采集數(shù)據(jù)并設計了較成熟的通用領域知識圖譜,如DBpedia[2],F(xiàn)reebase[3],YAGO[4],XLore[5]等。
圖1 語義網(wǎng)示例
而智能問答系統(tǒng)(Knowledge Based Question Answering,KBQA)的設計初衷是為了能讓機器讀懂人的自然語言問題,在經(jīng)過程序的處理后,又以自然語言的形式回答人類。在知識圖譜概念流行之前,智能問答的技術方案通常是基于句向量的語義檢索或基于分類模型的問答系統(tǒng),利用知識點的樣本和統(tǒng)計特征訓練模型。而近年來隨著知識圖譜的發(fā)展,研究者嘗試在程序的處理過程中加入并依托知識圖譜的先驗知識來進行回答,如Jiang等[6]構建基于知識圖譜的醫(yī)學問答系統(tǒng),王震南等[7]構建基于知識圖譜的軍事問答系統(tǒng)。
當前,農(nóng)作物病蟲害領域開源知識主要以傳統(tǒng)數(shù)據(jù)庫形式進行存儲,聚合能力不高。而知識圖譜對領域知識的管理較好,夏迎春等[8]根據(jù)作物病蟲害數(shù)據(jù)分類標準生成本體層,并在其基礎上擴展實體層從而形成知識圖譜,同時實現(xiàn)了圖譜的可視化;吳茜等[9]從互聯(lián)網(wǎng)中收集農(nóng)業(yè)數(shù)據(jù),利用Protégé等工具構建了涵蓋農(nóng)作物品種、病蟲害和農(nóng)藥肥料等知識的農(nóng)業(yè)領域知識圖譜;王丹丹等[10]利用公開數(shù)據(jù)集和農(nóng)業(yè)語義詞典上的水稻數(shù)據(jù)構建了水稻知識圖譜,在領域?qū)<抑笇峦瓿芍R推理與補全。但這些知識圖譜在在應用層面的規(guī)模化、智能化、體系化等方面仍有很大的提升空間,如何有效利用知識圖譜的數(shù)據(jù)實現(xiàn)問答系統(tǒng)仍是十分有挑戰(zhàn)性的工作?;谠搯栴},本文以農(nóng)業(yè)病蟲害知識信息化為出發(fā)點,構建荔枝和龍眼病蟲害知識圖譜,并在知識圖譜的基礎上構建智能問答系統(tǒng)。
垂直領域知識圖譜的構建是面向特定領域的,是基于行業(yè)數(shù)據(jù)構建,強調(diào)知識的深度,本體的頂層設計通常離不開領域?qū)<覅f(xié)助,因此為了保證知識的質(zhì)量,本研究在領域?qū)<业膮f(xié)助下通過自頂向下方式,結合專家內(nèi)部數(shù)據(jù)與百度百科、維基百科數(shù)據(jù),經(jīng)過數(shù)據(jù)清洗、知識抽取等步驟,荔枝和龍眼病蟲害知識圖譜,具體流程如圖2所示。
圖2 病蟲害知識圖譜構建流程
數(shù)據(jù)采集是構建領域知識圖譜的第一步,但通常領域知識圖譜的數(shù)據(jù)來自于行業(yè)數(shù)據(jù)庫,本研究使用來自廣州農(nóng)科院的專家內(nèi)部數(shù)據(jù),同時通過爬蟲程序抓取網(wǎng)絡上相關的非結構化與結構化數(shù)據(jù),為了更高效地采集數(shù)據(jù),本文采用基于Scrapy框架編寫爬蟲程序,抓取百度百科、維基百科上的相關數(shù)據(jù)。對獲取得到的數(shù)據(jù)進行去重、異常值處理后,將數(shù)據(jù)保存至MongoDB數(shù)據(jù)庫,其中,數(shù)據(jù)清洗使用正則表達式進行結構化數(shù)據(jù)提取,如病菌的科、屬等信息可通過表達式/[屬].+科/g進行提取。
知識獲取的關鍵在于如何從數(shù)據(jù)源中提取所需候選知識單元,針對不同類型數(shù)據(jù)需要采用不同的知識獲取方式。對于結構化數(shù)據(jù),各項之間已存在明確的對應關系,可以直接構建三元組,部分結構化數(shù)據(jù)如表1所示。
表1 數(shù)據(jù)清洗所得的部分結構化數(shù)據(jù)
其中,非結構化數(shù)據(jù)的知識獲取,置信度較高的做法是人工標注,雖然可靠準確,但是工作量較大。一些主流的做法是通過自然語言處理手段來處理,例如對文本進行分段、分句、分詞、去除停用詞后再進一步進行實體抽取、關系抽取。因此本研究在對非結構化文本去除停留詞后,利用HanLP工具包[11]對文本分詞、分句,再對非結構化數(shù)據(jù)進行標注,形成三元組數(shù)據(jù)。同時對病蟲和病害進行BIO實體標注,構建病蟲害實體數(shù)據(jù)集,作為實體識別模型的數(shù)據(jù)集。專家內(nèi)部知識數(shù)據(jù)與百度百科上的知識數(shù)據(jù)存在重復的問題會導致實體屬性名稱不一致、數(shù)據(jù)類型沖突。為消除歧義,此處將實體詞或?qū)傩栽~進行向量化。例如,詞語A和詞語B經(jīng)過BERT模型向量化后,在向量空間上采用式(2)所示的余弦相似度評估向量間的相似度從而達到知識融合的目的。
目前業(yè)內(nèi)存儲知識的方式有三種,如表2所示,第一種是三元組形式的資源描述框架[12](Resource Description Framework,RDF)存儲;第二種是傳統(tǒng)關系型數(shù)據(jù)庫存儲;第三種是圖數(shù)據(jù)庫存儲。
表2 知識存儲方式對比
結合本項目的實際情況,為了更優(yōu)秀的讀寫性能和可擴展性,采用了第三種存儲方式,使用主流的Neo4j圖數(shù)據(jù)庫,當完成該任務后,Neo4j可視化界面如圖3所示。
圖3 Neo4j可視化界面
本研究中的問答系統(tǒng)構建過程分為AC自動機構建、命名實體識別模型構建、意圖識別模型構建、答案封裝與系統(tǒng)部署四個部分,具體如圖4所示。
圖4 問答系統(tǒng)架構圖
在獲取問句中的實體時,為保證用戶高效問答體驗,采用AC(Aho-Corasick)算法[13]構建AC自動機模塊,快速匹配問句中的實體詞。它用于從給定序列中查找所有相同的子字符串,可以從文本中匹配多個字符串并獲取其位置、總數(shù)等相關信息,廣泛應用于信息檢索、入侵檢測等領域。該算法依賴于構建一個有限狀態(tài)自動機來實現(xiàn),假設目標字符串的總長度為n,模式字符串的集合為P={p1,p2,…,pm},那么時間復雜度為O(N),所有模式字符串都可以在n內(nèi)匹配,且不受大小的影響。該算法在均勻分布時具有近似線性的時間復雜度,大約是字符串的長度加上所有匹配的數(shù)量。因此,AC算法在最好和最壞情況下的時間復雜度都是O(N)。
當AC自動機匹配失敗后,命名實體識別模塊試圖在問句中提取實體詞。命名實體識別(Named Entity Recognition,NER),是指識別文本中具有特定意義的實體,主要包括人名、地名、機構名、專有名詞等。通常包括兩部分:1)實體邊界識別;2)確定實體類別(人名、地名、機構名或其他)。在本研究中,構建命名實體識別模型的目的是從問句中確定病蟲、病害名稱等實體,得到的實體詞將鏈接至知識圖譜中。當前命名實體識別的主要技術方法分為基于規(guī)則和詞典的方法、基于統(tǒng)計的方法、二者混合的方法、神經(jīng)網(wǎng)絡的方法等。目前主流的方法是使用基于神經(jīng)網(wǎng)絡的方法,通常使用BiLSTM-CRF模 型,如 古 雪 梅 等[14]用 增 強 的BiLSTM-CRF模型識別推文中惡意軟件名稱、梁文桐等[15]構建BERT-BiLSTM-CRF模型進行電子病歷的命名實體識別。本文使用上文所述的人工標注BIO數(shù) 據(jù) 集、構 建BiLSTM-CRF與BERT-BiLSTM-CRF實體識別模型,提取問句中的病蟲、病害實體詞。將P(精確度)、R(召回率)、F1作為模型評價指標,具體定義如下所示:
實驗結果如表3所示,在病蟲害命名實體識別數(shù)據(jù)集上,Bert+BiLSTM+CRF模型的識別效果更優(yōu),有80%以上概率能找到問句中的相應實體詞,給予實體詞提取模塊可靠的支撐。
表3 實體識別實驗結果
意圖識別是通過分類的辦法將句子或Query分類至相應的意圖種類,這在搜索引擎以及智能問答中都起很重要的作用。即當用戶輸入一句話或者一段文本時,意圖識別可以準確識別出它是哪一類問題,然后分配給相應的處理機進行二次處理,在問題分類很多的情況下可明顯提升問題匹配的準確度,目前主流方案是結合了BERT模型[16]的變式模型。BERT是谷歌在2018年發(fā)布的語言表示模型。它通過維基百科和書籍語料組成的龐大語料進行了預訓練,使用時只要根據(jù)下游任務進行輸出層的修改和模型微調(diào)訓練,就可以得到很好的效果。
本研究中,對于問句中提問的意圖,將其定義為查詢田間癥狀、發(fā)病條件、防治措施等信息的文本多分類任務。構建BERT、BERT+CNN、BERT+RCNN、BERT+RNN、ERINE主流的分類模型,在病蟲害領域的問句意圖數(shù)據(jù)集中進行實驗,將效果最佳模型部署至問答系統(tǒng)中的意圖識別模塊。具體實驗結果如表4所示,問答系統(tǒng)的意圖識別模塊取F1值最高的BERT+RNN模型作為最終模型上線。
表4 意圖識別實驗結果
當命名實體識別子模塊得到問句的實體詞,意圖識別子模塊識別出問句的意圖后,將相應的詞作為變量填入預設的Cypher查詢語句中。Cypher查詢語句是Neo4j獨有的查詢語言,是一種類似與SQL語句的查詢語言,通過該語句可以在Neo4j圖數(shù)據(jù)庫中快速查得相應的實體節(jié)點,并將實體節(jié)點的相關屬性封裝成答案句返回給提問者。例如,完成問句“荔枝白粉病的防治措施有哪些”的問題解析后,得到“荔枝白粉病”實體詞和“查詢防治措施”的意圖,填入預設Cypher語句,得到“MATCH(s:Sick{sickname:‘荔 枝 白 粉 病’})return s.measures”,即可查詢出其防治措施。最后,利用Flask框架構建Web后端接口提供提問的入口,并構建基于React框架的前端頁面,結合Antd的UI庫,建立起用戶與問答系統(tǒng)的橋梁,用戶只需在網(wǎng)頁中的輸入框輸入問句,即可得到如圖5、6所示的結果。
圖5 問答可視化界面1
圖6 問答可視化界面2
本文以農(nóng)業(yè)信息化為目的,通過爬蟲、Neo4j、文本分類、命名實體識別等技術構建基于病蟲害的知識圖譜問答系統(tǒng),為智慧農(nóng)業(yè)的發(fā)展開辟了新的路徑,為知識圖譜頂層應用的落地提供了技術參考。