58 商業流量排序策略優化實踐

背景

58作為國內最大的生活信息服務平臺,涵蓋了本地服務,招聘,房產,二手車,二手物品等多條業務線。 商業部門作為中颱部門,其職能是服務各大業務線,輔助優化各業務線商業流量的變現效率,同時滿足各業務線個性化,多元化的流量變現需求。

在不同的商業產品類型以及不同的場景下,業務線對於變現效率和用戶體驗存在不同的訴求。 目前在listing模式下,當帖子候選數量較大時,排序對變現效率和用戶體驗的影響很大,滿足業務線的多元化需求,在不同的商業產品提升變現效率的同時,兼顧用戶體驗,成為排序需要去解決的非常關鍵的問題。

本文主要介紹商業策略技術團隊在58商業流量上的排序策略優化實踐,主要包括數據流升級,特徵升級,模型升級,排序機制升級四個部分,並闡述在升級過程中,對新技術落地的實踐效果和心得體會。

優化前排序策略介紹

在介紹上述4個部分升級前,先簡要介紹一下優化前的基礎模型情況。

如上圖所示,也從4個部分來闡述基礎模型:

58 商業流量排序策略優化實踐


基礎數據流

數據流主要產出供後續樣本生成和特徵指標計算的基礎數據。 在這個部分,需要完成離線日誌合併,數據清洗以及一些基礎的數據加工操作。 我們能獲取的業務日誌,一般有列表頁展現日誌,點擊日誌以及轉化日誌,日誌合併操作會按指定的key(一般會打平到單次展現下廣告粒度,方便後續進行聚合分析等操作)進行合併。 由於作弊,爬蟲等原因,我們合併好的基礎數據中包含了大量噪聲,直接用來進行指標計算或者樣本生成會對模型效果產生較大的影響,所以需要對合並完成後的數據進行清洗和反作弊,對於商業流量,因為有線上反作弊系統,所以拿到的原始日誌中是會帶有反作弊標識的,直接根據該標識對日誌進行過濾即可(一次展現下如果有一個點擊被識別為作弊點擊,則去除所有改成展現下的日誌數據)。 對於清洗,主要是通過ip黑名單和用戶黑名單的方式來進行日誌過濾。 完成上述操作後,我們會獲得帶有上百個基礎字段的可用樣本,這些樣本數據會在下一個環節被用來生成最終樣本和進行指標計算。

•特徵工程

人工特徵工程一般包括特徵設計,特徵加工,特徵選擇三個步驟,首先在特徵設計環節需要結合當前的業務場景,進行詳細的數據分析,判斷哪些類型的特徵會對業務指標帶來增長。 舉一個例子,比如黃頁的用戶,返回率較低,大多數用戶,當天找到服務後,很長一段時間都不會重複尋找相同服務,例如找開鎖換鎖,那麼在黃頁場景下,用戶特徵的效果就會大打折扣。 但是用戶在找黃頁服務的時候,對距離因素特別在意,那麼在排序中增加lbs相關特徵,效果就會比較明顯; 不同業務線差異較大,二手車上就需要高度的用戶個性化,所以特徵設計環節,就是需要結合對業務的理解和數據分析,來判斷該往哪個方向去設計特徵。 這裡以比較常見的,也比較通用的帖子維度歷史點擊率為例簡要介紹一下幾種常見的統計類特徵加工操作: 1.位置消偏,listing模式下,位置對點擊率的影響非常之大,通過統計數據也可以發現,很多業務線上,首屏佔了大部分的點擊,而這種位置帶來的點擊率會影響特徵統計,所以需要對位置進行消偏,一般會採用COEC來進行位置的消偏; 2.平滑處理,這裡主要是針對一些曝光量還不夠的帖子,在曝光量不到達具備統計意義的情況前,通過這些數據計算出的點擊率是極度不靠譜的,需要進行平滑處理,一般會採用貝葉斯平滑; 3.離散化: 對連續性的指標,會進行離散化或者歸一化的處理,一個目的是增加其泛化能力,另外一個目的是可以加快模型的訓練速度,減小模型複雜度。 特徵選擇一般會基於信息增益和單特徵AUC來進行挑選。

•模型計算

基礎模型中支持FTRL(帶正則的進階版LR),GBDT以及wide&deep,支持這些模型的批量和增量的天粒度更新,其中wide&deep基於tensorflow server api實現線上批量預估。

•排序機制

支持單一因子的排序,例如純ctr,cvr或者按ecpm排序;

上述基礎模型在線上運行後,陸續發現了一些類似特徵diff,特徵實時性不夠,排序因子較少等問題,針對發現的這些問題,我們進行各個部分的優化升級,取得了不錯的效果。

數據流升級

基礎版的數據流中,有幾個比較明顯的缺陷,會制約模型對業務的增長:

(1)特徵diff: 通過特徵監控發現,在原有的數據流中,存在較多的特徵diff(特徵線上線下取值不一致)情況,分析後發現,這種情況出現在線上特徵庫更新的時候,比如當天10點,線上特徵庫中的統計類特徵進行了更新,在10點前,線上服務獲取的統計類特徵依舊是未更新的,離線的樣本拼接的都是更新後的數據,這樣離線樣本中10點前的特徵就跟線上產生了diff。 由於集群計算資源不穩定,線上特徵庫的更新時間也不穩定,所以通過離線還原樣本的方式,很難完全消除特徵diff。

(2)特徵時效性: 在用戶操作密集型的業務線,例如二手車,特徵的時效性尤為重要,例如用戶在前幾分鐘點擊了寶馬,那當前的排序中,就要能根據用戶的實時行為做出反應,基礎模型中,基於天粒度的特徵更新,是無法達到這個目標的。

針對上述兩個需要優化的地方,我們升級了數據流,搭建了兩條實時數據流,其中一條基於spark streaming,用於進行實時展現點擊日誌拼接,實時樣本生成,另外一條基於storm,用於進行實時指標計算;

(1)實時樣本流:

實時樣本流採用實時拼接展現點擊數據的方式,從kafka中讀取展現點擊數據,採用spark streaming,對日誌進行實時清洗/反作弊處理,提取關鍵字段,實時拼接在線特徵庫中的特徵,在集群穩定的情況下,相比線上的真實請求,實時流生成樣本的延時約在1分鐘左右,在如此短暫的時延下,樣本中獲取的特徵數據跟線上請求中獲取的特徵數據,產生diff的情況會極大減少。 實時樣本流上線後,特徵diff率從5%下降到1%以內。 同時,實時樣本流也為支持實時模型訓練打下基礎。 實時樣本流請見下圖:

58 商業流量排序策略優化實踐


(2)實時指標流: 跟實時樣本流不一樣的地方是,部分實時指標的計算,不依賴展現點擊日誌拼接,例如用戶對某車型的實時點擊數,用戶對某品牌的實時篩選次數,同時這部分對於實時性的要求更高,這裡我們採用了storm(後續將升級為flink)進行實時指標流搭建,實時反應速度較spark streaming更快,經測試,從用戶發生點擊/搜索/篩選行為,到特徵庫中指標發生更新,在3s內完成,該實時特徵作用於模型中,反饋在排序裡面,顯著提升了用戶體驗。 實時指標流請見下圖。 下圖主要以用戶實時指標加工為例,其中除篩選行為可以直接通過篩選項進行聚合外,搜索詞需要使用映射表映射到屬性上(因為搜索詞種類繁多,且無法直接跟帖子屬性進行match匹配),點擊/轉化等行為因為是落到帖子上,需要跟進imc帖子屬性信息,將其映射到屬性上,各項行為數據聚合到屬性和帖子粒度後,再經過一些算子,計算得到特徵入庫到特徵庫(redis)中。

58 商業流量排序策略優化實踐


特徵升級

基礎版模型中,有一類特徵是比較難有效處理的,就是id類特徵,例如二手車業務線中的車型,車系,品牌等,這類非連續類型的特徵,無偏序關係,在基礎版模型中,將其取值直接進行md5值編碼後放入模型中,由線性模型的記憶功能去使得這些特徵發揮作用,但這種處理方式的泛化能力較弱,制約模型效果。

在深度學習出現以後,其強大的表徵能力,能對人工特徵工程進行有效補充,對於一些之前較難處理的特徵,例如上述離散類型特徵,能進行較好的表徵,我們採用其embedding的能力,再結合attention機制,對部分離散類似特徵進行了升級,取得了較好的效果,以二手車業務線兩類特徵為例:

(1)用戶興趣類特徵處理

58 商業流量排序策略優化實踐


用戶興趣類特徵向量的生成流程相對其他特徵要複雜一些,輸入的信息是用戶對某些屬性的累積操作數量,先對屬性的離散值進行embedding,然後使用累積操作的數量,對embedding結果進行加權(標量乘以向量,attention),形成興趣矩陣,最後進行pooling操作,使其變成固定長度的興趣向量。

(2)用戶跟當前帖子屬性的交叉特徵處理

58 商業流量排序策略優化實踐


以用戶對當前品牌的累積轉化行為特徵為例,屬於用戶跟當前帖子屬性的交叉特徵,跟用戶興趣特徵向量的區別在於,直接輸出embedding後的加權向量即可。

將這些特徵表徵好後,其表徵方式將跟隨模型一起進行學習,最後生成的表徵向量,是滿足模型優化目標的最優化表徵方式。

模型升級

對 模型的升級動作主要有三種,實時模型,多任務模型,相關性模型,下面將分別進行介紹。

實時模型(Online training)

業界對於模型時效性提升有過一些探索和嘗試,比較主流的三種方式分別是1.動態特徵(實時特徵)+ 靜態模型; 2.靜態特徵 + 動態模型(實時訓練); 3.動態特徵 + 動態模型。 這裡我們的對模型的升級,指的是模型的實時訓練(Online training)。

在有了之前的實時樣本流(見數據流升級)以後,模型的實時訓練就能較方便實現了,實時訓練中,模型我們採用的是FTRL,該模型的稀疏性較好; 開啟實時訓練後,每半小時,會dump一份模型,推送到線上服務器,線上預估服務支持模型熱加載,達到Online training的效果。

•多任務模型

基礎版中,針對單一因子進行單獨建模和預估,例如點擊率(展現到點擊)預估模型,轉化率(點擊到轉化)預估模型,會有三個問題(前兩個問題參考阿里ESMM模型論文):

(1)樣本選擇偏差

傳統CVR模型預估使用的是點擊到轉化的樣本,而預估的時候,是在整個樣本空間(展現->點擊->轉化)進行預估,由於點擊事件只是展現事件的一個子集,僅從點擊事件中獲取的特徵,相比全局是有偏的,並且從一定程度上違背了機器學習中訓練樣本和測試樣本必須獨立同分布的準則。 樣本選擇的偏差,會影響到模型的泛化效果。

(2)訓練數據稀疏問題

相比展現和點擊,轉化要低出好幾個量級,高度稀疏的訓練數據,會給模型訓練增加很多困擾,在二手車上,這個問題尤為明顯,展現是千萬量級,點擊是百萬量級,轉化是萬量級,很稀疏,嚴重影響模型訓練效果。

(3)模型維護成本

每條業務線都有對點擊率和轉化率預估的需求,如果拆分建模,意味著需要維護的模型數量最少是業務線叉乘模型數量,會帶來雙倍的維護成本,並且大多數時候,點擊率預估模型和轉化率預估模型的特徵都高度重合,重複建模的意義較低。

對於上述這些問題,我們參考阿里的ESMM模型,對現有點擊率轉化率預估模型進行升級。

ESMM(全樣本空間多任務學習模型)借鑑了多任務學習的思路,分別擬合pctr和pctcvr(展現到轉化的轉化率),有效緩解了上述兩個問題,相比傳統CVR預估模型,其有兩個特點:

(1)全樣本空間建模

pcvr(點擊到轉化的轉化率)可以通過pctcvr除以pctr推導出來,在ESMM模型中,pcvr只是一箇中間變量,沒有直接去預估,模型預估的是pctr和pctcvr,這兩個模型都是在全樣本空間(所有展現)進行建模,所以推導而出的pcvr也是基於全樣本空間得到的,不像傳統cvr預估只在點擊樣本空間建模,解決了樣本選擇偏差的問題。

(2)共享特徵表達

一般神經網絡的輸入層,會對特徵進行embedding,其作用是把一些高維度的id特徵,映射成低維向量,是特徵更好的表達方式,能有效提升模型效果,但是進行embedding層的參數訓練,需要大量的訓練樣本,ESMM裡面對於cvr的子任務,其跟ctr子任務共享embedding表達,這種共享機制,能使得cvr子任務能夠從只有展現沒有點擊的海量樣本中,對embedding進行充分的學習,極大緩解訓練數據稀疏問題。

我們在二手車上使用的升級後的模型如下圖:

58 商業流量排序策略優化實踐


•相關性模型

相關性模型的構建主要是為了支持粗排環節,因為粗排的帖子量過大,在粗排階段,無法進行復雜的精排模型計算,於是考慮將用戶和帖子轉變為向量,在線上進行向量的餘弦相似度計算,通過帖子向量跟用戶興趣向量的內積得分來進行粗排,同時對於一些重要因子進行顯式強化,當前線上相關性模型打分公司如下:

相關性打分 = ʎ*強意圖 + (1-ʎ)*弱意圖

其中強意圖指的用戶搜索/篩選行為,因為這些行為能定位到具體帖子屬性上,可以明確知道用戶的關注點,; 弱意圖指的是用戶的點擊/電話/微聊行為,因為這些行為只能定位到帖子上,無法明確知道用戶是對該帖子中哪些屬性比較關注。

58 商業流量排序策略優化實踐


這裡強意圖部分我們採用了一個線性加權的方式,其中X: θ1*w1 + θ2*w2 +...+ θi*wi(當前帖子的屬性在用戶歷史篩選/搜索行為中的加權和),將輸出結果使用sigmod函數進行歸一化; 弱意圖部分採用用戶向量和帖子向量的餘弦距離,這裡計算用戶向量和帖子向量,使用的模型有dssm(深度語義匹配模型)和item2vec模型。 用戶向量和帖子向量簡要生成流程請見下圖:

58 商業流量排序策略優化實踐


排序機制升級

基 礎版的排序中,只支持單因子(CTR/CVR/相關性等)排序,在部分業務線的某些商業產品中,需要同時考慮到CTR,CVR,相關性以及一些業務規則,例如房產上的視頻/安選房源加權,二手車上的真車加權等等,支持多個因子的融合需要在排序機制層面進行升級。

升級後的排序機制請見下圖:

58 商業流量排序策略優化實踐


升級後的多因子排序框架,支持分層排序(按某個因子進行強分層,層內按其他因子進行排序),支持加權融合,支持自定義融合(乘法融合等),支持層內嵌套分層,能夠靈活支持業務線各個商業產品多元化的排序需求。

總結和展望

完成上述四部分升級後,我們目前的排序模型能力如下圖

58 商業流量排序策略優化實踐


目前該升級後的排序能力正在陸續應用於多個業務線,在部分業務線,對變現效率和連接效率,帶來了顯著提升。

後續將在以下幾個方面繼續進行深入的探索和優化:

(1)數據流: 考慮引入真曝光數據,進一步去除噪聲,同時支持按指定維度進行自動採樣;

(2)特徵工程: 結合具體業務,引入更多數據,進一步提高特徵工程的自動化程度;

(3)模型計算: 緊跟業界前沿,探索多模型融合,大模型嵌套子模型,模型壓縮等方向;

(4)排序機制: 構建多目標離線評測環境,支持融合因子的自動探索,提高迭代速度。


分享到:


相關文章: