機器不學習:美團智能推薦平台實踐

1 典型的 O2O 推薦場景

美團移動端推薦展位是一個典型的 O2O 推薦場景,包括首頁猜你喜歡和商家詳情頁附近團購、團購詳情頁看了又看等多個展位。首頁猜你喜歡展位圖如圖 10-1 所示。

機器不學習:美團智能推薦平臺實踐

圖 1 美團移動端——猜你喜歡展位圖

猜你喜歡展位是美團移動端首頁的推薦展位,也是美團移動端流量最大的推薦展位。推薦內容包括團購單、酒店商家、外賣商家、電影院等,是一個混合形態的推薦。

詳情頁推薦展位包括商家詳情頁的附近團購和團購詳情頁的相關團購等。附近團購主要是附近商家的推薦(見圖 10-2),相關團購主要是團購的推薦(見圖 10-3),推薦形態相比猜你喜歡更單一一些。

機器不學習:美團智能推薦平臺實踐

猜你喜歡展位中,用戶意圖並不是太明確,推薦結果包括美食團購、外賣、酒店、旅遊等多種類型的結果。詳情頁中,用戶已經有了比較明確的意圖,比較傾向於推相關品類的結果或者關聯品類的結果。

2 O2O 推薦場景特點

以美團移動端推薦為例,O2O 推薦場景與其他推薦的區別具體包括如下三點。

  • 地理位置因素。特別是對於美食、酒店、外賣等業務,用戶傾向於使用附近商家的服務。
  • 用戶歷史行為。新聞或者資訊推薦,用戶看一次瞭解這些信息之後,就不會再去讀第二遍。與新聞推薦不同,一家味道好的店,用戶可能會反覆光顧。從具體的數據來看,大量用戶會產生重複點擊和重複購買的行為。
  • 實時推薦。一是地理位置,推薦需要考慮用戶的實時位置。二是 O2O 場景的即時消費性,例如美食、外賣、電影等都是高頻消費,用戶從考慮到最終下單之間間隔時間非常短,所以推薦必須要實時,並且根據用戶的實時反饋調整推薦的內容。

下面我們就這三個特點進行展開闡述。

2.1 O2O 場景的地理位置因素

地理位置因素分為若干個層次:KD-Tree 實時索引、GeoHash 索引、熱門商圈索引、城市維度索引等。我們一般通過建立基於地理位置的索引來檢索周邊的商家和服務。在推薦時根據用戶的實時地理位置實時地查詢附近的商家和服務。對於與地理位置不太相關的內容,可以單獨以城市維度或者商圈維度來建立索引,例如景點等。常用的地理位置索引可以是 KD-Tree 索引,它能達到很好的實時檢索性能。下面分別講解不同層次索引的異同點和優缺點。

  • KD-Tree 索引。以當前位置為圓心,可以快速檢索出指定距離範圍內的商家和服務。優點是精度最高。
  • GeoHash 索引。對區域進行正方形和六邊形的劃分,快速找出 GeoHash 範圍內的商家和服務。 缺點是精度不太高,如果當前實時位置在區域邊沿,這個位置可能與另一個鄰接 GeoHash 內商家和服務的距離會更近。
  • 熱門商圈索引。商圈索引檢索的粒度相對粗一些,但是比較符合人生活中的實際經驗,比如北京的五道口商圈、國貿商圈等。將商家和服務按照商圈的維度組織起來,可以使得我們能夠給用戶推薦感興趣的同商圈的內容。
  • 城市維度索引。它可以用來索引一些與地理位置關係不大的內容,例如景點等。另外,用戶沒有地理位置信息時,只能通過城市維度索引去檢索出相關內容。

2.2 O2O 場景的用戶歷史行為

因為 O2O 場景用戶有重複點擊和購買的情況,所以我們需要用到用戶的歷史行為信息,包括用戶的點擊、下單、購買、支付、收藏、退款、評價等行為。在實際使用過程中會根據用戶歷史行為距離當前的時間進行相應的時間衰減,目的是加強最近行為的權重,減少久遠行為的權重。

