Youtube雙塔模型

1. 引言

在大規模推薦系統中,如何從海量候選物品中高效檢索出用戶可能感興趣的物品是一個關鍵問題。傳統的矩陣分解方法在處理稀疏數據和長尾分布時面臨挑戰。本文介紹了一種基于雙塔神經網絡的建模框架,通過采樣偏差校正技術提升推薦質量,并成功應用于YouTube視頻推薦系統。

2. 建模框架

論文的亮點不在于提出了新的架構,而是針對訓練時負采樣的處理。

  • 模型架構
    在這里插入圖片描述

2.1 問題定義

給定查詢(用戶和上下文)和物品的特征表示:

  • 查詢特征: x i ∈ X x_i \in \mathcal{X} xi?X
  • 物品特征: y j ∈ Y y_j \in \mathcal{Y} yj?Y

目標是通過雙塔神經網絡學習嵌入函數:
u : X × R d → R k v : Y × R d → R k \begin{aligned} u &: \mathcal{X} \times \mathbb{R}^d \rightarrow \mathbb{R}^k \\ v &: \mathcal{Y} \times \mathbb{R}^d \rightarrow \mathbb{R}^k \end{aligned} uv?:X×RdRk:Y×RdRk?
其中模型參數 θ ∈ R d \theta \in \mathbb{R}^d θRd,輸出為內積得分:
s ( x , y ) = ? u ( x , θ ) , v ( y , θ ) ? s(x,y) = \langle u(x,\theta), v(y,\theta) \rangle s(x,y)=?u(x,θ),v(y,θ)?

2.2 損失函數

將推薦視為帶連續獎勵的多分類問題,采用softmax概率:
P ( y ∣ x ; θ ) = e s ( x , y ) ∑ j ∈ [ M ] e s ( x , y j ) \mathcal{P}(y|x;\theta) = \frac{e^{s(x,y)}}{\sum_{j\in[M]} e^{s(x,y_j)}} P(yx;θ)=j[M]?es(x,yj?)es(x,y)?

加權對數似然損失:
L T ( θ ) = ? 1 T ∑ i ∈ [ T ] r i ? log ? ( P ( y i ∣ x i ; θ ) ) L_T(\theta) = -\frac{1}{T}\sum_{i\in[T]} r_i \cdot \log(\mathcal{P}(y_i|x_i;\theta)) LT?(θ)=?T1?i[T]?ri??log(P(yi?xi?;θ))

2.3 批處理softmax

當物品集 M M M極大時,計算完整softmax不可行。一種常見的方法是使用一批項目的一個子集,特別是對于來自同一批次的所有查詢,使用批次內的項目作為負樣本。給定一個包含 B 對 ( x i , y i , r i ) i = 1 B {(x_i,y_i,r_i)}_{i=1}^{B} (xi?,yi?,ri?)i=1B? 的小批次,批次 softmax 為:

P B ( y i ∣ x i ; θ ) = e s ( x i , y i ) ∑ j ∈ [ B ] e s ( x i , y j ) \mathcal{P}_B(y_i|x_i;\theta) = \frac{e^{s(x_i,y_i)}}{\sum_{j\in[B]} e^{s(x_i,y_j)}} PB?(yi?xi?;θ)=j[B]?es(xi?,yj?)es(xi?,yi?)?

2.4 采樣偏差校正

流行物品因高頻出現在批次中會被過度懲罰,引入對數校正項:
s c ( x i , y j ) = s ( x i , y j ) ? log ? ( p j ) s^c(x_i,y_j) = s(x_i,y_j) - \log(p_j) sc(xi?,yj?)=s(xi?,yj?)?log(pj?)
其中 p j p_j pj?為物品 j j j的采樣概率。

校正后的損失函數:
L B ( θ ) = ? 1 B ∑ i ∈ [ B ] r i ? log ? ( e s c ( x i , y i ) e s c ( x i , y i ) + ∑ j ≠ i e s c ( x i , y j ) ) L_B(\theta) = -\frac{1}{B}\sum_{i\in[B]} r_i \cdot \log\left(\frac{e^{s^c(x_i,y_i)}}{e^{s^c(x_i,y_i)} + \sum_{j\neq i}e^{s^c(x_i,y_j)}}\right) LB?(θ)=?B1?i[B]?ri??log(esc(xi?,yi?)+j=i?esc(xi?,yj?)esc(xi?,yi?)?)

