本文是关于论文《LARA: Attribute-to-feature Adversarial Learning for New-item Recommendation》的阅读笔记。
由于冷启动问题的存在,在电商网站中为用户推荐新物品是一个极具挑战的问题,为了解决该问题,文本提出的 LARA 模型是 adversariaL neurAl netwoRk with multi-generAtors 的缩写,它利用 GAN 从物品属性的多个角度产生可能对该新物品感兴趣的用户,通过获取用户和物品之间隐含的属性级的交互信息,并基于属性级的相似度将新物品推荐给用户。
一、相关工作
GAN 由生成器和判别器两部分组成,生成器相当于是造假币的,判别器相当于是验钞机,生成器的目的是让自己造的假币骗过验钞机,双方通过不断互相搏弈,互相提升。
已有的基于 GAN 的推荐模型是从用户历史行为信息(如评分、购买、评论等)中产生一个用户和物品之间的交互表示向量,向量的每一维表示该用户可能会购买对应物品的可能性。但是这些模型都没有试图解决冷启动的问题,并且都不能直接应用到新物品推荐上,这是因为:
- 模型是根据用户的历史购买信息来构建向量的,但是新物品/新用户没有历史信息;
- 此外由于电商网站的物品数以百万计,所以用户和物品的交互向量会非常的大,并且非常稀疏,而这对 GAN 来说是很难处理的。
二、冷启动问题
冷启动问题是指当新物品或新用户进入推荐系统后,由于没有该物品/用户的历史信息,推荐很难取得较好的效果的问题。主要可以分为用户冷启动、物品冷启动和系统冷启动三类。
文章认为解决冷启动问题的关键在于在新物品和用户之间建立关系,又考虑到新物品一般也有很多属性(如价格、品牌等),而物品的一个属性往往对应一个特定的用户特征(user profiles)。如上图所示,物品是耐克鞋、运动鞋和正在打折,对应着用户特征中的喜欢的品牌、是否热爱运动和是否偏爱促销产品。所以我们可以从新物品的属性中生成虚拟的用户特征,再计算该用户特征和已有用户的匹配关系,然后向匹配程度最高的前几个用户推荐该新物品。物品的每个属性可以是标量,也可以是向量。用户特征向量的每一维对应物品的一个属性,其值表示两者之间的关系。
然而从物品的属性信息来反映用户的偏好信息仍然存在很多困难:
- 物品属性和用户特征之间的属性的关系是隐含的,并不知道;
- 物品一般有多个属性,模型需要推断出每个属性对应的用户的特征;
- 生成的用户特征不仅要跟真实的用户特征尽可能相似,而且应该和给定的物品尽可能的匹配。
三、记号
- $I={I_1,I_2,…,I_n}$:物品集
- $U={U_1,U_2,…,U_m}$:用户集
- $A_i={a_{i1},a_{i2},…,a_{ik_i}}$:第 $i$ 个属性
- $n,m,k_i$:物品数、用户数和第 $i$ 个属性的维度
四、网络结构
LARA 模型由生成器和判别器两部分组成,生成器可以根据输入的物品的属性向量生成一个可能喜欢该物品的用户特征向量,然后从用户集中选出若干个与该用户特征向量最相似的用户,将该物品推荐给这些用户。判别器可以根据输入的用户-物品对,判断输入的用户特征是真实的还是生成的。
LARA 模型总的目标函数为:
$$
\begin{aligned}
\mathcal{L}^{G^{}, D^{}}=\min {\theta} \max _{\phi} \sum{n=1}^{N}\left(\mathbb{E}{\mathbf{u}^{+} \sim p{\text {true}}\left(\mathbf{u}^{+} | I_{n}\right)}\left[\log \left(D\left(\mathbf{u}^{+} | I_{n}\right)\right)\right]\right.\
+\mathbb{E}{\mathbf{u}^{c} \sim p{\theta}\left(\mathbf{u}^{c} | I_{n}\right)}\left[\log \left(1-D\left(\mathbf{u}^{c} | I_{n}\right)\right)\right] \
\left.+\mathbb{E}{\mathbf{u}^{-} \sim p{\text {false}}\left(\mathbf{u}^{-} | I_{n}\right)}\left[\log \left(1-D\left(\mathbf{u}^{-} | I_{n}\right)\right)\right]\right)
\end{aligned}
$$
其中生成器 $G$ 被写成了 $p_\theta(u^c|I_n)$,$\theta$ 表示生成器的参数,$N$ 是训练集中给定物品(conditional items)的个数。
1. 生成器
生成器采用了分别生成,然后再合并的结构,即生成器可以分为两个部分:条件物品的每个属性 $a_i^c$ 被送到特定的生成器 $g_i$ 中,然后生成潜在用户的特征,然后神经网络 G 合并所有的生成的用户特征向量,并输出一个最终的用户特征向量,该过程可以表示为下式:
$$
\mathbf{u}^{c}=G\left(g_{1}\left(\mathbf{a}{1}^{c}\right), g{2}\left(\mathbf{a}{2}^{c}\right), \ldots, g{k}\left(\mathbf{a}{k}^{c}\right)\right)
$$
通过最小化目标函数来得到最优的生成器,并且当在训练生成器的时候判别器的参数是固定的,所以只需要优化跟生成器相关的项:
$$
\begin{array}{l}
\theta^{*}=\underset{\theta}{\arg \min } \sum{n=1}^{N} \mathbb{E}{\mathbf{u}^{c} \sim p{\theta}\left(\mathbf{u}^{c} | I_{n}\right)}\left[\log \left(1-\sigma\left(d_{\phi}\left(\mathbf{u}^{c}, I_{n}\right)\right)\right)\right] \
=\underset{\theta}{\arg \max } \sum_{n=1}^{N} \mathbb{E}{\mathbf{u}^{c} \sim p{\theta}\left(\mathbf{u}^{c} | I_{n}\right)}\left[\log \left(1+\exp \left(d_{\phi}\left(\mathbf{u}^{c}, I_{n}\right)\right)\right]\right.
\end{array}
$$
2. 判别器
判别器有三种训练对:
- $(u^c,I^c)$:给定的物品 $I^c$ 和生成的用户 $u^c$
- $(u^+,I^c)$:给定的物品 $I^c$ 和真实用户 $u^+$(ground-truth 数据中对 $I^c$ 感兴趣的用户)
- $(u^-,I^c)$:给定的物品 $I^c$ 和假用户 $u^-$(ground-truth 数据中对 $I^c$ 不感兴趣的用户)
通过以上三种样本的训练方式,可以使判别器产生的用户特征不仅像真实的用户特征,而且和给定的物品相关。
$$
y(\mathcal{T})=\left{\begin{array}{ll}
1, & \mathcal{T}=\left(\mathbf{u}^{+}, I^{c}\right) \
0, & \mathcal{T}=\left(\mathbf{u}^{c}, I^{c}\right) \
0, & \mathcal{T}=\left(\mathbf{u}^{-}, I^{c}\right)
\end{array}\right.
$$
对于真实用户 $u^+$ 的确定,先找到一个和物品 $I^c$ 有交互的用户 $u$,并将其特征向量初始化为0,维度和物品的属性个数相同,再遍历数据集找到与 $u$ 有交互的物品的集合,并得到它们的属性集合,将属性对应的维度设为1。假用户 $u^-$ 是先找到一个和物品 $I^c$ 没有交互的用户 $u$,后续过程跟真实用户的确定相同。
判别器的目的就是将 $(u^+,I^c)$ 和其他两个区分开来,所以 $(u^+,I^c)$ 是正例,其标签是1,其他两个是负例,标签是0。判别器输出的是用户和物品相关的概率,通过以下公式计算:
$$
D\left(\mathbf{u} | I_{n}\right)=\sigma\left(d_{\phi}\left(\mathbf{u}, I_{n}\right)\right)=\frac{\exp \left(d_{\phi}\left(\mathbf{u}, I_{n}\right)\right)}{1+\exp \left(d_{\phi}\left(\mathbf{u}, I_{n}\right)\right)}
$$
其中 $\phi$ 是判别器的参数。
在训练时通过最大化目标函数来得到最优的判别器:
$$
\begin{aligned}
\phi^{}=\underset{\phi}{\arg\max} & \sum_{n=1}^{N}\left(\mathbb{E}{\mathbf{u}^{+} \sim p{\text {true}}\left(\mathbf{u}^{+} | I_{n}\right)}\left[\log \left(\sigma\left(d_{\phi}\left(\mathbf{u}^{+}, I_{n}\right)\right)\right)\right]\right.\
&\left.+\mathbb{E}{\mathbf{u}^{c} \sim p{\theta^{}}\left(\mathbf{u}^{c} | I_{n}\right)}
[\log \left(1-\sigma\left(d_{\phi}\left(\mathbf{u}^{c}, I_{n}\right)\right)\right)\right]\
&\left.
+\mathbb{E}{\mathbf{u}^{-} \sim p{f a l s e}\left(\mathbf{u}^{-} | I_{n}\right)}
\left
[\log \left(1-\sigma\left(d_{\phi}\left(\mathbf{u}^{-}, I_{n}\right)\right)\right)\right]\right)
\end{aligned}
$$
3. 推荐生成
生成器生成了可能喜欢当前物品的用户之后,就可以把当前的新物品推荐给与生成的用户最相似的几个用户了。文章中用余弦相似度计算的生成的用户和用户集中用户之间的相似度。
五、实验
实验部分主要解答了三个问题:
- LARA 的推荐效果是否比物品冷启动的 baseline 要好
- 属性级用户表示是否有助于提高推荐性能
- 去除 $(u^-,I^c)$ 对是否影响最终结果
实验中使用了两个真实的数据集:MovieLens 数据集和 Inzone 数据集,对于每个数据集,按照8:2的比例划分成训练集和测试集。上表是两个数据集的情况。
我们采用精度(P@K)、平均精度(M@K)和归一化折损累计增益(NDCG@K)作为评估指标,其中 K 表示推荐列表的长度,指标 P@K 关注推荐列表中包含的正确用户数。M@K 和 NDCG@K 用来评价排序的准确性。
为了回答第一个问题,文章对比了 UserPop,BPR-kNN,LCE,NFM,DNN 几个 baseline,验证了利用属性级用户表示和利用属性级项目用户交互推荐项目的重要性。上表展示了多个模型在两个数据集上的不同标准下的表现,可以发现文章提出的 LARA 模型在各个标准下都超过了已有的模型。
由于对抗性训练被广泛认为是一种有效但不稳定的技术,我们进一步分析了上述方法的学习趋势,由上图可知,Movielens 数据集上大约120个epoches 之后,Inzone 数据集上的80个 epoches 之后,P@10 和 NDCG@10 都收敛了。
本文的另一个贡献是使用属性信息来表示用户。为了验证属性级用户表示的有效性,我们提出了一种新的基线模型,输入为项目属性信息,输出为交互级用户表示,即用户表示的维数等于项目数。为了深入了解我们提出的属性级表示,我们在两个数据集上展示了这两种方法的学习曲线,结果如上图所示。
由上表中也可以看出属性级的用户表示比交互级的用户表示的效果更好。
我们以判别模型中有两类训练样本,即 $(u^+,I^c)$ 和 $(u^c,I^c)$ 的框架为基线。从上表可以看出,在判别模型的训练过程中加入负样本后,我们的模型对两个数据集的性能有了显著的提高。其原因在于,通过增加新的对,在给定条件项时,判定者不仅能从生成的用户中识别出真实用户,而且还能从错误用户中识别出真实用户。
六、文章贡献及不足
1. 贡献
该模型有三个贡献:
- 是第一个通过 GAN 来学习属性级从物品到用户映射的网络
- 避免了稀疏问题,引进了表示用户的新方式,判别器的训练方式新颖
- 根据顾客的购买记录建立了一个全新的大数据集,数据集中的每个物品有多个属性,包括分类、品牌、价格等。
2. 不足
- 只解决了物品冷启动的问题,没解决用户冷启动的问题;
下面是github下载的代码文件中的文件情况:
物品数是2536,其中507个是测试集,2029个是训练集;用户数是6040,物品的属性数是18。
util/ui_matrix.csv 行是用户,列是物品,每个元素表示用户是否购买过该物品
util/train_ui_matrix.csv 行是用户,列是物品,和util/ui_matrix.csv是完全相同的
util/user_attribute.csv 行是用户,列是物品的属性,每个元素是整数
util/user_emb.csv 行是用户,列是物品的属性,每个元素是根据util/user_attribute.csv归一化得到的实数
data/test_data.csv 是测试数据
data/train_data.csv 是训练数据
train_data 第一列是用户,第二列是物品,第三列是属性列表
test_attribute.csv 有477行,18列,列是物品属性,行是什么未知,每个元素是整数
test_item.cvs 只有一列,每一行是物品编号
- 本文作者: 俎志昂
- 本文链接: zuzhiang.cn/2020/04/08/LARA/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!