○楊立新 石 戀 孫宇豪
知識圖譜的理念源自于語義網,以圖作為其數據結構來描述知識并對真實世界的客觀事物之間的關聯關系進行建模。知識圖譜由節點和邊組成,節點表示概念和實體,邊表示事物的關系和屬性,可以用一系列<實體,關系,實體>和<實體,屬性,值>的三元組來表示知識圖譜中的知識。大量的三元組通過關系聯結,構成了網狀的知識結構。知識圖譜從應用領域上來說可以劃分為分為通用知識圖譜和垂直領域知識圖譜。
通用知識圖譜可以看做一個面向通用領域的“結構化的百科知識庫”,其中包含了大量的現實世界中的常識性知識,覆蓋面極廣。通用知識圖譜的知識主要來自于互聯網開放數據、社區眾包等。通常使用自底向上(Top-Down)的方法進行構建。對知識抽取的質量有一定的容忍度,主要應用于搜索、問答等場景。具有代表性的大規模通用知識圖譜有Freebase、DBpedia、Schema.org、Wikidata等,中文通用知識圖譜有Zhishi.me、SSCO、ZhOnto等。
垂直領域知識圖譜面向特定領域,如電商、醫療、金融、農業、安全等。相比較于通用知識圖譜,領域知識圖譜注重知識的深度與精度,對知識質量要求更高。典型的垂直領域知識圖譜有Geo‐Name、GeneOnto、Open PHACTS等。知識圖譜相比傳統的知識表達方式結構化程度更高,更利于計算機處理。
作為知識圖譜的一種重要應用方式,問答系統近幾年也廣泛受到人們的關注。問答系統源于專家系統。
但是這種系統需要專家來構建知識框架,建設周期長且投入成本大,回答范圍有限。以搜索引擎為代表的信息檢索技術是第二個層次的對話系統,但搜索引擎屬于淺層自然語言處理,不能很好地理解用戶的真實意圖,回答準確率不夠高?;谥R圖譜的問答系統,以知識圖譜作為數據支持,通過神經網絡技術理解用戶的意圖。較之以往的問答系統,答案精準且開發成本相對較低是目前主流的問答系統研究方向。相對于基于通用領域知識圖譜的問答系統,由于垂直領域知識圖譜數據來源更少、知識質量更高,基于垂直領域的問答系統受到了更多的人關注。如劉源、李帥馳等對醫療領域問答系統進行了研究,楊燕等對電商領域問答系統技術進行研究,蒲偉等網絡課程智能問答系統進行了研究。這些問答系統都是針對非漁業領域,而且采用的技術體系不夠前沿。本文結合人工智能技術,提出了一套漁業領域智能問答系統的解決方法,先構建漁業知識圖譜,然后進行問句的分析與答案檢索,最后實現本系統。
針對百度百科等網頁格式統一的網頁,使用Python編寫爬蟲獲取該網頁的html源碼,再使用BeautifulSoup解析html源碼獲取對應的數據,存入數據庫。從各種輸入數據中將數據提取為預定義形式,數據提取的輸入輸出定義如下,輸入:從Internet下載或抓取數據;輸出:按照每個數據使用如下分類:名稱、外文名、別名、分布區域、形態特征、生活習性、養殖技術、文本數據,進行分類并存儲到關系型數據庫中。
網絡中存在大量的漁業領域的數據。本文主要通過網絡爬蟲對百度百科中漁業領域相關的知識進行抓取,構成知識圖譜的原始數據。本文使用python實現爬蟲功能,對網頁進行抓取,再使用BeautifulSoup對網頁進行分析,將數據轉化為預定義的格式,數據的預定義格式為:名稱、外文名、別名、分布區域、形態特征、生活習性、養殖技術。最后將數據存儲到MySQL數據庫中。爬蟲處理流程如圖1所示。

圖1 爬蟲處理流程
數據質量的好壞直接影響知識圖譜的構建,所以先對獲取的數據預處理,進行清洗、去重、格式化處理等操作。并將預處理的數據進行分類,作為知識抽取的數據支撐。
預處理的數據還包含非結構數據,還需要進行知識抽取,從文本數據中抽取知識三元組。為了方便進行知識抽取,首先對經過預處理的數據進行分詞。本位采用THULAC進行分詞,同時添加自定義的領域詞典來提高分詞的準確度。本文中采用的深度學習的方式進行三元組的知識抽取。先將文本數據轉化為詞向量的形式,本文使用Google的詞向量工具word2vec對詞進行詞向量的訓練,word2vec包含CBoW和Skipgram兩個模型。
CBoW即連續詞袋模型,該模型不用考慮詞序的信息。其主要思想是,用上下文預測中心詞,從而訓練出的詞向量包含了一定的上下文信息。CBOW的目標函數是對數似然概率式,如公式(1)

其中w為當前詞,w表示其上下文。最后一層使用softmax分類器。每個詞是一個類別,輸出每個詞的概率。y是預測的每個詞的概率,y的計算如公式(2)

