多兴趣向量重构用户向量

news2024/11/16 18:35:35

Re4: Learning to Re-contrast, Re-attend, Re-construct for Multi-interest Recommendation

论文地址:https://arxiv.org/pdf/2208.08011.pdf

一般的多兴趣建模过程是对用户序列进行编码,抽取出用户的多个兴趣向量,然后利用这些用户兴趣向量进行下一步候选集选取。这篇paper将这个过程称为前向流过程(forward flow),即物料序列到多兴趣向量的过程。论文提出了一个后向流过程(backward flow),即用抽取的多个兴趣向量来重构物料向量。不论是MIND还是ComiRec-SA,抽取多兴趣的过程没有保证多个兴趣向量的差异性,也没有保证兴趣向量的相关性和推荐系统的误差是一致的。

重构结构

这个前向流就是多兴趣提取的过程,后向流就是论文提出的
在这里插入图片描述

前向流

前向流中,第 i i i个序列行为在第 k k k个兴趣上的相关性分数为

a k , i = e x p ( w k T t a n h ( W 1 x i ) ) ∑ j e x p ( w k T t a n h ( W 1 x j ) ) a_{k,i} = \frac {exp(\mathbf w_k^T tanh(\mathbf W_1 \mathbf x_i))} { \sum_j exp(\mathbf w_k^T tanh(\mathbf W_1 \mathbf x_j))} ak,i=jexp(wkTtanh(W1xj))exp(wkTtanh(W1xi))

W 1 ∈ R d h × d \mathbf W_1 \in R^{d_h \times d} W1Rdh×d是所有兴趣共享的转换矩阵, w k ∈ R d h \mathbf w_k \in R^{d_h} wkRdh是兴趣相关的转换向量。

兴趣向量如下:
z k = ∑ j a k , j W 2 x j \mathbf z_k = \sum_j a_{k,j} \mathbf W_2 \mathbf x_j zk=jak,jW2xj

后向流

Re-contrast

重新对比的动机是提取的多兴趣向量没法保证差异性,所有的兴趣向量可能在向量空间中非常接近。根据兴趣向量构造正负例进行对比学习,如上面结构图所示,拉近表示相同兴趣的向量距离,推远不同兴趣的距离。

这里的正负例构造比较特别,正样本集合是相关性分数 a k , j a_{k,j} ak,j大于一定阈值的物料向量 x j \mathbf x_j xj

P k = { x j ∣ a k , j > γ c } P_k = \{ \mathbf x_j| a_{k, j} > \gamma_c \} Pk={xjak,j>γc}

γ c = 1 / N x \gamma_c = 1 / N_x γc=1/Nx表示用户序列长度的倒数

负例有三部分,第一部分自然是小于阈值 γ c \gamma_c γc的物料集合,第二部分是用户的其他兴趣向量,第三部分是不在用户序列的其他物料。

使用InfoNCE损失来衡量对比学习loss
L C L = − ∑ i log ⁡ e x p ( z k ⋅ z k , i + / τ ) e x p ( z k ⋅ z k , i + / τ ) + ∑ j e x p ( z k ⋅ z k , j − / τ ) L_{CL} = -\sum_i \log \frac {exp(z_k \cdot z_{k,i}^+ / \tau ) } { exp(z_k \cdot z_{k,i}^+ / \tau) + \sum_j exp(z_k \cdot z_{k,j}^- / \tau) } LCL=ilogexp(zkzk,i+/τ)+jexp(zkzk,j/τ)exp(zkzk,i+/τ)

Re-attend

相关性分数 a k , i a_{k,i} ak,i表示为第 k k k个兴趣向量 z k z_k zk和第 i i i个行为 x i x_i xi的相关性,但是这个相关性分数是通过多兴趣编码层计算得到的,那么直接通过兴趣向量和行为向量的点积(或者其他相似度)计算来衡量这个分数的准确性。

a ^ k , i = φ ( z k , x i ) \hat a_{k, i} = \varphi (z_k, x_i) a^k,i=φ(zk,xi)

这里 φ \varphi φ 表示相似性衡量函数,可以用点积;新的分数和原来的分数使用交叉熵来衡量,得到新的loss函数

L A T T = ∑ k ∑ i L C E ( a k , i , a ^ k , i ) L_{ATT} = \sum_k \sum_i L_{CE} (a_{k, i}, \hat a_{k, i}) LATT=kiLCE(ak,i,a^k,i)

Re-construct

利用得到的兴趣向量来重构用户行为向量,使得和原来的用户行为向量尽量保持一致。

首先通过一个线性映射 W 4 ∈ R N x d b × d \mathbf W_4 \in R^{N_xd_b \times d} W4RNxdb×d将兴趣向量 z k z_k zk还原成一个兴趣矩阵 C k \mathbf C_k Ck,然后计算每个序列在这个兴趣矩阵下的权重 β k , i , j \beta_{k,i,j} βk,i,j,最后通过一个线性映射矩阵加权求和得到还原的在第 i i i个兴趣下的行为序列向量 x ^ k , j \hat x_{k, j} x^k,j。通过正样本中的物料来衡量损失。

C k = U p s a m p l e ( z k ) \mathbf C_k = Upsample(z_k) Ck=Upsample(zk)

β k , i , j = w j T t a n h ( W 3 c k , i ) ∑ m w j T t a n h ( W 3 c k , m ) \beta_{k,i,j} = \frac {w_j^T tanh (\mathbf W_3 c_{k, i}) } { \sum_mw_j^T tanh (\mathbf W_3 c_{k, m}) } βk,i,j=mwjTtanh(W3ck,m)wjTtanh(W3ck,i)

x ^ k , j = ∑ i β k , i , j W 5 c k , i \hat x_{k, j} = \sum_i \beta_{k, i, j} \mathbf W_5 c_{k, i} x^k,j=iβk,i,jW5ck,i

L C T = ∑ k ∑ i I ( x j ∈ P k ) ∣ ∣ x ^ k , j − x j ∣ ∣ F 2 L_{CT} = \sum_k \sum_i I(x_j \in P_k) \vert \vert \hat x_{k,j} - x_j \vert \vert _F^2 LCT=kiI(xjPk)∣∣x^k,jxjF2

这个还原操作看起来非常合理,不过计算量还是比较大的,实际上线可能会增加些耗时。

最终的损失函数

L R e 4 = L R e c + λ C L L C L + λ A T T L A T T + λ C T L C T L_{Re^4} = L_{Rec} + \lambda_{CL}L_{CL} + \lambda_{ATT}L_{ATT} + \lambda_{CT}L_{CT} LRe4=LRec+λCLLCL+λATTLATT+λCTLCT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue中使用Echarts】echarts初体验

文章目录一、echarts简介二、初次体验echarts1.下载2.在vue中引入echarts①全局引入(代码)② 局部引入一、echarts简介 在大数据盛行的今天,数据可视化变得越来越广泛。而在前端工作中,数据可视化用得最多的,可能就是…

Usaco Training 刷怪旅 第三层 第四题 :Combination Lock

一个六年级博主写文章不容易,给个关注呗 (点赞也行啊) 本蒟蒻的bilibili账号 注:这种题当你看不懂的时候是可以把题目复制去洛谷看中文版的 Farmer Johns cows keep escaping from his farm and causing mischief. To try and pre…

如何通过 Python 与 ChatGPT 对话

文章目录简介安装 OpenAI API实例1预备条件: 1. 科学上网; 2. 注册 OpenAI 账号。 简介 ChatGPT 是 GPT-3 语言模型的变体,专为会话语言生成而设计。要在 Python 中使用 ChatGPT,您需要安装 OpenAI API 客户端并获取 API 密钥。当前提你需要…

前端工程师leetcode算法面试必备-二分搜索算法(中)

一、前言 二分搜索算法本身并不是特别复杂,核心点主要集中在: 有序数组:指的是一个递增或者递减的区间(特殊情况如:【852. 山脉数组的峰顶索引】); 中间数:用来确定搜索目标落在左…

Pytorch学习笔记①——anaconda和jupyter环境的安装(小白教程)

一、安装Pytorch 1、首先找到anaconda命令端并点击进入。 2、输入如下命令创建子空间(博主的命名是pytorch1.4.0,使用python3.6版本) conda create -n pytorch1.4.0 python3.6对于下载速度慢的话,首先需要进行换源,换…

FastJson不出网rce

BCEL ClassLoader去哪了 0x01 BCEL从哪里来 首先,BCEL究竟是什么?它为什么会出现在JDK中? BCEL的全名应该是Apache Commons BCEL,属于Apache Commons项目下的一个子项目。Apache Commons大家应该不陌生,反序列化最著…

05 RS485

什么是RS485? RS485 是一种通用的通信标准,广泛用于数据采集和控制应用中。 它的主要优点之一是它允许将多个 RS485 设备放在同一条总线上,这使得多个节点可以相互连接。 RS-485(目前称为EIA/TIA-485)是通信物理层的…

面试官:React怎么做性能优化

前言 最近一直在学习关于React方面的知识,并有幸正好得到一个机会将其用在了实际的项目中。所以我打算以博客的形式,将我在学习和开发(React)过程中遇到的问题记录下来。 这两天遇到了关于组件不必要的重复渲染问题,…

2022 年,我身上发生的几件大事

一晃2022互联网寒冬年就要结束了,在今年我的身上发生了好几件人生大事。因为这些事情对我的心态、思绪等产生了不同层次、不同方面的影响,所以很有必要做一次年终复盘。那么,接下来让我用拙略的写作手法,带大家走进我那特别的2022…

别等iPhone14了,苹果iPhone15变化很大

在去年的手机市场当中,苹果可以说是最大的赢家。因为去年iPhone13发布的时间段,恰好是高端旗舰的空档期,小米、OV在高端市场的销量表现一般,华为又没有能力发布新机,三星的Note系列在去年也暂停发布。所以不夸张的说&a…

SpringBoot整合ShardingJdbc实现数据库水平分表实战

(1)添加Maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

因果推断4--Causal ML(个人笔记)

目录 1 安装教程及官方文档 1.1 pip安装 1.2 API文档 1.3 代码仓库 2 Uplift模型与主要方法介绍 2.1 发放代金券 2.2 多treatment 2.3 实验方法 3 causalml.inference.tree module 3.1 UpliftTreeClassifier 3.2 UpliftRandomForestClassifier 3.3 CausalRandomFor…

sec7-可派生和非抽象类型

创建非抽象可派生类型比创建抽象类型更常见。本节介绍如何创建非抽象可派生类型对象。派生类型的例子是string的对象。它是TStr。它的子对象是一个数字字符串对象。数字字符串是表示数字的字符串。例如“0”、“-100”、“123.45”。子对象(数字字符串)将在下一节中解释。 我想…

前端框架搭建(九)搭建页面布局框架【vite】

## 1.创建目录BasicLayout——全局布局 components——布局组件 GlobalContent&#xff1a;全局内容GlobalHeader&#xff1a;全局头部页面 2.处理GlobalHeader 创建HeaderMenu——头部菜单 声明相关类型 在typings目录下创建system.d.ts declare namespace App {/** 全局…

Canadian Coding Competition(CCC) 2021 Junior 题解

目录 Problem J1: Boiling Water Problem J2: Silent Auction Problem J3: Secret Instructions Problem J4: Arranging Books Problem J5/S2: Modern Art Problem J1: Boiling Water Problem Description At sea level, atmospheric pressure is 100 kPa and water begi…

自动挂载USB和TF卡

转自链接https://zhuanlan.zhihu.com/p/443745437 ①创建用于挂载U盘的目录 mkdir /mnt/usb –p②在/etc/udev/rules.d目录下添加用于检测U盘插入规则&#xff08;add&#xff09;&#xff0c;终端下执行以下命令创建第一个U盘插入规则。 vim /etc/udev/rules.d/11-add-usb.r…

【ROS】—— ROS通信机制——服务通信(三)

文章目录前言1. 服务通信理论模型2. 服务通信自定义srv2.1 定义srv文件2.2 编辑配置文件2.3 编译3. 服务通信自定义srv调用(C)3.1 vscode配置3.2 服务端3.3 客户端3.4 配置 CMakeLists.txt4. 服务通信自定义srv调用(python)4.1 vscode配置4.2 服务端4.3 客户端4.4 配置 CMakeLi…

将Android进行到底之内容提供者(ContentProvider)

文章目录前言一、ContentProvider是什么&#xff1f;二、使用示例1.为应用创建内容提供者2.使用内容提供者2.1 内容URI2.2 Uri参数解析2.2 使用内容URI操作数据3.ContentProvider妙用4 内容URI对应的MIME类型5.ContentProvider重点注意6 演示demo源码总结前言 随着现在的应用越…

java通过JDBC连接mysql8.0数据库,并对数据库进行操作

目录 一、JDBC简介 二、添加依赖 三、JDBC操作数据库的步骤 四、JDBC操作数据库——增删改查 (一)新增数据 (二)删除数据 (三)修改数据 (四)查询数据 (五)多表连接查询 一、JDBC简介 Java数据库连接&#xff0c;&#xff08;Java Database Connectivity&#xff0c;简…

C进阶:字符串相关函数及其模拟实现

目录 &#x1f431;&#x1f638;一.strlen &#x1f54a;️1.功能 &#x1f43f;️2.模拟实现 &#x1f42c;&#x1f40b;二.strcpy &#x1f432;1.功能 &#x1f916;2.注意事项 &#x1f47b;3.模拟实现 &#x1f431;&#x1f42f;三.strcat &#x1f984;1.功能…