1. 程式人生 > >使用深度雙向LSTM模型構造社群問答系統

使用深度雙向LSTM模型構造社群問答系統

/*.*/

                                                     author: 張俊林     

關於社群問答系統的問題背景,我們在之前的“利用卷積神經網路構造社群問答系統”一文裡已經說明得很清楚,本文就不再贅述,不清楚背景的讀者可自行參照上文,我們這些相關的研發工作主要是為了開發暢捷通“會計家園”交流社群的相關功能。為了保持行文完整,簡明敘述形式化描述的問題如下:

假設我們已知問答庫如下:


其中,Qi是問答社群中的歷史問題,AiQi問題的精華答案;

現有社群使用者提出的新問題:Qnew

我們需要學習對映函式:


意即對於新問題Qnew,我們希望通過學習系統找到社群中已經出現過的語義相同問題

Qi,然後將對應的答案Ai推薦給使用者。這樣就達到了社群資訊複用的目的。這個問題其實對於問答社群比如百度知道、知乎等都是存在的,解決問題的思路也完全可以複用到此類問答社群中。

除了上篇文章講述的利用CNN來構造ML系統外,我們還嘗試了使用RNN及其改進模型LSTM,本文主體內容即為使用深度雙向LSTM構造社群問答系統的思路及效果。

|深度雙向LSTM模型



                                                       1 深度雙向LSTM

深度雙向LSTM模型的結構如圖1所示。首先強調一下,這個結構也是一個解決對比兩個句子相似性的通用RNN解決方案,不僅僅能夠使用在問答社群,凡是涉及到對比兩個句子或者實體關係的場合完全可以套用這個模型來解決,這點希望讀者注意。

首先,因為我們面臨的問題是對比兩個問題QiQj是否語義相同,那麼對於RNN來說存在一個神經網路的輸入層如何構造的難題。CNN解決這類問題就比較直觀,一般一個輸入套上一個CNN來抽取出句子特徵,然後再套上MLP神經網路來表達兩者之間的關係即可。RNN表達單個輸入句子是非常直觀的,但是直接表達兩個句子之間的關係相對而言就沒那麼直觀。一般可以如圖1這麼做,就是把兩個問題QiQj拼接起來,中間用一個特殊分隔符EOS分割,這裡EOS不代表一個句子的結束,而是代表兩個句子的分隔符號,這個也請讀者注意。如此就構造出了RNN的輸入層。

有了輸入層,上面就好處理了。首先我們在輸入層之上,套上一層雙向LSTM層,

LSTMRNN的改進模型,相比RNN,能夠更有效地處理句子中單詞間的長距離影響;而雙向LSTM就是在隱層同時有一個正向LSTM和反向LSTM,正向LSTM捕獲了上文的特徵資訊,而反向LSTM捕獲了下文的特徵資訊,這樣相對單向LSTM來說能夠捕獲更多的特徵資訊,所以通常情況下雙向LSTM表現比單向LSTM或者單向RNN要好。圖1中輸入層之上的那個BLSTM層就是這個第一層雙向LSTM層神經網路。

我們可以把神經網路的深度不斷拓展,就是在第一層BLSTM基礎上,再疊加一層BLSTM,疊加方法就是把每個輸入對應的BLSTM層的輸出作為下一層BLSTM神經網路層相應節點的輸入,因為兩者完全是一一對應的,所以很好疊加這兩層神經網路。如果你覺得有必要,完全可以如此不斷疊加更深一層的BLSTM來構造多層深度的BLSTM神經網路。

在最後一層BLSTM神經網路之上,可以使用Mean Pooling機制來融合BLSTM各個節點的結果資訊。所謂Mean Pooling,具體做法就是把BLSTM各個節點的輸出結果求等權平均,首先把BLSTM各個輸出內容疊加,這是pooling的含義,然後除以輸入節點個數,這是mean的含義,Mean Pooling就是這個意思。

如何從物理意義上來理解Mean Pooling呢?這其實可以理解為在這一層,兩個句子中每個單詞都對最終分類結果進行投票,因為每個BLSTM的輸出可以理解為這個輸入單詞看到了所有上文和所有下文(包含兩個句子)後作出的兩者是否語義相同的判斷,而通過Mean Pooling層投出自己寶貴的一票。所以RNN場景下的Mean Pooling可以看作一種深度學習裡的“民主黨”投票機制。

Mean Pooling之上,我們還可以套上一層SoftMax層,這樣就可以實現最終的分類目的。

通過以上方式,我們就通過輸入層、多層BLSTM層、Mean Pooling層和輸出層構造出一個通用的判斷兩個句子語義是否相同的深度學習系統。其實這個結構是非常通用的,除了判斷兩個句子關係,對於單句子分類明顯也是可以套用這個結構的。

