作者聲明:
????????SemEval-2015 Task3任務是由我和Index_gz共同合作完成,他寫了SemEval-2015 Task3的任務一,我來寫SemEval-2015 Task3的任務二。
問題描述
????????這個問題來自于SemEval-2015 Task3: Answer Selection in Community Question Answering.
????????簡單的說就是從一堆問題和答案中找出他們之間的相關性。
??????? 這個Task包含兩個Subtasks:
Subtask1.給定一個問題和一些答案,將答案進行為3類:good/potential/bad。
Subtask2.給定一個判定問題(Yes/No/Unsure)和一些答案,判定該問題是Yes/No/Unsure。
???????? 這里主要討論Subtask2。
詳見:http://alt.qcri.org/semeval2015/task3/
實現框架
整體實現框架如下圖所示:
簡單來說,分為一下幾個步驟:
1.預處理:通過一些基本的“詞”級別的處理,為特征提取準備規范數據。
2.特征提取:通過對原始數據和預處理后的數據進行分析,并基于一定的假設,確定選取特征,提取特征。
3.模型構建:根據問題描述,選擇學習模型,構建訓練集,訓練模型。
4.實驗評估:構建測試集,對比各模型效果。
5.實驗結果分析
接下來詳細描述整個過程。
預處理
?????? 預處理階段我們做了詞性標注,詞干還原和去停詞。詳情可見Index_gz寫的《問答系統實戰——答案選擇》的預處理。http://blog.csdn.net/Index_gz/article/details/69524747
特征提取
?????? 為了方便理解yes_no_unsure問題的訓練關鍵,我們先來舉一個中文的例子:
Question :QID=Q7,QUSERID=U22 ,QTYPE=YES_NO ,QGOLD_YN=Yes:
???????????? 惠新西街北口地鐵站附近有沒有銀行?
???????? Comment1:CID=Q7_C1, CUSERID=U23,CGOLD_YN=Unsure
???????????? 你問的是哪個出口呢,不確定呀?
???????? Comment2:CID=Q7_C2, CUSERID=U24,CGOLD_YN=Yes
????????????? yes,在A口附近有一個交通銀行。
???????? Comment3:CID=Q7_C3, CUSERID=U22,CGOLD_YN=Not Applicable
??????????????請問A口出來過天橋嗎?
?????????Comment4:CID=Q7_C4, CUSERID=U24,CGOLD_YN=Yes
??????????????不用過天橋,地鐵站A口出來向右走50米就到銀行了。
???????? Comment5:CID=Q7_C5, CUSERID=U25,CGOLD_YN=Yes
??????????????yesssssssss,那附近還有一個建設銀行呢。
???????? 對于判決yes_no_unsure的人或者機器來說,他并不容易通過其他知識來判斷,它最終的依然是根據回答者的回答,來判斷這個問題到底是yes ,no 還是unsure。
????????有了這個認識,我們就要設計特征了。第一,comment起碼要和question說的是同一件事,所以,能表示comment和question相關性的特征是我們想要的。第二,確定每一條comment是yes傾向,no傾向,還是unsure傾向。大家結合起來判斷question是yes傾向,no傾向,還是unsure傾向。所以我們設計了以下特征:
(一)表示comment和question說的是同一件事的特征,相似性特征:
詞相似特征
1.Word cosine similarity: 我們假設問題和好的答案詞相似,所以設計回答和問題的詞的相似度特征。構建詞典,以詞典順序作為向順序,tfidf 作為權重 ,統計每個回答和問題的空間向量,然后計算對應的問題和回答之間的余弦相似度。
2.NE cosine similarity:關鍵詞通常是名詞實體,我們假設問題和好的回答的關鍵詞相近,所以我們構建了問題與回答之間的名詞實體余弦。識別名詞實體,構建名詞實體字典。以字典為順序,tfidf為權重,構建每個問題和答案的名詞實體向量,并計算相應的余弦值。
特殊符號特征:
經過統計發現,comment中有一些強特征符號:'??', ':-', '???'。這些符號出現,comment和question的判定往往是不同的。因此我們設計了這一維特征,出現定義為1,未出現定義為0。
主題相似度特征
1.Topic feature: 我們假設question的主題和comment的主題是相似的,所以這維特征計算question和comment的主題相似度分數。我們借助 gensim工具的 LDA 模型來訓練主題模型。我們訓練? 10 個主題的主題模型,然后拿到每條comment和question的主題向量(每條記錄屬于每個主題的分數)。拿到每條記錄(comment和question)的主題向量之后,計算對應的comment和question的余弦相似度。從而得到comment和question的主題相似度特征。
gensim 的LDA方法詳見:https://radimrehurek.com/gensim/models/ldamodel.html
語義相似度特征
1.word2vector feature: 我們假設question和comment所用的詞在語義上是相似的,comment與question的詞越是相似的越有可能是靠譜的comment。我們借助 gensim具來訓練 word2vec 特征。這樣我們就得到每個詞的詞向量。然后借助以下公式拿到對應comment與question的詞向相似度得分。
其中Wi是問題的第1個詞,wj'是回答的第j個詞。n是問題的詞的個數,m是回答的詞的個數。
gensim 的word2vec方法詳見:https://radimrehurek.com/gensim/models/word2vec.html
(二)判斷每條comment的yes_no_unsure傾向的特征:
特殊詞特征:
?????? 經過統計yes no unsure的comment的用詞,我們發現一些強特征詞,為此我們設計了19維特征詞特征:in_yes,in_no,in_unsure,nop_num,nooo_num,yes_num,yea_num,yesss_num,unsure_num,sure_num,have_prob_num,have_discus_num,have_harm_num,have_quest_num,have_argu_num,have_asum_num,have_cheat_num,have_joke_num,have_clear_num。
語義傾向特征:
??????? 判斷comment的yes,no,unsure的傾向需要特殊詞詞頻的特征,也需要語義特征。對全語料訓練word2vec。使用以下公式拿到每條comment與yes ,no ,unsure的相似度,共三維:
??????? 其中label可取(yes,no,unsure),WV(wi)表示comment的第i個詞的詞向量,當label取yes時,WV(label)表示yes的詞向量。
模型訓練
??????? 我們采用了一下三種模型,均采用sklearn工具包的默認方法,未設置任何超參數
1.SVM
2.樸素貝葉斯
3.決策樹
效果評估
(以下實驗均未使用devel集)
第一次嘗試實驗結果:
第二次嘗試實驗結果:
第三次嘗試(comment分類器效果,train數據集中,600做訓練集,195做測試集)
各個模型錯分各類樣本個數:
svm:
nb:
DT:
結果分析:
??????? 第一次嘗試訓練時,我們使用了yes_no問題的全部comment,共1528條,其中有733條是Not Applicable。訓練集噪音過大導致訓練效果非常差。
??????? 第二次嘗試訓練時,首先去掉了Not Applicable的數據,然后我們面臨了第二個問題:我們使用question的CGOLD_YN當作label,但是每個comment都有一個向量,所以我們決定對一個question的所有comment的向量取平均,合成一個向量去學習。決策樹的效果相對比較好F1值達到54.575%,在官方的分數中可以達到第三名的效果,但是SVM和NB的效果依然步樂觀,我們又進行了第三次嘗試。
??????? 第三次嘗試訓練,我們使用comment 的CGOLD_YN當作label。訓練使comment的向量預測label與真實label縮短差距,得到comment的yes_no_unsure模型。用這個模型取測試test集合的comment。然后使用comment加權投票決定每個question的yes_no_unsure值。
??????? 但是,當我們把comment分類器訓練出來后發現,效果很一般,經過近一步分析發現,SVM對于Yes的錯分樣本個數居然為0,再分析得出,SVM把所有樣本都分到Yes類中去了。究其原因,我們猜想是我們提的特征中反映comment的yes類的特征太強了,而另外兩類的特征太弱,加上訓練集分布上yes數量最多,再加上沒有對每個問題的每類特征進行加和平均操作,放大了強的特征的影響而縮小的弱的特征的影響,最終使的SVM分類失敗。
??????? 總而言之,拿到問題,需要深入了解問題的根本和數據分布,從而挖掘出什么特征能影響分類效果。
參考文獻
[1] Denkowski M, Lavie A. Meteor 1.3: automatic metric for reliable optimization and evaluation of machine translation systems[C]// The Workshop on Statistical Machine Translation. Association for Computational Linguistics, 2011:85-91.
[2] Quan H T, Tran V, Tu V, et al. JAIST: Combining multiple features for Answer Selection in Community Question Answering[C] International Workshop on Semantic Evaluation. 2015:215-219.
[3] Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.
[4]Goldberg Y, Levy O. word2vec Explained: deriving Mikolov et al.'s negative-sampling word-embedding method[J]. Eprint Arxiv, 2014.