由於美團的用戶量巨大,將用戶所有行為全部存儲下來供線上使用不太現實。實際應用會結合用戶的活躍度和行為的類別來做相應的截斷。例如,較活躍的用戶會保留時間較短的行為,不太活躍的用戶保留時間更長一些的行為。常用的方法有兩個:以一個時間段為界,保留這一個時間段裡的所有行為,比如 3 個月、1 年等;以固定數量保留用戶的行為,比如 100 條,當有新的行為加入時,去掉最舊的行為,這比較類似於隊列先進先出的數據結構。另外,可以結合行為的類別區分保留的數量,例如高頻的行為可以保留時間短一些,低頻的行為可以保留時間長一些。用戶強意圖的行為,例如收藏、下單等行為可以保留時間長一些,點擊行為可以保留短一些。

截斷時會綜合考慮線上存儲空間的佔用和實際效果優化需求來折中考慮,並選擇一個性價比較高的方案。

2.3 O2O 場景的實時推薦

由於 O2O 場景的地理位置重要性和消費的及時性,我們需要做實時的推薦。相比非實時的推薦,實時推薦在數據、系統和算法方面的要求會更高。

實時推薦需要用到最新的實時數據,美團利用了流數據處理,實時將從線上日誌中解析得到用戶行為用於線上,線上行為反饋的延時在秒級別。也就是說,用戶在美團上行為操作,1 秒以內推薦系統就可以捕捉到,並且及時做出相應的推薦調整。

線上使用的推薦的實時性主要有召回的實時性、特徵的實時性、排序模型的實時性(後面會詳細介紹)。

  • 召回的實時性。用戶有過行為的內容會實時反饋到推薦系統中,與之相似的內容都會加入到新的推薦中去。
  • 特徵的實時性。用戶對相關商家和服務的行為,除了用於召回,也會用於更新用戶排序特徵。排序特徵中有一些關於相關行為的統計量,會在線實時更新,直接影響排序的得分。
  • 排序模型的實時性。反饋可以形成正樣本 / 負樣本,用於模型未來的批量更新和實時更新。

下面將以猜你喜歡為例,詳細介紹推薦系統及推薦算法。

3 美團推薦實踐——推薦框架

從框架的角度看,推薦系統基本可以分為數據層、候選集觸發層、候選集融合規則過濾層和重排序層,如圖 10-4 所示。數據層包括數據生產和數據存儲,主要是利用各種數據處理工具對原始日誌進行清洗並處理成格式化的數據,將數據落地到不同類型的存儲系統中,供下游的算法和模型使用。候選集觸發層主要是從用戶的歷史行為、實時行為、地理位置等角度利用各種召回策略產生推薦的候選集。候選集融合和過濾層有兩個功能:一是對候選集觸發層產生的不同候選集進行融合,提高推薦策略的覆蓋度和精度;二是要承擔一定的過濾職責,從產品、運營的角度確定一些人工規則,過濾掉不符合條件的 Item(推薦對象,例如商家或團購單,下文中同,不再贅述)。排序層主要是利用機器學習的模型對召回層篩選出來的候選集進行重排序。

候選集召回和重排序是在優化推薦的效果時最頻繁迭代的兩個環節,因此需要支持 A/B 測試。為了支持高效率的迭代,我們對候選集召回和重排序兩層進行了解耦,這兩層的結果是正交的,因此可以分別進行對比試驗,不會相互影響。同時在每一層的內部,我們會根據用戶將流量劃分為多份,支持多個策略同時在線對比。

數據乃算法、模型之本。美團作為一個交易平臺,它擁有快速增長的用戶量,產生了海量豐富的用戶行為數據。當然,不同類型用戶行為數據的價值和對用戶意圖的反映強弱也不太一樣。

機器不學習:美團智能推薦平臺實踐

圖 4 推薦系統框架圖

