天天看點

喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

作者:閃念基因

業務背景

自營廣告是喜馬廣告生态中的重要組成部分,它包含了多種廣告類型,包括金融、電商、下載下傳、教育、直播、專輯等,推薦廣告的品質決定了使用者在喜馬app上的廣告體驗和平台廣告收入,随着線上廣告的不斷發展,廣告主從最初的以cpm、cpc方式進行流量拍賣,到目前主流的ocpx、雙出價、nobid等。流量拍賣的方式越來越精細化、智能化,廣告競價pk時不僅需要考慮ctr、還需要考慮cvr、deep_cvr等多個因素,喜馬自營廣告平台以ocpc為主要流量拍賣方式,是以準确預估廣告cvr對于自營廣告平台至關重要。在喜馬app中常見廣告場景包括:開機、貼片、懸浮touch、首頁猜你喜歡等,下圖是幾種常見的廣告場景。

喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

技術挑戰

  1. 廣告樣本稀疏,差別于短視訊、電商app,使用者有着豐富的行為資料,喜馬使用者大部分時間處于閉屏收聽的狀态,這就導緻了使用者與廣告的互動資料更加稀疏。
  2. 廣告場景複雜,喜馬app上廣告資源位有着明顯的長尾特點,首頁位置像:焦點圖、懸浮touch曝光占比高,而中小廣告位數量多,但曝光占比少。
  3. 廣告轉化類型多,不同的轉化類型之間cvr差異很大,比如下載下傳類拉活廣告cvr是表單類廣告的數10倍,在聯合模組化時,資料量多的廣告會影響資料量少廣告的預估。
  4. 廣告流量不穩定,自營廣告平台會和三方DSP、品牌廣告一起競争流量,像開機、貼片等位置一旦出現品牌占量時,拿量會發生較大變化,據統計:品牌占量時自營廣告在開機等位置曝光量級不足平時的十分之一,這對模型來說,訓練樣本分布則會發生較大變化。
  5. 廣告冷啟動問題,新廣告的準确預估對于平台收入和廣告主投放體驗有着非常重要作用,喜馬自營平台每日新增上千個廣告計劃和創意,同時喜馬自營平台支援ocpc投放時直接進入二階段,這對模型帶了更大的挑戰,

廣告檢索系統架構

廣告檢索系統的主要作用是從海量廣告庫中,在一定的RT要求内,篩選出最合适的廣告傳回給使用者,出于對效果和性能的平衡,廣告檢索系統是一種類似于漏鬥的多層架構。一次廣告請求,漏鬥最上層的檢索環節會檢索出數萬級廣告物料,經過過濾、召回、粗排後,剩餘百級物料進入精排環節,廣告CVR模型就是作用于精排環節中,預估使用者點選廣告後發生轉化的機率,用于精排環節廣告排序依據(ecpm)的計算,和作為一些廣告政策的輸入

  1. 常見轉化類型:送出表單、付費、專輯訂閱、加微、安裝app等
  2. 廣告精排環節排序依據:ecpm = pctr * pcvr * 廣告轉化出價 * 1000
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

圖一:廣告檢索架構

模型演進路線回顧

  1. 廣告算法團隊從2022年到2023年在CVR模型上的技術演進,主要是時效性和大規模兩個方面,(1)時效性的提升可以讓新廣告、新使用者、新位置的樣本更快進入模型學習,提升冷啟動流量使用率,天級更新模型時,新廣告的回報資料需要等待超過24小時才能進入模型學習,導緻新廣告預估偏差大,廣告主投放體感差等問題。(2)模型參數規模的提升,可以提升模型的個性化預估能力,緩解熱門廣告曝光過于集中的問題,做到千人千面的廣告分發。
  2. 時效性上CVR模型從最初的天級全量更新到目前的小時級增量更新,模型規模上CVR模型參數量提升超30倍,模型大小提升超60倍
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

模型1.0時期

重點解決:模型基建差、轉化樣本稀疏

1.基礎能力建設

  1. 在1.0時期,我們對模型基礎能力的建設進行了更新,為後續模型疊代打好基礎,比如:廣告CVR Baseline模型的在樣本建構上,是根據用戶端上報的點選日志中的使用者id和廣告id關聯天級畫像快照來擷取原始使用者和廣告側畫像,這種方式會存在離線訓練和線上推理的特征不一緻和無法使用實時特征等問題
  2. 實時畫像落盤:通過将廣告請求時畫像實時落盤方式,将畫像一緻性提升到95%以上且支援添加實時特征
    1. 廣告請求時,Ads廣告引擎服務将競價勝出的物料id、deviceid、response_id發送到Kafka
    2. 下遊Flink任務接受到Kafka消息後,讀取後端畫像配置,請求畫像并緩存在xcache中
    3. 廣告曝光時,Flink任務根據response_id+物料id從xcache中擷取對應的畫像并落盤HDFS
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

