跨域推薦技術在58部落內容社區的實踐

導讀: 58部落是58同城旗下的內容社區,基於58同城和58同鎮的廣大用戶,致力於全鏈路打通生活服務場景、精準連接用戶全場景多維度需求。本文將結合58部落的業務特點探討部落推薦算法選型經驗,分享幾種跨域推薦算法的落地,並介紹異構內容混合信息流的排序優化方案。

主要分享內容包括:

  • 58部落的基本情況
  • 58部落的推薦場景和特點
  • 58部落的跨域推薦技術
  • 分享跨域推薦技術的實踐
  • 多類型混合信息流的實踐

01 58部落

首先和大家分享一下"58部落"。

人們可能對"58部落"的瞭解還比較少。它的前身包括多個產品,包括:同城頭條、同城圈、及老的同城部落還有58便當,其中同城頭條是以資訊爲主,同城圈和同城部落則是以圈子爲主、58便當則是以工具文章的形式爲主。

去年5月份58對多個業務線進行了整合,形成了現在的一個統一產品叫作"58部落"。公司與集團也是對"58部落"寄予厚望,希望它能打通58的各個服務場景,能夠連接用戶的多種維度的需求。

02 58部落推薦場景和特點

下面我們來看看"58部落"的推薦場景都有哪些。

首先進入58 的APP,就可以在界面的右上角、腰部還有底下的feed部分,都可以看到"58部落"的入口。同時在推薦feed的第二屏就可以直接看到對接"58部落"的信息流。當從不同的入口進去以後,就可以看到"58部落"的落地頁以及它主熱議,也就是它的資訊列表頁、視頻列表頁、話題列表頁等等,以上列出的這些都是"58部落"的展現形式的頁面。

通過剛纔的簡單的介紹,我們可以知道"58部落"的內容具有自己的特點:

  • 首先,"58部落"的內容與58的業務有比較強的關聯。它包括了:房產、招聘、汽車、本地生活等等各種各樣的內容。
  • 第2個特點是部落用戶和58業務場景重合度是非常高的。底下這張表畫了58內各個業務線的用戶重疊佔各個業務線的比例。我們可以看到在"58部落"與各業務線用戶的重疊比例是明顯高於其他業務線間的重疊比例的。

  • 第3個特點是58部落的內容類型非常豐富並且是異構的。從內容的形式上主要分成兩種,一種叫PGC,另一種叫UGC。PGC的特點是:"58部落"從外部的合作部門、合作單位 ( 的網站上 ) 直接抓取過來的內容,包括:資訊、視頻,還有音頻等等。第二個部分叫作UGC,UGC是58自身的用戶自發產生的內容,它包括:帖子、話題、短視頻、直播,還有他們對所有的內容產生的評論。

  • 第4個特點是"58部落"的推薦形式是一種混合信息流的形式,也就是它的feed中要包含資訊、帖子、話題等等。一個feed流中要包含多種實體。

綜合以上特徵,我們就可以提煉出"58部落"推薦可能面臨的一些特有問題:

  • 首先是如何藉助其他業務線的數據來優化部落的推薦效果?
  • 如何聯合部落PGC和UGC的異構內容,共同提升部落整體的推薦效果?
  • 第三個問題是如何在一個信息流中對多種異構實體進行一種比較合適的混排?

下面我們將針對如何解決以上3個問題開始相關的話題討論。

03 跨域推薦介紹

我們首先引入一個"跨域推薦"的概念。什麼是"域"呢?其實我們可以很容易想到,它是通過某種方式聚集在一起的集合。說小一點,我們可以把部落的PGC當成一個域、把部落的UGC當成一個域。當然我們也可以擴大域的概念,把部落整體當成一個域,把房產當成一個域、把車當成一個域、把招聘當成一個域。這些定義都是可以的,域的概念其實可大可小。

那什麼叫"跨域"呢?我們之前做的推薦可能是單域推薦比較多,也就是"房產"只推薦"房產"的部分東西,它基於的數據也都是房產用戶本身的東西。但什麼是"跨域推薦"呢?比如,我要給部落推薦東西,但是使用的數據不只是部落自己的,它還包括了"房"、“車”、"招聘"等其他域產生的數據。