用戶主動行為數據記錄了用戶在美團平臺上不同環節的各種行為。一方面,這些行為用於候選集觸發算法(下一部分介紹)中的離線計算(主要是瀏覽、下單);另一方面,這些行為代表的意圖強弱是不同的,因此在訓練重排序模型時可以針對不同的行為設定不同的迴歸目標值,以更細地刻畫用戶的行為強弱程度。此外,用戶對 Item 的這些行為還可以作為重排序模型的交叉特徵,用於模型的離線訓練和在線預測。負反饋數據反映了當前的結果可能在某些方面不能滿足用戶的需求,因此在後續的候選集觸發過程中需要考慮對特定的因素進行過濾或者降權,降低負面因素再次出現的概率,提高用戶體驗。同時,在重排序的模型訓練中,負反饋數據可以作為不可多得的負例參與模型訓練,這些負例要比那些展示後未點擊、未下單的樣本顯著得多。用戶畫像是刻畫用戶屬性的基礎數據,其中有些是直接獲取的原始數據,有些是經過挖掘的二次加工數據。這些屬性一方面可以用於候選集觸發過程中對 Deal 進行加權或降權,另一方面可以作為重排序模型中的用戶維度特徵。通過對 UGC 數據的挖掘,我們可以提取出一些關鍵詞,然後使用這些關鍵詞給 Deal 打標籤,用於 Deal 的個性化展示。

上面簡單地介紹了推薦系統框架中的數據層。推薦系統框架中數據層之上的召回和排序層是非常重要的兩部分,我們會在後面兩節內容中詳細介紹。

4 美團推薦實踐——推薦召回

個性化推薦的成功應用需要兩個條件。第一是信息過載,因為用戶如果可以很容易地從所有物品中找到喜歡的物品,就不需要個性化推薦了。第二是用戶大部分時候沒有特別明確的需求,因為用戶如果有明確的需求,可以直接通過搜索引擎找到感興趣的物品。

上文中我們提到了數據的重要性,但是數據的落腳點還是算法和模型。單純的數據只是一些字節的堆積,我們必須通過對數據的清洗去除數據中的噪聲,然後通過算法和模型學習其中的規律,才能將數據的價值最大化。接下來,本節將介紹推薦候選集觸發過程中用到的相關算法。

4.1 基於協同過濾的召回

提到推薦,就不得不說協同過濾,它幾乎在每一個推薦系統中都會用到。協同過濾的基本算法非常簡單,但是要獲得更好的效果,往往需要根據具體的業務做一些差異化處理。清除作弊、刷單、代購等噪聲數據,這些數據會嚴重影響算法的效果。合理選取訓練數據,選取的訓練數據的時間窗口不宜過長,當然也不能過短,具體的窗口期數值需要經過多次的實驗來確定。同時可以考慮引入時間衰減,因為近期的用戶行為更能反映用戶接下來的行為動作。User-Based 與 Item-Based 相結合。

美團的用戶量巨大,最終用於協同過濾的矩陣也非常大,這些無法通過單機進行處理。為了進行大規模的協同過濾計算,我們基於 Hadoop 實現了分佈式的協同過濾算法。在具體實現時,採用了基於列分塊的方法(Scalable Similarity-Based Neighborhood Methods with MapReduce),如圖 10-5 所示。對於數據量更大的情況,可以考慮進一步分行分列劃塊的方法。

機器不學習:美團智能推薦平臺實踐

圖 5 基於列分塊的矩陣乘法示意圖

4.2 基於位置的召回

移動設備與 PC 端最大的區別之一是,移動設備的位置是經常發生變化的。不同的地理位置反映了不同的用戶場景,在具體的業務中我們可以充分利用用戶所處的地理位置。在推薦的候選集觸發中,我們也會根據用戶的實時地理位置、工作地、居住地等地理位置觸發相應的策略。根據地理位置的粒度不同,召回策略又可以分為附近召回、當前商圈召回、當前城市召回等。

實際的應用場景中常常會遇到獲取不到用戶實時地理位置的情況,例如用戶出於隱私考慮禁止 App 獲取實時位置。這種情況下,只能推薦用戶所在城市,比如推薦該城市熱門商圈的內容,或者推薦旅遊景點等信息。

能獲取用戶地理位置又可以進一步細分成兩種情況:周邊資源比較豐富;周邊資源不太豐富。在周邊資源不太豐富的情況下(例如用戶所在的區域比較偏僻,周邊商家和服務較少),可以擴大限制的距離,或者擴大 GeoHash 的範圍。在周邊資源較豐富的情況下,可以加強對距離的限制,並對候選按照一定因素進行排序,例如熱度、銷量等,選出 TopN 的結果。

