前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个专为推荐系统定制的BERT!

一个专为推荐系统定制的BERT!

作者头像
炼丹笔记
发布2021-05-14 17:32:13
1.5K0
发布2021-05-14 17:32:13
举报
文章被收录于专栏:炼丹笔记

作者:一元,四品炼丹师

U-BERT: Pre-training User Representations for Improved Recommendation(AAAI21)

简 介

目前非常多的公司都有专门的团队做用户画像相关的组,在我们的实践中也发现用户画像的好坏对于我们的推荐系统影响是很大的。而如何得到一个好的用户表示也是推荐系统中一个非常重要的问题。现在用户的表示通常是从行为数据中进行学习的,比如点击交互和评论。然而,对于一些不是非常流行的领域,行为数据的稀疏使我们难以学习到精确的用户表示。为了解决这个问题,一个想法是:

  • 利用内容丰富的域来补充用户表示。

受BERT在自然语言处理中的成功经验的启发,我们提出了一种新的基于预训练和微调的U-BERT方法。与典型的BERT应用不同,U-BERT是为推荐而定制的,并利用不同的框架进行预训练和微调。在预训练阶段,U-BERT专注于内容丰富的领域,并引入了一个用户编码器和一个评论编码器来模拟用户的行为。提出了两种预训练策略来学习用户的一般表征;在微调阶段,U-BERT主要关注目标内容不足的域。除了从预训练阶段继承的用户和review编码器之外,U-BERT还引入了一个商品编码器来对商品表示进行建模。此外,还提出了一个评论匹配层来捕获用户评论和项目评论之间更多的语义交互。最后,U-BERT结合用户表示、项目表示和交互信息来提高推荐性能。

模型

1.启发

受下图的影响,同一个用户选择同一组词(以红色突出显示)来表达对两个不同领域的商品的正向意见。如果我们能够模拟他在汽车领域的评论习惯,并将其应用到玩具领域,我们就能更好地预测他对玩具的评价,并推荐更合适的产品。

受到该启发,本文采用BERT技术,并在此基础上进行改进。在预训练和微调阶段,用户的ID集合是一样的,商品的ID集合因为领域的差异一般没有交叉,所以U-BERT在预训练和微调阶段引入了两个不同的框架。详细的参考模型部分。

2.问题定义

我们令, 分别表示用户集合以及商品集合。用户关于写的评价表示为,用户在其它不同的域写的评论表示为,和是类似的,除了它们的item集合不一样。

给定两个评论集合和,用户的集合和item集合,我们的目标是使用所有的输入训练一个模型,该模型可以对所有的新的user-item对进行rating的预估来决定是否将item推荐给用户。

Pretraining模型框架

U-BERT使用原始的BERT作为主干,并进行了一些修改以适应推荐任务。U-BERT可以联合建模评论文本和用户。

1.输入层

三个不同的输入,分为为:

  • 用户评论的文本;
  • 用户的ID;
  • 对应域的ID;

其中对于每个评论的文本,我们加入来表示开始和结束,我们将每个词祝那话为一个维度的项链,,其中是词典是word embedding的维度。于是我们可以得到输入:,表示评估文本的长度。对于每个用户,我们也有,对于域,我们用进行表示。

2.Review Encoder

Review Encoder是一个多层的Transformer。我们用表示层的Transformer层,表示review encoder的输入。

3.User Encoder

该模块希望将评论的语义信息进行集成并得到一个评论感知的用户表示,它主要由三个模块组成。

3.1.embedding fusion层

为了拟合不同域的评论,我们先对域embedding进行fuse得到特定域的用户emebdding。

\bar{u} = LN(u+o)

3.2.词层面的集成层

不同的词有不同的信息,表示用户的观点也不一样。比如“great”表示的意思会大于“the”,

s^u = Attn(\bar{u}W^u, S^L, S^L)

其中,是一个可训练的参数。

3.3.fusion层

将review感知的表示s^u以及用户\bar{u}$进行fusion得到我们最终的用户表示,即:

\hat{u} = Fuse(\bar{u},s^u) = LN(H^u + FFN(H^u) \\ H^u = LN(\bar{u}W^u + s^u)

Pretraining

该阶段的目标是:

  • 教U-BERT如何将评论信息和用户信息进行融合;
  • 学习更加泛华的用户表示;

此处我们用两种任务来达到这两个目标。

任务1:隐藏的意见Token预测

BERT原始的MLM任务目的是学习语言知识,我们首先随机mask一些单词,然后再对其进行重构,此处我们做了两个微小的改动来学习用户评论的喜好。

  • 当预测masked的单词的时候,除了句子上下文表示外,我们还加入了额外的用户表示来学习用户固有的偏好;
  • 这边我们没有随机mask词,而是选择意见词进行mask和重构,这些意见词在同一用户撰写的不同领域评论中共享,并暗示个人评论偏好。
Pr(w_t) = Softmax(h_tW_3^P + b_2^P) \\ h_t = LN(GELU(S_t^LW_1^P + u_2^P + b_1^P)

是被mask的,我们使用bidirectional的上下文表示以及用户表示来重构它。

任务2:观点打分预测

有两种形式的观念表示,用户评论一个商品时有两种意见表达形式:

  • 粗粒度综合评分;
  • 评论文本中的细粒度和各种观点标记;

尽管这两种形式都包含用户偏好信息,它们存在较大差距。虽然使用相同的意见词,不同的用户可能会因为不同的评分偏差而倾向于给出不同的最终评分。例如,用户在给出等级5时可能更喜欢使用“有趣”,但是用户在表示“有趣”时可能更喜欢给出等级4。其次,由于表达方式的多样性,相同的最终评级可能对应不同的意见词组合。直觉上,差距来自于用户评论偏好的多样性。因此,通过在用户的其他领域评论中链接两种形式的观点,我们可以捕获他的一般评论偏好,这有助于补充特定域中的用户表示.

最终我们再使用fusion之后的用户表示来进行预测。

r' = \hat{u} W^R + b^R

其中.

预训练的loss
L(\Theta) = \sum_{k=1}^{|T_p|} \frac{-\sum_t \in {s_k} log(Pr(w_t))}{|s_k^M|} + \beta(r_k' -r_k)^2

Fine-tuning模型框架

以预训练的U-BERT为骨干的rating预测框架。由于此阶段的输入与训练前阶段的输入略有不同,因此我们对U-BERT进行了一些调整,以适应rating预测任务。

1.输入层

该阶段的输入由五块组成:

  • 域ID;
  • 用户ID;
  • 用户的评论;
  • 商品的ID;
  • 商品的评论。

此处我们使用pretraining阶段的embedding,于是我们可以得到用户embedding, ,用户评论的表示商品的评论表示, 和分别表示用户和商品的评论个数。

2.Review Encoder

因为Transformer很难处理太长的序列,我们将用户/商品的大量评论一个个的使用review ENcoder进行编码,对于用户的第个评论,最终的上下文表示为:

\hat{S}_k^u = Trm^L(Trm^{L-1}(...(Trm^1(S_k^u))))
3.User和Item的Encoder

我们现将所有用户的评论语义信息表示为完整的评论表示,

\hat{S}^u = [\hat{S}_0^u|\hat{S}_1^u|...|\hat{S}_{C_u}^u]

同时使用

\bar{u} = LN(u+o)

得到特定域的用户表示。

\hat{u} = Fuse(\bar{u}, \bar{s}^u); \bar{s}^u = Attn(\bar{u}W^u, \bar{S}^u, \bar{S}^u)

类似地,商品的encoder和用户的encoder有相同的结构。

4.Review Co-Matching层

1.Mutual Attention Sub-Layer

我们使用对其评论,

D^u = Attn(\hat{S}^u,\hat{S}^i,\hat{S}^i) \\ D^i = Attn(\hat{S}^i,\hat{S}^u,\hat{S}^u)

2.Matching Sub-Layer

引入匹配层来捕捉原始表示和参与表示之间的语义相似性.

M^u = Tanh([\hat{S}^u - D^u; \hat{S}^u \odot D^u]W^M + b^M) \\ M^i = Tanh([\hat{S}^i - D^i; \hat{S}^i \odot D^i]W^M + b^M)

最终我们使用row-wise的max-pooling对matching的信息进行fusion得到用户评论和商品评论的最终表示。

t^u = MaxPooling(M^u)\\ t^i = MaxPooling(M^i)
5.预测层

我们使用评论感知的用户和商品表示以及来对评分结果进行预测:

r' = [\hat{u}; t^u; \hat{i}; t^i]W^f + b^f
6.模型训练Loss
L(\Theta_f) = \frac{1}{|T_f|} \sum_{k=1}^{|T_f|} (r_k' - r_k)^2

其中表示特定域的评论语料库。

实验

  • U-BERT相较于所有的其它方法都取得了最好的效果;
  • task1和2一起使用的效果是最好的;
  • Pre-training阶段使用的数据越多效果往往越好;

小结

本文提出了一种专为推荐定制的的U-BERT,它基于预训练和微调的用户表示学习和项目推荐模型U-BERT。在预训练阶段,U-BERT利用两个自我监督任务以及其他领域丰富的评论对用户进行建模;在微调阶段,U-BERT利用学习到的用户知识,通过加入新的item编码器和评论匹配层来改进推荐。在所有的6个数据集上,U-BERT都取得了非常大的提升。

参考文献

  1. U-BERT: Pre-training User Representations for Improved Recommendation
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 炼丹笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.输入层
  • 2.Review Encoder
  • 3.User Encoder
  • 任务1:隐藏的意见Token预测
  • 任务2:观点打分预测
  • 预训练的loss
  • 3.User和Item的Encoder
  • 4.Review Co-Matching层
  • 5.预测层
  • 6.模型训练Loss
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档