3. 流式頻率估計算法

3.1 核心思想

通過全局步長(global step)估計物品采樣間隔 δ \delta δ,進而計算采樣概率:
p = 1 δ p = \frac{1}{\delta} p=δ1?

3.2 算法實現

在這里插入圖片描述

數據結構:

  • 哈希數組 A A A:記錄物品最后一次出現的步長
  • 哈希數組 B B B:估計物品的采樣間隔 δ \delta δ

更新規則(SGD形式):
B [ h ( y ) ] ← ( 1 ? α ) ? B [ h ( y ) ] + α ? ( t ? A [ h ( y ) ] ) B[h(y)] \leftarrow (1-\alpha) \cdot B[h(y)] + \alpha \cdot (t - A[h(y)]) B[h(y)](1?α)?B[h(y)]+α?(t?A[h(y)])

數學性質:

  • 偏差分析:
    E ( δ t ) ? δ = ( 1 ? α ) t δ 0 ? ( 1 ? α ) t ? 1 δ \mathbb{E}(\delta_t) - \delta = (1-\alpha)^t\delta_0 - (1-\alpha)^{t-1}\delta E(δt?)?δ=(1?α)tδ0??(1?α)t?1δ

  • 方差上界:
    E [ ( δ t ? E [ δ t ] ) 2 ] ≤ ( 1 ? α ) 2 t ( δ 0 ? δ ) 2 + α E [ ( Δ 1 ? δ ) 2 ] \mathbb{E}[(\delta_t - \mathbb{E}[\delta_t])^2] \leq (1-\alpha)^{2t}(\delta_0 - \delta)^2 + \alpha\mathbb{E}[(\Delta_1 - \delta)^2] E[(δt??E[δt?])2](1?α)2t(δ0??δ)2+αE[(Δ1??δ)2]

  • 各學習率誤差的結果
    在這里插入圖片描述

3.3 多哈希優化

使用 m m m個哈希函數減少碰撞誤差:
p ^ = max ? 1 ≤ i ≤ m 1 B i [ h i ( y ) ] \hat{p} = \max_{1\leq i\leq m} \frac{1}{B_i[h_i(y)]} p^?=1immax?Bi?[hi?(y)]1?

4. 在YouTube推薦系統中的應用

4.1 系統架構

  • 查詢塔:融合用戶觀看歷史和種子視頻特征
  • 候選塔:處理候選視頻內容特征
  • 共享特征嵌入提升訓練效率

4.2 關鍵創新

  1. 流式訓練:按天順序消費數據,適應分布變化
  2. 哈希桶技術:處理新出現的內容ID
  3. 索引管道:量化哈希技術加速最近鄰搜索

5.Trick

在相似度得分上添加溫度參數 τ \tau τ
此外,為了使預測結果更加尖銳,我們在每個 logit 上添加了一個溫度參數 τ。具體來說,我們使用以下公式計算查詢和候選項目之間的相似度得分:
s ( x , y ) = ? u ( x , θ ) , v ( y , θ ) ? τ s(x,y)= \frac{?u(x,θ),v(y,θ)?}{\tau} s(x,y)=τ?u(x,θ),v(y,θ)??
?
Youtube實驗結果
在這里插入圖片描述

6. 結論

本文提出的采樣偏差校正方法通過:

  1. 理論保證的無偏頻率估計
  2. 適應動態變化的流式環境
  3. 可擴展的分布式實現

在十億級物品的推薦場景中顯著提升了檢索質量,為大規模內容推薦提供了新的解決方案。

引用

Yi, X., Yang, J., Hong, L., Cheng, D. Z., Heldt, L., Kumthekar, A., Zhao, Z., Wei, L., & Chi, E. (2019). Sampling-bias-corrected neural modeling for large corpus item recommendations. Proceedings of the 13th ACM Conference on Recommender Systems, 269–277.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88965.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.net8創建tcp服務接收數據通過websocket廣播