4.3 基於搜索查詢的召回

搜索是一種強用戶意圖,比較明確地反映了用戶的意願。但是在很多情況下,因為各種各樣的原因,用戶沒有形成最終的成交。儘管如此,我們認為,這種情景還是代表了一定的用戶意願,可以加以利用,具體做法如下。

  • 對用戶過去一段時間的搜索無轉換行為進行挖掘,計算每一個用戶對不同查詢的權重。
  • 計算每個查詢下不同 Item 的權重。 根據查詢下 Item 的展現次數和點擊次數計算權重。
  • 當用戶再次請求時,根據用戶對不同查詢的權重及查詢下不同 Item 的權重進行加權,取出權重最大的 TopN 進行推薦。

4.4 基於圖的召回

對於協同過濾而言,用戶之間或者 Item 之間的圖距離是兩跳,更遠距離的關係則不能考慮在內。而圖算法可以打破這一限制,將用戶與 Item 的關係視作一個二部圖,相互間的關係可以在圖上傳播。Simrank 是一種衡量對等實體相似度的圖算法。它的基本思想是,如果兩個實體與另外的相似實體有相關關係,那它們也是相似的,即相似性是可以傳播的。

4.5 基於實時用戶行為的召回

前面介紹過,我們的推薦系統是一個實時的推薦,用戶的實時行為在整個推薦環節都非常重要。目前我們的業務會產生包括搜索、篩選、收藏、瀏覽、下單等豐富的用戶行為,這些是我們進行效果優化的重要基礎。我們當然希望每一個用戶行為流都能到達轉化的環節,但是事實並非如此。當用戶產生了下單行為上游的某些行為時,會有相當一部分用戶因為各種原因沒有最終達成交易。但是,用戶的這些上游行為對我們而言是非常重要的先驗知識。很多情況下,用戶當時沒有轉化並不代表用戶對當前的 Item 不感興趣。當用戶再次到達推薦展位時,我們根據用戶之前產生的先驗行為理解並識別用戶的真正意圖,將符合用戶意圖的相關 Deal 再次展現給用戶,引導用戶沿著行為流向下游行進,最終達到下單這個終極目標。 目前引入的實時用戶行為包括實時瀏覽、實時收藏。

4.6 替補策略

雖然我們有一系列基於用戶歷史行為的候選集觸發算法,但對於部分新用戶或者歷史行為不太豐富的用戶,上述算法觸發的候選集太小,因此需要使用一些替補策略進行填充。

  • 熱銷單。即在一定時間內銷量最多的 Item,可以考慮時間衰減的影響等。
  • 好評單。即用戶產生的評價中,評分較高的 Item。
  • 城市單。即滿足基本的限定條件,在用戶的請求城市內的單。

為了結合不同觸發算法的優點,同時提高候選集的多樣性和覆蓋率,需要將不同的觸發算法融合在一起。常見的融合方法有以下 4 種。

  • 加權型。最簡單的融合方法就是根據經驗值對不同算法賦給不同的權重,對各個算法產生的候選集按照給定的權重進行加權,然後再按照權重排序。
  • 分級型。優先採用效果好的算法,當產生的候選集大小不足以滿足目標值時,再使用效果次好的算法,依此類推。
  • 調製型。不同的算法按照不同的比例產生一定量的候選集,這些候選集取並集產生最終總的候選集。
  • 過濾型。當前的算法對前一級算法產生的候選集進行過濾,依此類推,候選集被逐級過濾,最終產生一個小而精的候選集合。

目前我們使用的方法集成了分級和調製兩種融合方法,不同的算法根據歷史效果表現給定不同的候選集構成比例,同時優先採用效果好的算法觸發,如果候選集不夠大,再採用效果次之的算法觸發,依此類推。

5 美團推薦實踐——推薦排序

如上所述,對於不同算法觸發出來的候選集,只是根據算法的歷史效果決定算法產生的 Item 的位置顯得有些簡單粗暴。同時,在每個算法的內部,不同 Item 的順序也只是簡單由一個或者幾個因素決定,這些排序的方法只能用於第一步的初選過程,最終的排序結果需要藉助機器學習的方法,使用相關的排序模型,綜合多方面的因素來確定。在美團的推薦排序中,我們用到了 LTR 技術,使用機器學習來訓練得到線上的排序模型。