模型結構已經講完,後面我們將進入實驗部分,因為希望和CNN結果進行效果對比,我們先簡單說明下兩個同樣可以用來解決社群問答問題的CNN結構,這兩個結構在之前的“利用卷積神經網路構造社群問答系統”文中都有詳細描述,這裡不展開講,只是列出結構圖,以方便理解和對比模型。

|兩個CNN模型結構

兩個CNN模型結構參考圖2和圖3,圖2這種結構是利用CNN判斷多個輸入句子關係的簡單直接的結構,含義是先各自抽取每個句子的特徵然後比較兩者的關係。而圖3這種結構的含義是先把兩個句子之間的關係明確表達出來作為輸入,然後再套上一個CNN模型來進行分類預測。


2 CNN模型1


3 CNN模型2

|實驗結果及與兩個CNN模型對比

在之前的文章“利用卷積神經網路構造社群問答系統”中我們使用自己構造的實驗資料驗證了CNN模型2的效果。之後,我們增加了訓練資料的數量,以及加大了負例的難度,其實在這個社群問答問題中,負例的難度對於實驗效果指標影響是比較大的。所謂難度,是指負例中兩個句子間語義相關程度到底有多強,如果負例中兩個句子語義相關程度越強,則分類難度越高。

至於模型,我們補充了CNN模型1,在新資料集合下測試了CNN模型2的效果,對於BLSTM來說,則做了雙層BLSTM和單層BLSTM的實驗,所以可以認為有四個模型參與效果對比。

經過引數調優,這四個模型在這個新的訓練集和測試集下,具體實驗結果如下:

     CNN模型1             分類精度:89.47%

     CNN模型2             分類精度:80.08%

     雙層BLSTM模型分類精度:84.96%

     單層BLSTM模型分類精度:89.10%

可以看出,在這個問答社群問題裡,CNN模型1和單層BLSTM效果接近,而雙層BLSTM模型效果有下降,這也許跟實驗資料規模不夠大有一定關係,所以複雜模型的優勢發揮不出來,而CNN模型2則效果相對差些,這也許說明了CNN模型2沒有將兩個句子的原始資訊輸入到模型裡,而是直接將其關係作為輸入,這種情況下存在資訊損失的可能。

致謝:感謝暢捷通智慧平臺的沈磊、薛會萍、黃通文、桑海巖等同事在模型訓練及訓練資料的收集整理方面的工作。

掃一掃關注微訊號:“布洛卡區” ,深度學習在自然語言處理等智慧應用的技術研討與科普公眾號。



相關推薦

使用深度雙向LSTM模型構造社群問答系統

/*.*/                                                     author: 張俊林     關於社群問答系統的問題背景,我們在之前的“利用卷積神經網路構造社群問答系統”一文裡已經說明得很清楚,本文就不再贅述,不清楚背景的

基於深度學習的FAQ檢索式問答系統

問答系統是資訊檢索的一種高階形式,能夠更加準確地理解使用者用自然語言提出的問題,並通過檢索語料庫、知識圖譜或問答知識庫返回簡潔、準確的匹配答案。相較於搜尋引擎,問答系統能更好地理解使用者提問的真實意圖, 進一步能更有效地滿足使用者的資訊需求。問答系統是目前人工智慧和自然語言處理領域中一個倍受關注並具

LSTM模型問答系統中的應用

在問答系統的應用中,使用者輸入一個問題,系統需要根據問題去尋找最合適的答案。 1:採用句子相似度的方式。根據問題的字面相似度選擇相似度最高的問題對應的答案,但是採用這種字面相似度的方式並不能有效的捕獲使用者意圖的能力有限。 2:IBM早期應用在watson系統中的De

DSSM:深度語義匹配模型(及其變體CLSM、LSTM-DSSM)

引用 neu ctu dell 卷積層 Speak 別了 tin 處理 導語 在NLP領域,語義相似度的計算一直是個難題:搜索場景下Query和Doc的語義相似度、feeds場景下Doc和Doc的語義相似度、機器翻譯場景下A句子和B句子的語義相似度等等。本文通過介紹DSSM

Bert-一種基於深度雙向Transform的語言模型預訓練策略