注冊TCP服務器 注冊WebSocket中間件 using System.Net; using System.Net.Sockets; using System.Text; using System.Text.Json; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.AspNet…

閱讀服務使用示例(HarmonyOS Reader Kit)

閱讀服務使用示例(HarmonyOS Reader Kit) Reader Kit到底能干啥? 第一次搞電子書閱讀器,真以為就是“讀txt顯示出來”這么簡單,結果各種格式、排版、翻頁動效、目錄跳轉……全是坑。還好有Reader Kit,救了…

ASP.NET Core Web API 實現 JWT 身份驗證

在ASP.NET Core WebApi中使用標識框架(Identity)-CSDN博客 因為一般需要和標識框架一起使用,建議先查看標識框架用法 一.為什么需要JWT 我們的系統需要實現認證,即服務端需要知道登錄進來的客戶端的身份,管理員有管理員的權限,普通用戶有普通用戶的權限. 但服務…

優化Cereal宏 一行聲明序列化函數

Cereal序列化庫中宏遞歸展開的優化方案及技術解析 未優化&#xff1a;參考nlohmann json設計Cereal宏 一行聲明序列化函數 宏實現 #include <cereal/cereal.hpp>// 強制二次展開 #define CEREAL_EXPAND( x ) x// 獲取宏參數的數量&#xff0c;對應的CEREAL_PASTEn宏NAME…

14-C#的彈出的窗口輸入與輸出

C#的彈出的窗口輸入與輸出 1.文件名輸入 string fileName Interaction.InputBox("輸入保存的文件名", "保存");2.彈窗信息輸出 MessageBox.Show("請選擇輪詢!", "Error", MessageBoxButtons.OK);catch (Exception ex){MessageBox.S…

多模態大語言模型arxiv論文略讀(141)

Mini-InternVL: A Flexible-Transfer Pocket Multimodal Model with 5% Parameters and 90% Performance ?? 論文標題&#xff1a;Mini-InternVL: A Flexible-Transfer Pocket Multimodal Model with 5% Parameters and 90% Performance ?? 論文作者&#xff1a;Zhangwei …

VScode使用usb轉網口遠程開發rk3588

我使用的是魯班貓的板&#xff0c;只有一個網口&#xff0c;需要接雷達&#xff0c;因此另外弄了一個usb轉網口來連接電腦開發。 在使用vscode或MobaXterm連接板子時&#xff0c;使用主機名與用戶名來連接&#xff1a; ssh catlubancat rk那邊就直接插入usb轉網口以及網線&a…

AUTOSAR圖解==>AUTOSAR_AP_EXP_SOVD

AUTOSAR服務導向車輛診斷詳解 面向現代化車輛架構的診斷方案 目錄 1. 引言 1.1 ASAM SOVD簡介1.2 SOVD產生的動機 2. SOVD參考架構 2.1 SOVD網關2.2 診斷管理器2.3 SOVD到UDS轉換2.4 后端連接 3. SOVD用例 3.1 SOVD和UDS的共同用例3.2 SOVD特定用例 3.2.1 訪問權限3.2.2 軟件更…

第八講:STL簡介

1. 什么是STL STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復的 組件庫&#xff0c;而且是一個包羅數據結構與算法的軟件框架。 2. STL的版本 a. 原始版本 Alexander Stepanov、Meng Lee 在惠普實驗室完成的原始版本…

高彈性、高可靠!騰訊云 TDMQ RabbitMQ Serverless 版全新發布

導語 2025年6月起&#xff0c;騰訊云 TDMQ RabbitMQ 版正式推出 Serverless 版本&#xff0c;該版本基于自研的存算分離架構&#xff0c;兼容 AMQP 0-9-1 協議和開源 RabbitMQ 的各個組件與概念&#xff0c;且能夠規避開源版本固有的不抗消息堆積、腦裂等穩定性缺陷&#xff0…

Linux 內存調優之 BPF 分析用戶態小內存分配

