基于评论文本的推荐系统

基于评论的推荐系统

摘要

当前人们在线上购物的行为越来越多,与此同时,当用户在完成购物后,部分用户会根据自己的体验给出相应的评价以及评分,其中评分数据往往是非常稀疏的,而评价文本中往往蕴含着对应用户的大量偏好信息,如何挖掘其中的信息,进而弥补评分数据的稀疏性是研究人员的研究重点。

通常利用评论文本的方式可分为两种

  1. 文档级别:将user或item的相关评论文本拼接成文档进行表示学习,简单的处理就是,把user的评论文本拼接在一起作为一大段话,将这句话通过CNN得到user特征向量,item的处理同上。
  2. 评论级别:对每条评论文本单独建模,并将每条文本的特征进行聚合得到user或item的特征。

数据集

常用的数据集包括Amazon、Yelp的评论数据集。

Yelp:https://www.yelp.com/dataset-challenge

Amazon:https://snap.stanford.edu/data/web-Amazon.html

Amazon中的每条样本的数据大致如下:

{
"reviewerID": "A1VXOAVRGKGEAK", 用户编号
"asin": "0439893577", 商品编号
"reviewerName": "Angie", 用户名
"helpful": [0, 0], 该评论对其他人是否有帮助,[7,8] 8人中7人觉得评论有用
"reviewText": "I like the item pricing. My granddaughter wanted to mark on it but I wanted it just for the letters.", 
"overall": 5.0, 评分
"summary": "Magnetic board", 总结
"unixReviewTime": 1390953600, 评论时间
"reviewTime": "01 29, 2014"评论时间
}

一般数据预处理的时候要将每个user评论过的文本,每个item被用户评论的文本分别找出来,大致如下。

{
userID:'A1VXOAVRGKGEAK',
reivew{'对item8的评论','对item5的评论','对item10的评论'}
#因为user买过的商品是随机的,且并没有对所有的item进行评价。
}

文档级别

DeepCoNN

题目:Joint Deep Modeling of Users and Items Using Reviews for Recommendation

论文地址:https://dl.acm.org/doi/abs/10.1145/3018661.3018665

深度学习应用到review-based方法上的经典文章。

在这里插入图片描述

DeepCoNN的网络结构如上图所示,每次进入的是(user,item)对,输出是rating(评分)

  1. user review text模块是将该user评论的文本拼接成一个文档,文档表示为

    D = { w 1 , w 2 , w 3 , . . . , w n } D=\{w_1,w_2,w_3,...,w_n\} D={w1,w2,w3,...,wn},其中 n n n是文档的长度。 w i w_i wi是第 i i i个字符。这一步使用的look-up表是

  2. D D D经过look-up得到每个字符的词向量,得到 V = { v 1 , v 2 , . . . , v n } , v i ∈ R d V=\{v_1,v_2,...,v_n\}, v_i ∈R^d V={v1,v2,...,vn},viRd,其中d 是词嵌入的维度。

  3. V V V进入CNN+maxpooling中得到该文档的特征表达 O ∈ R n 1 O∈R^{n1} ORn1 n 1 n1 n1是CNN中特征向量卷积核的个数。

  4. O O O进入Full-Connnect层,相当于降为,得到 X ∈ R n X∈R^n XRn,item的文档进入相同的网络结构(参数不共享),得到 Y ∈ R n Y∈R^n YRn.

  5. z = X ⊕ Y , ⊕ z = X \oplus Y, \oplus z=XY,表示张量的拼接,即 z ∈ R 2 n z \in R^{2n} zR2n,接着将 z z z输入(交互层)让user和item的特征交互(上图并未画出交互层),这里的交互层文中使用的是MF进行交互,具体原理还在学习中,公式如下。

    J = w 0 + ∑ i = 1 ∣ z ∣ w i z i + ∑ i = 1 ∣ z ∣ ∑ i = 1 ∣ z ∣ < v i , v j > z i z j J = w_0+\sum_{i=1}^{|z|}w_iz_i+\sum_{i=1}^{|z|}\sum_{i=1}^{|z|}<v_i,v_j>z_iz_j J=w0+i=1zwizi+i=1zi=1z<vi,vj>zizj

    当然也可以使用FC全连接层进行交互

    J = W O + b J=WO+b J=WO+b

优势:早期使用深度学习的方法。

劣势:训练时,user的reviews中包含了测试集中item的评论,例如测试集中有(user1,item2)的样本,在训练时,user1的reviews中包括对item2评论,存在信息泄露的

TransNet

题目:TransNets: Learning to Transform for Recommendation

论文地址:http://nlp.csai.tsinghua.edu.cn/~lzy/publications/ijcai2017_transnet.pdf
在这里插入图片描述

TransNet网络结构如上图。

TransNet指出了DeepCoNN在对user或者item建模的时候,应该把目标user对目标item的评论从文档中去掉,简单来讲,测试集中有(user1,item1)的样本,那么在训练时,对user1建模的时候,应该把user1对item1的评论从文档中去掉。TransNet认为DeepCoNN在训练时泄露了测试集中的信息,模型已知user1对item1的评论,当然容易预测其得分。

TransNet核心思想:通过user的所有review(除去目标item的reivew)和item的所有reviews(除去目标user的reivew),利用Transform模块生成user-item的review的特征,并根据该review特征进行打分(同情感分类问题)

假设样本(userA, itemB),TransNet 分为两个网络,Target Network和Source Network。

  1. Target Network: r e v A B rev_{AB} revAB表示userA对itemB的评论,经过CNN和FMt后得到 x t x_t xt,得到userA对itemB的得分,类似于情感分类任务。

  2. Source NetWork:user和item的reviews经过嵌入层,CNN+pooling层后得到特征 x A 和 x B x_A 和x_B xAxB,接着 z 0 = [ x A , x B ] z_0=[x_A,x_B] z0=[xA,xB],表示拼接 x A , x B x_A,x_B xA,xB,然后 z 0 z_0 z0经过Transform层(以我的理解,这里就是一个多层全连接层)得到 z l z_l zl,最后将 z l z_l zl输入FMs预测得分。

  3. 在训练过程中,loss不仅包括标签的loss,而且还要包括Soure Net的 z l z_l zlTarget Net的 x t x_t xt L 2 L_2 L2损失。即

    ∣ r A B − r t ∣ |r_{AB}-r_t| rABrt:Target的评分损失。

    ∣ ∣ z l − x t ∣ ∣ 2 ||z_l-x_t||_2 zlxt2:Soure Net和Target Net生成的特征向量的L2损失。

    ∣ r A B − r s ∣ |r_{AB}-r_s| rABrs:Soure Net的评分损失。

    上面的三个损失是分开优化的(三步优化),并非是取和后再反向传播优化。

在这里插入图片描述

优势:新奇的想法,使用未包含 r e v A B rev_{A B} revAB的样本,尽量生成 r e v A B rev_{A B} revAB 的特征向量,这样将评分预测的问题转化成了情感分类问题。

劣势:如果训练集中不包含 r e v A B rev_{AB} revAB,就不能训练Target Net,并且 ∣ ∣ z l − x t ∣ ∣ 2 ||z_l-x_t||_2 zlxt2,无法计算。如果从测试集中获取,存在信息泄露的风险。

评论级别

MPCN

题目:Multi-Pointer Co-Attention Networks for Recommendation

论文地址:https://arxiv.org/pdf/1801.09251.pdf
在这里插入图片描述

MPCN认为,存在一些评论并不能体现user或者item的特征,评论的地位并不是相等的,因此MPCN使用Review Pointers机制选择重要的评论,使用重要的评论进行建模,而不是平等对待所有的评论。(区别于attention机制,MPCN是将不重要的评论删除,而不是赋予一个较小的权值。但是我认为两者差别并不大,当attention的对于某条评论的权重接近0的时候,该评论近似于被删除)

假设样本对(usera,itemb),usera对应的reviews为 a = { a 1 , a 2 . . . a n 1 } a=\{a_1,a_2...a_{n1}\} a={a1,a2...an1},itmeb的reviews为 b = { b 1 , b 2 . . . b n 2 } b=\{b_1,b_2...b_{n2}\} b={b1,b2...bn2}

  1. 对于user的一条评论 a i a_i ai和item的一条评论 b j b_j bj和首先通过嵌入层得到每个词的词向量,然后通过一个门控机制得到过滤后的 a i a_i ai b j b_j bj,门控机制是对信息进行第一步过滤(感觉此处作用甚微)。

  2. review-level Co- Attention:

    将过滤后的a和b进入review-level Co-attention,我认为此处是一个交叉注意力机制。

    s i j = F ( a i ) T M F ( b j ) s_{ij}=F(a_i)^TMF(b_j) sij=F(ai)TMF(bj),F是一个FC网络,其中 a i ∈ R l r × d a_i \in R^{lr \times d } aiRlr×d b j ∈ R l r × d b_j \in R^{lr \times d} bjRlr×d,其中 l r lr lr表示review的补齐后的长度, d d d是词向量维度。

    然后利用 s 对 a a a b b b 进行注意力池化。

    a ′ = ( G ( m a x c o l ( s ) ) ) T a a'=(G(max_{col}(s)))^Ta a=(G(maxcol(s)))Ta b ′ = ( G ( m a x r o w ( s ) ) ) T b b'=(G(max_{row}(s)))^Tb b=(G(maxrow(s)))Tb

    文中对该步骤的解释是通过user和itme的review之间的交互,为user和item 各挑选出最有用的一条评论 a ′ ∈ R l r × d a'\in R^{lr \times d } aRlr×d b ′ ∈ R l r × d b'\in R^{lr \times d } bRlr×d,因为max的操作是不可微的,因此采用Gumbel-Max技巧处理。

  3. Word-level Co-Attention:

    通过review-level Co-Attention可以得到 a ′ , b ′ a',b' a,b,接下来使用相似的方法进行word-level Co-Attention。

    w i j = F ( a i ′ ) M w F ( b j ′ ) w_{ij}=F(a'_i)M_wF(b'_j) wij=F(ai)MwF(bj) w i j w_{ij} wij表示字符 a i ′ a'_i ai和字符 b j ′ b'_j bj的关系.。

    a ′ ′ = ( S ( a v g c o l ( w ) ) ) T a ′ a'' = (S(avg_{col}(w)))^Ta' a=(S(avgcol(w)))Ta b ′ ′ = ( S ( a v g r o w ( w ) ) ) T b ′ b'' = (S(avg_{row}(w)))^Tb' b=(S(avgrow(w)))Tb

    a ′ ′ 和 b ′ ′ a''和b'' ab表示了进行交叉注意力后的review的表示。

  4. 上面的review-level 和word-level Co-attention是为了解决噪声评论的影响,利用硬指针的思想选出最重要的一对评论,但是一对评论可能无法包含用户所有的信息,因此我们使用多指针,也就是利用多个指针选择多对评论,然后将这些指针选择的评论的信息进行融合。

优势:认为不同的评论的重要性不同,不同的字的重要性不同,所以首先选择重要的评论,然后选择重要的字,使用重要的元素进行建模。

劣势:选择重要的评论和字,思想和Attention机制一样,实现过程和Attention相差不多。

Narre

题目:Neural Attentional Rating Regression with Review-level Explanations

论文地址:https://dl.acm.org/doi/abs/10.1145/3178876.3186070

在这里插入图片描述

Narre 和MPCN的主要思想是一致的,都认为评论的重要性是不同的,应该让模型能区分不同评论的重要性,所以采用了attention机制。

假设样本(useri,itemj)

  1. 对于useri的所有评论,将useri的每条评论经过CNN,得到每条评论的特征,然后将这些特征经过一个注意力层,计算每条评论的重要性(权重),然后计算这些评论的特征向量的加权和,该结果作为useri的特征向量。

    权重 a i l a_{il} ail计算,表示user_i的第l条评论的权重:

    a i l ∗ = h T R e L U ( W O O i l + W u u i l + b 1 ) + b 2 a^*_{il}=h^TReLU(W_OO_{il}+W_uu_{il}+b1)+b_2 ail=hTReLU(WOOil+Wuuil+b1)+b2

    a i l = e x p ( a i l ∗ ) ∑ l = 0 k e x p ( a i l ∗ ) a_{il} = \frac {exp(a^*_{il})}{\sum_{l=0}^{k}exp(a^*_{il})} ail=l=0kexp(ail)exp(ail)

    评论的特征向量加权和,也就是用户Useri的特征向量:

    O i = ∑ l = 1 , . . k a i l O i l O_i=\sum_{l=1,..k}a_{il}O_{il} Oi=l=1,..kailOil

  2. 对于itemB,步骤相同,可以得到 I j I_j Ij。user Modelling和item Modelling的参数不共享。

  3. 将得到 O i O_i Oi, I j I_j Ij经过FM交互层预测最终得分。

优势:引入了常见的Attention机制。

劣势:user和item在形成特征向量的时候并没有发生交互,只在最后的预测层发生交互,因此形成的特征向量的质量应该还有提升空间。

NRPA

题目:NRPA: Neural Recommendation with Personalized Attention

论文地址:https://arxiv.org/pdf/1905.12480.pdf

NRPA同样使用了Attention机制,和Narre不同的是,NRPA在使用注意力机制的时候,加入了User ID的信息,文章认为,这是一种具有个性化关注的深度神经网络推荐方法,为不同user选择不同的重要词汇和重要review。

对于 u s e r u user_u useru

  1. 对于 u s e r u user_u useru的一条评论 M u , i = [ w 1 , . . . , w T ] M_{u,i}=[w_1,...,w_T] Mu,i=[w1,...,wT],经过CNN得到 Z = [ z 1 , . . . , z T ] Z=[z_1,...,z_T] Z=[z1,...,zT],其中 z k z_k zk表示该review中第 k 个字的特征, z k ∈ R K × 1 z_k \in R^{K \times 1} zkRK×1

  2. 字级别的个性化关注机制,计算注意力权重,这里引入了用户的ID,然后求字向量的加权和。

    q u w = R e L U ( W 1 u i d + b 1 ) q_u^w = ReLU(W_1u_{id}+b1) quw=ReLU(W1uid+b1),这是一个全连接层。

    g k = q u w A z k g_k=q_u^w A z_k gk=quwAzk g k g_k gk是一个标量。

    a k = e x p ( g k ) ∑ j = 1 T e x p ( g j ) a_k = \frac {exp(g_k)}{\sum_{j=1}^T exp(g_j)} ak=j=1Texp(gj)exp(gk) a k a_k ak表示第 k 个字的重要性。

    d u , i = ∑ j = 1 T a j z j d_{u,i}=\sum_{j=1}^T a_j z_j du,i=j=1Tajzj,得到该条评论的特征向量。

  3. u s e r u user_u useru所有的评论进行上述操作,可以得到该user的所有评论的特征 D = [ d u , 1 , . . . , d u , n ] D=[d_{u,1},...,d_{u,n}] D=[du,1,...,du,n]

  4. 评论级别的个性化关注机制,思路和评论级别的一致,首先使用用户ID计算 g k g_k gk,然后使用softmax求 a k a_k ak,最后求D中特征向量的加权和。

优势:在Attention机制中引入了用户的信息,称之为个性化关注。

劣势:同Narre一样,形成特征向量的期间,用户和物品没有发生信息交互。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值