今天的部落格主要參考了論文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。這篇paper是Google公司下幾個研究員發表的,而且在NLP領域引起了很大的轟動(在多個NLP任

QA問答系統中的深度學習技術實現

應用場景 智慧問答機器人火得不行,開始研究深度學習在NLP領域的應用已經有一段時間,最近在用深度學習模型直接進行QA系統的問答匹配。主流的還是CNN和LSTM,在網上沒有找到特別合適的可用的程式碼,自己先寫了一個CNN的(theano),效果還行,跟論文中的結論是吻合的。目前已經應用到了我們的產品上。

LSTM模型預測效果驚人的好,深度學習做股票預測靠譜嗎?

 向AI轉型的程式設計師都關注了這個號???大資料探勘DT資料分析  公眾號: datadw給你

深度學習基礎(六):LSTM模型及原理介紹

Recurrent Neural Networks 人類並不是每時每刻都從一片空白的大腦開始他們的思考。在你閱讀這篇文章時候,你都是基於自己已經擁有的對先前所見詞的理解來推斷當前詞的真實含義。我們不會將所有的東西都全部丟棄,然後用空白的大腦進行思考。我們的思想擁有永續性。 傳統的神經網路並不能做到這點

深度語義匹配模型-DSSM 及其變種

字母 pooling 獨立 層次 ssm 一次 nag hot lsa 轉自:http://ju.outofmemory.cn/entry/316660 感謝分享~ DSSM這篇paper發表在cikm2013,短小但是精煉,值得記錄一下 ps:後來跟了幾篇d

智能問答系統的產品化思路

我們 pizza 手機 幫助 組件 進行 而且 時間 三方 一、智能問答系統最大的價值在於為客服附能   現在普遍認為智能問答能夠獨立解決很多問題,但是必須要承認現在技術所處的初級階段的性質。也就是說,智能問答系統在現階段最大的   價值在於為客服人員附能,而並非獨

吳恩達 DeepLearning.ai 課程提煉筆記(4-2)卷積神經網絡 --- 深度卷積模型

mes and shift abd actual 應用 比賽 特征 通道 1. 經典的卷積網絡 介紹幾種經典的卷積神經網絡結構,分別是LeNet、AlexNet、VGGNet。 LeNet-5: LeNet-5主要是針對灰度設計的,所以其輸入較小,為 ,其結構如下:

基於移動端的問答系統--需求分析與原型設計

sig png 問題 repo evel 學會 高校 影響 答復 一、前言 1、結對者:2015034643032 孔潭活、2015034643023 周宏傑 2、需求分析模型:NABCD 模型 3、原型設計工具:Axure RP 8、墨刀、FSCapture 二、結對

使用Spring MVC 框架構造超市訂單系統-1總結

訪問 單例模式 pri 通過 res 使用 靜態 cep 總結 單例模式:(Singleton)是一種常見的設計模式,通過單例模式可保證系統在運行期間有且僅有一個實例。常見的兩種實現方法:餓汗模式和賴漢模式。 搭建SpringMVC+Spring+JDBC的框架,需要在We

【原創】總結大創項目-基於深度學習的智能紅綠燈調控系統

部門 圖像識別 痛苦 支持 軟件 醫療 要求 穩定 車道檢測 一、產品定位分析   (註:以下調研均發生於2017年5月前。)   由於此次項目最初是為了參加Intel舉辦的某屆基於深度學習的創新應用比賽,當時召集了小組成員集思廣益,想一些具有創意的點子作為此次

基於Python Tornado的在線問答系統

file www script install eat src body linu uil 概述 本項目使用最新的Tornado開發。實現了在線提問,回答,評論等功能。使用到Tornado的generator,長輪詢等等技術, 支持MySQL的異步連接。 詳細

C++對象模型-構造函數語意學

嘗試 修飾符 重載 情況 mes void 解釋 c++對象 pac 由於編譯器會盡可能的為所有的警告和錯誤做出解釋,但也因此導致了部分情況下的過度解析。 書中給的例子是編譯器過度解析,使用了類型轉換函數卻隱藏了真正的錯誤。 cin << intval;

深度學習之模型構建

water ssi sum sta eat rom col ffffff oss 標準模型 from keras.utils import plot_model from keras.models import Model from keras.layers import

基於模型融合的推薦系統實現(3):模型融合

基本思路很簡單,最小二乘法就好了: 我們假設兩個演算法得到的結果權重分別是a,b利用最小二乘法和我們分出來的第二部分資料就可以獲取a,b使得誤差最小。其實最小二乘法就是求一個廣義的逆即可。最後的RMSE比起單一的模型有所提高,變成了(0.86~~~~) import numpy

基於模型融合的推薦系統實現(2):迭代式SVD分解

SVD演算法的原理網路上也有很多,不再細說了,關鍵是我們得到的資料是不完整的資料,所以要算SVD就必須做一次矩陣補全。補全的方式有很多,這裡推薦使用均值補全的方法(用每一行均值和每一列均值的平均來代替空白處),然後可以計算SVD,作PCA分析,然後就可以得到預測結果。 但是我們這裡有

基於模型融合的推薦系統實現(1):基於SGD的PMF

(1)PMF演算法 PMF的基本的思路,就是定義兩個基本的引數W,U,然後對於任意一個組合(u,m),利用 Wi∗Uj W^i*U^j,來獲取預測值。這些基本的演算法思路網上很多,就不細說了。簡單說一下程式 [0]:一開始我們要將訓練資料劃分為3部分,第一部