圖二:實時畫像落盤

  1. 實時特征建構
    1. 特征實時化能更及時的收集使用者和廣告的資料變化,讓模型能夠使用最新的特征進行預測,1.0時期我們從使用者側和廣告側共生産了數十類實時畫像

2.級聯多目标ESMM模型

a. 廣告CVR Baseline模型采用了經典的Embedding + MLP模型結構,從點選開始模組化,點選未轉化為負樣本,反之為正樣本,這種模組化方式會存在:

    1. CVR模型樣本稀疏,模型參數難以收斂
    2. 推理和訓練的樣本選擇偏差

b. 針對以上問題,我們參考了阿裡的ESMM模型,将CTR和CTCVR聯合訓練隐式學習CVR目标,通過embedding共享緩解因正樣本稀疏導無法收斂的問題,因為CTR和CTCVR任務樣本都是曝光空間開始模組化,故CVR也可以認為是曝光空間,解決了樣本選擇偏差的問題,模型網絡結構如下:

喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

圖三:1.0時期CVR模型結構

模型2.0時期

重點解決:模型時效性差、參數量少個性化能力不足

1.小時級更新

  1. 周星馳著名的電影《功夫》裡面有一句著名的台詞——“天下武功,無堅不摧,唯快不破”,實時性在效果廣告系統中就是“唯快不破”的“柳葉飛刀”,在2.0時期我們對模型時效性上重點投入,将資料生産到模型更新端到端延遲降低了80%
  2. 訓練資料小時化
    1. Spark SQL select樣本資料掃描政策優化:将where 條件中 dt條件和随機化條件拆分,執行速度提升10倍
    2. 資料傾斜優化,分析spark資料處理任務發現有嚴重的資料傾斜導緻一些task執行很慢,對傾斜的key進行特殊處理後,大大降低任務執行時間
    3. Spark任務部分機器因cpu性能問題,執行很慢,嘗試開啟Spark中的推測執行機制解決,spark.speculation=true
    1. 2.0時期我們對算法模型資料流進行了重新梳理,曝光、點選、轉化join、樣本抽取、提取畫像、特征轉化等任務均實作了小時級執行,核心優化包括:
  3. 階梯式重刷
    1. 廣告系統中的點選與轉化均存在延遲,我們提出了創新的階梯式資料表分區重刷方案,以解決點選轉化上報延遲所引起的樣本重刷、特征緩存重刷問題

2.組合特征

a. 深度模型雖然号稱可以拟合任意函數,但根據經驗添加一些顯式的交叉特征能顯著的提升樣本的區分度,加速模型的收斂,我們主要從廣告、廣告位、使用者等不同次元構造交叉特征,共增加了幾十個交叉特征,但在實驗過程中我們也發現,顯式的交叉方式會引發一些問題,比如:

    1. 低頻特征過拟合問題
    2. 特征空間顯著膨脹,線上推理耗時增加

b. 針對第一個問題,我們在小流量實驗時發現實驗模型曝光出來的廣告與基線模型差異很大,且實驗模型曝光出的廣告冷門占比增加,在訓練多個epoch後差異越發明顯,由此我們推測出是因為高維的特征交叉導緻了低頻特征的過拟合,我們計算了實驗組與基線廣告物料和廣告計劃分時的傑卡爾德相似度,發現epoch=1對比epoch=3時,相似度有明顯提升(左圖epoch=1時plan次元的相似度約45%,右圖epoch=3時plan次元的相似度不到35%),故我們将模型訓練的epoch由3調整到1

c.針對第二個問題,對于高維稀疏的交叉特征,我們使用類wide&deep模型中的wide側網絡來學習特征之間的記憶能力,同時加入正則項降低過拟合風險,因wide側計算複雜度低,也降低了線上推理耗時增加的問題

  1. 組合特征實驗模型在核心廣告位auc+0.4%,模型結構如下:
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

圖五:2.0時期CVR模型結構

模型3.0時期

重點解決:訓練樣本數量限制、轉化延遲

1.增量學習

  1. 在1.0和2.0時期,CVR模型每次訓練時都是基于固定時間視窗内的資料全局shuffle的全量訓練方式,在這種訓練方式下,小時級訓練模型存在資料重複訓練的問題,導緻每次訓練時間較長,且因為全局shuffle樣本,導緻模型對最近期的資料不敏感,而近期的資料分布更接近目前線上情況,故在3.0時期我們進行了增量訓練的疊代優化,增量訓練對比全量訓練:
  2. 增量訓練優點
    1. 模型每次更新隻使用最近一段時間新的資料,模型訓練時間縮短到x小時以内
    2. 增量更新方式下,模型打破了原來隻訓練固定時間視窗内樣本的限制,可以一直增量
    3. 增量訓練對近期樣本更敏感,對新廣告收斂更快
  3. 存在的問題
    1. 增量方式下,模型基于最新的資料一直往前增量,導緻延遲轉化的正樣本無法進入模型訓練,而CVR樣本中延遲的轉化數占比較高,直接丢失會導緻模型低估且排序能力也會下降,在這樣的背景下,我們設計一種支援回補樣本的增量方式,将模型分為天級模型 + 小時級模型
    1. 1. 小時模型:在天級模型的基礎上,疊加當天資料訓練,用于部署上線,小時級排程2. 天級模型:訓練stable(轉化延遲比例很低) + temp資料(存在一定轉化延遲),天級排程
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

圖六:小時級增量訓練方式

  1. 參數遺忘問題:在增量方式下,模型的樣本不是全局shuffle的,每次增量的特征分布和全局不一緻,比如hour、weekday等這些特征在增量樣本中取值都是相同,最終導緻這些特征失去作用,且我們發現一直基于最新的資料進行增量更新,模型預估會出現較大波動,可能得原因:
  2. 1. 對于Sparse參數和Dense參數可能需要使用不同的學習率和優化器
    1. 我們的做法是小時級增量時,會随機采樣一定比例最近一周的樣本混合當天樣本一起訓練,這樣模型預估會更加穩定
  3. 3. 最新資料分布變化比較大,增量到模型後導緻一些高頻的embedding也發生了較大的變化,這不是我們期望的,我們期望對于高頻id的embedding應該更穩定,而一些新的、低頻的embedding能快速收斂

模型4.0時期

重點解決:個性化能力進一步提升、不同業務統一模型

1.DeepRec大模型

  1. 在4.0時期之前,CVR模型都是基于原生的Tensorflow架構開發,在這個架構下我們遇到了一些特定的問題限制了模型的疊代優化,比如:
    1. 廣告資料具有高維、稀疏特點:目前處理是将特征通過hash取餘的方式,将特征限定在指定空間内,但是随着新廣告、新使用者、新特征的不斷增加,hash沖突的機率會越來越大,具統計,部分特征的沖突率高達30%,大量hash沖突會直接影響模型預估準确性
    2. 低頻特征難以有效學習:在廣告系統也存在頭部效應,大量的長尾、低頻特征因缺乏訓練資料,不能有效學習,不做處理線上往往會導緻預估偏高問題,需要降低長尾特征的影響
  2. 故在4.0時期我們聯合中台AI雲團隊将模型訓練架構由TensorFlow更新到DeepRec,開始了由TensorFlow小模型向DeepRec大模型的疊代,在DeepRec架構下我們可以添加更高維稀疏的交叉特征,包括使用者id及其交叉特征,能顯著提升模型個性化預估能力,之後在CTR模型疊代優化的文章中會詳細介紹稀疏大模型上的相關疊代

2.CVR大模型一期:EmbeddingVariable&&低頻特征準入

a. EmbeddingVariable(動态彈性特征)

    1. 針對高維、稀疏的廣告資料特點,基于AI雲團隊開發EmbeddingVariable功能,(1)顯著降低了特征哈希沖突的機率,對比基線模型,id類特征的沖突機率從30%下降到1%,(2)模型的大部分參數來自特征embedding,而基線模型中設定固定大小的hash空間,導緻了記憶體浪費,而動态embedding可以支援動态寫入,有效了避免了記憶體浪費
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

b. 低頻特征準入

    1. 低頻特征因為缺乏訓練資料,不能有效學習,在之前的id類組合特征實驗中就遇到了低頻特征過拟合問題,導緻模型高估,是以需要降低低頻特征對模型預估的影響,DeepRec架構中自帶了對低頻特征準入的功能,目前支援基于bloom_filter和特征頻次的準入,模型中采用的是基于頻次的特征準入
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

c. 在大模型第一版疊代中,我們引入了上面這兩個feature,同時将wide側組合特征遷移到deep側直接學習,離線評估auc+0.25%,pcoc降低約30%,模型結構如下:

喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

圖七:4.0時期大模型第一版模型結構

3.CVR大模型二期:基于Gate NU的參數個性化網絡

a. 監督學習的本質是拟合資料分布,當資料分布存在不均衡時,模型往往被多數類樣本或者特征主導,比如:高頻使用者的資料主導了模型學習,導緻模型在低頻使用者上學習不好,其結果是預估被高頻使用者帶偏,考慮到不同使用者的廣告行為具有一定差異,為了幫助模型更好的學習不同使用者資料分布的差異,我們基于device_id設計了一種基于門控機制的參數個性化網絡,旨在降低不均衡分布對模型的影響,提升模型的個性化預估能力

b. Gate NU(門控網絡)

    1. 輸入使用者id特征,中間采用兩層神經網絡,其第二層采用sigmoid作為激活函數,為每個使用者生成不同個性網絡權重
  1. ii. Gate輸出結果與主網絡Dense層輸出結果進行 element-wise product 來做使用者的個性化偏置

c. 參數個性化網絡的引入,模型auc+0.12%,gauc+0.28%,模型結構如下:

喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

圖七:4.0時期大模型第二版模型結構

4.CVR大模型三期:多目标更新

a. 目前OCPC廣告投放分為單出價廣告和雙出價廣告,單出價隻需要優化一個CVR目标,雙出價廣告需要同時優化深、淺兩個CVR目标(淺層目标:表單送出、激活等,深層目标:授信、加微、付費等),之前模型是分别模組化淺層CVR和深層CVR模型,模型維護成本高,疊代效率低,基于這樣的背景,我們開始了深、淺CVR模型的合并b. 合并多目标模型結構設計

    1. 一次請求需要同時預估廣告的淺層cvr和深層cvr,故需要将淺層和深層獨立拆塔,同時考慮到樣本選擇偏差和正樣本稀疏的問題,我們又加入了ctr、和ctcvr兩個輔助目标,模型結構如下:
喜馬廣告算法優化實踐(一):廣告CVR模型演進曆程

圖七:4.0時期大模型合并多目标模型結構

c. 基于廣告深、淺目标的Loss Mask設計

    1. Loss = \sum(Loss_{ctr} , Loss_{ctcvr} , Loss_{shadow\_cvr} ,Loss_{deep\_cvr}) \odot Mask
    2. 單出價廣告Mask
    3. 雙出價廣告Mask
    1. 不同出價方式的廣告需要優化的目标不同,故需要設計一種Loss Mask機制對不同樣本在計算Loss時進行Mask,防止帶偏其他網絡的學習
    2. 模型Loss和Mask

d.效果上,合并多目标模型auc+0.14%,深層cvr模型預估偏差有非常明顯下降,部分深度雙出價廣告的cvr提升幅度超過100%,後續的文章中會有專門的topic來介紹我們針對廣告主深度效果優化相關的算法政策

未來展望

自營廣告cvr模型經過多次疊代優化,核心名額ecpm提升近100%,帶來了明顯的業務提升,但還存在很多問題需要不斷解決:

(1)未來我們會繼續在大規模上持續疊代,讓模型的個性化預估能力得到更進一步提升。

(2)同時随着時效性的不斷提升,轉化延遲的問題也越發明顯,故急需要對轉化延遲進行模組化,以解決延遲轉化被模型誤判為負樣本帶來的預估問題。

(3)雖然新廣告預估準确性随着模型時效性的提升,得到了緩解,但是并沒有本質上解決新廣告預估準确性的問題,未來我們希望通過meta-learning的方式,真正提升模型對于新廣告的預估能力,讓新廣告在冷啟階段就能準确的找到感興趣的人,進而提升冷啟流量的變現效率。

(4)通過更豐富的場景化特征刻畫和更高效的場景化模組化方式,提升cvr模型在站内、站外多場景預估的準确性。

(5)手動設計交叉特征的方式雖然有效,但是需要對業務有很深的認知,才能設計出有效的組合特征且效率較低,未來我們會去探索業界一些先進的自動交叉網絡結構,比如:dcnv2、can等。

雖然喜馬自營廣告cvr模型取得了一定的進步,但仍然有很多可以持續優化的地方,我們相信“星光不負趕路人”,隻要朝着正确的方向不斷疊代,一定會為喜馬自營廣告帶來更多業務提升。

作者:喜馬Tech 鄭紀偉

來源-微信公衆号:喜馬拉雅技術團隊

出處:https://mp.weixin.qq.com/s/ku4jncV263ATWMZgSR5oog

繼續閱讀