黃東晉,秦 漢,郭 昊
(上海大學 上海電影學院,上海 200072)
隨著移動互聯網的飛速發展,在大數據時代,用戶可以上網通過谷歌、百度等引擎搜索自己想要瀏覽的信息。搜索引擎極大地方便了人們的日常生活,但是也存在不少問題,它沒法精確地返回用戶所需的答案,用戶只能瀏覽相關的網頁去找尋自己的答案,這樣浪費了用戶的時間和精力。而且,搜索引擎是通過關鍵字來返回相關網頁信息,沒法理解用戶輸入的問題中所含的語義信息。智能問答系統(intelligent question answering system)已經有半個多世紀的研究歷史,互聯網的飛速發展使得基于知識圖譜的問答系統成為當下學術界以及互聯網公司研究的熱點。基于知識圖譜的問答系統可以根據用戶輸入的問句直接返回精確的答案,它不需要用戶從海量的相關信息中找到自己想要的答案,節約了用戶的時間和精力。
基于知識圖譜的問答系統也被簡稱為知識庫問答系統。主要分傳統的知識庫問答和基于深度學習的知識庫問答。傳統的知識庫問答又包括基于語義解析和基于信息抽取的知識庫問答。語義解析知識庫問答是從語義上分析自然語言,將其轉化為知識圖譜可以“理解”的形式,然后在圖譜中進行查找答案。語義解析的方法通常會用到依存分析[1]或組合文法[2]的方法來分析和處理自然語言,然后轉化成知識圖譜查詢語言查找答案。Berant等人[3]使用了基于語義解析的知識庫問答文章。基于信息抽取的知識庫問答則是抽取問題的關鍵信息,此類方法去除了繁瑣的語義解析。Yao等人[4]通過分析自然語言抽取出問題里面的主題實體,然后通過分類器訓練從一系列候選答案中選出正確答案。區別于傳統的知識庫問答,基于深度學習的知識庫問答使用表示學習[5]的技術,將問題和答案都用向量來表示,從而問答任務變成問題和答案之間匹配問答問題[6]。Dong等人[7]采用三個文本卷積網絡(text-CNN)分別從答案的三個方面進行表示學習,這三個方面為答案類型、答案路徑、答案上下文。Yin等人[8]在處理問題生成的短語結構樹時引入了遞歸神經網絡,遞歸神經網絡通過分析問題中的隱藏關系和類型意圖來提高回答的準確率。Yih等人[9-10]采用卷積神經網絡語義模型和分段查詢圖生成,開發了基于語義相似度的語義解析框架。Hao等人[11]提出了一種使用雙向LSTM并結合問題引入注意力機制提高問句特征的知識圖譜問答設計。近年來市場上也出現了很多問答機器人,例如蘋果的siri、微軟的小冰等,但這些機器人的知識庫大多偏向開放領域的,針對具體專業的問題,可能回答不出來。目前知識圖譜在電影原聲方面的應用很少,無法滿足用戶對電影里面電影原聲的曲目、發行時間以及出版社等問題的查詢。因此,該文基于BERT-CNN分類算法構建了一個面向電影原聲的智能問答系統,可以準確地回答電影原聲相關的問題,并且采用BERT-CNN算法進行問題分類提高問題分類的準確率,在答案查詢部分增加相似性查詢也提高了系統的實用性。
該文設計的基于知識圖譜的問答系統,主要結合知識圖譜將用戶輸入的自然語言問句轉化為Cypher查詢語句。首先需要對用戶輸入的自然語言問句進行預處理,比如分詞、去停用詞等,得到實體,然后根據分類算法可以獲得問題的分類類別,從而找到該類別的查詢模板,接著將實體填入查詢模板中就可以從知識圖譜中獲得用戶所需的答案。該系統分為三部分,分別為知識圖譜構建、問題預處理和答案生成。系統框架如圖1所示。

