前置点评: 这篇文章比较朴素,创新性不高,基本是参照了google的word2vec方法,应用到推荐场景的i2i相似度计算中,但实际效果看还有有提升的。主要做法是把item视为word,用户的行为序列视为一个集合,item间的共现为正样本,并按照item的频率分布进行负样本采样,缺点是相似度的计算还只是利用到了item共现信息,1).忽略了user行为序列信息; 2).没有建模用户对不同item的喜欢程度高低。

-------------------------------------------------

0 背景:

推荐系统中,传统的CF算法都是利用 item2item 关系计算商品间相似性。i2i数据在业界的推荐系统中起着非常重要的作用。传统的i2i的主要计算方法分两类,memory-based和model-based。

作者受nlp中运用embedding算法学习word的latent representation的启发,特别是参考了google发布的的word2vec(Skip-gram with Negative Sampling,SGNS),利用item-based CF 学习item在低维 latent space的 embedding representation,优化i2i的计算。

-------------------------------------------------

1 回顾下google的word2vec:

自然语言处理中的neural embedding尝试把 words and phrases 映射到一个低维语义和句法的向量空间中。

Skip-gram的模型架构:

Skip-gram是利用当前词预测其上下文词。给定一个训练序列,,...,,模型的目标函数是最大化平均的log概率:

目标函数中c中context的大小。c越大,训练样本也就越大,准确率也越高,同时训练时间也会变长。

在skip-gram中, 利用softmax函数定义如下:

W是整个语料库的大小。上式的梯度的计算量正比如W,W通常非常大,直接计算上式是不现实的。为了解决这个问题,google提出了两个方法,一个是hierarchical softmax,另一个方法是negative sample。negative sample的思想本身源自于对Noise Contrastive Estimation的一个简化,具体的,把目标函数修正为:

是噪声分布 ( noise distribution )。即训练目标是使用Logistic regression区分出目标词和噪音词。具体的Pn(w)方面有些trick,google使用的是unigram的3/4方,即,好于unigram,uniform distribution。

另外,由于自然语言中很多高频词出现频率极高,但包含的信息量非常小(如'is' 'a' 'the')。为了balance低频词和高频词,利用简单的概率丢弃词

其中的词频,t的确定比较trick,启发式获得。实际中t大约在附近。

-------------------------------------------------

2 Item2vec算法原理:

Item2vec中把用户浏览的商品集合等价于word2vec中的word的序列,即句子(忽略了商品序列空间信息spatial information) 。出现在同一个集合的商品对视为 positive。对于集合目标函数:

同word2vec,利用负采样,将定义为:

subsample的方式也是同word2vec:

最终,利用SGD方法学习的目标函数max,得到每个商品的embedding representation,商品之间两两计算cosine相似度即为商品的相似度。

-------------------------------------------------

3 Item2vec效果:

对比的baseline方法是基于SVD方法的用户embedding得到的相似度,SVD分解的维度和item2vec的向量维度都取40,详细见paper。数据是应用在music领域的,作者利用web上音乐人的类别进行聚类,同一个颜色的节点表示相同类型的音乐人,结果对比如下:

图a是item2vec的聚合效果,图b是SVD分解的聚合效果,看起来item2vec的聚合效果更好些。

原文https://arxiv.org/pdf/1603.04259v2.pdf

参考文献:

[1] Mikolov T, Sutskever I, Chen K, Corrado GS, Dean J. Distributed representations of words and phrases and their compositionality. In Advances in neural information processing systems 2013 (pp. 3111-3119).

