负样本的艺术,再读Facebook双塔向量召回算法
負樣本的藝術,再讀Facebook雙塔向量召回算法
Facebook這篇Embedding召回的論文,之前已經有幾篇文章涉及過了,分別是《Embeding-based Retrieval in FaceBook Search》、《是"塔"!是"塔"!就是"它",我們的雙塔!》和《負樣本修正:既然數據是模型的上限,就不要破壞這個上限》,有興趣的可以回顧一下。
在以上幾篇文章中,模型結構沒啥好說的,簡單的雙塔,兩邊塔的輸入都是文本特征、社交特征和位置特征,其中社交特征和位置特征是他們在實驗中發現對效果提升比較好的兩種特征。
這篇工作的兩個核心亮點是hard negative mining和embedding ensemble。
Hard negative mining是指,他們發現如果將隨機負樣本這種比較easy的樣本與上次召回中排名101-500名的比較hard的樣本以100:1的比例去訓練模型(為什么是101-500?),得到的效果會比較好。
Embedding ensemble是指,可以將不同負樣本訓練得到的模型做融合來進行召回。融合的方式可以是相似度結果的直接加權或者是模型的串行融合,比如先用easy負樣本訓練模型進行初步的篩選,再用hard負樣本訓練模型進行最終的召回。
另外他們還提到雖然使用unified的特征,就是輸入中包含社交特征和位置特征,來進行召回效果會比較好,但是召回結果在一定程度上也會損失文本的匹配,因此也可以先通過只輸入文本特征的模型來做篩選再用輸入unified特征的模型來召回,這樣可以保證文本的匹配。
對于一個搜索引擎而言,往往由兩個層構成,一個叫召回層,另一個叫排序層。召回層的目的就是在低延時,低資源利用的情況下,召回相關的documents。排序層就是通過很復雜的算法(網絡結構)把和query最相關的document排序到前面。論文的題目,簡單直白的告訴了大家,用embeding 表示query和document來做召回。
論文提到,召回的難點,主要體現在候選集合非常龐大,處理億級別的documents都是正常操作。不同于面部識別召回,搜索引擎的召回需要合并字面召回和向量召回兩種結果。"臉書"的召回,還有其他難點,"人"的特征,在"臉書"的搜索尤其重要。
同時,《Embeding-based Retrieval in FaceBook Search》一文中,也通過對Query處理、索引模塊、召回模塊、排序模塊等做了一一的講解。對該部分細節有興趣的同學 ,可以查看下原文。
最近又重新翻了翻這篇論文后,對該論文對負樣本的應用又有了一些新的感悟。本文主要在樣本構造方面,來聊一聊負樣本的藝術。
“數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限”。有過機器學習經驗的人都會知道特征對于解決機器學習問題的重要性了,在y=ax+b的公式里,特征解決了x的問題,而y的問題即是樣本的問題,如果定義label,也同樣重要。
在召回階段,我們可以常會沿用排序階段的思路,使用曝光且點擊的為正樣本,曝光未點擊的為負樣本。
這種方法我們在線下使用FM依舊可以有AUC 0.8+的水平,但線上提升卻只有微微一點。那么為何線上線下造成了這樣的不一致呢?
其一,我們來思考一下,曝光未點擊,是怎么來的呢?
曝光未點擊的數據,其實也是我們的模型在進行各種排序篩選之后,認為大概率命中了用戶的興趣才曝光給用戶的,也就是說,使用的負樣本是經過排序處理后的用戶最喜歡的TopK個Items,相比之下,這些item對于召回來說,這些負樣本很大概率上是召回的正樣本了,則此時使用的樣本集訓練出的模型只學習到了用戶可能喜歡的中,區分最喜歡和可能喜歡的信息,而對于用戶不喜歡的item卻沒有學到。
其二,在實踐中,尤其是很多大型的平臺,用戶和商品都是億級別的,對這種級別的數據進行排序不僅會耗費大量的計算資源,而且還要等很久的時間,所以大家都會選擇采樣觀察指標。很多時候大家會選擇采樣個無關的商品然后加上相關的商品再去計算指標,其實只需要保證采樣之后計算得到的指標和我們的全量數據計算得到的指標是保證相對大小的,換言之,這里違反了一條機器學習里的基本準則,線下線上數據樣本分布的一致性。
在Facebook的論文中,實驗了兩種負樣本的構造方法,論文提到用未點擊的曝光作為負樣本訓練出來的模型非常糟糕,在互聯網工作了這么多年,我們在實踐中也發現了這個問題。原因是這部分負樣本太hard了,這么hard當然要放到精排去學,召回任務最重要的是快速把和query相關的documents拉出來。如果召回階段就能把曝光未點擊的過濾掉,那還要精排干嘛呢?
第二種負樣本方法就是隨機選擇負樣本,使用為用戶召回的item中未曝光的部分的隨機采樣,對熱門和非熱門以熱度來進行概率加權,從而實現熱度采樣,看到這里你也許會感覺似曾相識,沒錯這里跟Word2Vec中的負樣本采樣方法是同理的。
實驗結果表明,隨機采樣的負樣本比“曝光未點擊”的負樣本的線上效果要好很多。其實不難理解,線上實際召回時,大部分的item是模型沒有見過的,隨機的負樣本抽樣很貼合這種線上實際情況。
從Bias的角度,user和item之間未被發現到的交互可以歸因于兩大原因:1)商品與用戶興趣不匹配;2)用戶不知道該商品。因此,無法區分真正的負反饋(如曝光但不感興趣)和潛在的正反饋(如未曝光)將導致嚴重的Bias。
在大多數情況下,一小部分受歡迎的item占了大多數用戶交互的比例。當對這些長尾數據進行訓練時,該模型通常會給熱門項目的評分高于其理想值,而只是簡單地將不受歡迎的item預測為負值。因此,推薦熱門item的頻率甚至比數據集中顯示的原始受歡迎程度還要高。
Hard樣本這個說法來自圖像的分類任務,在搜索推薦系統的召回中沒有類別的概念,無法直接應用圖像的Hard樣本挖掘方法。Facebook在論文中嘗試了兩種Hard樣本挖掘的方法:Hard負樣本挖掘和Hard正樣本挖掘。
Facebook在論文中發現很多時候同語義召回的結果,大部分都是相似的,而且沒有區分度,最相似的結果往往還排不到Top的位置,這就說明之前的訓練樣本構造方式有問題,導致模型學習的不夠充分。所以就想到了對應了解決方案,把和Positive Sample很近的樣本作為負樣本用于訓練,通過這種方式模型就能學到這種Hard樣本的區分信息了。
Hard負樣本挖掘
論文提到,他們發現top-K召回結果大部分是同文本的,也就是說模型并沒有充分利用社交特征。這主要因為隨機負樣本對于模型而言,因為和query文本完全不同,模型太容易學偏,認為文本一樣就是需要召回的。
為了能使模型對相似的結果能有所區分,所以我們可以找到那些embeding很近,但實際上是負樣本,讓模型去學。
一種方法是在線hard負樣本挖掘,這個思路就是in-batch負采樣,在一個batch內,有n個相關的query和document,對于任意一個query,其他的document都是它的負樣本,但是由于每個batch也是隨機產生的,in-batch內負采樣并不能獲得足夠的hard負樣本。所以就有了離線hard負樣本采樣。
論文提到,在實驗中發現,簡單用hard負樣本,效果是比用隨機負樣本要差的,主要原因是hard負樣本需要非文本的特征區分,而easy負樣本主要用文本特征區分,因此需要調整采樣策略。論文還提到一點,hard負樣本取排序模型排在101-500效果最好(所以其實要用semi-hard的樣本),而且hard負樣本需要和easy負樣本混合在一起用。
Hard正樣本挖掘
正樣本選擇相關度最高的,即用戶點擊過的樣本和相似度高的潛在正樣本作為Hard正樣本。
這里做法和百度的Mobius中的做法很是相似了。
整個框架分為兩個階段,數據增強階段是綠色箭頭的部分,采樣并利用樣本中的用戶請求與廣告構造出更多樣本,教師網絡計算相似度后將低相似度的樣本輸入學生網絡去預測CTR,通過采樣的方式得到高CTR低相似度的樣本存入buffer,這類樣本我們稱之為Badcase。
在召回問題中,用“曝光未點擊”作為模型的負樣本的一系列問題,其根源在于沒有很好地理解問題,只是從經驗的角度給出了解法,而這種解法不能算錯,至少在線上反饋的層面上是有意義的,也具備一定的表征能力。
究其原因,曝光未點擊的樣本,一方面,它是經過了之前模型層層篩選得到的,至少在之前的模型中,模型判斷的是用戶對該部分item是具有興趣的;另一方面,經過了線上的時間曝光之后,用戶并沒有點擊,而這個不點擊只是在Feed流中的相對的未點擊。
因為位置偏差告訴我們,用戶傾向于與位于推薦列表中較高位置的item進行交互,而不管這些item的實際相關性如何,因此交互的item可能不是高度相關的。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的负样本的艺术,再读Facebook双塔向量召回算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统中多值特征的八大处理技巧
- 下一篇: 大有可为的GNN:DeepWalk