“域"的話我們先定義兩個域的概念:一個叫"源域”,一個叫"目標域"。我們要優化、提升的目標叫作"目標域",比如說我們要提升的"部落域"就是我們的"目標域"。“源域"相當於輔助域,我們會把"房”、“車”、“招聘"等看做輔助域。當然,如果我們將"部落PGC"當成"目標域”,把"部落UGC"當成"源域",這樣的理解也是可以的。

所以總結下來"域"的概念可大可小,只要是兩個不一樣的集合之間互相使用數據都可以稱之爲"跨域"。

跨域推薦實際是有一種前提的,前提是基於重疊。爲什麼會有跨域?那是因爲有一部分的特徵也好、用戶也好、物品也好、屬性也好,能夠有一些重疊,通過重疊的部分找到兩個域之間的一些關聯。

從右邊的4個圖中我們可以看到,橫座標代表了物品的整個空間,縱座標代表了用戶的整個空間:

  • 第一張圖中 ( 左上圖 ),用戶與物品之間沒有交集。
  • 第二種情況 ( 右上圖 ) 是用戶有部分交集,但物品沒有交集。這種情況可以理解成我們的房產用戶和部落用戶會有部分交集,這部分用戶他們既訪問了房產的帖子又看了部落PGC和UGC的內容。
  • 第三種重疊情況 ( 左下圖 ) 是用戶沒有交集,但是物品有交集。舉個簡單的例子:假設58 app和趕集app的用戶是不一樣的,但是他們的帖子內容是一樣的,這就滿足了第三種情況。
  • 第四種情況 ( 右下圖 ) 的重疊度會更高一些,不論是用戶還是物品都有一定程度的重疊。可能的場景:58的APP和58的微信小程序之間可能有這種關係。

今天我的介紹主要是基於用戶重疊的部分,也就是第二種情況。

跨域推薦有哪些的優勢呢?

  • 首先,它有冷啓動的優勢。從上面的圖我們可以看到,當一部分用戶同時訪問兩個域的時候,我們就可以學習到兩個域之間的聯繫,進而給沒有在這個域中的用戶進行推薦。
  • 第二點是提升目標域的推薦效果,這個也是跨域推薦的主要目的。
  • 第三個優勢是多樣性。因爲跨域推薦同時參考了多個域的特徵,自然而然會對推薦結果的多樣性進行一定的優化。最終,它還會反作用於源域,能夠實現源域的推薦與目標的域推薦效果的共同提升。

跨域推薦還需要考慮一定的權衡,因爲跨域必然會導致數據的稀疏,處理不當可能會有反作用。我們從前一幅圖可以看到:用戶空間與物品空間爲例,一旦涉及到跨域上下兩個方塊必然會引入空白,空白的稠密度相當於0,所以跨域推薦必然會導致數據更加稀疏。所以我們要處理這種數據稀疏,避免產生反作用。

04 跨域推薦實踐

下面我介紹一下58部落對跨域推薦的一些實踐。

第一個我們的實踐就是一種叫做跨域協同過濾的算法。說起協同過濾大家應該都非常清楚這是一種非常老的推薦方法。最常用的方法是一種矩陣分解的方式,但是矩陣分解和我們的FM是如何聯繫起來的呢?FM大家應該也知道,也是一種非常常用的推薦算法。它是通過一種embedding內積的方式來實現二階項的交叉。FM和矩陣分解是如何聯繫起來的?我們通過該圖的下部分可以看到:矩陣分解相當於把FM中的特徵域部分,一部分設置成用戶的one-hot ( 特徵 )、一部分設置成物品的one-hot ( 特徵 ),如果拋棄後面部分的輔助特徵的話,矩陣分解就等效於一種FM的訓練過程。

那麼跨域的協同過濾,如何能基於FM的形式來進行呢?它的核心思想就在論文:

《Cross-Domain Collabotive Filtering with Factorization Machines》

它的核心思想就是:除了把用戶在源域的物品訪問集合的多-hot編碼乘以一個權重係數放在FM的右側作爲用戶的特徵。也就是說,放在上一幅圖中,用戶在源域的行爲作爲附屬特徵放在 ( FM ) 的右側,這樣在訓練過程中能夠兼顧用戶在目標域的行爲以及在源域的行爲。

