用户多兴趣建模MIND

news2024/11/20 6:35:56

1. 概述

在工业界,一个完整的推荐系统中通常包括两个阶段,分别为召回阶段和排序阶段。在召回阶段,根据用户的兴趣从海量的商品中去检索出用户(User)可能感兴趣的候选商品( Item),满足推荐相关性和多样性需求。在排序阶段,根据不同的目标,如CTR,CVR,时长等对候选出的商品进行打分。目前,对于用户兴趣的建模,通常是从用户的历史行为中挖掘出用户兴趣,以当前的深度学习模型为例,通常是将User的历史行为数据embedding到一个固定长度的向量中,以此表示该用户的兴趣。然而在实际环境中,一个用户的兴趣通常是多样的,使用单一固定长度的embedding向量难以刻画用户兴趣的多样性。Multi-Interest Network with Dynamic routing[1](MIND)用户多兴趣建模网络取代了原先的单一固定长度embedding向量,取而代之的是用户的多兴趣向量。在MIND中,主要的创新点在于:

  1. 通过Mulit-Interest Extractor Layer获取User的多个兴趣向量表达,并采用动态路由(Dynamic Routing)的方法自适应地将User历史行为聚合到User兴趣表达向量中;
  2. 通过Label-Aware Attention机制,指导网络学习到用户的多兴趣Embedding向量;

2. 算法原理

2.1. MIND模型的网络结构

MIND模型的网络结构如下图所示:

在这里插入图片描述

MIND的网络结构与Youtube的召回网络结构[2]基本一致,Youtube的召回网络结构如下图所示:

在这里插入图片描述

不同点主要是在多兴趣抽取层Mulit-Interest Extractor Layer和Label-Aware Attention机制。

2.2. Mulit-Interest Extractor Layer

多兴趣抽取层的目的是对用户历史行为的item抽取出多个兴趣向量表达,通常采用聚类的过程将用户的历史行为聚类到多个簇中,一个簇中的item比较靠近,该簇代表了用户兴趣的一个方面。在MIND中,为了实现这样的聚类过程,使用到了胶囊网络(Capsule Network)。

2.2.1. 胶囊网络(Capsule Network)

什么是胶囊网络(Capsule Network)呢?参照参考[3],对胶囊网络做简单介绍。对于一个普通的神经网络是由神经元组成,每个神经元中是一个具体的值,如下图的左侧图所示;而在胶囊网络中是由被称为Capsule的基本单元组成,与神经元不同的是Capsule中存储的是向量,如下图的右侧图所示。

在这里插入图片描述

在上图的胶囊网络中,蓝色的Capsule的输入是黄色的Capsule和绿色的Capsule的输出,分别为向量 v 1 v^1 v1和向量 v 2 v^2 v2,蓝色的Capsule的输出是向量 v v v

2.2.2. 动态路由(Dynamic Routing)

在神经网络中,网络的权重 w 1 , w 2 , ⋯   , w n w_1,w_2,\cdots ,w_n w1,w2,,wn是在网络的backpropagation过程中学习到的。对于胶囊网络,其过程与神经网络有点不一样,借鉴参考[3]中的图,结合参考[1]中的实例,有如下的图:

在这里插入图片描述

假设存在两层的胶囊,当前的第 h h h层的胶囊如上图中的蓝色部分,其输入为第 l l l层,且上层的输出向量为 c → i l ∈ R N l × 1 \overrightarrow{c}_i^l\in \mathbb{R}^{N_l\times 1} c ilRNl×1,且 i ∈ { 1 , ⋯   , m } i\in \left\{1,\cdots ,m \right\} i{1,,m},对应到第 h h h层的输出向量为 c → j h ∈ R N h × 1 \overrightarrow{c}_j^h\in \mathbb{R}^{N_h\times 1} c jhRNh×1,且 j ∈ { 1 , ⋯   , n } j\in \left\{1,\cdots ,n \right\} j{1,,n},在上图中,我们选取其中一个第 h h h层的输出向量 c → j h \overrightarrow{c}_j^h c jh z → j h \overrightarrow{z}_j^h z jh的计算过程如下:

z → j h = ∑ i = 1 m w i j S i j c → i l \overrightarrow{z}_j^h=\sum_{i=1}^{m}w_{ij}S_{ij}\overrightarrow{c}_i^l z jh=i=1mwijSijc il

