FIM论文阅读笔记

Fine-grained Interest Matching for Neural News Recommendation论文阅读笔记

这个是一篇2020年的文章,比较老了,但是还是来看看

Abstract

存在的问题:

​ 新闻的重要语义特征隐含在不同粒度的文本片段中。现有研究通常将每个用户表示为一个单一向量,然后匹配候选新闻向量,这可能会丢失细粒度信息,不利于推荐。

提出方法:

​ 在本文中,我们提出了用于神经新闻推荐的细粒度兴趣匹配方法 FIM。我们不是将用户浏览过的所有历史新闻聚合成一个单一的向量,而是通过堆叠扩张卷积为每条新闻分层构建多级表示。然后,我们对每条浏览新闻的段对和每个语义层的候选新闻进行精细匹配。然后,通过类似于图像识别的层次结构来识别高阶突出信号,从而进行最终的点击预测。

Introduction

​ 新闻推荐的关键在于用户兴趣与候选新闻的准确匹配。同一用户通常有不同的兴趣爱好,这些兴趣爱好反映在她浏览过的不同新闻中。同时,新闻的重要语义特征隐含在不同粒度的文本片段中。

​ 然而,现有工作通常通过整合用户浏览过的所有历史新闻,为每个用户学习一个单一的表征,然后通过匹配最终用户向量和候选新闻向量来进行推荐。尽管这些方法在新闻推荐性能方面有所改进,但它们在捕捉细粒度的用户-新闻匹配信号方面仍有局限,因为直到点击预测的最后一步,用户在不同历史阅读中隐含的各种潜在兴趣才能与候选新闻相匹配。

​ 本文提出了一种细粒度兴趣匹配网络(FIM),它是一种新的新闻推荐架构,可以应对上述挑战。FIM 的优势在于两个核心:多层次用户/新闻表示和细粒度兴趣匹配。我们不再将每个用户表示为单一的抽象向量,而是在一个统一的模块中采用分层扩张卷积来构建基于标题和类别注释的每篇新闻文章的多层次表示。通过分层堆叠扩张卷积,每一层的接受输入宽度呈指数增长,而参数数量仅呈线性增长。同时,由于没有应用任何形式的池化或跨步卷积,每一层的输出都作为特征图保留在不同长度的文本片段中,而且覆盖范围没有损失。这样,我们就能从不同粒度(包括词、短语和句子)的局部相关性和长期依赖性中逐步获得新闻的语义特征。

​ 此外,为了避免信息丢失,FIM 在每个语义粒度上对候选新闻和用户浏览过的每条历史新闻的文本片段进行匹配。在实际操作中,对于每一对新闻,模型都会根据分层新闻表示法构建一个从词级到句级的段-段相似性矩阵。通过这种方法,可以在候选新闻的监督下识别用户浏览历史中隐含的阅读兴趣,并以最小的损失进行匹配,从而为推荐合适的新闻提供充分的内容相关性线索。之后,我们将每对新闻在每个粒度上的多个匹配矩阵合并成一个三维图像,其通道表示不同类型用户-新闻匹配模式的相关度。通过类似于基于 CNN 的图像识别层次,我们可以识别出更高阶的突出信号,从而预测用户点击候选新闻的概率。

Method

​ 本文的整体结构如下:

pkhDs58.png

​ 我们提出了一个细粒度兴趣匹配网络(FIM)。FIM 包含三个主要组件,即用于为新闻文本片段构建分层语义特征的新闻表示模块、用于利用和聚合每对新闻在每个粒度级别上的匹配信息的交叉交互模块,以及用于计算用户点击候选新闻概率的预测模块。接下来,我们将详细介绍每个组件。

新闻表示模块

​ 我们设计了一种分层扩张卷积(HDC)编码器,用于从多种语义视角学习新闻表征。除了标题能反映新闻的核心信息外,在 MSN 等许多数字平台上,新闻文章通常会标注类别注释(如 "体育"、"娱乐")和子类别注释(如 "橄榄球 nba"、"电影明星"),以帮助指明新闻主题并锁定用户的兴趣点。

​ HDC的结构如下:

pkhsYXd.png

​ HDC 将每条新闻的标题、类别和子类别注释连接成词序列作为输入进行编码。给定一个单词序列\(d=[x_1,\ldots,x_N],\)模型首先查找一个嵌入表,将d转换为一个矩阵\(\mathbf{d}^0 = [\mathbf{x}_1,\ldots,\mathbf{x}_N]\)。然后应用分层扩张卷积层来捕捉新闻文本中的多粒度语义特征。与每一步都对输入的连续子序列进行卷积的标准卷积不同,扩张卷积通过每次跳过 δ 个输入元素(其中 δ 是扩张率(dilation rate)),具有更宽的感受野。对于\(x_j\)的上下文和大小为 2w + 1 的卷积核 W,扩张卷积运算为

\(F(x_t)=ReLU(\mathbf{W}\bigoplus_{k=0}^w\mathbf{x}_{j\pm k\delta}+\mathbf{b}) ,\)

​ 如图 3 所示,每个卷积层的深色输出是上一层浅色规则间隔输入的加权组合。我们从第一层的 δ = 1(相当于标准卷积)开始,以确保输入序列中没有任何元素被排除在外。之后,通过分层堆叠具有更宽扩张率的扩张卷积,卷积文本片段的长度呈指数级扩展,只需使用几层和少量参数就能覆盖不同 n-grams 的语义特征。

​ 此外,为了防止梯度消失或爆炸,我们在每个卷积层的末尾应用了层归一化。由于语义单元在较远距离上可能会引入无关信息,因此我们根据验证中的表现来实际设计多层扩张率。每个叠加层 l 的输出作为特定粒度级别的新闻文本特征图被保留下来,表述为\(\mathbf{d}^l=[\mathbf{x}_j^l]_{j=1}^N\in\mathbb{R}^{N\times f_s}\)。其中 fs 是每个层的滤波器数量。假设有 L 层堆叠,则多级新闻表示可定义为\([\mathbf{d}^0,\mathbf{d}^1,\ldots,\mathbf{d}^L].\)

​ 通过这种方法,HDC 可以逐步从扩张率较小的词和短语层面获取词性和语义特征,并从扩张率较大的句子层面捕捉长依赖关系。同时,大大缩短了计算路径,减少了最大池化等降采样方法造成的信息丢失的负面影响。我们的新闻编码器在并行能力上优于循环单元,在减少标记对内存消耗方面也优于完全基于注意力的方法。

交叉相互作用模块

​ 给定k个浏览新闻的表示\([\mathbf{d}_k^l]_{l=0}^L\)和候选新闻\([\mathbf{c}^l]_{l=0}^L\)。针对每个粒度构造一个分段段匹配矩阵:\(\mathbf{M}_{k,c}^l\in\mathbb{R}^{N_{d_k}\times N_c}\),这个矩阵的计算方式为:

\(\mathbf{M}_{k,c}^l[i,j]=\frac{\mathbf{d}_k^l[i]\cdot\mathbf{c}^l[j]^T}{\sqrt{f_s}} ,\)

​ 表示根据第 l 种表示类型,dk 中第 i 个片段与 c 中第 j 个片段之间的相关性。新闻配对 <dk、c> 的 L + 1 个匹配矩阵可视为其匹配信息的不同特征通道。

​ 为了概括用户整个阅读序列的信息,FIM 将每篇浏览过的新闻和候选新闻的所有交互矩阵融合为三维匹配图像 Q,其公式为\(\mathbf{Q}=\{Q_{k,i,j}\}_{n\times N_{d_k}\times N_c} ,\),n表示用户历史浏览新闻的总数。每个像素的计算方式为:

\(Q_{k,i,j}=[\mathbf{M}_{k,c}^l[i,j]]_{l=0}^L.\)

​ 具体来说,每个像素都是一个由 L + 1 个通道组成的连接向量,表示新闻内容中某一片段对在不同粒度水平上的匹配度

​ 由于用户的点击行为可能由个性化兴趣或临时性需求和事件驱动,不同的历史浏览新闻对于匹配和推荐合适的候选新闻具有不同的实用性和代表性。我们类似于图像识别的构图层次,采用分层三维卷积与最大池化神经网络来识别整幅图像中的突出匹配信号。三维卷积是典型的二维卷积的扩展,其滤波器和步长都是三维立方体。形式上,在第t层的第z个特征图上的(k、i、j)处的高阶像素计算为:

\(\mathbf{Q}_{k,i,j}^{(t,z)}=ELU\biggl(\sum_{z^{\prime}}\sum_{w=0}^{W_t-1H_t-1R_t-1}\mathbf{K}_{w,h,r}^{(t,z)}\cdot\mathbf{Q}_{k+w,i+h,j+r}^{(t-1,z^{\prime})}+\mathbf{b}^{(t)}\biggr),\)

​ 然后采用最大池化操作提取显著信号,如下:

\(\widehat{\mathbf{Q}_{k,i,j}^{(t,z)}}=max\biggl(\mathbf{Q}_{[k:k+P_w^{(t,z)}-1],[i:i+P_h^{(t,z)}-1],[j:j+P_r^{(t,z)}-1]}^{(t,z)}\biggr),\)

​ 最后一层的输出被合并为用户与候选新闻之间的综合匹配向量,表示为\(\mathbf{s}_{u,c}\in\mathbb{R}^v.\)

点击预测模块

​ 给定用户和候选新闻对的综合匹配向量 su,c,最终点击概率的计算公式为:

\(\hat{y}_{u,c}=\mathbf{W}_o^T\mathbf{s}_{u,c}+b_o ,\)

​ 损失函数还是传统的损失函数

总结

​ 最后整理一下,这篇文章虽然比较老,但是第一次读的时候比较难懂,因为涉及到一些CNN的东西,这里按照结构图来依次总结一下。

​ 首先就是新闻表示模块,这个模块的目的是要获取新闻的细粒度的表示,通过把每个新闻输入到具有不同扩张率的HDC中,从而生成不同的表示。然后来详细介绍一下HDC模块,这个模块就是一个卷积模块,不过每次卷积时会跳跃一些单词表示,扩张率为1就是挑选隔一个的表示进行卷积,扩张率为2就是每隔两个进行卷积。并且是逐层递进的,也就是扩张率为1的卷积层的输出会输入到扩张率为2的下一层,同时最后我们保留每层的新闻表示。这样就获取到了一个细粒度的新闻表示。

​ 在获得了许多新闻表示之后,我们就进入了交叉匹配模块,来进行新闻与新闻之间的匹配。在这个模块中,我们给每个粒度的浏览过的新闻与候选新闻构造一个矩阵,矩阵的值就是浏览新闻的第i个片段与第j个单词之间的相关性。然后给每一个粒度的输出表示都构造一个矩阵,这样就构造了L个矩阵,矩阵的大小为输出表示的长度与候选新闻的长度的乘积。

​ 最后我们要将浏览过的n个新闻的表示矩阵融合成一个三维的匹配图。大小为新闻数量\(\times\)浏览新闻表示长度\(\times\)候选新闻的表示长度。每个像素的值就是L层上面获得的矩阵的值的连接向量。然后我们对获得的这个3D表示进行CNN卷积。立体卷积不太懂,具体就详见公式,只知道它最后能够获得一个最终的表示就可以了。

​ 剩下的就是用这个获取到的表示来进行最终的推荐。

posted @ 2024-07-11 17:05  ANewPro  阅读(36)  评论(0编辑  收藏  举报