這樣它的特徵向量就分成了3部分:

  • 第一部分:用戶的one-hot編碼
  • 第二部分:物品的one-hot編碼
  • 第三部分:用戶在源域的一些訪問行爲的多-hot編碼

這是一條特徵向量,但是這個向量的label是如何定義的呢?我們把用戶對物品的評分作爲label。比如說點擊的值可能被設定爲1,但是點贊或分享這種用戶行爲更強的會設置成更大的值。

以我們在58部落中爲例,我們定義一個源域是部落UGC部分,然後把目標域定義成部落的PGC部分。我們把label定義成:1分是點擊、點贊是更強的用戶行爲定義爲2分、分享是更強的用戶行爲定義爲3分。

比如說有一個樣本:一個用戶i在部落PGC點擊了資訊j,同時這個用戶在部落ugc點擊過m、n等幾個帖子。這樣我們就能夠得到一條特徵向量:

(0,…1,…0)(0…1,…0)( 0,…1*f,…. 1*f,…0)

前面第一部分是用戶的one-hot編碼,第二部分是物品的one-hot編碼,最後一個部分是用戶在源域點擊的帖子的多-hot編碼。特別要提一下:這裏面會有一個f函數,f函數在論文中被定爲調節的常量。在這初期,我們對f沒有進行特殊的處理,只是當成1來直接使用。

通過這種方式訓練出來用戶和物品的embedding,直接放入faiss庫進行召回,效果:相比單域協同過濾轉化率提升約8%。

可以簡單說一下,跨域協同過濾在工程上需要一些特殊處理。像這種基於協同過濾的算法有個特點:訓練的用戶embedding和物品的embedding是在兩個空間裏的,沒有聯繫性。所以說我們第一次訓練的用戶embedding和第二次訓練的物品embedding是沒有關係的,是不能放在一起使用的。所以我們採用了一種基於滑動窗口的概念,來存多份embedding的數據。比如,物品的embedding每次訓練出來後都存在一個新faiss庫中,並且用它的時間戳和版本號來記錄faiss庫。物品embedding每次都存一個版本號進行覆蓋,這樣我們在線上使用的時候每次讀出來的時候都是用戶最新的embedding,但是新的用戶的embedding都要在於其版本號相對應的版本號在faiss庫中進行查找。

還有一種是我們正在嘗試的方法,它是一種叫做隱因子映射的方法。這種方法是更通用的。主要的思想是通過某些方式,如矩陣分解也好、或其他的學習某些方式也好,找到了一個物品的一種隱向量,然後直接通過訪問這些物品的人的共現,學習物品隱向量之間的映射。這種方式對冷啓動會更加友好。

下面是我們第二種基於跨域推薦的實現方案,它是基於屬性標籤映射的跨域推薦。我們可以有個前提,58每天的房、車、招聘、本地生活的帖子非常多,每天有幾千萬的更新,同時這些帖子點擊過的人數據又非常稀疏,比如超過50%的人寫的帖子點擊都不超過3次。如果單純用id做 ( 特徵 ) 的話,會因爲數據過於稀疏導致測試集上的數據很難收斂。如何來緩解這個問題?我們放棄了用id的映射方式,採用了標籤來代替id。因爲標籤數據相對較少,很容易把數據控制在萬以下的級別,這樣就可以緩解id造成的數據稀疏性的影響。

基於這個屬性映射的是如何實現的呢?它的基本思想是:通過源域的屬性標籤和目標域的屬性標籤在用戶訪問序列上的共現來構造這種屬性映射。

我下面會介紹兩種映射方式:第一種是簡單的通過統計的方法,第二種是通過非常常用的word2vec的方法。

首先講基於統計的方法。

我們假設:源域爲58業務線,目標域爲部落UGC。58業務線的cate,也就是我們基礎的類別體系標籤,它的數量是在萬級別的,比如:保姆、搬家等。部落ugc的tag的數量是在百級別的,比如:生活、房政策等類似的分類。然後,我們按天取用戶的行爲序列。比如說:User1訪問了業務線cate1、cate2類別的帖子,同時他訪問了部落tag1、tag2的帖子。User2訪問了業務線cate3、cate4類別的帖子,同時他訪問了部落tag1、tag3的帖子。這樣我們就把所有用戶訪問的內容序列拿出來,作爲我們的訓練樣本。

