论文学习(DeepCoNN):Joint Deep Modeling of Users and Items Using Reviews for Recommendation

    科技2022-07-20  139

    DeepCoNN:基于卷积神经网络的推荐系统(含代码)

    摘要1. 介绍2. 方法2.1 定义和注解2.2 结构2.3 词的表示方法2.4 CNN层卷积层最大池化全连接层 2.5 共享层2.6 网络的训练2.7 关于DeepCoNN的一些分析 3. 实验3.1 数据集和评估标准3.2 baselines(与DeepCoNN相比较的模型)3.3 实验设置3.4 性能评估3.5 模型分析3.6 评论数量产生的影响 模型实现(Python3.6+Pytorch1.6)

    摘要

    用户写的评论中存在大量信息。现在很多推荐系统忽略了这些信息可以潜在的缓解稀疏性问题、提高推荐模型的性能。本文提出了一个深度模型从评论中挖掘商品性质和用户行为。该模型有两个并行的神经网络模块,然后在最后一层融合。一个是从用户写的评论中提取用户行为;一个是从商品的评论中挖掘商品性质。最上层的共享层允许用户和商品之间的潜在因素进行交互。

    1. 介绍

    推荐系统中使用的许多重要方法都是基于协同过滤技术的。这些技术的基本思想都是在过去有相似行为的人在未来会有相似的选择。很多成功的协同过滤模型都基于矩阵分解。但是矩阵分解在稀疏问题上表现不好,比如不容易推荐交互很少的item,也不容易向交互很少的user进行推荐。 推荐系统除了数字评分以外,还可以为item写文本评论,这些评论可以用来缓解稀疏性问题。目前大多数协同过滤算法只依据评分建模,而忽略了文本评论中存在的大量潜在信息。

    DeepCoNN的贡献和有点概括如下:

    DeepCoNN利用文本评论为用户行为和商品属性联合建模。两个神经网络顶部的额外共享层将两个并行网络连接起来,这样可以表达用户和商品之间的相互作用来预测评分。据已知,DeepCoNN是第一个使用神经网络对用户和项目联合建模的。DeepCoNN使用预训练的深度模型把评论文本表示成词向量。实验结果表明,这种表示方法中,评论的语义意义和情感态度可以提高评分预测的准确度。所有基于话题建模的竞争技术都是用了传统的词袋技术(bag of words)。DeepCoNN不仅利用评论缓解了稀疏问题,并且显著的提升了整个系统的表现。在所有被评估的数据集(Yelp,21 categories of Amazon, and Beer)上,它的预测精度超过了最先进的技术[17, 33, 25, 35]。

    2. 方法

    本节描述DeepCoNN的细节。

    2.1 定义和注解

    训练集每个样本 ( u , i , r u i , w u i ) (u,i,r_{ui},w_{ui} ) (u,i,rui,wui)表示用户 u u u,项目 i i i,评分 r u i r_{ui} rui,评论文本 w u i w_{ui} wui。本文数学表达式注解如下:

    符号定义 d 1 : n u d_{1:n}^u d1:nu(用户或项目)u的含n个单词的评论文本 V 1 : n u V_{1:n}^u V1:nu(用户或项目)u的所有词的词向量组成的矩阵 w u i w_{ui} wui用户u为项目i写的评论文本 o j o_j oj卷积层输出的第j个神经元 n i n_i ni第i层的神经元个数 K j K_j Kj卷积层的第j个核 b j b_j bj第j个卷积核的偏差 g g g全连接层的偏差 z j z_j zj卷积层的第j个特征映射 W W W全连接层的权重矩阵 t t t卷积核的窗口大小 c c c词嵌入的维度 x u x_u xu网络u的输出 y i y_i yi网络i的输出 λ λ λ学习率

    2.2 结构

    模型包含两个平行的神经网络,分别对应用户网络( N e t u Net_u Netu)和项目网络( N e t i Net_i Neti),在最后一层进行连接。用户评论和项目评论分别输入到 N e t u Net_u Netu N e t i Net_i Neti,相应的评分作为输出。 第一层是Look-up层,为了从评论文本中捕捉情感信息,用户(或项目)的评论被表示为词嵌入矩阵。后面是CNN模型常见的层,包括卷积层、最大池化层、全连接层。最顶层使得两个神经网络能够互相影响。 下面以 N e t u Net_u Netu为例讲解, N e t i Net_i Neti同理。

    2.3 词的表示方法

    对于用户u,其所有评论拼接成一个n维向量 d 1 : n u d_{1:n}^u d1:nu。←这是论文本身的描述,实际代码实现时,可以先不拼接,到最后的全连接层在拼接起来。 对于一条样本 ( u , i , r u i , w u i ) (u,i,r_{ui},w_{ui} ) (u,i,rui,wui),收集用户u在整个样本集中发表过的评论,拼接成一个n维向量 d 1 : n u d_{1:n}^u d1:nu

    论文之外的改进:考虑在测试时剔除 w u i w_{ui} wui,即 d 1 : n u d_{1:n}^u d1:nu不包含当前用户对当前项目的评论文本。这样做的原因是u对i的评论不应当作为输入来预测其评分,就好比你先告诉我你对《花木兰》的评价,让我根据你的评价估计一下你会给它打几分,而我们这个推荐系统模型要实现的是知道了你对其它电影的评价,预估要不要给你推荐一下《花木兰》。   后来在读另一篇论文TransNets: Learning to Transform for Recommendation时,surprise!这篇论文明确指出了DeepCoNN这点的缺陷。

    d 1 : n u d_{1:n}^u d1:nu投入公式(1)求得词嵌入矩阵: V 1 : n u = ϕ ( d 1 u ) ⊕ ϕ ( d 2 u ) ⊕ ϕ ( d 3 u ) ⊕ . . . ⊕ ϕ ( d n u ) (1) V_{1:n}^u=\phi(d_1^u) \oplus \phi(d_2^u) \oplus \phi(d_3^u) \oplus ... \oplus \phi(d_n^u) \tag 1 V1:nu=ϕ(d1u)ϕ(d2u)ϕ(d3u)...ϕ(dnu)(1) 其中,函数 ϕ ( d i u ) \phi(d_i^u) ϕ(diu)返回该条评论第 i i i个词对应的 c c c维词嵌入。 V 1 : n u ∈ R c × n V_{1:n}^u\in R^{c\times n} V1:nuRc×n 值得注意的是, V 1 : n u V_{1:n}^u V1:nu保留了词的顺序,这一点是相对于bag-of-words技术的优势。

    2.4 CNN层

    卷积层

    m m m个卷积核,第 j j j个卷积核 K j ∈ R c × t K_j \in R^{c×t} KjRc×t t t t是卷积核宽度。下面进行卷积操作: z j = f ( V 1 : n u ∗ K j + b j ) (2) z_j=f(V_{1:n}^u * K_j + b_j) \tag 2 zj=f(V1:nuKj+bj)(2) 其中, ∗ * 表示卷积操作, b j b_j bj是偏差,激活函数 f ( x ) = m a x { 0 , x } f(x)=max\{0,x\} f(x)=max{0,x} V 1 : n u V_{1:n}^u V1:nu K j K_j Kj完成一次卷积操作后,产生向量 z ∈ R n − t + 1 z\in R^{n-t+1} zRnt+1。卷积层将生成m个这样的z。

    最大池化

    对于卷积层输出的每一个向量 z j z_j zj,求最大值 o j o_j oj。然后这些 o j o_j oj组成池化的输出 O O O o j = { z j 1 , z j 2 , z j 3 , . . . z j ( n − t + 1 ) } (4) o_j=\{z_{j1},z_{j2},z_{j3},...z_{j(n-t+1)}\} \tag 4 oj={zj1,zj2,zj3,...zj(nt+1)}(4) O = { o 1 , o 2 , . . . o m } (5) O=\{o_1,o_2,...o_m\} \tag 5 O={o1,o2,...om}(5) 其中 m m m是神经元数量(=卷积核数量)。

    全连接层

    将池化层得到的O投入全连接层: x u = f ( W × O + g ) (6) x_u=f(W\times O+g) \tag 6 xu=f(W×O+g)(6) 其中,权重矩阵 W ∈ R n 2 × m W\in \R^{n_2×m} WRn2×m O ∈ R m × 1 O\in R^{m×1} ORm×1 x u ∈ R n 2 × 1 x_u\in R^{n_2×1} xuRn2×1

    2.5 共享层

    N e t u Net_u Netu N e t i Net_i Neti来自两个不同的特征空间,且不可比较。共享层就是为了把它们映射到同一个特征空间。 首先,将 x u x_u xu y i y_i yi连接起来,记为 z ^ = ( x u , y i ) \hat{z}=(x_u,y_i) z^=(xu,yi)。为了把 z ^ \hat{z} z^中嵌套的变量交互关系建模,我们引入分解机(Factorization Machine 讲解)作为对应评分的评估器。 模型输入含有n个样本的一个batch时,损失函数定义如下: J = w 0 + ∑ i = 1 z ^ w i z ^ i + ∑ i = 1 ∣ z ^ ∣ ∑ j = i + 1 ∣ z ^ ∣ ⟨ v i , v j ⟩ z ^ i z ^ j (7) J=w_0+\sum_{i=1}^{\hat z}w_i\hat z_i + \sum_{i=1}^{|\hat z|} \sum_{j=i+1}^{|\hat z|} \langle v_i,v_j\rangle \hat z_i\hat z_j \tag 7 J=w0+i=1z^wiz^i+i=1z^j=i+1z^vi,vjz^iz^j(7) 其中, w 0 w_0 w0是全局偏差; w i w_i wi表示 z ^ \hat z z^中第 i i i个值的强度; ⟨ v i , v j ⟩ \langle v_i,v_j\rangle vi,vj表示内积

    2.6 网络的训练

    下面演示损失函数 J J J z ^ i \hat z_i z^i求偏导,其他参数同理,可以通过链式法则继续对前面的神经网络中的参数求偏导。 ∂ J ∂ z ^ i = w i + ∑ j = i + 1 ∣ z ^ ∣ ⟨ v i , v j ⟩ z ^ j (8) \frac{\partial J}{\partial \hat z_i}=w_i+\sum_{j=i+1}^{|\hat z|} \langle v_i,v_j\rangle \hat z_j \tag 8 z^iJ=wi+j=i+1z^vi,vjz^j(8) 该模型使用RMSprop算法(RMSprop讲解)对损失函数求最优解。更新规则如下: r t = 0.9 ( ∂ J ∂ θ ) 2 + 0.1 r t − 1 (9) r_t=0.9(\frac{\partial J}{\partial \theta})^2+0.1r_{t-1}\tag 9 rt=0.9(θJ)2+0.1rt1(9) θ ← θ − ( λ r t − ϵ ) ∂ J ∂ θ (10) \theta \leftarrow \theta-(\frac{\lambda}{\sqrt{r_t}-\epsilon})\frac{\partial J}{\partial \theta} \tag{10} θθ(rt ϵλ)θJ(10) 其中 λ \lambda λ是学习率。 ϵ = 1 0 − 8 \epsilon=10^{-8} ϵ=108防止分为0。另外,为了防止过拟合,全连接层使用了dropout。

    2.7 关于DeepCoNN的一些分析

    保留词序(Word Order Preservation)

    大多数推荐系统建模使用了词袋模型,忽略了词序。然而,在许多文本应用中,词序是至关重要的。DeepCoNN使用词嵌入技术将文本生成矩阵时保留了单词的顺序。卷积操作李永乐数据内部结构,提供了一种有效使用文本中词顺序的机制。

    在线学习(Online Learning)

    可伸缩性和处理动态的用户与项目数据是许多推荐系统必须考虑的。推荐系统的时间敏感性对在线学习潜在的因素提出了挑战。DeepCoNN对训练数据的大小是可伸缩的。也可以容易地被新数据训练和更新,应为它基于神经网络。更新项目或用户的潜在因素可以独立于历史数据进行。

    3. 实验

    3.1 数据集和评估标准

    3个数据集,Yelp,Amazon,Beer。性能评估使用均方误差(MSE)。 M S E = 1 N ∑ n = 1 N ( r n − r ^ n ) 2 (11) MSE=\frac{1}{N}\sum_{n=1}^{N}\left(r_n-{\hat{r}}_n\right)^2 \tag{11} MSE=N1n=1N(rnr^n)2(11) 其中, r n r_n rn是第n个真实值, r ^ n \hat{r}_n r^n是第n个预测值,N是样本数量。

    3.2 baselines(与DeepCoNN相比较的模型)

    为了验证DeepCoNN的有效性,本文 选择了三类算法进行对比评估:

    纯评分模型,Matrix Factorization (MF) 和 Probabilistic Matrix Factorization (PMF),通过这两个算法来验证评论信息对推荐系统是有帮助的。大多数考虑评论信息的推荐系统都是基于主题模型(topic model)的。Latent Dirichlet Allocation (LDA) [5], Collaborative Topic Regression (CTR) [33] 和 Hidden Factor as Topic (HFT) [17]。深度推荐系统。名为Collaborative Deep Learning (CDL)的最先进的深度推荐系统。

    3.3 实验设置

    整个数据集分为三部分,80%作为训练集,10%作为验证集,用于调整超参数,最后10%用作测试集。 超参数的选择通过验证集调整,根据Figure 2可以得到两个超参数 ∣ x u ∣ = ∣ y i ∣ = 50 |x_u| = |y_i| = 50 xu=yi=50 n 1 = 100 n_1 = 100 n1=100。另外 t = 3 , c = 300 , λ = 0.002 , b a t c h _ s i z e = 100 t=3,c=300,\lambda=0.002,batch\_size=100 t=3c=300λ=0.002batch_size=100

    3.4 性能评估

    通过Table 3可以看出,使用了评论信息的模型要比没有使用评论信息的MF和PMF性能要好。这也证实了评论信息可以提高模型的评分预测精度。LDA虽然使用评论信息,但评论信息和评分信息是独立的,而DeepCoNN把评分和评论在共享层进行了连接,故DeepCoNN模型的绩效要更优。综上,DeepCoNN比baselines的算法都有性能上的提升。

    3.5 模型分析

    Table 4记录了DeepCoNN的一些变体的模型绩效与DeepCoNN的比较。数据表明,DeepCoNN的绩效要优于这些变体。这些变体在原文中描述清晰,不赘述。

    3.6 评论数量产生的影响

    推荐系统都面临一个冷启动问题,即新用户或新商品几乎没有交互,不容易被推荐。以前的相关的工作中表明,利用评论信息可以缓解冷启动问题,尤其是交互率较低的用户的或项目。本节将讨论DeepCoNN能否解决冷启动问题,评论数量对模型有什么影响。 Figure 3中的纵坐标表示MF与DeepCoNN的MSE之间的差值,该差值是正数说明DeepCoNN的均方误差更小。可以看出,评论较少时,DeepCoNN的表现比MF好的更多。 实验数据表明,DeepCoNN能有效解决冷启动问题和稀疏性问题。还表明评论信息是有用的。

    模型实现(Python3.6+Pytorch1.6)

    https://github.com/zhaojinglong/DeepCoNN

    Processed: 0.012, SQL: 8