DNN论文分享 - Item2vec: Neural Item Embedding for Collaborative Filtering的更多相关文章

  1. [论文分享] DHP: Differentiable Meta Pruning via HyperNetworks

    [论文分享] DHP: Differentiable Meta Pruning via HyperNetworks authors: Yawei Li1, Shuhang Gu, etc. comme ...

  2. 论文分享NO.1(by_xiaojian)

    论文分享第一期-2019.03.14: 1. Non-local Neural Networks  2018 CVPR的论文 2. Self-Attention Generative Adversar ...

  3. 论文笔记 : NCF( Neural Collaborative Filtering)

    ABSTRACT 主要点为用MLP来替换传统CF算法中的内积操作来表示用户和物品之间的交互关系. INTRODUCTION NeuCF设计了一个基于神经网络结构的CF模型.文章使用的数据为隐式数据,想 ...

  4. 论文笔记系列-Neural Network Search :A Survey

    论文笔记系列-Neural Network Search :A Survey 论文 笔记 NAS automl survey review reinforcement learning Bayesia ...

  5. 论文分享NO.4(by_xiaojian)

    论文分享第四期-2019.04.16 Residual Attention Network for Image Classification,CVPR 2017,RAN 核心:将注意力机制与ResNe ...

  6. 论文分享NO.3(by_xiaojian)

    论文分享第三期-2019.03.29 Fully convolutional networks for semantic segmentation,CVPR 2015,FCN 一.全连接层与全局平均池 ...

  7. 论文分享NO.2(by_xiaojian)

    论文分享第二期-2019.03.26 NIPS2015,Spatial Transformer Networks,STN,空间变换网络

  8. NIPS2018最佳论文解读:Neural Ordinary Differential Equations

    NIPS2018最佳论文解读:Neural Ordinary Differential Equations 雷锋网2019-01-10 23:32     雷锋网 AI 科技评论按,不久前,NeurI ...

  9. [阿里DIN] 从论文源码学习 之 embedding层如何自动更新

    [阿里DIN] 从论文源码学习 之 embedding层如何自动更新 目录 [阿里DIN] 从论文源码学习 之 embedding层如何自动更新 0x00 摘要 0x01 DIN源码 1.1 问题 1 ...

随机推荐

  1. DEBUG技巧-设定合适的日志级别

    有些技能只有踩过坑的人才能够掌握,能用来避免后来的坑,很多时候是用凌晨的时间换来的,我们通常把他叫做经验. 故事 这个一个关于springmvc的坑的故事. 某天晚上本打算一个小功能分分钟搞定上线,但 ...

  2. 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)

    Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...

  3. shell脚本删除N天前的目录-----附linux和mac上date命令的不同

    背景: 每日构建的东西.按日期放到不同的目录里. 现在天的构建放到2015-06-01里,明天的就放到2015-06-02里,依次类推.时间久了.须要一个脚本删除N天前的目录.(本例中N=7.即删除一 ...

  4. 微信小程序的Web API接口设计及常见接口实现

    微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们 ...

  5. 摧枯拉朽,说说ES6的三把火

    阅读目录 我是 Jser 我骄傲 作用域 模块系统 类(Class) 我是 Jser 我骄傲 JavaScript 如今可谓是屌丝逆袭高富帅的代名词哈,从当初闹着玩似的诞生到现在 Github 上力压 ...

  6. strus2项目中百度编辑器运用的几点细节

    百度编辑器的运用可以参考我之前写的一篇文章,在java项目中加入百度富文本编辑器.这篇文章是以maven+spring mvc项目进行的,总得来说配置比较简单,但是如果是想在strus2项目中配置ue ...

  7. 基于 HTML5 WebGL 的 3D 服务器与客户端的通信

    这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子.3D 机房方面的模拟一般都是需要鹰眼来辅助的,这样找产品以及整个空间的概括会比较明确,在这个例子中我也加了,这篇文章就算 ...

  8. linux根目录扩容

    原来在ucloud上面买了一个服务器,结果根目录上面只有20G,/data挂载点下面有500G,没多久/根目录存储空间用完了,所以要扩展 linux的文件模式分为lvm模式和普通的非lvm模式,云服务 ...

  9. Python 3.6.3 利用 Dlib 19.7 和 opencv 实现人脸68点定位 进行人脸识别

    0.引言 介绍利用Dlib官方给的人脸识别预测器"shape_predictor_68_face_landmarks.dat"进行68点标定,利用OpenCv进行图像化处理,在人脸 ...

  10. JMeter3.0脚本中文乱码解决方法

    修改apache-jmeter-3.0\bin\jmeter.properties文件,编辑jsyntaxtextarea.font.family=宋体.