得到訓練樣本以後如何來做這個映射呢?第一個種方法是一種非常簡單的方法,它是基於統計方法。很容易通過相關性的公式,計算出兩個變量X和Y的相關性。我們如何定義X和Y,X就定義爲業務線的cate在用戶的行爲中出現,Y定義爲部落UGC的tag在用戶的行爲中出現。分子上我們需要統計包含了 ( cate1,tag1 )、( cate2,tag1 )、( cate3,tag1 ) 等等所有組合的用戶數量作分母就需要統計只要包含cate1,cate2,。。。tag1,tag2的用戶數作爲分母。我們用分子上的用戶數量乘以用戶的總數,除以分母中計算出的cate與tag的用戶的數量計算出相關性。將相關性經過一定的閾值的截斷,作爲一種cate與tag之間的映射,爲下一步的召回做準備。

基於word2vec的方法其實之前的幾位老師也都介紹過了。因爲有了這些 ( 用戶行爲的 ) 序列,它非常滿足word2vec的訓練數據集的要求,所以我們也採用了skip-gram的方式,按天劃分session,這樣就可以得到源域的cate和部落的tag的embedding向量,通過embedding向量的相似度可以得到和cate最接近的若干個tag,爲我們後續的召回做準備。

召回部分就比較簡單了:

  • 首先,我們可以直接查找用戶最近k條業務線帖子瀏覽記錄,取訪問最多的cate。
  • 然後,接着查找這些cate最相似的m個tag。
  • 最後,直接召回tag下的部落的一些帖子。

這種召回效果:uv轉化率大約提升了4%。

接着還有一些是我們正在進行的一些嘗試。上面的基於屬性標籤映射的方式需要提前準備好需要哪些屬性、哪些標籤。有些標籤的域不是那麼長,比如行業,可能只有十幾個或者幾十個。這種枚舉值比較少的情況下可能會對它的個性化效果造成影響。我們通過組合標籤的情況可以擴大標籤數量。但是我們也要注意將組合標籤的數量控制在一個可能的範圍內。這樣既能提高個性化程度,又能避免數據過於稀疏帶來的問題。

然後我們實踐的第三種方法是:基於多視圖dssm模型的跨域召回,是基於這篇論文:

《A Multi-View Deep Learning Approach for Cross DomainUser Modeling in Recommendation Systems》

其實dssm模型之前很多老師也都講過,它是一種非常常用的方法。但什麼是多視圖的dssm模型呢?就把每個域的物品都訓練出來一個dssm模型的塔,但是它的用戶部分用的是相同的一個塔,這樣我們把所有域的塔和用戶部分的塔進行共同聯合訓練。就能同時得到用戶與多個域的塔,這樣的好處是可以極大利用用戶部分和各個域的共享因子。例如:部落PGC的影響可能會更新用戶的這個塔,但是部落的PGC與部落的UGC本身是有關聯的,部落PGC的更新可能會影響部落UGC這個塔,因此產生一定的互相優化的作用。在這裏我們就採用了每個域是一個塔的結構,同時把每個域裏頭相同的一些屬性,例如一些關鍵詞、共性的tag作爲完全共享的embedding,然後用戶部分、源域和目標域的embedding可以共享。同時各個域之間有它們獨立的屬性embedding,我們將其作爲其獨立的特徵並排拼接在上面。這樣一次訓練就可以得到用戶embedding和多個域實體的embedding。

基於多視圖dssm模型的跨域召回模型 ( 使得 ) 我們線上的uv轉化效果提升了2%。

這裏要說實現中的幾個要點:

爲什麼會有效?那是因爲首先它的用戶視圖是完全共享的。它的用戶視圖的向量會同時包含多個域的特點,會學到多個域之間的交叉。

第二dssm模型有一種變換,就是它把上層softmax損失函數替換成了交叉熵損失函數。但這種方式要根據你的最終目的來決定。在我們實現中(的效果)來看,在資訊這種feed中推薦的東西可能和用戶的embedding比較接近的情況下,採用交叉熵損失函數效果並沒有達到理想中的效果,最終我們還是採用的softmax損失函數。

下面講一下采用softmax損失函數如何採用負採樣。一種是從全局所有的item裏面隨機地負採樣,還有一種負採樣方式是從點擊序列中未產生點擊的item作爲負採樣。實際中我們採用的是全局隨機負採樣的方式。我們分析了一種原因:部落中的標籤特徵並不能像房、車、招聘等域中的標籤那麼能確定物品特點,所以採用全局負採樣的方式可能效果會更好。

在用戶PGC、UGC場景,實時數據的重要性其實不輸於它的標籤。但是如果我們在訓練多塔結構時,把實時特徵也考慮進去的話需要頻繁更新用戶物品特徵,工程實現上會有相當大的壓力,所以這塊需要權衡。我們暫時只採用了物品的固有標籤作爲特徵,這也使得多塔結構的物品側計算不依賴於物品的實時特徵,不需要頻繁更新。這可能也是我們後續需要優化的一個方向吧。

最後,用戶向量的計算方式還有很多種方式。目前,我們在此只採用了一種基於embedding拼接的方式,用戶向量這方面業界也有非常多的實現方案。比如說,像阿里的用戶向量處理din、dien更適合處理用戶興趣建模,會比我們現在這種簡單的方法更有效,這也是我們後續的一個研究點。

05 異構混合信息流混合排序實踐

上面我們介紹的3種跨域推薦的方式,自然而然地就會引出一個新問題。我們的信息流中通常有各種各樣的內容,但是面對這種混合的信息流如何進行統一的排序呢?這也是我們要考慮的一個問題。

  • 首先混合的信息流可能存在多種類型,每種類型打分模型不一樣,不同模型評分不能直接比較。這種情況實際非常常見,不同類型的推薦模型往往是不同同學在做,產生多個模型非常正常。
  • 第二點就是不同算法目標如何衡量。比如說同樣是部落的信息流,有資訊、視頻、帖子,一種類型物品的展示過多,必然會導致其他類型物品的展示下降。如果我們只看一種物品的提升,可能會認爲有效果提升。但是如果整體來看可能是提升較小或者沒有什麼提升。這種情況也可能說明我們的優化整體意義不明顯。
  • 最後一種就是整體的多樣性如何權衡。

下面會介紹我們處理這3種問題的一些方法:

  • 對於第一個問題,整體上來看我們會通過一種評分對齊的方式,把不同類型的評分對齊處理。
  • 對於第二個問題,我們整體的目的是明確了一種目標,挑出幾個業務關注的指標作爲我們整體的導向。
  • 對於多樣性問題,我們通過MMR和DPP兩種算法結合了a/b test方式找對業務目標影響最優的一種組合方式。

首先我們講一下混合信息流排序的一個流程:

首先經過召回層以後,不同類型的物品會經過不同類型的模型來進行粗排,以及分桶進行截斷,最終進入精排層。在精排層不同類型的物品會有不同的精排模型來處理。最後會有一個統一的打分模塊對不同模型打分的物品放入一個可以共同比較的空間中。最後會有一個多樣性層,基於MMR和DPP兩種算法以及加入的人工規則,以ctr、uvctr以及avgpv等爲目標來進行優化。

從 ( 該架構的 ) 底向上,我們主要以下幾個部分做了工作:

  • 首先是粗排以後,在進入精排以前,我們做了一個分層、分閾值的截斷。也就是說它會根據類型進行截斷,防止粗排後進行截斷就把某一類型的物品全排在後面了這種情況。
  • 第二個問題是我們如何把多個精排的模型整理成一個大模型,( 從而 ) 把多個精排的分數進行統一處理。
  • 最後我會講MMR和DPP的一些使用過程。

首先我們看一下評分對齊是如何做的。因爲多個模型的打分和預估值並不是在一個空間中的,打出來的分數並不能放在一起比較,而是需要一定的比例係數進行校正。我們有一種假設:就是在model1預測值的均值除以model2預測值的均值的比值與類型1實際點擊率均值除以類型2實際點擊率均值的比值大致是相當的。這種方式的有點就是計算起來非常簡單,但是我們後來仔細想了想這種理論並不是特別嚴謹,而且它直接依賴了精排層,造成了層與層間的耦合,不利於後續迭代。後來我們就選擇了將多個類型的精排模型合併成一個統一評分模型,對多個類型的物品同時進行打分的過程。

這就是我們統一評分模型的一種思想。首先的前提是我們已經有不同類型的模型,然後我們把處理不同類型的模型的特徵工程部分也好、以及它的原始embedding部分也好等等,只要是可以通過類似拼接、複用的地方都拿出來共同組合成一個新的評分模型。

然後我們使用的是什麼方法呢?因爲我們的精排層採用的是wide&deep模型,這樣我們每個類型都有一個wide&deep模型,我們如何把這多個wide&deep模型組合成一個?

首先在wide部分,我們把所有模型重複的部分只保留了一份,同時把他們獨立的特徵工程部分直接複用過來,然後進行一些簡單的拼接。在它的deep部分,我們把embedding進行了一些刪減,刪減是如何做的呢?

我們首先把沒有在多個域中出現的特徵添加一個分桶,分桶就表示這個特徵沒有在其他域中出現,作爲一種相當於缺失值吧。

第二個是用戶部分的embedding和多個wide&deep模型的屬性和特徵相同的桶,我們可以直接把屬性和特徵拿過來進行復用。還有一種就是用戶部分以及多個域之間的embedding它是重複訓練的,也就是embedding在多個域中是有多份,我們採用了取平均值的方法來作爲初始化。採用這種結構後它的架構以及embedding的初始值很多都是複用了原始的wide&deep模型,所以它的訓練代價是可控的,同時這一個模型也同時能做到同時對多個域的模型進行打分的效果。

我們實際線上評價以後,我們新的、統一的wide&deep模型相比其他各個類型的wide&deep模型它的auc提升了1%,同時線上效果ctr提升4%。所以這樣一看,後續的各個層的精排模型暫時不需要存在了。爲了性能考慮,我們精排層拿掉,只保留了一個統一評分層。

下面講一下多樣性,多樣性並不是我們信息流中優化的目標,而是我們希望通過多樣性的手段提高業務指標。經過和產品 ( 同學 ) 的探討,我們把業務目標定義爲3個:點擊率、uv轉化率以及人均瀏覽條數。其中,提高點擊率的目的可以認爲是提高用戶儘量提高用戶的點擊概率,提高uv轉化率的目的可以認爲是吸引更多的沒有點擊的人產生點擊,提高人均瀏覽條數的目的實際是讓人們在feed流中能夠停留更久、看的條數更多。

第一期我們採用的是分類別、交替融合的方式。這種方式相比於直接採用精排分數排序,ctr和uvctr都有一些下降。但是這種結果我們認爲是不能接受的,我們發現已經有文獻指出多樣性和準確性並非完全矛盾。因爲,在feed中用戶沒有點擊並不一定是ctr預估不好,而是用戶已經點擊了類似的東西,這才導致了下一條內容沒有點擊。所以我們二期的目的就是找到使得多樣性與精確性同時提升的手段。

下面我們將介紹2種多樣性算法。第一種多樣性算法叫做MMR算法。MMR算法的全稱是最大邊緣相關算法,是一種以減少冗餘、保證相關的貪心排序算法。它的主要公式分爲兩部分:

  • 一部分Sim部分,Sim部分代表了用戶和物品的相關度,Sim部分直接使用了用戶與物品統一排序的打分作爲用戶和物品的相關度。
  • 第二部分實際上就是物品與物品間的相似度。

通過MMR算法要找到一個排序結果,既能一定程度上保證內容與用戶的相關性,同時在一定程度上保證選出的物品之間的距離要足夠大。

這就是MMR整體的思想。但其實在實際使用中,我們對MMR做了一定的修改。從公式的右側可以看出,它是採用了物品與物品最大的距離。但實際使用中,我們採用的是每次往裏面添加物品時使用的是添加的物品與已在這個集合中物品的平均距離。這樣可能會在全局性上保證類別的樣數會更多一些。

這就是MMR算法的整體流程。首先它會有一個計算距離的概念,距離 ( 的計算法方法 ) 我會在下一頁ppt中介紹。MMR的整體過程:它會使用貪心的算法,不停地根據λ值計算出的分數選出一個最優,將最優加入排序結果,再重複此選擇過程。最終產生一個同時兼顧相關性與多樣性的結果。

對於相似度的概念,其實物品與物品的相似度也有很多衡量方法。但是我們在信息流裏面處理的是異構的東西,異構的東西我們可能很難通過一種固定的、簡單的距離 ( 算法 ) 來衡量物品的相似度。所以我們採用了自定義的距離的方式。

我們自定義距離採用的是一種人工層次來定義距離的方式。我們會設定一個初始值,比如說是1,當遇到相同類型或不同類型時,我們會設定一種節點上設定一種衰減的方式,下面我們會定義是否滿足了處理條件,這些處理條件是符合業務預期然後人工標定的。比如,業務上可能認爲如果視頻類型和文章類型都是談論的房產話題就具有一定的相似度。所以我們基於這種樹狀結構定義了他們 ( 物品 ) 的距離。

最終我們是通過調節λ值,控制相關性的大小以及相關性和多樣性的權衡。這種圖中的λ與原始公式中的λ正好相反。也就是說此處的λ正好是對應於多樣性逐漸提升的情況。也就是說隨着多樣性的提升,人均的瀏覽條數基本是在穩定地增加的。但是我們的點擊率會在0.2的時候會達到最大值,隨着之後多樣性的增加,點擊率會逐漸下降。但是有一點很特殊的是UV轉換率,UV轉換率會隨着多樣性的增加而持續增長,直到在0.8左右纔開始下降。因此,我們會選擇在0.2到0.8之間的值,這個值會根據產品的目標而進行選擇。最終,ctr可以提升1.2%,uvctr提升5%,人均瀏覽數提升4%。

第二種多樣性的方法就是DPP的方式。DPP的方式之前Datafun的老師已經有介紹過了。我們主要是實現了:

《Fast Greedy MAP Inference for Determinantal Point Process to Improve Recommendation Diversity》

這篇論文裏面的算法。簡單說一下,DPP的核心思想是通過子行列式來衡量子集合中的概率大小,通過行列式的大小來衡量子集合的多樣性。具體過程由於時間關係在此就不仔細介紹了。

DPP的執行過程實際上也MMR也是類似的。它會通過多樣性與相關性間的一個Θ參數來更新核矩陣,也是通過貪心的算法來選擇列表。

DPP算法從整體效果上看比MMR要好一些。在最好的參數設置情況下,ctr提升4%提升,uvctr提升6%提升,用戶平均瀏覽數也提升了5%,整體上應該是優於MMR的。我們猜想可能是因爲DPP相對於MMR是通過行列式的方式 ( 優化 ),更考慮了行列式整體的多樣性的原因。

06 總結

首先,跨域推薦應該算是是一種思想,它和多任務學習、遷移學習都是有共同點的,其實是殊途同歸。

第二點是我們選擇算法要有一定的側重點,要和業務的特點進行結合。比如,我們部落的特點就是它的數據、用戶和業務線的重疊非常高;同時我們部落的願景是它能夠打通所有的業務線,所以我們把跨域推薦的技術當成了我們的一個方向。

第三點是算法部門優化方向要和業務部門一致。比如說我們不能因爲單純優化多樣性目標反而帶來業務目標的下降。還有就是我們的優化方向是要提高業務整體的指標,不能只優化其中一點,導致把另一個地方的流量搬運到了這個地方,這樣也是不合適的。

最後一點還是多樣性,多樣性作爲手段。多樣性也有很多指標,我們並沒有強調要將多樣性的指代做到具體多少。因爲我們通過部落中有人工體驗師發現:在人看來多樣性只要達到了一定的程度,多樣性高一點或低一點其實在人看來沒有太大區分度。所以我們並不過分追求多樣性,而是將其作爲手段用以提升業務指標。

今天的分享就到這裏,謝謝大家。

作者介紹

周建斌,58同城算法架構師

58部落推薦算法策略負責人,目前負責58部落推薦算法相關的整體建設和優化,包括部落畫像建設、內容分析、召回、排序等,致力於提升58部落的用戶活躍度和用戶粘性,以及配合傳統業務線提升整個58的用戶體驗。

本文來自 DataFunTalk

原文鏈接

https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247502918&idx=1&sn=b461d08b22a9fd8ca2e711bb501b7d7a&chksm=fbd77e2acca0f73ccb2e2dad23ce817a968a9d83fcb0f5c8edda7d6566e77c2ff8bdcd1145a7&scene=27#wechat_redirect

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章