推薦系統:從千人千面到千域千面

談到推薦系統,很多人的印象中是 “個人性推薦” 和“千人千面”。關於 “千域千面” 應該很少人提及,主要能用到的場景不多,先前有想過在酒店場景上應用,但是由於各種原因最終沒有嘗試。以下是高德地圖在 “千域千面” 的一些經驗,記錄下來供後續學習。

目錄

Learning to Rank(LTR)在高德的嘗試

應用場景

搜索建議(suggest 服務),用戶在輸入框輸入 query 的過程中,爲用戶自動補全 query 或 POI,羅列出補全後的所有候選項,並進行智能排序。

Learning to Rank(LTR)是用機器學習的方法來解決檢索系統中的排序問題。業界比較常用的模型是 GBrank,Loss 方案用的最多的是 Pair Wise,這裏也保持一致。一般應用 LTR 解決實際問題,最重要的問題之一就是如何獲得樣本。

部分用戶習慣自己輸入完整 Query 進行搜索,而不使用搜索建議的補全結果,統計不到這部分用戶的需求。對於這幾個問題總結起來就是:無點擊數據時,建模很迷茫。但就算有某個 POI 的點擊,卻也無法代表用戶實際是滿意的。最後,在模型學習中,也面臨了特徵稀疏性的挑戰。統計學習的目標是全局誤差的一個最小化。稀疏特徵由於影響的樣本較少,在全局上影響不大,常常被模型忽略。但是實際中一些中長尾 case 的解決卻往往要依靠這些特徵。因此,如何在模型學習過程中進行調優是很重要。

詳細方案

第一步,融合服務端多張日誌表,包括搜索建議、搜索、導航等。接着,進行 session 的切分和清洗。最後,通過把輸入 session 中,末尾 query 的點擊計算到 session 中所有 query 上,以此滿足實現用戶輸入 session 最短的優化目標。

最終,抽取線上點擊日誌超過百萬條的隨機 query,每條 query 召回前 N 條候選 POI。利用上述樣本構造方案,最終生成千萬級別的有效樣本作爲 GBrank 的訓練樣本。

詳細的特徵設計,如下表所示:

初版模型,下掉所有規則,在測試集上 MRR 有 5 個點左右的提升,但模型學習也存在一些問題,gbrank 特徵學習的非常不均勻。樹節點分裂時只選擇了少數特徵,其他特徵沒有發揮作用。建模的第二個難題:模型學習的調優問題。具體來就是如何解決 gbrank 特徵選擇不均勻的問題。

經過分析,造成特徵學習不均衡的原因主要有:

綜上,由於各種原因,導致樹模型學習過程中,特徵選擇時,不停選擇同一個特徵(city-click)作爲樹節點,使得其他特徵未起到應有的作用。解決這個問題方案有兩種:

$$-\text{gradient}=y_{ij}-\frac{1}{1+\exp(-(h(x_i)-h(x_j))+\text{loss}_{diff})}$$

以上公式是交叉熵損失函數的負梯度,$loss_{diff}$ 相當於對 sigmod 函數的一個平移。

差值越大,$loss_{diff}$ 越大,懲罰力度越大,相應的下一輪迭代該特徵的分裂收益也就越大。調 loss 後,重新訓練模型,測試集 MRR 在初版模型的基礎又提升了 2 個點。同時歷史排序 case 的解決比例從 40% 提升到 70%,效果明顯。

具體效果

Learning to Rank 技術在高德搜索建議應用後,使系統擺脫了策略耦合、依靠補丁的規則排序方式,取得了明顯的效果收益。gbrank 模型上線後,效果基本覆蓋了各頻次 query 的排序需求。目前,已經完成了人羣個性化、個體個性化的建模上線,並且正在積極推進深度學習、向量索引、用戶行爲序列預測在高德搜索建議上的應用。

參考鏈接:

作者:錢魏 Way 

來源:www.biaodianfu.com/amap-suggestion-optimization-practice.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/yBaDaKx54qK4okju9cu9uw