DNN论文分享 - Item2vec: Neural Item Embedding for Collaborative Filtering
前置点评: 这篇文章比较朴素,创新性不高,基本是参照了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的更多相关文章
- [论文分享] DHP: Differentiable Meta Pruning via HyperNetworks
[论文分享] DHP: Differentiable Meta Pruning via HyperNetworks authors: Yawei Li1, Shuhang Gu, etc. comme ...
- 论文分享NO.1(by_xiaojian)
论文分享第一期-2019.03.14: 1. Non-local Neural Networks 2018 CVPR的论文 2. Self-Attention Generative Adversar ...
- 论文笔记 : NCF( Neural Collaborative Filtering)
ABSTRACT 主要点为用MLP来替换传统CF算法中的内积操作来表示用户和物品之间的交互关系. INTRODUCTION NeuCF设计了一个基于神经网络结构的CF模型.文章使用的数据为隐式数据,想 ...
- 论文笔记系列-Neural Network Search :A Survey
论文笔记系列-Neural Network Search :A Survey 论文 笔记 NAS automl survey review reinforcement learning Bayesia ...
- 论文分享NO.4(by_xiaojian)
论文分享第四期-2019.04.16 Residual Attention Network for Image Classification,CVPR 2017,RAN 核心:将注意力机制与ResNe ...
- 论文分享NO.3(by_xiaojian)
论文分享第三期-2019.03.29 Fully convolutional networks for semantic segmentation,CVPR 2015,FCN 一.全连接层与全局平均池 ...
- 论文分享NO.2(by_xiaojian)
论文分享第二期-2019.03.26 NIPS2015,Spatial Transformer Networks,STN,空间变换网络
- NIPS2018最佳论文解读:Neural Ordinary Differential Equations
NIPS2018最佳论文解读:Neural Ordinary Differential Equations 雷锋网2019-01-10 23:32 雷锋网 AI 科技评论按,不久前,NeurI ...
- [阿里DIN] 从论文源码学习 之 embedding层如何自动更新
[阿里DIN] 从论文源码学习 之 embedding层如何自动更新 目录 [阿里DIN] 从论文源码学习 之 embedding层如何自动更新 0x00 摘要 0x01 DIN源码 1.1 问题 1 ...
随机推荐
- C++彩色数据流动界面
一个数据流动界面 #include <windows.h> #include <time.h> #include <cstdio> #include <str ...
- Java---Ajax在Struts2框架的应用实例
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 很久没有动过ajax了,趁此机会复习一下,写一个简单的例子 一.项目结构: 二.需要的jar包 三.具体代码: 1.web.x ...
- freemarker将文件读写到HTML中
freemarker将文件读写到HTML中 1.设计思路 (1)写freemarker模板方法 (2)写測试文件方法 (3)新建ftl文件 (4)在指定的路径下.新建目录 2.写freemarker模 ...
- effective java笔记之单例模式与序列化
单例模式:"一个类有且仅有一个实例,并且自行实例化向整个系统提供." 单例模式实现方式有多种,例如懒汉模式(等用到时候再实例化),饿汉模式(类加载时就实例化)等,这里用饿汉模式方法 ...
- angular封装七牛云图片上传,解决同一页面多个上传按钮分别上传
step1:引入文件 引入Plupload *该SDK上传功能集于Plupload插件封装,所以需要下载Plupload; plupload.dev.js 引入qiniu.js为了简便,当时直接从官网 ...
- .net core中使用GB2312编码的问题
最近在用.net core写一个爬虫抓取网页上的数据,碰到了网页编码是GBK的页面,抓取的数据都是乱码,当使用Encoding.GetEncoding("GBK")的时候抛出了异常 ...
- Struts2框架(3)---Action类的3种书写方式
Action类的3种书写方式 本文主要写有关写Action类的3种书写方式: (1)第一种 Action可以是POJO (简单模型对象) 不需要继承任何父类 也不需要实现任何接口 (2)实现Acti ...
- 多命令顺序执行,dd命令,管道|,grep,通配符,其他特殊符号
多命令顺序执行:命令1;命令2 命令之间没有逻辑关系 命令1&&命令2 命令1执行正确才执行命令2,命令1执行错误不会执行命令2 命令1||命令2 命令执行错误才执行命令2,命令1执行 ...
- 嵌套查询别名必须性示例。HAVING用法
HAVING的一个重要作用: SELECT子句有统计函数嵌套时SELECT子句不能出现GROUP BY列,如果需要显示此列可以把嵌套的统计函数写成子查询放在HAVING子句中. 可用HAVING简化语 ...
- JMeter接口测试系列:Jmeter+jenkins+ant 的自动化构建
在JMeter接口测试不断深入的过程中,发现可以和jenkins和ant一起搭配进行自动化的构建.下面是jmeter自动化构建的整理笔记. 准备环境 需要本机上确定安装了jmeter.ant和jenk ...