社群問答系統精準匹配資訊和人,滿足你對獲取知識的迫切需求
社群問答系統(Community Question Answering, CQA)將資訊和人精準匹配,為問題找到合適的回答者,為回答找到合適的閱讀者,滿足了人們對獲取知識的迫切需求。在CQA中,一個核心問題是為給定的問題推薦具有專業知識並具有回答意願的專家。如果問題推送策略準確度不高,即不能有效解決問題,也可能給部分不適合回答問題的專家使用者帶來打擾。
本文以頭條問答資料集為例,重點分析了CQA中專家推薦的常用演算法,該資料集一共包含三類資訊:
-
專家標籤資料:包括所有專家使用者的ID,專家興趣標籤,處理過的專家描述;
-
問題資料:包括所有的問題的ID,處理過的問題描述,問題分類,總回答數,精品回答數,總點贊次數;
-
問題分發資料:29萬條問題推送記錄,一條推送記錄包括一個問題ID,一個專家使用者ID,該專家是否回答了該問題的標註。
下表總結了ByteCup競賽(https://biendata.com/competition/bytecup2016 )中使用的各個特徵,其中++表示該特徵特別有效,+表示有效,-表示無效。
ByteCup競賽中使用的各演算法效果如下:
我們將競賽中使用的CQA專家推薦演算法分為四類:
-
基於矩陣分解(Matrix Factorization, MF)的方法,包括SVD, SVD++, Bidirection SVD++, Bidirection ASVD++;
-
基於梯度提升樹(Gradient Boosting Tree, GBT)的方法,包括GBRT;
-
基於深度學習(Deep Learning, DL)的方法,包括AutoRec, CF-NADE, Match-SRNN;
-
基於排名(Ranking, R)的方法,包括Rule和Ranking SVM;
在CQA專家推薦中,基於MF的方法比其他幾類方法取得更好的效果。
本文分析了競賽中前五名使用的特徵,總結如下:
我們發現,該競賽中前5名都使用了整合學習,單一模型並不能在競賽中取得好的名次。接下來介紹整合學習相關知識。整合學習,就是使用一系列學習器進行學習,並使用某種規則將各個學習器的結果進行整合,從而獲得比單個學習器效果更好的學習效果的一種方法。
整合學習可以用於分類問題,迴歸問題,特徵選取,異常點檢測等的整合,本文采用分類進行說明。弱分類器是指分類器僅能對少量樣本進行正確分類,其分類效果僅略優於隨機猜測。強分類器是指對樣本分類的正確率很高的分類器。
通過整合學習提高分類器的整體泛化能力有以下兩個條件:
-
基分類器之間具有差異性。如果使用的是同一個分類器整合,整合分類器的效能是不會有提升的。
-
每個基分類器的分類精度必須大於0.5。如下圖所示,當基分類器精度小於0.5時,隨著整合規模的增加,分類整合分類器的分類精度會下降;但是如果基分類器的精度大於0.5時,整合分類器的最終分類精度是趨近於1的。
整合學習常見的三種方法是Bagging, Boosting和Stacking。
-
Bagging用於提升機器學習演算法的穩定性和準確性。
-
Boosting主要用於減少bias(偏差)和variance(方差),是將一個弱分類器轉化為強分類器的演算法。
-
Stacking是一種組合多個模型的方法。
Bagging (Bootstrap Aggregating)對訓練集採用有放回取樣。通過對原資料集進行有放回的取樣,構建出大小和原資料集T一樣的新資料集T1,T2,T3…,然後用這些新的資料集訓練多個分類器f1,f2,f3…。最終分類結果根據這些分類器各自結果的投票來決定。Bagging演算法中,基分類器之間不存在依賴關係,基分類器可以並行生成。
Bagging的效能依賴於基分類器的穩定性,如果基分類器是不穩定的,Bagging有助於減低訓練資料的隨機擾動導致的誤差,但是如果基分類器是穩定的,即對資料變化不敏感,那麼Bagging方法就得不到效能的提升,甚至會減低。Bagging示例圖如下:
Boosting,是一個迭代的過程,每次在新分類器中強調上一個分類器中被錯誤分類的樣本(增加錯誤分類樣本的權重),最後將這些模型組合起來的方法。每次對正確分類的樣本降權,對錯誤分類的樣本加權,最後分類器是多個弱分類器的加權組合。
Boosting沒有對樣本進行重取樣,而是對樣本的分佈進行了調整。Boosting演算法中,基分類器之間存在強依賴關係,基分類器需要序列生成。Boosting示例圖如下:
Stacking的基本思想是訓練一個基本分類器池,然後使用另一個分類器來組合它們的預測,目的是減少泛化誤差。
Stacking的步驟如下:
-
將訓練集分成兩個不想交的部分;
-
在第一部分的訓練集上訓練若干個基本學習器;
-
在第二部分的訓練集上測試得到的基本學習器;
-
使用步驟3中的預測結果作為輸入,將正確的響應作為輸出,訓練更高級別的學習器。
Stacking示例圖如下: