日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

推荐算法工程师成长2:排序模块

發(fā)布時(shí)間:2024/1/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 推荐算法工程师成长2:排序模块 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

開(kāi)一個(gè)系列,主題是推薦算法工程師成長(zhǎng)路徑。目標(biāo)是希望填補(bǔ)書(shū)本上的機(jī)器學(xué)習(xí)理論與業(yè)界推薦算法工程師知識(shí)體系上的gap,了解一些業(yè)界模塊的通用玩法。目標(biāo)群體是針對(duì)以下用戶:

  • 有一些代碼和機(jī)器學(xué)習(xí)基礎(chǔ),但是沒(méi)有從業(yè)經(jīng)驗(yàn)的在校學(xué)生
  • 剛剛?cè)肟拥乃惴üこ處?#xff0c;可以對(duì)照一起探討
  • 對(duì)推薦系統(tǒng)感興趣的其他朋友

歡迎關(guān)注一起探討,也歡迎關(guān)注我的微信公眾號(hào): 峰池 (fengchitalk)。


前兩篇,我們分別講了推薦算法所需要的一些工程基礎(chǔ),和在推薦算法的召回模塊的一些通用解法:

峰池:推薦算法工程師成長(zhǎng)路徑0——工程基礎(chǔ)

峰池:推薦算法工程師成長(zhǎng)路徑1——FM召回

接下來(lái)我們來(lái)進(jìn)入排序模塊,看下排序模塊工業(yè)界常見(jiàn)的解法是怎么樣的。

