item2vec详解

项目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,目标函数为
1 K ∑ i = 1 K ∑ j ≠ i K log ⁡ p ( w j ∣ w i ) \frac{1}{K} \sum_{i=1}^{K}\sum_{j \neq i}^{K} \log p(w_j | w_i) K1i=1Kj=iKlogp(wjwi)
利用负采样,将 p ( w j ∣ w i ) p(w_j | w_i) p(wjwi)可以定义为
p ( w j ∣ w i ) = e x p ( u i T v j ) ∑ k ∈ I W e x p ( u k T v j ) 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

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Word2Vec模型是一个简单的神经网络模型,用于预测语句中每个单词的临近单词。通过训练模型,我们可以获取隐藏层学习到的权重,这些权重可以作为词嵌入来使用。在一个Word2Vec案例中,可以使用以下代码进行模型训练: ``` from gensim.models import Word2Vec # 创建Word2Vec模型 model = Word2Vec(window=10, sg=1, hs=0, negative=10, alpha=0.03, min_alpha=0.0007, seed=14) # 构建词汇表 model.build_vocab(purchases_train, progress_per=200) # 训练模型 model.train(purchases_train, total_examples=model.corpus_count, epochs=10, report_delay=1) ``` 在这个案例中,我们使用了名为`purchases_train`的训练数据来训练模型。训练过程中,模型会根据语句中单词的上下文来预测临近单词。训练完成后,我们可以使用模型中的隐藏层权重作为词嵌入来表示单词的语义信息。通过这种方式,我们可以在自然语言处理任务中使用Word2Vec模型来计算单词之间的相似度、进行文本分类等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [案例+代码详解:用Word2Vec建立你的私人购物助手](https://blog.csdn.net/javastart/article/details/119082396)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值