MCCM论文阅读笔记
Improving News Recommendation with Channel-Wise Dynamic Representations and Contrastive User Modeling论文阅读笔记
Abstract
存在的问题:
现有方法大多使用 CNN 和 Self-Attention 等深度学习模型从新闻标题和摘要中提取文本特征,生成特定的新闻向量。然而,基于 CNN 的方法参数固定,无法针对不同输入词提取特定特征,而基于 Self-Attention 的方法计算成本高,难以有效捕捉局部特征。
提出方法:
在我们提出的方法中,我们建立了一个基于类别的动态组件,为不同的输入生成合适的参数,并从多个角度提取局部特征。同时,用户会错误地点击一些自己不感兴趣的新闻词汇,因此数据集中会存在一些交互噪音。为了挖掘用户数据中的关键用户行为,减少噪声数据对用户建模的影响,我们在用户建模中采用了频率感知对比学习方法。
Introduction
一般来说,这些基于 CNN 的方法用固定参数表示每个新闻术语。换句话说,对于不同的输入词,模型以固定参数提取这些词的局部特征。由于不同的词可能包含不同的方面,这些方法无法自适应地提取这种多视角特征。例如,如表 1 所示,新闻术语 "华盛顿国民队投手加入拒绝白宫访问的冠军运动员行列 "主要包含体育信息,但短语 "白宫 "也包含一些政治信息。一个参数固定的模型很难提取出如此多样的特征。相比之下,对不同的输入词采用不同的参数可以有效解决这一问题。
同时,用户的浏览历史记录中存在一定比例的冗余信息。用户的浏览历史通常包含几十条新闻,但并不是所有的新闻术语都对推荐有帮助。例如,用户可能会点击与自己兴趣无关的热门新闻。因此,这些新闻术语在推荐时会分散用户的注意力。同时,用户在使用新闻浏览器时会有很多误操作。用户会错误地点击一些自己不感兴趣的新闻,并立即关闭页面。在这种情况下,这些新闻术语就会被错误地标记为正面例子。根据表 1 中的示例,用户最终点击新闻 C1 是因为他对体育感兴趣。然而,在他的点击历史记录中还有一些与体育无关的新闻术语,如 H4 和 H5,这可能是热门新闻或他误点的新闻。如果我们不对这些新闻词进行处理,就会大大降低用户建模的效果。因此,如何减少噪声数据的影响并探索用户的关键行为仍是一个值得深入研究的问题。
为了解决上述问题,我们提出了 MCCM 模型,它包含通道动态新闻编码器和频率感知对比用户编码器。在新闻编码器中,我们将新闻类别向量映射到多通道卷积核,从而为不同的输入词动态生成特征提取器。此外,我们从原始用户数据中生成新的用户项目,并利用对比学习帮助模型提取用户浏览历史中的关键特征。在此过程中,噪声数据的影响也得到了缓解。本文的主要贡献概述如下:
- 我们为每个词生成特定的特征提取器,并为不同的词从不同的兴趣渠道提取特征。该模型可以提取新闻词汇的局部特征,而不会显著增加计算成本。
- 我们还提出了频率感知对比用户建模模块,该模块采用对比学习来发现用户的基本特征,并增强模型对噪声数据的鲁棒性。
Method
在本节中,我们将对新闻推荐任务进行定义,然后提出我们的方法,其中包括一个频道动态表示模块和一个频率感知对比用户建模模块。我们提出的方法的整体架构如下图所示:
基础新闻编码器
这部分还是先用多头自注意力网络从新闻标题中提取特征,并且添加位置感知的前馈层,得到了每个单词的表示\(m_i\)。
显然,每条新闻的标题和摘要中都有一定数量的关键词,而关键词通常会对用户是否点击当前新闻产生重大影响。因此,我们额外增加了一个关注层,从新闻标题和摘要中自动选择关键词,然后进行加权聚合,得到每个新闻的表示。这个就是一个传统的新闻建模方法
通道感知的动态表示
我们在上述新闻编码器的基础上,增加了一个额外的通道动态表示模块来辅助新闻编码。由多头自注意机制组成的基本新闻编码器主要提取新闻文本中的长距离语义依赖关系,其计算成本高于基于 CNN 的方法。为了在不显著增加计算成本的情况下动态捕获不同词语的多通道表示,我们提出了一个通道动态表示模块,用动态卷积参数表示新闻文本。本节将详细介绍该模块。
在现实世界的数据集中,一个新闻术语可能同时包含多个方面的信息。新闻文本的一部分可能是关于政治的,而另一部分可能是关于体育的。传统的基于 CNN 的方法使用相同的卷积核来处理不同的输入词,使得模型难以探索这种多视角信息。由于真实世界数据集中的新闻类别数量有限,我们假设新闻文本中包含的多视角信息可以归入这些新闻类别。
通过这种方式,我们尝试从多个类别通道中提取每个输入词所包含的信息。我们定义了一组类别向量𝐶 = {𝑐1,𝑐2,...,𝑐𝑛},每个向量𝑐𝑛都是一个新闻类别的嵌入。按照轻量级卷积的实现方法,与原始卷积相比,我们使用较少的参数来提取新闻文本的局部特征。我们将卷积核表示为\(W{\in}\mathbb{R}^{d\times k}\),其中 𝑑 是嵌入维度,𝑘 是核大小。给定输入词向量序列𝑒 = {𝑒1,𝑒2,...,𝑒𝑛},其中𝑒𝑖 ∈ R𝑑,我们计算词𝑖的上下文向量如下:
\(t_{i,c}=\sum_{j=1}^kW_{c,j}\cdot e_{(i+j-\frac{k+1}2),c}\)
其中,𝑐表示输入通道。通过这种方式,我们在词向量的每个维度上都应用了一个共享卷积核,从根本上减少了卷积模块的参数。在深度卷积的基础上,我们进一步利用动态卷积为不同的词生成不同的核,以提高模型的表达能力。根据上述定义的类别向量,我们将每个类别向量映射到参数空间,形成相应的卷积核:
\(k_{c_i}=\mathrm{ReLU}(W_c\cdot c_i+b_c)\)
经过映射运算后,我们就得到了|𝐶|个卷积核,每个卷积核对应一个信息通道。接下来,我们可以利用这些卷积核获得输入词的多通道表示。为了动态生成单词𝑤𝑖 的特定卷积参数,我们使用上一节获得的𝑤𝑖 的上下文表示\(m_i\)作为查询,计算每个卷积核的权重:
\(\omega_{i,j}=\mathrm{softmax}(m_i\cdot c_j)\)
然后,我们根据上文计算的权重,以词 𝑖 的语义特征为条件,形成一个特定的卷积核:
\(k_i=\sum_{j=1}^{|C|}\omega_{i,j}\cdot k_{c_j}\)
得到所有卷积核参数后,我们对每个词分别采用深度卷积法,得到它们的多通道动态表示:
\(t_i=\mathrm{DepthConv}(m_{i-\frac{k-1}2:i+\frac{k-1}2},k_i)\)
我们将多通道动态表示 𝑡𝑖 和上一节获得的表示 𝑚𝑖 相加,形成最终的词语表示
我们希望不同的信道尽可能代表新闻文本的不同方面,因此我们采用两种方法来限制多信道卷积参数,防止向量在训练过程中逐渐同质化。
在第一种方法中,我们使用对比学习法最大化新闻类别嵌入的互信息:
\(\mathcal{L}_m=\sum_{p\in C}-\log\frac{\exp(s(c_p,c_p)/\tau)}{\sum_{p^{\prime}\in C}\exp(s(c_p,c_{p^{\prime}})/\tau)}\)
在第二种方法中,我们将新闻类别预测作为多任务学习的辅助任务。我们使用交叉熵作为这个任务的损失函数。
生成具有类别嵌入的多通道卷积核的过程的示意图如下:
对比用户建模
本节将详细介绍频率感知对比用户建模模块。在获得用户浏览历史中的新闻表征后,我们需要将这些新闻向量聚合起来形成用户表征。沿用前人的大多数用户建模方法,我们使用一个简单的注意力层来聚合用户浏览历史中的新闻向量,从而得到单一的用户向量。在获得每条新闻的权重后,我们计算出浏览历史的加权和作为用户表示u。这个就是比较传统的用户建模。
在现实世界数据集的构建过程中,没有明确的指标来衡量用户是否对当前新闻感兴趣。研究人员只能假设用户点击的新闻词条符合他的兴趣。但实际上,用户可能会有一定数量的误操作。具体来说,当用户点击了某个新闻词,但意识到自己对该新闻不感兴趣并立即返回时,该新闻词就会被错误地标记为正面样本。这种情况在实际应用中会经常出现。同时,还有很多用户感兴趣的新闻词没有被点击。为了减轻用户错误操作对我们提出的模型的影响,我们使用对比学习来探索用户交互行为的本质特征。
给定一个用户𝑢={𝑛𝑒𝑤𝑠1,𝑛𝑒𝑤𝑠2,...,𝑛𝑒𝑤𝑠𝑙},我们应用两个操作来修改原始的浏览历史记录:
- Dropout: 我们随机剔除浏览历史中一定比例的新闻词汇,得到修改后的用户 𝑢′。
- Replace: 首先,我们在浏览历史中随机选择一定比例的新闻术语。然后,针对所选的每个条目,我们从数据集中选择一个属于同一类别或具有相同实体的新闻术语。最后,我们用这些选中的术语替换浏览历史中的选中项,得到修改后的用户𝑢′。
通过对数据集的观察,我们发现在数据集中出现频率较高的热门新闻词汇所包含的用户兴趣信息较少。这是因为用户倾向于点击与自己兴趣无关的热门新闻。如果我们在用户建模时过多地考虑这些新闻术语,结果就会受到这些无关信息的影响。为了减少这些频繁出现的新闻词汇对用户建模的影响,我们在修改用户浏览历史记录时,会根据新闻出现的频率来调整dropout和替换的概率。我们首先计算数据集中新闻出现的频率𝑛𝑖,然后计算频率感知的丢弃率𝑟𝑖,如下所示:
\(r_i=\frac{\log(count(n_i))}{\max_{n_j\in N}\log(count(n_j))}(r_{max}-r_{min})+r_{min}\)
其中,𝑟𝑚𝑎𝑥和𝑟𝑚𝑖𝑛为退出率或替换率的预定义边界。
生成修改后的用户 𝑢 ′ 后,我们将 𝑢 ′ 和 𝑢 输入用户编码器,分别得到用户向量 𝑣 𝑢 和 𝑣 𝑢 ′。我们希望 𝑣𝑢 和 𝑣𝑢 ′ 之间的差异越小越好,因为它们来自同一个用户。同时,我们希望𝑣𝑢 与其他用户向量之间的距离越大越好。通过这种方法,我们可以进行一定程度的数据扩充,使模型更专注于用户浏览历史中最关键的部分。对比学习损失函数的计算方法如下:
\(\mathcal{L}_{user}=\sum_{u\in\mathcal{U}}-\log\frac{\exp(s(v_u,v_{u^{\prime}})/\tau)}{\sum_{n\in\mathcal{U}}\exp(s(v_u,v_{n^{\prime}})/\tau)}\)
点击预测器
还是传统的点积
模型训练
使用交叉熵损失函数作为基础的损失函数
\(\mathcal{L}_{base}=\frac1{|\mathcal{T}|}\sum_{i\in\mathcal{T}}(y_i\log(\hat{y}_i)+(1-y)\log(1-\hat{y}_i))\)
最终整体的损失函数为:
\(\mathcal{L}=\mathcal{L}_{base}+\lambda_1\mathcal{L}_m+\lambda_2\mathcal{L}_{user}\)
总结
最后整理一下,这篇文章写的还是比较清晰的,这里按照新闻推荐的基本步骤来进行总结。
首先是新闻编码器,这里说是用了通道感知的动态表示。实际上就是先利用传统的新闻建模方法,经过多头自注意力获取单词表示再经过注意力获取新闻表示。这里是多了一个CNN的步骤,因为开头说了CNN和注意力各自的缺点,所以应该就是想要结合起来,但是已经有人做了,那就得加一下创新点,于是就在CNN这里下功夫。这里是采用新闻的类别来构建多通道的卷积核。先根据类别构建C个卷积核,然后根据单词算每个卷积核的权重,然后根据这个权重将卷积核进行聚合,获取了每个单词特化的卷积核,然后根据这个卷积核来进行单词表示的获取,获取之后加到第一步自注意力网络获取的单词表示上,最后统一经过一个注意力网络获取用户的表示,最后为了使能够获取新闻的多方面的信息,设计了一个损失函数使得新闻类别之间嵌入的互信息尽可能大。
然后是用户编码器,这里是采用对比学习的方式,对用户的新闻进行扰动,然后来进行对比学习。