這里和是參數,函數是把w,...,w級聯或求平均。
Skip-gram的思想與CBoW恰恰相反,其考慮用中心詞來預測上下文詞。先通過中心詞的獨熱表示從詞向量矩陣中得到中心詞的詞向量得到投影層,然后經過一層Sofmx得到輸出,輸出的每維中代表某個詞作為輸入中心詞的上下文出現的概率。
本文使用CBOW模型訓練詞向量,選取維基百科中文語料作為訓練預料,詞向量維度為256,迭代次數為40次。得到訓練過的詞向量后,構建了一個Mod‐elEmbedding類,作為模型的Em‐bedding矩陣的來源。ModelEm‐bedding類的實例包括Word2vec矩陣,詞數,標簽數word2id詞典,id2label詞典。
漁業知識三元組的知識抽取本質上是一個分類問題,本文采用LSTM-CRF模型錯誤!未找到引用源。進行實現。將預訓練的向量作為模型的輸入,經過LSTM對其進行分類,至于CRF層,完全是為了保證序列的輸出嚴格性,因為CRF對于預測序列有較強的的限制性,比如B-FISH后面只能為I-FISH或者O之類的限制。LSTM-CRF模型結構如圖2所示。

圖2 LSTM-CRF模型結構
LSTM-CRF模型使用了長短時記憶神經網絡(Long Shot-Term Memory Neural Network,LSTM)與CRF相結合進行關系抽取。該模型自底向上分別是Embedding層、雙向LSTM層和CRF層。Em‐bedding層是句子中詞的向量表示,本文通過Word2vec訓練得到詞向量學習模型,作為雙向LSTM的輸入。雙向LSTMF通過一個正向LSIM和一個反向LSIM,分別計算每個詞考慮左側和右側詞時對應的向量,然后將每個詞的兩個向量進行連接,形成詞的向量輸出;最后,CRF層以雙向LSTM輸出的向量作為輸入,對句子進行序列標注。如輸入句子“魚類患鰓病的主要癥狀均為爛鰓”可以得到三元組<鰓病,癥狀,爛鰓>。
知識圖譜的數據主要以三元組的方式存在,傳統的關系型數據庫在進行關系查詢時需要大量的聯表查詢,嚴重影響效率。所以通常知識圖譜以RDF或圖數據庫的方式來進行存儲,本文在此使用neo4j圖數據庫的方式進行三元組信息的存儲。本文一共存儲了17523個實體、34815個關系。在數據庫中查詢中輸入實體“泥鰍”,將會把泥鰍的所屬類別、分布、習性等相關信息以圖譜的方式呈現。實體查詢結果如圖3所示。

圖3 泥鰍實體查詢結果
基于知識圖譜的問答系統需要深層理解用戶的語義信息和檢索內容,才能夠正確的將用戶的問句映射到知識圖譜的數據層。根據用戶的意圖查詢到相應的實體、屬性或語義關系,再將結果進行封裝,以用戶所想要的格式進行展示。本文采取兩種方法來對問句進行理解:基于關系抽取的問句檢索和基于相似度計算的問句檢索。
對于僅包含簡單語義的問句,可以將用戶的意圖轉換為知識圖譜中的三元組。所以對于簡單語義的問句,通過關系抽取的方式能提高用戶搜索速度和查詢準確率??梢杂蒙衔奶岬降腖STM-CRF模型進行關系抽取。對于復雜語義的問句,僅通過關系抽取是無法完全理解用戶的意圖的,可以先將問句進行詞向量的表示,然后用傳統的機器學習對句子進行分類或者聚類,再去進行查詢。具體做法是先通過word2vec訓練出句子的詞向量模型,對于用戶的問句,使用該模型處理得到分布式表達,使用余弦距離公式計算相似性。對句子向量計算cosine距離,如公式(3)

其中x,y是兩個句子向量的各維度的坐標。使用余弦公式計算問題相似性的好處是可以忽略向量絕對長度的影響,從方向上比較相似性。根據該公式算出用戶所提問的問題與問題模板集問句的相似性,再用K近鄰算法找出用戶問題的分類標簽,最后生成答案。本系統K值取1,即最近鄰算法。
問答系統的處理流程如圖4:

圖4 問答系統處理流程圖
(1)先將問句進行預處理,轉換為模型可以識別的格式。預處理的過程包括分詞、去除停用詞、詞性標注、向量表示以及命名實體識別等過程。然后根據命名實體識別的結果判斷該問題是否為領域相關問題,如果不是漁業領域問題,問答過程結束;如果是漁業領域問題,進行下一步處理。
(2)對問句進行關鍵詞拓展,然后與漁業知識庫中的問句模板進行匹配,如果匹配成功則將答案返回給用戶,問答流程結束;如果匹配失敗,進入下一步。
(3)采用基于關系抽取的問句檢索的方式,對問句進行關系抽取。將輸出的三元組作為條件去圖數據庫進行查找,若匹配成功,將答案返回給用戶,問答流程結束;匹配失敗進入下一步。
(4)采用基于相似度計算的方法對問句向量進行相似度匹配,根據相似度匹配相應的查詢模板,進行數據庫查詢,將答案返回給用戶。
為了在漁業知識圖譜中查詢到問題的答案,需要將問題三元組轉換為Cypher查詢語句.根據上述定義的部分問題設計的Cy‐pher查詢模板如表1所示:

表1 部分Cypher查詢模板
如圖5所示,當用戶輸入問題,智能問答系統給出了相應的答案??梢妴柎鹣到y基本上能正確回答出漁業領域相關的一些常見問題。

圖5 問答系統展示
本文介紹知識圖譜的相關知識并構建了漁業領域智能問答系統。從數據的獲取與預處理、詞向量的生成、知識抽取與存儲和答案檢索方案的設計等方面進行了詳細的闡述。采用了詞向量、問句相似度匹配和關系抽取等技術,完成了漁業領域智能問答系統,并取得了比較好的問答效果。