5.1 排序特徵

排序特徵在排序的效果中起到非常重要的作用。在選擇排序特徵時,需要綜合考慮特徵的覆蓋率、區分度等,同時需要結合業務的特點,來做特徵選擇。目前的排序特徵大概分為以下幾類特徵,如圖 10-6 所示。

機器不學習:美團智能推薦平臺實踐

圖 6 排序特徵

  • Item 維度的特徵。主要是 Item 本身的一些屬性,包括價格、折扣、銷量、評分、類別、歷史點擊率等。例如,對於銷量比較高的 Item,用戶再去點和買的概率也更高。評分較高的 Item,更受用戶歡迎。
  • 用戶維度的特徵。包括用戶偏好、用戶等級、用戶的人口屬性、用戶的客戶端類型等。不同的用戶有不同的偏好,例如有些用戶喜歡看電影,有些用戶喜歡點外賣。另外,用戶的人口屬性也會對推薦的內容有影響,比如某用戶是一位男性,那給他推薦美甲美容可能就不太合適。
  • 用戶和 Item 的交叉特徵。包括用戶對 Item 的點擊、收藏、購買等。
  • 距離特徵。包括用戶的實時地理位置、常去地理位置、工作地、居住地等與 POI 的距離。
  • 場景特徵。包括本地、異地,是否週末、節假日,天氣因素等特徵。例如,在節假日,酒店和旅遊的需求會更多。如果當前天氣不太好,比如大雨或者下雪了,人們不願意出去吃飯,這個時候外賣的需求就會增多。

下面再詳細地介紹下與排序特徵相關的排序特徵處理、排序特徵選擇和排序特徵監控。

  • 排序特徵處理。非線性模型可以直接使用上述特徵。而線性模型則需要對特徵值做一些分桶、歸一化等處理,使特徵值成為 0~1 的連續值或 0/1 二值。
  • 排序特徵選擇。實際的特徵添加過程可以加入海量的特徵,但是考慮到數據存儲和訓練效率等,我們最終只使用其中部分特徵來訓練。那麼保留哪些特徵呢?首先,不同特徵的重要性是不一樣的,在進行特徵選擇時,儘量保留重要的特徵,去掉重要性沒那麼強的特徵。其次,需要考慮特徵的覆蓋率,如果一個特徵很有用,但是 1 億個樣本中只有 1 個樣本有這個特徵,那麼此特徵就應該去掉。
  • 排序特徵監控。由於排序特徵對排序模型的效果影響巨大,如果線上的排序特徵出現問題,特別是一些重要的特徵,線上效果就會大幅度下降,直接體現就是用戶點擊和下單減少。所以我們需要像運維線上服務一樣重視線上特徵的情況,如果特徵出現問題,那它也是線上的事故。針對特徵,美團做了實時的特徵監控,來監控特徵的有效性,包括均值、特徵覆蓋率等同比、環比指標。

5.2 排序樣本