其中,矩阵 S i j ∈ R N h × N l S_{ij}\in \mathbb{R}^{N_h\times N_l} SijRNh×Nl是需要学习的参数,可通过网络的backpropagation过程学习,连接权重 w i j w_{ij} wij在胶囊网络中被称为coupling coefficients,不是在网络中学习得到的。最终通过一个非线性的squash函数得到最终的胶囊的输出向量 c → j h \overrightarrow{c}_j^h c jh

c → j h = s q u a s h ( z → j h ) = ∥ z → j h ∥ 2 1 + ∥ z → j h ∥ 2 z → j h ∥ z → j h ∥ \overrightarrow{c}_j^h=squash\left ( \overrightarrow{z}_j^h \right )=\frac{\left\|\overrightarrow{z}_j^h \right\|^2}{1+\left\|\overrightarrow{z}_j^h \right\|^2}\frac{\overrightarrow{z}_j^h}{\left\|\overrightarrow{z}_j^h \right\|} c jh=squash(z jh)=1+ z jh 2 z jh 2 z jh z jh

Squash函数的作用是相当于对向量 z → j h \overrightarrow{z}_j^h z jh做归一化的操作,当至此完成了胶囊网络的前馈过程,然而对于连接权重却并不知道是如何得到的,为了求得连接权重需要使用到动态路由(dynamic routing)的过程,动态路由其实是一个迭代的过程,首先定义the routing logit b i j b_{ij} bij

b i j = ( c → j h ) T S i j c → i l b_{ij}=\left ( \overrightarrow{c}_j^h \right )^TS_{ij}\overrightarrow{c}_i^l bij=(c jh)TSijc il

那么, w i j w_{ij} wij可以由 b i j b_{ij} bij定义:

w i j = e x p    b i j ∑ k = 1 m e x p    b i k w_{ij}=\frac{exp\;b_{ij}}{\sum_{k=1}^{m}exp\; b_{ik}} wij=k=1mexpbikexpbij

具体过程如下面的伪代码所示:

在这里插入图片描述

2.2.3. 如何理解聚类过程

在参考[4]中详细论述了动态路由与K-Means聚类算法之间的关系,简单来说Capsule所使用的聚类算法,其实是K-Means的变种。通过直观的理解这个过程,首先对于K-Means,为了与上面的Dynamic Routing过程对应,假设原始的样本为 e i e_i ei,其中 i ∈ { 1 , ⋯   , m } i\in \left\{1,\cdots ,m \right\} i{1,,m},存在 K K K个聚类中心 u j u_j uj,其中 j ∈ { 1 , ⋯   , K } j\in \left\{1,\cdots ,K \right\} j{1,,K},K-Means的目标是将 m m m个原始样本 e 1 , e 2 , ⋯   , e m e_1,e_2,\cdots ,e_m e1,e2,,em划分到 K K K个类中,使得类内的间隔最小,即:

m i n ∑ j = 1 K ∑ i = 1 m w i j ∥ e i − u j ∥ 2 min\sum_{j=1}^{K}\sum_{i=1}^{m}w_{ij}\left\|e_i-u_j \right\|^2 minj=1Ki=1mwijeiuj2

其中 w i j w_ij wij表示样本 e i e_i ei是否属于聚类 j j j,因此 w i j ∈ { 0 , 1 } w_{ij}\in \left\{0,1 \right\} wij{0,1}。聚类中心 u j u_j uj为:

u j = ∑ i = 1 m w i j e i ∑ i = 1 m w i j u_j=\frac{\sum_{i=1}^{m}w_{ij}e_i}{\sum_{i=1}^{m}w_{ij}} uj=i=1mwiji=1mwijei

与Dynamic Routing中的 u → j \overrightarrow{u}_j u j的更新有两点不一样,第一,计算 w i j w_{ij} wij的方式,第二是计算最后结果,在K-Means中是直接求平均,而在Dynamic Routing中, u → j \overrightarrow{u}_j u j采用的是squash函数。

上述只是从直观上对比了两个过程,具体的数学上的论述可以参见参考[4]。

2.2.4. 动态兴趣个数

对于不同的用户,其兴趣的个数 K K K是不一样的,在参考[1]中给出了计算特定用户 u u u的兴趣个数 K u ′ K_{u}^{'} Ku

K u ′ = m a x ( 1 , m i n ( K , l o g 2 ( ∣ I u ∣ ) ) ) K_{u}^{'}=max\left ( 1,min\left ( K,log _2\left ( \left|I_u \right| \right )\right ) \right ) Ku=max(1,min(K,log2(Iu)))

2.3. Label-aware Attention Layer.

通过多兴趣提取器层,对用户行为序列得到了用户的多个兴趣向量,为了评估多个兴趣向量对目标Item相关度及贡献度,在[1]中设计Label-aware Attention机制来衡量目标Item选择使用哪个兴趣向量,其具体的表达式如下:

v → u = A t t e n t i o n ( e → i , V u , V u ) = V u s o f t m a x ( p o w ( V u T e → i , p ) ) \overrightarrow{v}_u=Attention\left ( \overrightarrow{e}_i,V_u,V_u \right )=V_usoftmax\left ( pow\left ( V_u^T\overrightarrow{e}_i,p \right ) \right ) v u=Attention(e i,Vu,Vu)=Vusoftmax(pow(VuTe i,p))

其中, p o w pow pow表示的是指数函数, p p p是一个调节attention分布的参数。

3. 总结

在MIND中,通过Mulit-Interest Extractor Layer获取User的多个兴趣向量表达,并采用动态路由(Dynamic Routing)的方法自适应地将User历史行为聚合到User兴趣表达向量中;最后通过Label-Aware Attention机制,指导网络学习到用户的多兴趣Embedding向量。

参考文献

[1] Li C, Liu Z, Wu M, et al. Multi-interest network with dynamic routing for recommendation at Tmall[C]//Proceedings of the 28th ACM international conference on information and knowledge management. 2019: 2615-2623.

[2] Covington P, Adams J, Sargin E. Deep neural networks for youtube recommendations[C]//Proceedings of the 10th ACM conference on recommender systems. 2016: 191-198.

[3] 14.胶囊网络(Capsule Network)

[4] 再来一顿贺岁宴:从K-Means到Capsule

[5]. 推荐系统召回模型之MIND用户多兴趣网络

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

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

相关文章

JavaEE进阶第二课:Spring创建与使用

上一篇我们介绍了Spring的概念,知道了Spring是众多工具方法的IoC容器。 但是纸上谈兵终觉浅,这一篇文章就来介绍Spring创建与使用, 注之后我们对对象的称呼就叫Bean 1.1Spring项目的创建与配置 1.创建maven项目,语言选java&…

【1819. 序列中不同最大公约数的数目】

来源:力扣(LeetCode) 描述: 给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如,序列 [4,6,16] 的最大公约数是 2 。 数组的一个 子序列 本质是一个序…

Python(16):Numpy之array数组的数值计算

目录 0. 相关文章链接 1. 创建Array数组 2. 基本数值计算 2.1. numpy中的函数 2.2. 数组中的函数 3. 指定维度进行计算 3.1. numpy中的函数 3.2. 数组中的函数 4. 复杂计算 4.1. 统计乘机 4.2. 获取对应值的索引位置 4.3. 求平均值 4.4. 求标准差 4.5. 求方差 4…

【MFEN:轻量级多尺度特征提取:SR网络】

MFEN: Lightweight multi-scale feature extraction super-resolution network in embedded system (MFEN:嵌入式轻量级多尺度特征提取超分辨率网络) 深度卷积神经网络(CNN)在超分辨率(SR)方面…

基于java springboot+mybatis爱游旅行平台前台+后台设计实现

基于java springbootmybatis爱游旅行平台前台后台设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获…

PCI、PCI-X、PCI-E、PCI-E Card、Mini PCI-E、M.2、Add-in Card 这些概念你搞清楚了吗

搞硬件或通信的“攻城狮”们,免不了要和各种通信协议及接口打交道。比如,我们经常接触PCI、PCI-X、PCI-E、PCI-E Card、Mini PCI-E、M.2(NGFF)、Add-in Card这些概念,作为“攻城狮”队伍中的一员,你搞清楚它们之间的关系了吗&…

Linux第一个小程序-进度条

目录 \r&&\n 行缓冲区概念 倒计时程序 进度条代码 \r&&\n 回车概念换行概念 \n[rootVM-12-17-centos lesson8]# touch test.c [rootVM-12-17-centos lesson8]# touoch Makefile bash: touoch: command not found [rootVM-12-17-centos lesson8]# touch Mak…

Python:每日一题之完全二叉树的权值

题目描述 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是 A1​,A2​,⋅⋅⋅AN​,如下图所示: 现在小张要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权…

【Linux操作系统】Linux进程状态和两个特殊进程

文章目录一.一套普适性的进程状态理论1.运行2.阻塞3.挂起二.一套具体的Linux进程状态1.R-运行2.S-睡眠3.T-暂停5.t-被追踪三.僵尸进程和孤儿进程1.僵尸进程2.孤儿进程一.一套普适性的进程状态理论 1.运行 由于CPU数量相对于进程数量来说少之又少,所以CPU维护了一个运行队列,方…

Synchronized底层原理系列之Synchronized的偏向锁实现原理

作者简介:专注于研究Linux内核、Hotspot虚拟机、汇编语言、JDK源码、各大中间件源码等等喜欢的话,可以三连关注~上篇文章已经对Synchronized关键字做了初步的介绍,从字节码层面介绍了Synchronized关键字,最终字节码层面就是monito…

【Linux】 iptables 入门简介

文章目录前言作用持久化和恢复执行的顺序前言 简单地说,iptables是Linux的防火墙程序。它将使用表监控进出服务器的流量。这些表包含称为链的规则集,这些规则将过滤传入和传出数据包。 作用 当数据包与规则匹配的时候,会为其指定一个目标&a…

基于幂等表思想的幂等实践

一、为什么需要幂等 分布式场景下,多个业务系统间实现强一致的协议是极其困难的。一个最简单和可实现的假设就是保证最终一致性,这要求服务端在处理一个重复的请求时需要给出相同的回应,同时不会对持久化数据产生副作用(即多次操…

【Linux】Linux下调试器gdb的使用

👑作者主页:安 度 因 🏠学习社区:StackFrame 📖专栏链接:Linux 文章目录一、前言二、铺垫三、指令集和使用1、指令集2、演示四、结语如果无聊的话,就来逛逛 我的博客栈 吧! 🌹 一、前…

通信原理与MATLAB(十三):AMI的编解码

目录1.AMI的的编解码原理1.1 AMI编码原理1.2 AMI解码原理2.AMI编解码的代码3.AMI编解码结果图4.AMI的误码率曲线4.1 原理4.2 AMI的误码率曲线代码4.3 误码率曲线图1.AMI的的编解码原理 1.1 AMI编码原理 如下图所示,AMI的编码原理:将原始码元的1转换成1,0转换成-1。…

快过年了,用Python康康哪一家足浴店可以带朋友去玩.....

人生苦短,我用Python 首先肯定是去正经足浴店, 毕竟一年出差也不少, 大家都很辛苦, 好不容易放假了, 约上好兄弟一起去放松放松~ 所需环境 python 3.8 解释器pycharm 编辑器 所需模块 requests 数据来源分析 …

Silane-PEG-NH2 氨基聚乙二醇硅烷 NH2-PEG-Silane结构式

英文名称:Silane-PEG-NH2 Silane-PEG-Amine 中文名称:硅烷-聚乙二醇-氨基 分子量:1k,2k,3.4k,5k,10k,20k。。。 存储条件:-20C,避光,避湿 用 途…

2022年度总结,迎接2023

目录 我和CSDN的2022 初次见面: 你我的成长: 博客: 比赛: 我和CSDN的2023 我和CSDN的2022 初次见面: CSDN你好啊!我跟你的初次见面在于2022年4月2日!!! 这这半年内…

【算法5.1】背包问题 - 01背包 (至多最大价值、至少最小价值)

目录 至少模板和至多模板的两大区别 1、至多模板 2、至少模板 2. 01背包 - 至多模板 - 体积至多j,总价值最大 1、朴素做法 - 二维dp 2、优化 - 一维dp 4700. 何以包邮? - 至少模板 - 价值至少j,总价值最小 至少模板和至多模板的两大区…

list容器与vector容器的区别

vector与list都是STL中非常重要的序列式容器,它们都存放在namespace std命名空间中,由于俩个容器的底层结构不同,导致其特性不同 一、底层实现结构不同 vector本质是一段动态连续的顺序表,而list底层是一个双向循环链表 二、访…

Ubuntu多硬盘luks全盘加密自动解锁(硬件变更后失效)的方法

简介大家都知道,Linux现在用Luks全盘加密一直有一个痛点,就是每次开机都需要输入解密硬盘的密码,之后又要输入用户密码,非常的麻烦!本文正是为了解决这个问题诞生的!本文多硬盘加密带来的效果是&#xff0c…