圖1 系統框架
·知識圖譜構建部分:主要是將網上爬取的數據進行結構化處理,然后以<節點,關系,節點>三元組的形式存入數據庫中。
·問題預處理部分:將用戶輸入的問題通過jieba分詞,去停用詞等,進行詞性標注,然后通過基于規則和詞典的方法識別出實體,最后將實體與屬性送到BERT-CNN分類器中訓練,得到問題的分類結果。
·答案生成部分:根據分類結果選擇不同的Cypher查詢模板,然后構造相應的查詢語句從知識圖譜中獲得用戶所需的答案。
知識圖譜[12]是一個擁有很多節點和關系的語義網絡,它可以把與關鍵詞相關的知識體系系統化地展示給用戶。例如文中構建的電影原聲方面的知識圖譜,既可以使用戶更加全面準確地了解電影原聲的信息,又可以使用戶花費更少的時間擁有更佳的關于電影原聲信息的搜索質量和搜索體驗。
該文選擇爬豆瓣有關電影原聲的相關網頁,為了構建電影原聲知識圖譜中的各類節點,在網頁中爬取“片名”、“表演者”、“流派”、“介質”、“發行日期”、“出版社”、“相關電影”、“曲目”、“評分”、“簡介”標簽內的內容,然后將爬取到的內容進行進一步處理,最終以Json文件的格式進行保存。整個數據庫大約有1 000多條電影原聲信息,關于最新的電影原聲信息,也會通過手動添加數據集的方式使知識圖譜趨于完備。
知識圖譜是通過定義實體與實體間的關系來把知識串起來的,“實體”是知識圖譜中節點的表示方法,圖譜中的邊是由“關系”來描述的。以電影原聲的知識圖譜為例,實體是電影原聲,出版社和曲目等,而關系則是用來連接兩個實體的,例如電影原聲和曲目的關系是“包含”。
該文選擇Neo4j圖數據庫[13]來存儲數據,構建知識圖譜。Neo4j是NoSQL的圖形數據庫,性能比較高。它可以把結構化的數據存儲在網絡上而不是表格中,非常適合知識圖譜的存儲方式。由于任意的節點都能通過關系與其他節點相連接,節點也可以有很多的屬性,所以也使得添加數據變得非常方便。
接下來將展示電影原聲的知識圖譜,如圖2所示,這里將電影原聲作為一個中心節點,此節點中包含電影原聲的相關屬性,例如流派、介質、相關電影、評分以及歌手等等。從這個中心節點也能看到與其他節點的關系,例如電影原聲和出版社的關系是“press”。

圖2 電影原聲知識圖譜
在問句分類環節中,首先需要按照問句設計模塊確定查詢意圖。該文將問題意圖分為10類,然后每一類中再以不同的問法構建數據集。最終通過手動構建的訓練集約20 000條,測試集和驗證集大約也都有2 000條。把BERT[14]當作embedding層送入CNN[15]模型中可以取得更好的分類準確率,分類準確率達到91.24%,所以選擇BERT-CNN分類算法來做問句的分類,其他分類算法的準確率如表2所示。
BERT:BERT模型是一個多層雙向Transformer編碼器,Transformer是一種注意力機制,可以學習到文本中單詞的上下文關系。Transformer原型包含encoder機制和decoder機制,encoder作為輸入接受文本,decoder主要負責預測結果。BERT的出現使得預訓練產生詞向量與下游具體NLP任務(對詞向量的操作)的關系發生了很大的改變,從word2vec到BERT,主要工作是把下游具體NLP任務的工作慢慢轉移到預訓練詞向量上。word2vec是基于單詞級別的,它的缺點是上下文無關,而BERT是基于句子級別的,Transformer做encoder可以實現上下文相關,BERT模型進一步提高了詞向量模型的泛化能力,可以充分描述字符級,詞級以及句子級的特征。BERT的模型如圖3所示,其中E1-EN為一個句子的詞嵌入,Trm為Transformer的編碼器結構[16],Transformer不需要循環,而是并行處理序列中的所有單詞或符號,同時利用自注意力機制將上下文與較遠的單詞結合起來,充分考慮了上下文信息。T1-TN為輸出,分別對應其上下文。

圖3 BERT模型
卷積神經網絡(convolutional neural networks,CNN):最初應用于圖像處理,并且在圖像處理領域取得了非常好的效果,同時它可以應用在文本分類上面。文本分類主要是準確無誤地提取句子或文檔的中心思想,將句子或文檔的關鍵字作為特征去訓練分類器進行分類,而CNN的卷積和池化就是一個抽取特征的過程。CNN模型如圖4所示,通常包括卷積層、池化層和全連接層。卷積層的作用是進行特征提取,然后將其特征圖作為池化層信息過濾和特征選擇的輸入。池化層的作用是降低維度,通過降采樣可以更進一步降低維度,池化層分為最大池化和平均池化兩大類。CNN中的全連接層就相當于傳統前饋神經網絡中的隱含層,它位于CNN隱含層的最后部分,并且只向其他全連接層傳遞信號。