排序模塊需要解決的問(wèn)題是:怎么樣可以更準(zhǔn)確計(jì)算用戶更喜歡的內(nèi)容。具體而言問(wèn)題是:

  • 更加精準(zhǔn)的預(yù)估用戶的行為。因?yàn)楹蜻x集基本上是百到千這個(gè)級(jí)別,可以通過(guò)逐個(gè)計(jì)算的方式得到最終的計(jì)算結(jié)果,可以不再依賴近似計(jì)算。
  • 從業(yè)務(wù)出發(fā),綜合考慮各個(gè)維度最終確定用戶的排序依據(jù)。
  • 第一個(gè)問(wèn)題,我們來(lái)引出排序階段的模型結(jié)構(gòu)。相對(duì)于召回模型而言,排序階段的模型可能更像我們傳統(tǒng)意義上的深度學(xué)習(xí)模型。第二個(gè)問(wèn)題,我們考慮推薦上非常重要的一個(gè)概念,叫做多目標(biāo)的預(yù)估和融合。

    一、排序階段的模型結(jié)構(gòu)

    首先我們來(lái)看排序階段的模型結(jié)構(gòu)。先假定我們?cè)谂判螂A段的主要目標(biāo)是預(yù)估用戶的點(diǎn)擊率。這個(gè)部分可能是推薦系統(tǒng)在線模塊中,與在學(xué)校學(xué)習(xí)的機(jī)器學(xué)習(xí)課程中最為類似的一個(gè)部分了。因?yàn)樵谶@個(gè)部分我們可以假定,訓(xùn)練數(shù)據(jù)集已經(jīng)存儲(chǔ)好;且這個(gè)部分在serving的時(shí)候,不需要像召回一樣做那么多特殊的處理。

    一句話簡(jiǎn)單說(shuō)明,現(xiàn)在排序階段的模型整體架子都是在Wide & Deep的框架下的一些變體和調(diào)整。

    什么是Wide & Deep框架呢?這源于Google在16年的一篇論文,Wide & Deep Learning for Recommender Systems。這篇論文非常短,只有4頁(yè),核心思想就是這樣一張圖:

    所謂Wide Models,就是所有的特征直接預(yù)估得到最終的結(jié)果,說(shuō)穿了就是我們機(jī)器學(xué)習(xí)的第一課:邏輯回歸。而Deep Models,就是我們常見(jiàn)的,從最開(kāi)始的稀疏特征,到變換成Embedding層,到最終的全連接隱藏層,再到最終的輸出層。

    而Wide & Deep Models,就是把這兩個(gè)模型結(jié)構(gòu)簡(jiǎn)單粗暴的融合在一個(gè)模型結(jié)構(gòu)里,變成一個(gè)大的網(wǎng)絡(luò)結(jié)構(gòu)。在這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中,既有Wide的部分,也有Deep的部分。這樣的效果通常比我們單獨(dú)使用Wide 或者單獨(dú)使用Deep的網(wǎng)絡(luò)效果要好:比只有Wide的網(wǎng)絡(luò)結(jié)構(gòu)效果好比較顯然,畢竟有deep的部分,擬合的效果自然會(huì)好很多;比只有Deep的網(wǎng)絡(luò)結(jié)構(gòu)效果好,可能的解釋性在于,feature直接作用于最終的輸出結(jié)果,會(huì)強(qiáng)化原始的feature在最終預(yù)估結(jié)果的解釋性,尤其會(huì)使模型呈現(xiàn)出一種“記憶性”(同樣的feature再度出現(xiàn)時(shí),wide部分的網(wǎng)絡(luò)更容易直接學(xué)到結(jié)果。)

    Wide & Deep只是一個(gè)網(wǎng)絡(luò)的框架,一般而言我們會(huì)在網(wǎng)絡(luò)結(jié)構(gòu)中做一些調(diào)整和變換,這一點(diǎn)在王喆的《深度學(xué)習(xí)推薦系統(tǒng)》中有比較系統(tǒng)且準(zhǔn)確的介紹。我們?cè)谶@里先插一張王喆在書(shū)中總結(jié)出來(lái)的圖,感興趣的同學(xué)可以深入研究一下。

    深度學(xué)習(xí)推薦系統(tǒng)(全彩)

    京東

    ¥ 96.10

    去購(gòu)買?

    說(shuō)幾個(gè)常用的Wide & Deep 模型的變體:

    • Deep部分加入Attention (DIN)
    • Deep部分加入用戶的點(diǎn)擊/購(gòu)買序列,引入Sequence信息,使用類似RNN的操作方式處理Sequence序列等等 (DIEN)

    排序模型整體上沒(méi)有特別“深”的模型。我個(gè)人總結(jié)下來(lái)有兩個(gè)原因:

    • 原始的信息輸入都是離散特征,比如user_id或者item_id。在這種特征場(chǎng)景下,Embedding層結(jié)合三五層全連接已經(jīng)可以足夠表征離散特征的信息了,更深層的網(wǎng)絡(luò)的優(yōu)勢(shì)體現(xiàn)不出來(lái)。
    • 深層的網(wǎng)絡(luò)inference的速度太慢。而inference的速度與效果是呈現(xiàn)反比的。事實(shí)上,整個(gè)推薦系統(tǒng)在線的部分,模塊的延時(shí)都可以和最終效果進(jìn)行換算。因?yàn)槿绻梢栽谡w耗時(shí)給定的情況下,如果排序的候選增加,一般是肯定增加延時(shí)但提升效果的。相當(dāng)于其他模塊的延時(shí)增加,都可以通過(guò)同樣的方式進(jìn)行效果的機(jī)會(huì)成本的兌換。有時(shí)候,因?yàn)楦嗟木W(wǎng)絡(luò)結(jié)構(gòu)帶來(lái)的耗時(shí)的增加所帶來(lái)的收益,可能敵不過(guò)簡(jiǎn)單的擴(kuò)大排序候選帶來(lái)的收益。

    未來(lái)模型方面的發(fā)展方向是:模型結(jié)構(gòu)使用auto ML的方式搜索出一個(gè)合適的模型結(jié)構(gòu)和模型size等等(這個(gè)方向叫做NAS, Neural Architecture Search),而不是再依賴于人手工對(duì)模型結(jié)構(gòu)進(jìn)行調(diào)整,就像集成電路設(shè)計(jì)最終會(huì)取代手工設(shè)計(jì)一樣。這個(gè)方向目前有一些簡(jiǎn)單的嘗試,但可能距離大規(guī)模的工業(yè)界的應(yīng)用,還需要幾年的發(fā)展時(shí)間。

    二、多個(gè)目標(biāo)場(chǎng)景的排序依據(jù)

    以上我們假定的模型預(yù)估目標(biāo),是單一目標(biāo)的預(yù)估場(chǎng)景,通常都是以點(diǎn)擊率為目標(biāo)做預(yù)估的。但是實(shí)際上,在推薦系統(tǒng)落地的主要場(chǎng)景中,一般不只有一個(gè)目標(biāo)。比如:

    • 在今日頭條這樣的新聞?lì)恆pp中,一般除了考慮點(diǎn)擊率之外,還會(huì)考慮用戶在這個(gè)文章的停留時(shí)長(zhǎng)。
    • 在廣告推薦領(lǐng)域,一般除了考慮點(diǎn)擊率之外,還會(huì)考慮廣告自身的轉(zhuǎn)化率。
    • 在抖音快手這樣的短視頻App中,因?yàn)楫a(chǎn)品本身是自動(dòng)播放的,所以就沒(méi)有點(diǎn)擊率的概念,這時(shí)考慮的就是用戶是否點(diǎn)贊,是否會(huì)看完整個(gè)視頻等等。

    這時(shí)候就涉及到兩個(gè)問(wèn)題:一是多個(gè)目標(biāo)如何做模型,建模和預(yù)估;二是當(dāng)需要考慮多個(gè)模型輸出結(jié)果的時(shí)候,如何確定多個(gè)輸出結(jié)果的權(quán)重。

    我們分開(kāi)來(lái)看。

    2.1 多目標(biāo)建模

    首先,多個(gè)目標(biāo)的建模。最簡(jiǎn)單的解法當(dāng)然是,多個(gè)目標(biāo),每一個(gè)目標(biāo)單獨(dú)建模。比如我們同時(shí)預(yù)估點(diǎn)擊率和時(shí)長(zhǎng):就先單獨(dú)搞一個(gè)模型預(yù)估點(diǎn)擊率,再單獨(dú)搞一個(gè)模型預(yù)估時(shí)長(zhǎng)。

    這樣的搞法有兩個(gè)問(wèn)題:

    • 資源問(wèn)題,如果每一個(gè)模型單獨(dú)一個(gè)模型,需要的資源消耗肯定是比較多的,出于控制成本的角度,我們考慮模型是否可以進(jìn)行合并。
    • 效果問(wèn)題,對(duì)于比如稀疏的目標(biāo),比如廣告轉(zhuǎn)化,可能轉(zhuǎn)化率是在千分位左右。這時(shí)候如果單獨(dú)訓(xùn)練一個(gè)轉(zhuǎn)化的模型,可能效果欠佳。這時(shí)候如果有一個(gè)稍微稠密的目標(biāo),且表達(dá)的信息和用戶點(diǎn)擊率類似,比如點(diǎn)擊率(轉(zhuǎn)化相對(duì)點(diǎn)擊來(lái)說(shuō)是用戶喜好更強(qiáng)的表達(dá)),這時(shí)候就可以把兩個(gè)目標(biāo)一起訓(xùn)練,可能在效果上還會(huì)有一些增益。

    這是一個(gè)相對(duì)來(lái)說(shuō)比較通用的問(wèn)題,有一個(gè)專門研究這個(gè)問(wèn)題的方向叫做Multitask Learning。我這里先說(shuō)一個(gè)有代表性的場(chǎng)景:

    假設(shè)我們這里有三個(gè)目標(biāo)ABC,彼此目標(biāo)類似,可以用類似下圖的模型結(jié)構(gòu)進(jìn)行學(xué)習(xí)。即三個(gè)目標(biāo)有共同的shared的部分,然后又有一些specific的網(wǎng)絡(luò)結(jié)構(gòu)。ABC三個(gè)task的樣本,會(huì)共同更新shared部分的網(wǎng)絡(luò)結(jié)構(gòu),同時(shí)也會(huì)更新各自獨(dú)立的網(wǎng)絡(luò)結(jié)構(gòu)。如果效果好的話,有時(shí)候可以起到一個(gè)模型,效果比分別三個(gè)模型效果還要好的程度。

    Multitask Learning 可以玩的花樣比較多,具體還是需要在實(shí)際的使用中具體調(diào)優(yōu)得到。比如以下幾個(gè)點(diǎn):

    • 哪個(gè)結(jié)構(gòu)share,哪個(gè)結(jié)構(gòu)不share? 除了直接這樣hard share之外,也可以使用一些比如軟性的約束條件來(lái)進(jìn)行share。
    • 對(duì)于有一些目標(biāo),我覺(jué)得比較重要,我只是想讓這個(gè)目標(biāo)去引導(dǎo)另一個(gè)目標(biāo)的學(xué)習(xí),而不想讓另外那個(gè)目標(biāo)影響我原本這個(gè)目標(biāo)的預(yù)估。這是一種teacher & student的模式,通過(guò)合理的loss處理以及stop gradient的應(yīng)用就可以達(dá)到目標(biāo)了
    • 可以設(shè)計(jì)出更為復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)來(lái)處理multitask問(wèn)題。比如MoE?or?MMoE,就是把門控結(jié)構(gòu)引入Multitask 模型訓(xùn)練。有點(diǎn)類似于把boosting的思想引入網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計(jì)。

    以上是一些網(wǎng)絡(luò)結(jié)構(gòu)的上面的想法,我這里就不具體展開(kāi)了。感興趣的同學(xué)可以通過(guò)我提出的這些關(guān)鍵詞,來(lái)進(jìn)行進(jìn)一步的搜索和學(xué)習(xí)。簡(jiǎn)單而言,我們還是預(yù)期多個(gè)目標(biāo)每個(gè)目標(biāo)至少可以學(xué)準(zhǔn)。

    2.2 多目標(biāo)融合

    接下來(lái)我們來(lái)看下多個(gè)目標(biāo)的融合。假設(shè)我們現(xiàn)在有了比較準(zhǔn)確的目標(biāo)的預(yù)估值,比如點(diǎn)擊率和停留時(shí)長(zhǎng),那怎么樣可以把這兩個(gè)預(yù)估結(jié)果比較科學(xué)的融合在一起作為最終的排序結(jié)果的依據(jù)呢?

    這個(gè)問(wèn)題沒(méi)有統(tǒng)一的回答,因?yàn)檫@實(shí)際上是一個(gè)產(chǎn)品的決策。

    比方說(shuō),A這個(gè)產(chǎn)品的核心指標(biāo)就是vv(視頻播放量,video view),那么其實(shí)可以不關(guān)心用戶對(duì)某一個(gè)視頻的觀看時(shí)長(zhǎng)。只需要讓點(diǎn)擊率高的多出就行了。再比方說(shuō),B這個(gè)產(chǎn)品的核心指標(biāo)就是讓用戶盡可能的沉浸,盡量不進(jìn)行文章之間的切換,那我就需要讓用戶最終的排序按照用戶的停留時(shí)長(zhǎng)去排序即可,這樣用戶在每一個(gè)文章之中都可以停留足夠長(zhǎng)的時(shí)間。

    更多的情況是,產(chǎn)品需要在多個(gè)目標(biāo)之中做一個(gè)權(quán)衡。比方說(shuō),點(diǎn)擊率高的文章,有可能是會(huì)遇到標(biāo)題黨,這時(shí)候停留時(shí)長(zhǎng)就不長(zhǎng),用戶體驗(yàn)也不好;而停留時(shí)長(zhǎng)高的文章,可能因?yàn)闃?biāo)題封面不吸引人,用戶就根本不點(diǎn)進(jìn)來(lái)看。所以我們需要一個(gè)方式把多個(gè)目標(biāo)的預(yù)估結(jié)果平衡起來(lái)。

    解決問(wèn)題的辦法就是拍一個(gè)公式,把點(diǎn)擊率和停留時(shí)長(zhǎng)按照某種方式配比平衡起來(lái)。比如0.3 * 點(diǎn)擊率 + 0.7 * 停留時(shí)長(zhǎng)?等等。

    這個(gè)融合公式的配比,決定了推薦系統(tǒng)最終輸出的內(nèi)容的畫(huà)風(fēng)和質(zhì)量,與產(chǎn)品本身是息息相關(guān)的。

    總結(jié)

    以上是生活随笔為你收集整理的推荐算法工程师成长2:排序模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。