做者:szx_spark算法
我對《A Survey of Community Question Answering》論文中的部份內容進行了翻譯,該文章對cQA下了定義,並與QA進行對比,並介紹了現有的一些技術方法。api
此次調查旨在討論一些社區問答相關的挑戰以及相關的方法。網絡
Section 2 對社區問答所具有的屬性做出定義,而且將其與傳統的QA任務進行對比。函數
Section 3 針對社區問答領域的任務做出定義,而且介紹幾個用於解決問題的方法。編碼
Section 4 介紹了論文中針對section 3提出的任務,所作實驗的環境設置以及所使用的數據集。spa
Section 5 對不一樣方法的效果作出總結。翻譯
Section 6 對結果進行通常性的討論。3d
Section 7 全文總結。blog
一個社區論壇大致上包括如下幾點:token
其餘使用經過兩種方式互動:
經過回覆相關或者不相關的答案進行互動。
最後,若是提問人滿意了。他將會對最好的回答進行標記。
訪問cQA論壇的人經常尋找一些複雜問題的答案,而不是事實型問題。大多數QA任務對簡單的單句查詢進行處理,而且回答也都是簡單的事實。這些問題比較直接、不多包含噪聲。而cQA任務的問題每每不是單一句子,常常包含許多噪聲( Eg, taken from yahoo answers, I have an exam tomorrow. But I don’t know anything. Please recommend a tutorial for calculus ?? )。並且,前者的答案源於知識庫,後者的答案是用戶的回覆,所以cQA任務的問題十分開放。社區論壇中的答案質量通常沒有處理,可是它提供了同意與反對的票數,已經得分等等數據。
論壇中的問題可能很類似,須要對問題進行匹配。好比下述例子:
對問題進行語義匹配能夠減小冗餘性。
解決該問題有以下方法
BM25算法比較常見,不翻譯了。
給定兩個問題\(q^1\)和\(q^2\),應用翻譯算法,根據語言模型,基於詞袋假設,計算條件機率\(P(q^1|q^2)\)。得分是兩個機率的平均值。
\[ P(q^1|q^2) =\prod_{w \in q^1}P(w|q^2) \]
\[P(w|q^2)=\frac{|q^2|}{|q^2|+\lambda} \cdot P_{mx}(w|q^2)+\frac{\lambda}{|q^2|+\lambda} \cdot P_{ml}(w|C)\]
\[P_{mx}(w|q^2)=(1- \beta)P_{ml}(w|q^2)+\beta\sum_{t\in q^2}P_{trans}(w|t)\cdot P_{ml}(t|q^2)\]
這裏,\(P_{ml}(w|C)\)是最大似然估計,計算\(\frac{\#(w,C)}{|C|}\),#表示頻率。\(\lambda\)是平滑因子,\(\beta\)控制着\(P_{ml}\)和\(P_{trans}\)的貢獻度。
\(P_{trans}(w^1|w^2)\)應用於翻譯模型,計算給定一種語言\(w^2\)生成另外一種語言\(w^1\)的機率。Eg. 給定一對句子\(S=\{(e^i, f^i)\}_{i=1}^{N}\),\(e\)表示英語單詞,\(f\)表示法語單詞,機率計算以下:
\[P(f|e)=\frac{1}{Z(e)}\sum_{i=1}^Nc(f|e;e^i,f^i)\]
\[c(f|e;e^i,f^i)=\frac{P(f|e)}{\sum_{w \in e^i}P(f|w)}\cdot\#(f,f^i)\#(e,e^i)\]
\(Z(e)\)是歸一化常量。\(P(f|e)\)按照上述公式,應用EM方法進行計算。
如今,將問題映射爲計算\(P_{trans}\)的問題。
原文沒細講,主要思想是經過詞向量獲得兩個問題的表示,以後經過網絡有監督地訓練,計算類似性。
給定問題\(q^1=[q_1^1,q_2^1,…,q_n^1]\),以及\(q^2=[q_1^2,q_2^2,…,q_m^2]\),對每一個單詞進行embedding,獲得新的向量 \(\hat q^1=\hat q_1^1,\hat q_2^1,…,\hat q_n^1\),以及\(\hat q^2=\hat q_1^2,\hat q_2^2,…,\hat q_m^2\),經過對affine matrix應用softmax進行逐行逐列的歸一化獲得attention係數。
\(q^1\)中的第j個單詞,如今被表示爲\(G[\hat q_j^1;\hat v_j]\),其中\(\hat v_j\)是\(q^2\)的attention權重表示。一樣地,兩個問題中每一個單詞都獲得了新的表示。經過對每一個單詞的表示進行相加,獲得問題的表示,以後將兩個問題的表示進行級聯,輸送到稠密的網絡層,生成預測值。
針對一個問題,從衆多答案中找到最重要的一個。
Answers with significant token overlap with the question would be scored
higher. 因爲答案和問題的token不多匹配,這個方法效果並很差。
該方法也能夠應用於此類問題,給定一個問題q,一個答案池A。這個找到最優候選答案的problem能夠被建模爲\(a^*=argmax_{a\in A} P_{TransLM}(q|a)\)。
該方法使用CNN生成question embedding 和 answer embedding。給定問題\(q=q_1,…,q_n\),以及答案\(a=a_1,…,a_m\),生成矩陣\(\hat q = [\hat q_1,…, \hat q_n] \in R^{(dxn)}\)和\(\hat a =[\hat a_1,…,\hat a_m] \in R^{(dxm)}\),d是詞向量的維度。應用一個核大小爲m的卷積,
(generating a \(R^{d×n−m+1}\) for the question),接下來應用1-max pooling。CNN模塊被question與answer所共享。
具體的訓練方法與損失函數,詳見論文。
在以前工做的基礎上,該做者嘗試從兩個正交方向上提高模型。Instead of using just word embeddings, they pass the question and the answer through an BiLSTM layer,可以對上下文進行編碼。以後使用卷積層與最大池化層,可以更好地捕獲長距離依賴 (the final state of the LSTM is somewhat limited by the dimension size for capturing the entire context)。模型結構如圖所示。
另外一個基於attention的思想,following a max pooling of the question, the resultant vector is used to attend over the answer vectors。A max pool layer is then used over the attention weighted answer vectors。最終獲得的向量做爲答案的表示,這使得他們可以在max pooling以前,根據上下文對答案的不一樣單詞進行加權。
最終的模型結合了兩者的思想,使用CNN生成question embedding,使用question embedding 生成 attention weights for the answer,使用注意力加權的answer做爲CNN的輸入生成最終的answer embedding。該模型使用max margin loss進行訓練。
做者使用深層卷積網絡生成question和answer的embedding。經過卷積最終獲得的矩陣維度爲\(R^{d\times (l_q-m+1)}\),d是word embedding的維度,\({l_q}\)是question的長度,m是卷積核的大小。
爲了使得卷積網絡更深,該模型使用k-max pooling。找到k個最大的,最終獲得子序列。
The embedding dimensions hence are independent of the length of the question after the k-max pool (the dimension of the matrix is \(R^{d\times k}\) after the first k-max pool).