圖4 卷積神經網絡示意圖
令Xi∈Rk表示句子中第i個字的k維向量,那么長度n為句子(不夠要補齊到n),則可以表示為:
X1:n=X1⊕X2⊕…⊕Xn
(1)
其中,⊕是連接符。令ω∈Rhk表示卷積核,它的窗口大小為h*k,那么通過卷積操作的特征c為:
ci=f(ω·Xi:i+h-1+b)
(2)
其中,b∈R是偏執變量,f是非線性激活函數,通過卷積操作,句子X1:n轉化成特征圖c:
c=[c1,c2,…,cn-h+1]
(3)

3.2.1 全匹配查詢
Cypher語句是Neo4j圖數據庫的查詢語言,它與SQL語句類似,內容豐富,同時也包含著很多封裝好的函數。該文通過命名實體識別和問題分類,就可以把用戶輸入的問句轉換成Cypher查詢語句,然后在Neo4j中執行就可以得到用戶所需要的答案。該文針對不同類型的問題制定了不同的Cypher查詢模板,例如:
(1)查詢“電影原聲發行時間”的模板,已知實體“電影原聲(Music)”,還有兩個實體之間的關系,這里是電影原聲與發行時間的關系:“date”,就可以得到實體“發行時間(Date)”:MATCH (m:Music)-[r:date]->(n:Date) where m.name=‘{0}’ return n.name。
(2)查詢“電影原聲評分”的模板,已知實體“電影原聲(Music)”,就可以獲得屬性“評分”的值:MATCH (m:Music) where m.name=‘{0}’ return m.name, m.score。
3.2.2 相似度匹配查詢
用戶在進行自然語言輸入時,難免會遇到打字錯誤或者增刪了某些字,這樣采用全匹配時就無法從字典中匹配到相應的實體,從而在Neo4j中返回正確的答案。為了增強問答系統的實用性,該文還提供了第二種查詢即相似度查詢。它是通過計算詞語和字典中的詞的相似度,如果最終得分大于0.7,則說明它們具有相似性,這里的得分是余弦相似度評分和編輯距離評分的均值。例如誤把“紅樓夢”輸入成“紅樓”時,即當用戶輸入“紅樓的評分是多少”,系統首先采用全匹配發現找不到實體“紅樓”,接著就采用相似度匹配發現和“紅樓夢”的相似度評分達到0.736,超過閾值0.7,最終返回答案“電影原聲紅樓夢的評分是:9.7”。
該系統可以對用戶的問題進行實時分析并給出準確的答案,系統的硬件環境是:Inter(R) Core(TM)i5-8300H CPU @ 2.30 GHz的處理器,8 GB的內存,NVIDIA GeForce GTX 1050 Ti的顯卡。該系統是基于電影原聲知識圖譜的,首先把用戶輸入的問句預處理識別出實體,然后通過BERT-CNN算法將問題進行分類。實驗結果表明,在10類問句的數據集上,分類的準確率高達91.24%。最后進行答案查詢,答案查詢時首先進行全匹配查詢,全匹配失敗時采用相似度查詢,從而得到問題的答案。實驗結果如表1所示。

表1 實驗結果
在用戶問題分類時采用了多種算法進行比較,最終基于該文自己構建的數據集進行實驗后發現BERT-CNN的分類效果最好,達到91.24%,其次是BERT,分類準確率達到89.98%,效果最差的是NB(樸素貝葉斯算法),準確率只有80.89%。所以選用BERT-CNN分類算法來進行問題分類,實驗結果如表2所示。

表2 分類算法準確率比較
將該智能問答系統與一個使用協同過濾的電影推薦系統集成到瀏覽器上運行,可以兼容多種瀏覽器,開發技術選擇了Flask微型Web開發框架。系統整體流程是首先進行用戶登錄界面,基于用戶協同過濾的電影推薦系統可以針對不同的登錄用戶推薦4部電影,然后智能問答系統又可以回答用戶關于電影原聲方面的問題。效果如圖5所示,首先問答規則說明用戶可以按照這樣的類別來進行問題的輸入,然后用戶在輸入框中輸入問題后點擊搜索就可以獲得問題的答案了。
提出了一種基于BERT-CNN的分類算法,并且把該算法應用到智能問答系統的用戶意圖查詢部分。該智能問答系統可以準確回答電影原聲領域的相關知識,BERT-CNN分類算法可以精確地查詢用戶問題的意圖,答案查詢部分增添相似度查詢也有效提高了系統的實用性。下一步工作是改進問題預處理模塊,基于自定義詞典的實體識別沒有捕捉到詞與詞之間的語義關系,并且還要耗費時間來構建詞典,因此可以采用深度學習的方式來獲得更好的識別效果。

圖5 問答系統