寫在前面 博文內容為 使用 BPF 工具跟蹤 Linux 用戶態小內存分配(brk,sbrk)理解不足小伙伴幫忙指正 ??,生活加油我看遠山,遠山悲憫 持續分享技術干貨,感興趣小伙伴可以關注下 _ brk 內存分配簡單概述 一般來說,應用程序的數據存放于堆內存中,堆內存通過brk(2)系統調用進…

心理測評app心理測試系統框架設計

一、邏輯分析 用戶管理邏輯 新用戶注冊&#xff1a;需要收集用戶的基本信息&#xff0c;如用戶名、密碼、郵箱等&#xff0c;并且要對輸入信息進行合法性校驗&#xff0c;確保信息完整且符合格式要求。同時&#xff0c;為每個新用戶生成唯一的標識符&#xff0c;方便后續數據管…

配置有nvlink的H20A800使用pytorch報錯

背景 裝有nvlink的h20機器上配置好驅動和cuda之后使用pytorch報錯 A800機器同樣 (pytorch2.4) rootxx-dev-H20:~# python Python 3.12.0 | packaged by Anaconda, Inc. | (main, Oct 2 2023, 17:29:18) [GCC 11.2.0] on linux Type “help”, “copyright”, “credits” or …

sql的語句執行過程

第一步&#xff1a;客戶端把語句發給服務器端執行 當我們在客戶端執行SQL語句時&#xff0c;客戶端會把這條SQL語句發送給服務器端&#xff0c;讓服務器端的進程來處理這語句。也就是說&#xff0c;Oracle 客戶端是不會做任何的操作&#xff0c;他的主要任務就是把客戶端產生的…

深度學習-分類

深度學習-分類方式 &#xff08;重點&#xff09;一、按數據類型與處理邏輯分類1. 序列數據&#xff08;時序/順序相關&#xff09;2. 網格狀數據&#xff08;空間相關&#xff09;3. 圖結構數據&#xff08;非歐幾里得結構&#xff09;4. 其他特殊類型數據 &#xff08;重點&a…

C語言---常見的字符函數和字符串函數介紹

目錄 前言 1 字符分類函數 2 字符轉換函數 3 strlen的使用和模擬實現 3.1 strlen的模擬實現 4 strcpy的使用和模擬實現 4.1 strcpy的模擬實現 5 strcat的使用和模擬實現 5.1 strcat的模擬實現 6 strcmp的使用和模擬實現 6.1 strcmp的模擬實現 7 strncpy函數的使用…

Minio入門+適配器模式(實戰教程)

一、安裝Minio 1.1 拉取鏡像 docker pull minio/minio docker images 1.2創建掛載目錄 1.2.1 創建數據目錄 mkdir -p /docker-minio/data 1.2.2 創建配置文件目錄 mkdir -p /docker-minio/config 1.2.3 設置權限 chmod -R 777 /docker-minio/data /docker-minio/config …

LLaMA-Factory 對 omnisql 進行 ppo dpo grpo nl2sql任務 實現難度 時間 全面對比

在LLaMA-Factory框架下&#xff0c;針對omnisql任務&#xff08;自然語言到SQL生成&#xff09;應用PPO、DPO、GRPO三種算法的實現難度、時間及全面對比如下&#xff1a; 一、實現難度對比 1. PPO&#xff08;近端策略優化&#xff09; 難度&#xff1a;★★☆☆☆&#xff…

Kingbase 數據庫中的 sys_guid() 函數報錯

解決 Kingbase 數據庫中的 sys_guid() 函數報錯問題 問題背景 Kingbase 數據庫在遷移或使用過程中&#xff0c;可能會遇到 select sys_guid() 函數報錯 , 提示函數不存在的情況&#xff0c;這通常是由于以下幾種原因造成的&#xff1a; 函數未正確安裝或未啟用函數參數不符合…

零基礎RT-thread第五節:電容按鍵(2)

上一章的電容按鍵完全使用的HAL庫的代碼&#xff0c;并沒有使用線程。這里嘗試使用線程來控制電容按鍵。 依舊是 F767 本來以為會很容易實現&#xff0c;沒想到嘗試了很久&#xff0c;電容按鍵一直沒有反應。 static rt_uint32_t measure_charge_time(void) {// 步驟1: 放電 …