《Neural Attentive Item Similarity Model》论文阅读笔记

转载自石晓文大佬的这篇文章:

https://www.jianshu.com/p/c0384b213320

基于物品的协同过滤ItemCF是推荐领域常用的方法,其关键是评估item之间的相似性。本文将要介绍Neural Attentive Item Similarity Model(简称NASI)来解决ItemCF问题。该模型将注意力机制和神经网络相结合,提升了模型的预测准确性。接下来,我们将从基本的ItemCF问题入手,一步步得出NASI模型。

1、ItemCF问题简介

1.1 标准ItemCF问题

为了预测用户u对于物品i的评分,ItemCF的最基本思想是计算物品i与用户u之前交互过的所有物品的相似性,预测评分计算公式如下:

其中,Ru+是用户所有交互过的物品,ruj是用户u对物品j的反馈,sij是物品i和物品j的相似性。其中,ruj可以是显式的评分,如0-5评分,也可以是隐式的反馈,如点击为1,未点击为0。

物品之间的相似性,直观的方法是根据用户-物品交互矩阵,将物品i所在的列作为其向量表示,进一步使用余弦相似度等度量方式计算物品之间的相似性。但是这种方法缺乏针对推荐的优化,类似于一种静态方法,物品的向量不是通过优化得到的。因此性能并不是那么优秀。所以接下来我们将介绍Learning-based Methods,这些方法可以自适应地从数据中学习item相似度,从而提高itemCF的准确性。

1.2 Learning-based Methods for Item-based CF

Learning-based Methods通过优化一个目标函数,来学习item之间的相似性,如SLIM(short for sparse Linear Method)方法中,目标函数设定为:

上面的目标函数中,S代表物品的相似度矩阵。而预测评分的计算仍然基于1.1中的方法。假设物品个数为I,那么模型需要优化的参数有I * I个。上面的式子同时使用L1正则和L2正则,防止了过拟合,增加了模型的稀疏性。但也存在一定的缺点,当物品集数量很大时,参数太多难以优化,同时,模型只能学习同时被打过分的物品之间的两两的相似性。

为了解决这个问题,我们又有了FISM(short for factored item similarity model)方法,其用低维度嵌入向量表示每一个物品。对于每一个物品,都有两个嵌入向量p和q,当物品是预测的物品时,使用p,当物品是交互历史中的物品时,使用q,此时用户评分计算方式如下:

FISM只考虑隐式反馈。对于上面的预测模型,可以通过优化推荐的标准损失(对数损失或者平方损失)来学习物品的嵌入向量表示p和q。

虽然FISM方法取得了不错的性能,但我们认为,当获得用户的表示时,它对用户的所有历史项目的平等处理会限制其表示能力。因此,我们将注意力机制加入其中,用于区分历史item的重要性,提出了NASI模型。

2、NASI模型介绍

这里,我们仍然只考虑隐式反馈,模型设计过程如下:

2.1 第一版

在第一版的设计中,我们认为每个物品有一个固定的注意力权重aj,因此评分预测计算如下:

很显然,这是不合理的,我们没有考虑目标物品对于历史物品的影响。于是我们有了第二版设计。

2.2 第二版

在第二版的设计中,我们使用aij来表示历史物品j和目标物品i的权重,评分计算如下:

这样显然也是有缺陷的,当训练集中物品i和物品j没有同时出现过时,aij是无从学习的。于是我们有了第三版设计。

2.3 第三版

第三版设计中,我们使用嵌入向量计算出权重,即:

f通常用一个神经网络来表示,主流的计算方法有以下两种:

通过f计算出的权重,我们还需要通过softmax进行归一化,因此,评分预测的计算如下:

这么做看似是完美了,但是在实际的实验中,却没有取得理想的效果。这个问题主要来自softmax,在传统的注意力机制使用的场景中,如CV、NLP中,注意力机制的长度变化不是很大(这里的长度指图像中的区域个数,句子中单词的个数等等),但是在推荐领域中,用户的历史交互长度可能变化很大。在MovieLens和Pinnterest数据中,用户历史长度的分布如下图所示:

可以看到,对于两个真实数据集,用户的历史长度变化很大,具体而言,用户历史长度的均值和方差分别为(166,37145),(27,572)。在MovieLens数据集中,所有用户的平均长度为166,最大长度为2313。也就是说,最活跃用户的平均注意力权重是1/2313,比平均用户(即,1/166)少大约14倍。如此大的注意权重差异将导致优化模型的item嵌入是个问题。(可以简单的想,同样的物品i和物品j,在活跃用户和非活跃用户中得到的aij差异会非常大)

为了解决用户历史长度不同的问题,我们便有了最终版的NAIS模型。

2.4 最终版

在最终版的模型中,我们对活跃用户的注意力权重进行一定的惩罚,如下:

而模型的损失函数使用对数损失+L2正则:

模型的框架图如下:

好了,模型介绍就到这里了,关于模型中的一些细节,大家可以阅读原论文。

3、NASI代码实现

作者给出了Python2版本的代码:https://github.com/AaronHeee/Neural-Attentive-Item-Similarity-Model

这个代码在Python3中是无法运行的,主要是Python3中range函数得到的不是list,需要使用list()函数进行转换,Python3版本的代码地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-NAIS-Demo

作者:石晓文的学习日记

链接:https://www.jianshu.com/p/c695808100c7

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容