RS Meet DL(79)-序列推荐中使用长尾商品提升推荐多样性

2020-03-17 15:45:46 浏览数 (1)

最近对推荐中的长尾问题/多样性问题比较感兴趣,最近看了一篇IJCAI-19上录用的的一篇《Sequential and Diverse Recommendation with Long Tail》的文章,介绍了如何在序列推荐中来提升推荐系统的多样性,一起来了解一下。

1、背景

用户在访问推荐系统的某一刻, 其兴趣往往是单一的,那么如果推荐列表只能覆盖用户的一个兴趣点,而这个兴趣点不是用户这 个时刻的兴趣点,推荐列表就不会让用户满意。反之,如果推荐列表比较多样,覆盖了用户绝大多数的兴趣点,那么就会增加用户找到感兴趣物品的概率。因此给用户的推荐列表也需要满足用户广泛的兴趣,即具有多样性。多样性推荐列表的好处用一句俗话表述就是“不在一棵树上吊死”。

提升推荐系统多样性的一种手段是充分利用长尾商品。但大多数的长尾商品被曝光的机会很少,与用户交互的次数也很少,此时可能推荐模型学习不充分导致推荐系统的精度有所损失。因此许多工作中将这部分长尾物品从训练集中剔除,从而也导致了推荐结果集中在较为热门的部分商品上。

为了解决上面的挑战,本文提出了一种在保留推荐精度的情况下,提升推荐系统多样性的方法。一起来看一下。

2、方法介绍

2.1 问题陈述

这里介绍的场景是topN推荐,下面是本文中使用的一些符号的定义:

基于上面的符号,最终需要通过向量sj中对每一个物品(不仅包括普通物品,还包括长尾物品(下文中会介绍,其实是长尾物品聚类集合))的打分进行排序,选择top-N进行排序。接下来,我们将分别介绍label构造、模型结构、损失建模等方面

2.2 label构造

假设一位用户的行为序列是G1->T2->G3->T4->T5->G6。其中包含三个普通物品和三个长尾物品。由于长尾物品通常只有很少的用户交互行为,因此在训练过程中往往不能充分训练,通常的做法是直接将其直接剔除,但本文通过以下两个步骤将其加入到label中。

长尾物品聚类

首先通过K均值聚类对所有的长尾物品进行聚类,并假定聚类个数为K。而每个类别与用户交互的次数是类别中每个物品交互次数的总和。

关于如何进行聚类,文中提到是使用长尾物品的内容向量(可能是bag of words,也有可能是doc2vec吧,文章也没具体细说)。

另外有一点,对长尾物品进行了聚类,那么在推荐的时候基于sj也只能选择一个具体的类别,文中提到的方法是选择一个离该类别质心最近的一个物品,这里就不太明白了,如果聚类结果在一段时间内保持不变的话,那每个类别推荐的物品不都是同一个么?这里有点不太理解:

好了,言归正传,通过聚类后,我们就可以把原有的用户行为序列中的长尾物品替换成其对应的类别,如下图:

重定位

好了,那么直接用上面一步所替换得到的行为序列就可以了么?文中做了进一步处理,大多数现存的推荐方法,将长尾物品剔除,因此使用的行为序列大都是G1->G3->G6,为了和这些方法能够进行比较,本文进一步对序列进行了处理,这种方法称作relocating,将长尾集合从输入中剔除,使其仅出现在label中,如下图所示:

此时的输入和label示意图如下:

2.3 基于GRU的推荐

前面主要介绍了对于label的构造过程,接下来对整个模型结构进行介绍,本文采用的是给予GRU的推荐方式,示意图如下:

可以看到,模型共有连个子网络,一个网络输入的是物品ID对应的one-hot向量,第一层全连接相当于embedding层,然后对应的embedding输入GRU层中得到输出;另一个网络输入的是物品的内容向量,同样通过GRU层得到输出。两个子网络的输出拼接后通过全连接层得到排序得分向量sj。

2.4 损失函数

接下来看一下模型是如何训练和预测的。首先来介绍下损失函数,损失函数如下:

其中:

解释下上面提到的一些符号:

可以看到,当? 中只含有一个物品的时候,是不是就是我们平常所用的交叉熵损失函数,而当? 中包含一个以上的物品的时候,虽然不是真正意义上的交叉熵损失,但可以理解为多个交叉熵损失的求和。

再说说预测阶段,很简单,当我们得到向量sj后,选择得分最高的n个物品推荐给用户就可以了。

3、 模型实验

最后简单说一下实验部分,主要说一下多样性的评价指标吧,这个可能之前接触的比较少。文中没有详细介绍多样性计算方法,参考的是论文《Learning to recom- mend accurate and diverse items》中提出的方法。

这里的多样性指标并不单纯是多样性,而是多样性和准确性之间的一个平衡,类似于计算精确率和召回率的F1值。因此这里,我们需要定义两个指标,分别代表准确性和多样性,然后计算F1值。

这里准确性使用的是MAP(Mean Average Precision)。简单介绍下。在了解MAP之前,先来看一下AP(Average Precision), 即为平均准确率。

对于AP可以用这种方式理解: 假使当我们使用google搜索某个关键词,返回了10个结果。当然最好的情况是这10个结果都是我们想要的相关信息。但是假如只有部分是相关的,比如5个,那么这5个结果如果被显示的比较靠前也是一个相对不错的结果。但是如果这个5个相关信息从第6个返回结果才开始出现,那么这种情况便是比较差的。这便是AP所反映的指标,与recall的概念有些类似,不过是“顺序敏感的recall”。

比如对于用户 u, 我们给他推荐一些物品,那么 u 的平均准确率定义为:

用一个例子来解释AP的计算过程:

因此该user的AP为(1 0.66 0.5) / 3 = 0.72

那么对于MAP(Mean Average Precision),就很容易知道即为所有用户 u 的AP再取均值(mean)而已。那么计算公式如下:

再来看一下多样性指标,多样性指标定义为推荐结果至少推荐给用户一次的物品占所有物品的比例。

好了,本文就介绍到这里了,整体思路还是不错的,但有些具体的细节有待讨论!

0 人点赞