排序樣本的選取也會影響訓練出來的排序模型的效果。選擇的樣本越符合線上的實際分佈,訓練出來的模型效果會越好。下面從樣本選擇、樣本採樣和樣本權重等多個方面來介紹排序樣本方面的工作。

  • 樣本選擇。如何選擇得到訓練數據中的正例和負例?正例一般是用戶產生點擊、下單等轉換行為的樣本。用戶沒有轉換行為的樣本是否就一定是負例呢?其實不然,很多展現用戶根本沒有看到,所以把這樣的樣本視為負例是不合理的,也會影響模型的效果。比較常用的方法是 Skip-Above,即用戶點擊的 Item 位置以上的展現才可能視作負例。當然,上面介紹的方法中的負例都是隱式的負反饋數據。除此之外,我們還有用戶主動刪除的顯式反饋數據,這些數據是高質量的負例。
  • 曝光數據的應用。Skip-Above 的一個問題是,我們在構建訓練樣本時,只保留了有用戶點擊的 Session 中的樣本,沒有點擊 Session 中的負樣本都丟棄掉了。而有用戶點擊的樣本對應的用戶往往偏活躍一些。那這就會造成一個問題:最終訓練集合的分佈會更偏向於那些有點擊的活躍用戶。為了解決這個問題,可以使用實際給用戶曝光的數據,例如可以在 App 中埋點跟蹤曝光的情況。對於那些實際給用戶有曝光,但是用戶沒點的樣本,可以作為負樣本補充到樣本集合中。最終得到的訓練數據更符合實際線上數據的分佈,實際的線上效果也得到了驗證。
  • 對樣本做去噪。對於數據中混雜的刷單等類作弊行為的數據,要將其排除出訓練數據,否則它會直接影響模型的效果。
  • 樣本採樣和樣本權重。對於點擊率預估而言,正負樣本嚴重不均衡,所以需要對負例做一些採樣。 用戶不同的操作行為,代表著對推薦結果的不同反饋程度。例如點擊、下單、支付等,可以認為是一個用戶對推薦內容從弱到強的認可度 。點擊是用戶被吸引、初步表達了感興趣。下單是用戶已經確定感興趣並有了購買的意向。支付則是用戶願意真金白銀地為自己的興趣買單。所以在樣本權重上,我們可以設置如下關係:支付樣本的權重 > 下單樣本權重 > 點擊樣本權重。

5.3 排序模型

非線性模型能較好捕捉特徵中的非線性關係,但訓練和預測的代價相對線性模型要高一些,這也導致了非線性模型的更新週期相對要長。反之,線性模型對特徵的處理要求比較高,我們需要憑藉領域知識和經驗人工對特徵做一些先期處理。但是線性模型簡單,訓練和預測的效率較高,因此更新週期也可以更短,線性模型還可以結合業務做一些在線學習的嘗試。在我們的實踐中,非線性模型和線性模型都有應用。 目前我們主要採用了非線性的樹模型 Additive Grove(簡稱 AG),非線性模型可以更好地處理特徵中的非線性關係,不必像線性模型那樣在特徵處理和特徵組合上花費比較大的精力。AG 是一個加性模型,由很多個 Grove 組成,不同的 Grove 之間進行 Bagging 得出最後的預測結果,由此可以減小過擬合的影響。每一個 Grove 由多棵樹組成,在訓練時每棵樹的擬合目標為真實值與其他樹預測結果之和之間的殘差。當訓練的過程中達到了指定數目的樹時,重新訓練的樹會替代掉以前的樹。這樣經過多次迭代後,達到收斂。

目前應用比較多的線性模型非邏輯迴歸莫屬了。為了能實時捕捉數據分佈的變化,我們引入了在線學習,接入實時數據流,使用谷歌提出的 FTRL 方法對模型進行在線更新。在線學習的主要的步驟是,在線寫特徵向量到 HBase Storm 解析實時點擊和下單日誌流,改寫 HBase 中對應特徵向量的標籤(1/+1),通過 FTRL 更新模型權重,將新的模型參數應用於線上 。

目前,我們已經在線上使用了較為流行的深度學習模型,來訓練排序模型,並且效果優於線上的樹模型。10.6 推薦評價指標如何去評價推薦系統的效果,衡量用戶體驗?一般需要找到一個具體的評價指標,對自己算法和模型的迭代能得到一個定量而非定性的結果。根據調研和經驗總結,下面列出了推薦領域常用的一些推薦業務指標,如圖 10-7 所示。

機器不學習:美團智能推薦平臺實踐

圖 7 常用推薦指標

  • 信息維度。主要應用於信息類的推薦展位,例如新聞資訊推薦、視頻推薦、廣告等。包括點擊率、停留時間、瀏覽深度、收藏數 / 收藏量 / 收藏率、分享率、點贊率、好評率等。
  • 交易維度。主要應用於交易維度的推薦展位,例如電商推薦等。包括下單率、支付率、交易額、利潤、利潤率等。
  • 體驗維度。主要用於衡量推薦展位的用戶體驗效果。包括新穎度、用戶刪除率、多樣性、用戶回訪次數等。實際工作中,大家可以根據自己展位的特點,選擇一個或者若干個重點指標進行優化。


分享到:


相關文章: