天天看點

如何使用機器學習解決實際問題-以關鍵詞相關性模型為例

本文以百度關鍵詞搜尋推薦工具字面相關性模型為基礎,介紹一個機器學習任務的具體設計實作。包括目标的設定,訓練資料準備,特征選擇及篩選, 以及模型的訓練及優化。該模型可擴充到語意相關性模型,搜尋引擎相關性及LTR學習任務的設計實作。該模型的設計調研實作,也可以很容易移植解決其他包括語義相關性的問題

目标設定:提升關鍵詞搜尋相關性

作為一個搜尋+推薦産品,百度關鍵詞搜尋推薦系統的産品形态是向鳳巢使用者推薦适合他業務的關鍵詞。例如一個賣鮮花的廣告主,他想在百度上做關鍵詞搜尋推廣時,需要送出和他業務相關的關鍵詞,而且送出的關鍵詞需要業務相關,例如他需要送出和賣鮮花業務相關的關鍵詞。例如鮮花快遞,鮮花速遞等。此時他可以在百度關鍵詞搜尋推薦系統中進行搜尋查詢,選擇适合他的關鍵詞。

如何使用機器學習解決實際問題-以關鍵詞相關性模型為例

百度關鍵詞搜尋推薦系統query搜尋

這是一個典型的搜尋問題,具體的從輸入query,到觸發,到排序等會涉及到很多因素,例如如何查倒排,如果處理地域因素等;要提升搜尋的品質,我們首先需要保證輸入的query和推薦出來的推薦詞的相關性,此處我們要解決的主要問題, 就是如何快速,準确地判斷兩個關鍵詞(輸入query和推薦詞)的相關性,需要特别注明的是,我們主要的目标是讓使用者覺得該産品結果很靠譜, 是以該處我們僅考慮字面相關性,更多的語意擴充該模型并未考慮。

注:該模型的調研實驗實作方式, 可以很容易平移到語義相關性。例如加入更多語意特征,例如plsa的bm25特征和word2vec的相似度特征(或者和擴充的相關性校驗,例如将待推薦詞擴充為baidu搜尋結果的摘要擴充)提高語義特征的貢獻。

相關性也是所有搜尋問題的基石,隻不過在不同的系統中使用方式不一樣, 在一般的搜尋中,相關性占有較大權重, 排序基本就以相關性為依據; 在商業系統中,相關性則經常作為搜尋展現的門檻用于控制商業推廣結果的品質(如果僅考慮CTR, 使用者搜尋鮮花快遞時,給使用者展現豔照門的結果,CTR會更高,但相關性較差)。  當然,判斷相關性我們可以簡單使用某一種方法進行直接判定,例如直接進行兩個關鍵詞的TF-IDF計算,或是進行兩個關鍵詞的BM25。但這樣的方式效果都不太理想,想要達到更好的效果,就需要使用更多特征,而更多特征很自然地,需要使用模型組合這些特征,達到最終的預期效果。

如何使用機器學習解決實際問題-以關鍵詞相關性模型為例

圖:相關性在關鍵詞系統中的位置

此處将會使用機器學習的方法解決該問題。本文以下内容會從資料準備, 特征選擇, 模型選擇, 模

型調優等步驟介紹百度關鍵詞搜尋推薦系統如何解決該問題

資料,特征,模型

如何使用機器學習解決實際問題-以關鍵詞相關性模型為例

說到使用機器學習解決問題,我們經常提到的優化思路就是3方面的優化: 資料,特征,模型。首先找到充足的,準确的label資料(該出僅考慮有監督學習任務,例如相關性,或是LTR),之後提取貢獻較大的特征作為input space,以label作為output /ground true label,之後優化模型(Hypothesis) )。下面會分别從這3方面對整個優化過程進行闡述

準備訓練資料

訓練資料的擷取一般有幾種方式:

  1. 人工标注: 優點是品質較高,噪音較少;缺點是标注結果和标注者本身的認識相關,例如在搜尋引擎中,判定蘋果和手機的相關性,對于年輕人,一般都認為相關;但對于比較多的老人,可能認為不相關;另外一個缺點就是人工擷取标注的成本較高
  2. 從日志中進行挖掘:優點是資料量相對更大,擷取成本較低(編寫幾個hadoop腳本對日志進行統計);缺點是噪音較多,例如搜尋引擎中的惡意抓取通路導緻的噪音資料

在相關性模型中,一開始我們使用百度關鍵詞搜尋推薦系統的人工回報資料作為label對模型進行訓練,分别提取1.5W query-推薦詞pair作為正負例進行特征提取,模型訓練。

如何使用機器學習解決實際問題-以關鍵詞相關性模型為例

如圖所示,在互動上,當使用者喜歡該關鍵詞時,就會點選‘大拇指’表示該結果符合使用者需求(正回報,該query-推薦詞 pair可作為正例);如使用者認為該關鍵詞不符合需求,就會點選‘垃圾桶’,将該關鍵詞扔入資源回收筒(負回報,該query-推薦詞 pair 可作為負例)

在實驗中,我們發現正例沒有問題, 不過負例中會存在較多這樣的情形: query-推薦詞是相關的, 但該使用者不做該業務,是以被定義為負例,是以負例個性化較強。是以後來我們讓産品經理同學又對負例子進行篩選,重新标注1.5W負例,進行後續特征提取, 模型訓練。

之後我們将正負例打散後(直接使用python random.shuffle)分成10份,進行cross-validation

模型訓練前,先定标準和樣本

注: 訓練樣本的挑選完全決定了我們的問題目标,是以在一開始就需要準确選擇,如果可能,所有的case都最好人工來搞,或者至少需要人工review。 确定沒有問題後,再開展後續工作。特别是相關性類似的問題,比較主觀,例如PM和RD在該問題的判斷上就可能存在一定差異。

确定完訓練樣本, 評估标準,之後再小布快跑, 優化模型。

特征提取

一般特征的選擇及處理會極大地影響學習任務的效果,而進行特征選擇的時候,一般是先增加特征,并實驗效果。 對于相關性模型, 我們可以先将傳統的資訊檢索的特征加上,這些特征一般分為以下幾類:

  1. query/候選詞的一般結構特征: 例如query/候選詞長度,term數等
  2. query-候選詞的相關性度量:例如TF-IDF, bm25, LMIR及多重變種, plsa相似度度量,word2vec語意向量相似度等; 很多時候,關鍵詞自身資訊較少,還可以使用關鍵詞在搜尋引擎上的摘要擴充進行相似度度量
  3. 關鍵詞自身在資訊檢索次元的重要性度量,例如關鍵詞idf, 從語言模型方面的重要度等

在一開始的時候,我們可以先将能夠想到,構造出來的特征均加入特征向量進行實驗,而且每加一類特征,都可以看下該類特征對整體目标的提升程度。以便對該特征的貢獻度有一個直覺的感受。

以下資料可以簡單看出随着特征的增加,效果的提升,其中的特征僅加不減(模型使用random forest   進行二分類):

如何使用機器學習解決實際問題-以關鍵詞相關性模型為例

等到特征加得差不多,模型準确性已經提升不多的時候, 可以考慮砍特征,有一種比較簡單粗暴有效的砍特征的方法,就是使用樹模型,就是直接砍掉特征貢獻程度及特征重要性較低的特征,例如直砍掉特征貢獻度為0的特征,對相關性模型的準确性幾乎沒有影響

特征貢獻度

當增加特征已經很難提升效果, 考慮到為了防止過拟合,同時考慮到模型online預測,需要對特征進行挑選。在使用樹模型時,可以直接使用數節點特征貢獻度和節點使用次數,判斷是否需要去除該特征,以下為使用樹模型進行選擇特征的例子:

如何使用機器學習解決實際問題-以關鍵詞相關性模型為例

對于特征貢獻度和分裂特征使用次數為0的特征,在調研時,直接去除對模型效果幾乎沒有影響,而且能提升預測的效率。

在選擇特征的時候, 有一些經驗值得分享:

  1. bm25特征及term weight特征對分類任務有極大貢獻
  2. 一些單獨的比值類特征并沒有太大貢獻,例如query,推薦詞共同term與query term數,推薦詞term數的比值,這些特征并沒有太大貢獻,但是這些特征與query,推薦詞的term數結合到一起,貢獻就非常多;是以有些特征需要聯合在一起,才有較大作用。
  3. 特征選擇需要和目标一緻:例如word2vec是非常高大上,且非常靠譜的技術,但用在字面相關性,對目标并沒有太大貢獻(如果目标是語意相關,那麼類似于PLSA,word2vec将會有很大貢獻)
  4. 有些特征就就是用來解決特殊case的,雖然貢獻不大,但需要保留(當然也可以直接設定為強規則與模型配合),例如query與推薦詞拼音一緻

模型選擇

經典模型

最開始我們嘗試了最大熵,SVM和adaboost模型, 考慮到online使用的效率,最終我們選擇了adaboost模型作為線上使用的模型,雖然效果不是最好的,但使用簡單的weak learner建構的模型的确比較快(參見博文:《adaboost》),并且使用adaboost進行上線并取得較好效果:上線後不僅召回增加,準确性上90%的case相關性高于等于原有結果(采用非模型的版本)

如何使用機器學習解決實際問題-以關鍵詞相關性模型為例

評估結果分布圖(2到-2分别代表擴召回結果相關性高于、略高于、等于、略低于、低于線上政策)

內建樹模型

現在特别喜歡使用樹模型,因為使用的時候,連特征歸一化都省了: 如果使用SVM類似的模型,還需要對特征進行歸一化等處理, 但使用樹模型,直接将特征向量及label扔給模型, 模型自己會根據資訊增益,或是基尼系數等标準選擇最合适的拆分點進行樹節點的拆分(具體的拆分标準可參見博文:《使用impurity選擇樹模型拆分節點》),開源的樹模型,例如大名鼎鼎的Quinlan的C4.5或是C5.0都在調研時都可以拿來試試作為特征選擇的依據。

特别是內建樹模型的出現,更是極大地提升了樹模型效果。是以現在的項目中,我比較喜歡在增加特征的時候就使用內建樹模型進行效果實驗。 具體樹模型使用參見《內建樹類模型及其在搜尋推薦系統中的應用》

內建樹模型配置選擇

此處的配置選擇和傳統的模型參數稍有差別,該出的樹模型配置主要指內建樹模型中樹的數量,每棵樹的特征選擇因子和樣本使用因子等。在項目中,考慮到準确率和速度,最終确定的參數是樹的數量是20, 特征選擇因子和樣本選擇因子均為0.65(每棵樹随機選擇0.65的樣本和特征進行訓練)

具體産品效果可參見www2.baidu.com中百度關鍵詞搜尋推薦系統的排序結果:

如何個性化

首要需要考慮的是我們的資料樣本,是否本身就是包含個性化的case(此處的答案是否定的); 假設我們的标注case是個性化的,也就是case中本身就包含了個性化結果時,在模型訓練流程上其實并沒有太大差別, 主要的差別就在于我們選取哪些能夠區分這些個性化的特征, 例如百度鳳巢中賬戶(單元)的plsa模型産出的pzd向量與query的相似度等

登入www2.baidu.com->關鍵詞工具->搜尋query->檢視結果 即可。

更多内容也可參見: http://semocean.com

繼續閱讀