项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.item2vec的兴起

自从word2vec被证明效果不错以后,掀起了一股embedding的热潮。item2vec, doc2vec,总结起来就是everything2vec。在实际工作中,embedding的使用也非常广泛,今天我们就来说说常用的item2vec。

word2vec构建样本时,句子分词以后就构成了一个天然的序列。那么在推荐的应用场景下,如何生成这个序列,或者说如何生成训练样本,成为了一个必须要解决的问题。

一般来说,有如下两种方式构建训练样本
1.基于时序的关系
我们会认为item之间存在时序关系,相当于我们将各个不同的item类比为word2vec的单词,那么将这些item串联起来就相当于将word连起来组成一个句子,这样不管是构造训练集的方式或者训练的方式都可以按照word2vec的方式来进行了。
比如视频网站的用户观看的视频序列,音乐网站用户听的歌曲序列,我们都可以认为是这种方式。

2.基于集合的关系
认为 item 之间存在非常弱的时序关系,或者因为某种原因,我们无法获得 item 的序列。那么这种情况只能放弃考虑 item 间的时空信息,转而使用 item 集合来取代序列。通常我们把用户的行为序列视为一个集合(当然还有其他集合构造方式),我们假定一个静态的环境,在这个环境中,共现在同一个集合的 item 就可以认为它们是相似的,然后视为正样本,不管它们是以什么样的顺序产生的,如果某两个 item 频繁共现,二者的 Embedding 则可能也很相似。很明显,这种利用集合共现性构建样本的方式与 Word2Vec 的输入样本还是不一样的,因此无法直接应用 Word2Vec 的算法,这就需要对 Word2Vec 的过程进行调整。另外还需要注意的是,上面的这种的假设是有局限性的,不一定适用于其它场景。
基于集合的示例比如电商网站订单中的商品集合, 另外比如用户的浏览物料item的集合。

2.常用的Embedding方式

1.以SVD为代表的MF方式。通过对user-item-score矩阵的分解,或者user-item的隐式矩阵分解,可以获取user与item的隐向量,该向量可以作为embedding向量使用。
2.FM算法。FM学习了各个特征的隐向量表示,从而可以将这些学习到的隐向量作为特征的embedding使用。
3.DNN-Embedding 通过神经网络,利用接入Embedding层与目标loss进行joint train,从而学习其特征表达,这是一种端到端的embedding训练方式(end-to-end)。
4.item2vec 与word2vec类似的方式。
5.graph embedding,是基于图模型的方法,包括deep walk, node2vec, eges等方法。

3.item2vec与MF的区别

首先,二者都应用了隐向量来表征实体特征,不同的是,传统的 MF 通常是 user-item 矩阵,而 Item2Vec 通过滑动窗口样本生成的方式构造出的则更像是 item-item 矩阵;另外,二者得到隐向量的方式也不同,MF 利用均方差损失,使预测得分与已有得分之间的误差尽可能地小,而 Item2Vec 则是利用空间信息并借助了最大似然估计的思想,使用对数损失,使上下文关系或者共现关系构造出的正样本的 item Pair 出现的概率可能地大;此外训练 Item2Vec 的时候还要引入负样本,这也是与 MF 不同的地方。

对于二者在推荐效果上的差异,一个经验是传统 MF 推荐会让热门内容经常性排在前面,而 Item2vec 能更好的学到中频内容的相似性。Iterm2Vec 加上较短的时间窗口,相似推荐会比 MF 好很多。

4.原理

对于出现在同一个集合的item对我们视为正样本,对于集合ω1,ω2,⋯,ωK\omega_1, \omega_2, \cdots, \omega_Kω1,ω2,,ωK,目标函数为
1K∑i=1K∑j≠iKlog⁡p(wj∣wi)\frac{1}{K} \sum_{i=1}^{K}\sum_{j \neq i}^{K} \log p(w_j | w_i)K1i=1Kj=iKlogp(wjwi)
利用负采样,将p(wj∣wi)p(w_j | w_i)p(wjwi)可以定义为
p(wj∣wi)=exp(uiTvj)∑k∈IWexp(ukTvj)p(w_j | w_i) = \frac{exp(u_i ^T v_j)}{\sum_{k \in I_W} exp(u_k ^T v_j)}p(wjwi)=kIWexp(ukTvj)exp(uiTvj)

简单而言,对于给定的item序列,选择窗口大小为c,skip-gram通过当前item来预测前后c个item的概率,从而使得其后验概率最大,通过极大似然进行优化整体损失。

负采样的词频计算方式跟word2vec一样。

参考文献

1.https://lumingdong.cn/application-practice-of-embedding-in-recommendation-system.html

item2vec详解相关推荐

  1. 从0到1详解推荐系统的基础知识与整体框架

    猜你喜欢 0.淘宝首页猜你喜欢推荐建模实践 1.[免费下载]2022年6月份热门报告 2.[实践]小红书推荐中台实践 3.微信视频号实时推荐技术架构分享 4.对比学习在宽狩推荐系统中的应用实践 5.微 ...

  2. 2.2w字长文详解推荐系统之数据与特征工程,码起来慢慢看

    作者丨gongyouliu 编辑丨lily 来源 | 大数据与人工智能(ID:ai-big-data) [导读]推荐系统是机器学习的一个子领域,并且是一个偏工程化.在工业界有极大商业价值的方向.大量应 ...

  3. 语言处理方法-Word2Vec详解

    NLP之--Word2Vec详解 2013年,Google开源了一款用于词向量计算的工具--word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进 ...

  4. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  5. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  6. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  7. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  8. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  9. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  10. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

最新文章

  1. linux怎么卸载webpack,安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc
  2. ZooKeeper的事务日志和快照
  3. LeetCode Remove Duplicates from Sorted List II
  4. 计算机模块怎么算,计算基础
  5. HTML5 基础知识(二)
  6. ubuntu 下载mysql8_mysql8.0 ubuntu 安装
  7. java后台json传递,后台json传递
  8. LVM逻辑卷管理命令
  9. Bootstrap 折叠插件
  10. Android applicationId与包名的区别
  11. 培训师之绕口令与气息练习
  12. Qt--将Qt 动态链接生成的exe及依赖dll打包方法
  13. python在线diff工具在哪_使用Python创建你自己的diff-tool
  14. 书店管理系统课程设计( sql server+python)
  15. MT7620a-Openwrt-Frp
  16. Node.js中实时显示下载进度并解压文件
  17. pandoc 转换html,使用pandoc实现markdown和latex以及html的互转
  18. 计算机导论.mobi,计算思维:计算学科导论
  19. 解决小米手机安装失败(-108)错误
  20. R语言课上笔记(第1-4天)

热门文章

  1. 使用jquery做一个动态简历
  2. 限流的简单使用及学习
  3. 几个Cache方案的比较
  4. 使用@Transactional(SUPPORTS)和不加@Transactional 有什么区别?
  5. Git/mercurial...版本控制分支曲线图解析
  6. 所有编程语言为我作证,随机数骗局大揭秘,随机数都是骗人的!
  7. ES6 关于Set对象
  8. Nginx监控数据采集与分析
  9. Linux 常用软件分类
  10. ESET Smart Security 3.0667与WindowsXP Sp3冲突