MTRec: Multi-Task Learning over BERT for News Recommendation论文阅读笔记
Abstract
存在的问题:
现有的新闻推荐方法通常仅根据新闻标题来学习新闻表征。为了充分利用新闻信息的其他字段(如类别和实体),一些方法将每个字段视为附加特征,并通过细心的池化将不同的特征向量组合起来。随着 BERT 等大型预训练模型在新闻推荐中的应用,上述纳入多字段信息的方法可能会遇到挑战:压缩类别和实体信息的浅层特征编码与深度 BERT 编码不兼容。
解决方案:
本文提出了一种多任务学习框架,将多字段信息纳入 BERT,从而提高了 BERT 的新闻编码能力。此外,我们还根据不同任务的梯度冲突修改了它们的梯度,从而进一步提高了模型的性能。
Introduction
我们在使用BERT来结合其他领域的信息时可能会遇到挑战:压缩类别和实体信息的浅层特征编码与标题的深层 BERT 编码并不兼容。因此,当我们在新闻推荐中使用大型预训练模型时,就会出现多领域信息适应性不强的问题。
在本文中,我们提出了一种用于新闻推荐的新型多任务学习框架,命名为 MTRec,以有效地整合多领域的信息。
具体来说,我们使用 BERT 将新闻标题编码为新闻嵌入,并在 BERT 的基础上设计了两个辅助任务,即类别分类和命名实体识别(NER)。这两个辅助任务与主要的新闻推荐任务一起训练。我们相信,这种多任务方式可以帮助 BERT 更好地捕捉新闻语义。为了进一步提高模型性能,我们采用了最近提出的梯度手术技术。该技术消除了多任务训练过程中不同任务之间的梯度冲突。 以前的研究研究的是同质的多领域新闻信息,包括标题、摘要和正文,而我们研究的是标题、类别和实体,它们是异质的,因此可以从不同角度提供有价值的信息。最后,我们发现将所提出的多任务学习与传统的多领域学习相结合可以进一步提高模型的性能。
Method
本文的算法结构如下:
新闻推荐的框架
在新闻推荐框架中有三个主要组件,即新闻编码器、用户编码器和点击预测器。
新闻编码器
对于每条新闻 n,我们使用预先训练好的 BRET对其标题进行编码。我们将历史点击新闻 Nh 和候选新闻 Nc 的编码向量分别记为\(\mathbf{R}^h = [\mathbf{r}_1^h,\mathbf{r}_2^h,...,\mathbf{r}_I^h]\)和\(\mathbf{R}^c=\begin{bmatrix}\mathbf{r}_1^c,\mathbf{r}_2^c,...,\mathbf{r}_J^c\end{bmatrix}\)
用户编码器
为了从历史点击新闻的表征中获得用户表征,现有方法通常采用顺序模型或注意力模型。在本文中,我们采用加法注意作为用户编码器来压缩历史信息 Rh 。用户表示 ru 则表示为:
\(\mathbf{r}^u=\sum_{i=1}^Ia_i^u\mathbf{r}_i^h, a_i^u=\text{softmax}(\mathbf{q}^u\cdot\tanh(\mathbf{W}^u\mathbf{r}_i^h)),\)
点击预测器
对于每条候选新闻,我们通过点积匹配候选新闻向量\(r_j^c\)和用户表征\(r^u\),得到其兴趣分值\(s_j=\mathbf{r}_j^c\cdot\mathbf{r}^u.\)
损失函数
损失函数就是传统的损失函数
\(\mathcal{L}_{Main}=-\sum_{i=1}^{|\mathcal{D}|}\log\frac{\exp(s_i^+)}{\exp(s_i^+)+\sum_{j=1}^L\exp(s_i^j)},\)
多字段信息
除了新闻内容(如标题),新闻推荐中还有其他有价值的信息,如类别标签和实体注释,我们称之为多字段信息。为了充分利用多字段信息,现有方法通常将其作为额外的输入特征。首先通过嵌入查找和关注机制将每个信息字段(即标题、类别和实体)转化为向量。然后,标题、类别和实体的表征\(\mathcal{R}=\{\mathbf{r}^t,\mathbf{r}^c,\mathbf{r}^e\}\)通过多字段学习合并为最终的新闻表征\(\tilde{r}\):
\(\widetilde{\mathbf{r}}=\sum_{\mathbf{r}_i\in\mathcal{R}}w_i\mathbf{r}_i, w_i=\text{softmax}(\mathbf{q}^r\cdot\tanh(\mathbf{W}^r\mathbf{r}_i)),\)
虽然多字段学习对传统文本编码有效,但对深度 BERT 编码可能效果不佳。因为压缩类别和实体信息的浅层特征编码与深层 BERT 编码可能不在同一特征空间,直接将它们结合在一起可能会造成不兼容问题,从而无法有效利用多字段信息。
多任务学习
为了有效利用 BERT 新闻编码器的多场信息,我们建议在 BERT 的基础上采用多任务学习,并在此基础上增加两项辅助任务:类别分类和命名实体识别。
类型分类
为了纳入新闻类别信息,我们在 BERT 的基础上设计了一个分类任务,利用 [CLS] 嵌入来预测新闻 ni 的类别分布:
\(\mathbf{\hat{p}}_i^c=\mathrm{softmax}(\mathbf{W}^c\mathbf{r}_i+\mathbf{b}^c),\)
于是,类别分类任务的损失函数为:
\(\mathcal{L}_{\text{Category}}=-\frac1I\sum_{i=1}^I\sum_{k=1}^{K^c}p_{i,k}^c\log(\hat{p}_{i,k}^c)),\)
命名实体识别
我们还在 BERT 的基础上设计了一个 NER 任务,使模型能够识别标题中的重要实体,从而更好地匹配感兴趣的新闻。具体来说,我们根据精确匹配来定位新闻标题中的给定实体,并用 "B "表示实体的开头词,"I "表示内部词。标题中的其他非实体词用 "O "表示。然后根据 BERT 输出嵌入执行标签预测任务:
\(\mathbf{\hat{p}}_{t_i}^n=\mathrm{softmax}(\mathbf{W}^n\mathbf{r}^{t_i}+\mathbf{b}^n),\)
然后,NER 任务的损失函数表述为:
\(\mathcal{L}_{\mathrm{NER}}=-\frac1I\sum_{i=1}^I\sum_{l=1}^{l_i}\sum_{k=1}^{K^n}p_{l,k}^n\log(\hat{p}_{l,k}^n)),\)
其中,Kn 是所有 NER 标签的数量,li 是第 i 条新闻的标题长度。
我们同时优化主任务、类别分类和 NER 任务的损失函数,从而得出最终的损失函数:
\(\mathcal{L}_{\mathrm{MTRec}}=\mathcal{L}_{\mathrm{Main}}+\mathcal{L}_{\mathrm{Category}}+\mathcal{L}_{\mathrm{NER}}.\)
基于梯度手术进行多任务学习
Yu 等人发现,多任务学习并不总是有益的,因为不同任务之间可能存在梯度冲突。如图 3(a)所示,这个问题意味着不同任务的梯度方向会形成一个大于 90◦ 的角度,从而相互伤害。为了缓解这一问题,Yu 等人提出了一种称为梯度手术(Gradient Surgery,GS)的技术,即把第 i 个任务 gi 的梯度投影到另一个冲突任务梯度 gj 的法平面上:
\(\mathbf{g}_i=\mathbf{g}_i-\frac{(\mathbf{g}_j\cdot\mathbf{g}_i)}{\left\|\mathbf{g}_j\right\|^2}\cdot\mathbf{g}_j.\)
虽然 GS 在一定程度上是有效的,但我们的任务与 Yu 等人的普通多任务学习有些不同:我们的目的是利用辅助任务来提高主任务的性能,而不是对它们一视同仁。因此,对主要任务进行较少的梯度修改是有益的。为此,我们对原 GS 稍作修改,首先合并辅助任务的梯度,然后采用因子 λ 对其进行缩放。
\(\mathbf{g}_{aux}=\lambda(\mathbf{g}_{category}+\mathbf{g}_{ner}),\)
然后,我们在主要任务和合并后的辅助任务的梯度之间应用 GS(图 3(c)),得出最终梯度 g(图 3(d))。
总结
整篇文章讲的还是比较清晰,这里来整理一下,按照模型图来总结一下。
本篇文章的重点是在多任务学习上,新闻编码器采用的是BERT。在多任务学习中,主要添加了两类任务,一个是类别分类,一个是命名实体识别。
首先来说一下类别分类,也就是根据新闻编码器的新闻输出表示来获取新闻的类别分布。
然后是命名实体识别,感觉跟分类类似,只不过这个是要识别的是每个词的标签,包括是不是实体开头词,内部词以及非实体词。