转自:https://cloud.tencent.com/developer/article/1095691
【导读】传统的新闻推荐算法仅仅从语义层对新闻进行表示学习,而忽略了新闻本身包含的知识层面的信息。本文将知识图谱实体嵌入与神经网络相结合,将新闻的语义表示和知识表示融合形成新的embedding表示,以此来进行用户新闻推荐。这种方法考虑了不同层面上的信息,实验证明比传统的方法效果好。
▌摘要
网络新闻推荐系统旨在解决新闻信息爆炸的问题,为用户提供个性化的推荐服务。一般来说,新闻语言是高度浓缩的,包含了很多知识实体和常识。然而,现有的方法很少利用这些外部知识,也无法充分发现新闻之间潜在的知识层面(knowledge level)的联系。因此,对用户的推荐结果仅限于简单的模式,不能合理地扩展。为了解决上述问题,本文提出了一种将知识图谱表示引入到新闻推荐中的深度知识感知网络(deep knowledge-aware network ,DKN)中。
DKN是一个基于内容的深度推荐框架,用于点击率预测。DKN的关键部分是一个多通道和单词-实体对齐的知识感知卷积神经网络(KCNN),它融合了新闻的语义层面和知识层面的表示。KCNN将单词和实体视为多个通道,并在卷积过程中显式地保持它们之间的对齐关系。此外,为了解决用户不同兴趣的问题,作者还在DKN中设计了一个注意力模块,以便动态地聚合当前候选对象的用户历史记录。通过在一个真实的在线新闻平台上进行大量的实验,结果表示,DKN模型的效果超过了现有的state-of-art模型。
▌简介
随着万维网的发展,人们的新闻阅读习惯逐渐从传统的报纸、电视等媒介转移到互联网上。在线新闻网站,如Google News和Bing News,从各种来源收集新闻,为读者提供新闻的总览。网络新闻平台的一个最大的问题是,文章的数量可能会让用户望而却步。各类新闻平台都存在信息过载的问题,为了减轻信息过载的影响,关键是要帮助用户确定他们的阅读兴趣,并提出个性化推荐。
但如今新闻推荐面临三个重要挑战:
1)与电影、餐厅推荐不同,新闻文章具有高度的时效性,相关性在短时间内很快就会失效。过时的新闻经常被更新的新闻所取代,这使得传统的基于ID的方法,比如协同过滤(CF)会因此失效。
2)人们在新闻阅读中对话题敏感,因为他们通常对多个特定的新闻类别感兴趣。如何根据当前候选新闻多样化的阅读历史动态测量用户的兴趣,是新闻推荐系统的关键。
3)新闻语言通常是高度浓缩的,由大量的知识实体和共识组成。例如,如图1所示,一位用户点击一条标题为“Boris Johnson Has Warned Donald Trump To Stick To The Iran Nuclear Deal”的新闻,该新闻包含四个知识实体:“Boris Johnson”, “Donald Trump”, “Iran” 和 “Nuclear”。 事实上,用户也可能对另一条标题为“North Korean EMP Atack Would Cause Mass U.S. Starvation, Says Congressional Report”的新闻感兴趣,因为它与以往的语境知识在常识推理方面有着紧密的联系。
然而,传统的语义模型或主题模型只能根据词的共现或聚类结构来判断它们之间的关联性,而很难发现它们之间潜在的知识层次的联系。因此,用户的阅读模式将被缩小到一个有限的范围,不能在现有推荐方法的基础上进行合理的扩展。
为了解决上述问题,作者将知识图谱引入新闻推荐系统中,提出了DKN模型。DKN是一种基于内容的点击率预测模型,它以一条候选新闻和一个用户的点击历史为输入,输出用户点击新闻的概率。
具体而言,对于输入新闻,作者通过将新闻内容中的每一个词与知识图中的相关实体相关联来丰富其信息,还搜索并使用每个实体的上下文实体集(即知识图中的近邻)来提供更多的互补和可区分的信息。然后,作者设计了DKN中的一个关键部分,即知识感知卷积神经网络(KCNN),将新闻的词级表示和知识级表示融合起来,生成一个知识感知嵌入向量。与现有工作不同的之处在于:
1)多通道。将新闻的词嵌入、实体嵌入和上下文实体嵌入视为像彩色图像一样的多层通道;
2)单词-实体对齐。因为它将一个词及其相关实体在多个通道中对齐,并应用一个转换函数来消除单词嵌入和实体嵌入空间的异构性。
图1. 通过知识实体连接的两条新闻图解
▌准备工作
- 知识图谱嵌入
一个典型的知识图谱由数以百万计的实体-关系-实体三元组(h,r,t)组成,其中h、r和t分别表示三元组的头、关系和尾。给定知识图谱中的所有三元组,知识图谱嵌入的目标是学习每个实体和关系的低维表示向量,以保存原始知识图的结构信息。近年来,基于翻译的知识图嵌入方法以其简洁的模型和优越的性能受到了广泛的关注。简要回顾几种方法:
1)TransE:
假设h, r, t分别是head, relation, tail对应的向量,如果(h,r,t)存在三元组关系,则假定
。TransE评分函数为:
,评分函数越小,则网络中h,t的三元组关系((h,r,t))越可靠。
2)TransH
通过将实体嵌入到关系超平面中,允许实体在不同的关系中有不同的表示。评分函数为:
,其中
是h, t 映射到相同超平面
以后的向量,
。
3)TransR
为每个关系r引入一个投影矩阵Mr,将实体嵌入到相应的关系空间。评分函数为:
,其中
。
4)TransD
将transr中的投影矩阵替换为实体关系对的两个投影向量的乘积:
,其中
,这里的
是实体及关系的另一组向量表示,I是单位矩阵。
- CNN句子特征提取
传统的方法通常使用词袋(BOW)技术来表示句子,即以字数统计作为句子的特征。然而,基于BOW的方法忽略了句子中的语序,容易产生稀疏性问题,导致泛化性能差。一种更有效的建模句子的方法是将给定语料库中的每个句子表示为分布式低维向量。最近,研究人员提出了许多基于CNN的句子表示学习模型。本文作者利用了一种经典的CNN结构,Kim CNN,来提取句子特征表示。
图2显示了Kim CNN的架构。用句子所包含词的词向量
组成的二维矩阵作为句子的原始输入,特征ci经过一层卷积运算
,其中h是一个卷积滤波器。在将滤波器应用到字嵌入矩阵中的每个可能位置之后,就可以得到一个特征映射
。然后,在特征映射c上使用max-over-time的pooling操作来识别最有意义的特征
,作者利用了多个滤波器(具有不同的窗口大小)来获得多个特征,并将这些特征连接在一起得到最后的语句表示。
图2:一种典型的用于句子表示学习的CNN结构
▌方法
一、问题定义
给定用户i,其历史行为是
,其中
是用户i单击的第j新闻的标题,
是用户i单击的新闻的总数。每个新闻标题t由一系列词组成,即t=[w1,w2,...],其中每个单词w可能与知识图中的一个实体e相关联。例如,在“Trump praises Las Vegas medical team”的标题中,“trump”与实体“Donald trump”相关联,而“Las”和“Vegas”则与实体“Las Vegas”相关联。给定用户的单击历史以及新闻标题中的单词与知识图谱中的实体之间的关系,我们要预测的是:对于一个用户i,是否会点击他没有浏览过的候选新闻tj。
二、知识感知的深度神经网络
DKN的框架如图3所示,DKN以一条候选新闻和一条用户点击的新闻作为输入,每条新闻都使用一个专门设计的KNCC来处理其标题并生成嵌入向量。通过KNCC,可以得到了一组用户点击历史的嵌入向量,为了得到用户关于当前候选新闻的嵌入,作者使用一种基于注意力的方法,自动地将候选新闻匹配到其点击新闻的每一段,并用不同的权重来聚合用户的历史兴趣。
图3. DKN算法框架
- 知识提取(Knowledge Distillation)
图4. 知识提取的过程
知识提取的过程如图4所示,该过程由四个步骤组成:
1)首先,为了区分新闻内容中的知识实体,作者利用实体链接技术来消除文本中提到的歧义,将它们与知识图中的预定义实体关联起来;
2)基于这些被识别的实体,构造了一个子图,并从原始知识图中提取出它们之间的所有关系链接。之后,将知识子图扩展到所有的实体中。注意,被识别的实体之间的关系可能很稀疏,而且缺乏多样性。
3)构建好知识子图以后,可以利用前文所述多种知识图谱嵌入方法,如TransH, TansR,TransD来学习实体的向量表示;
4)将学到的实体表示作为KCNN的输入。
虽然最目前的知识图谱嵌入方法一般可以保留原图中的结构信息,但是在后续的推荐中使用单个实体的学习嵌入信息仍然是有限的。为了帮助识别实体在知识图中的位置,作者为每个实体提取额外的上下文信息。在知识图中,实体e的“上下文”被看作是其近邻的集合:
其中,r是关系,G是构建的知识图谱子图。由于上下文实体在语义和逻辑上通常与当前实体密切相关,上下文的使用可以提供更多的补充信息,并有助于提高实体的可识别性。图5展示了一个上下文示例。给定实体e的上下文,上下文嵌入表示由其上下文实体的平均值计算得到:
图5:知识图谱中实体的上下文的示例
- 知识感知的CNN(Knowledge-aware CNN)
通过知识提取后,可以获得一个单词w对应的实体向量表示和上下文向量表示。给定上述输入,组合单词和相关实体的一个简单方法是将这些实体视为“伪词”,并将它们连接到单词序列中。比如:
但是,作者认为这种简单的连接策略有以下的局限性:1)连接策略破坏了词和关联实体之间的联系,并且不知道它们之间的一致性。2)不同的方法学习词嵌入和实体嵌入,这意味着不适合在单个向量空间中将它们融合在一起。3)级联策略隐式地强制词嵌入和实体嵌入具有相同的维数,这在实际设置中可能不是最优的,因为词嵌入和实体嵌入的最优维度可能会相互影响。考虑到以上的局限性,作者提出了一个多通道和词-实体对齐的KCNN,用于将单词语义和知识信息结合起来。
KCNN的具体结构如图3左下角所示,对于每一个新闻标题t,作者利用了两种的映射方法:(transformed entity embeddings)
和(transformed context embeddings)
,其中g是映射函数,可以是线性的
,也可以是非线性的
。由于转换函数是连续的,它可以将实体嵌入和上下文嵌入从实体空间映射到单词空间,同时保持它们的原始空间关系。g(e1:n)和g(e2:n)大小相同,类似于彩色图像的多通道,因此将三种embedding矩阵对齐叠加可以得到多通道的词表示W:
获得了多通道的词表示W之后,利用形如KCNN中不同窗口大小的滤波器对W进行处理获取新闻标题的表示:
,其中m是滤波器的个数。
- 基于注意力的用户兴趣预测
注意力网络如图3左上部分所示。给定具有单击历史记录的用户i,他点击的新闻的嵌入可以写成
,具体地,对于用户i点击的新闻ti和候选新闻tj,先将它们的嵌入表示连接起来,然后用一个DNNH作为注意网络和Softmax函数来计算归一化的影响力权重:
注意网络H接收两个新闻标题的嵌入作为输入并输出影响权重。因此,用户i相对于候选新闻tj的表达可以计算为他点击的新闻标题嵌入表示的加权和。:
。给定用户i的表示e(i)和候选新闻表示e(tj), 用户i点击新闻tj的概率用另外一个DNN来计算:
。
▌实验
- 数据集
本文的数据集来自Bing新闻的服务器日志。每一段日志主要包含时间戳、用户id、新闻url、新闻标题和单击计数(0表示不点击,1表示单击)。作者收集了一个随机抽样平衡数据集,从2016年10月16日到2017年6月11日作为训练集,从2017年6月12-8月11作为测试集。此外,作者还搜索了数据集中所有发生的实体以及它们在Microsoft Satori知识图谱实体,并提取了可信度大于0.8的三元组。新闻数据集和提取的知识图的基本统计和分布分别见表1和图6。
表1. 新闻数据集的基本统计及提取的知识图谱
图6. 新闻数据集中统计分布的图解和知识图谱的提取。
- Baseline方法
1. LibFM
2. KPCNN
3. DSSM
4. DeepWide
5. DeepFM
6. YouTubeNet
7. DMF
- 评价指标
1. ROC曲线下面积(AUC)
2. F1-score
- 实验结果
不同模型的实验结果对比如表2所示。另外,针对DKN不同的设置,作者也做了对比实验,见表3。
表2. 不同模型对比
表3. DKN变体的比较
▌实例分析
为了直观地展示知识图和注意力网络的使用效果,作者随机抽取了一个用户,并从训练集和测试集中提取他的所有日志(为了简单起见,省略了标签为0的训练日志)。如表4所示,点击后的新闻清楚地显示了他的兴趣点:1号-3号涉及汽车,第4-6号涉及政治(类别不包含在原始数据集中,是由作者手工标记)。
表4. 随机抽样用户的培训和测试日志(省略标签为0的培训日志)
作者使用全部的训练数据来训练DKN的全特征和没有实体或上下文嵌入的DKN,然后将该用户的每一对可能的训练日志和测试日志提供给这两个经过训练的模型,并获得它们的注意网络的输出值。结果如图7所示,较深的蓝色表示更大的注意力值。
从图7(a)中可以观察到,测试日志中的第一个标题与训练日志中的“Cars”有很高的注意力值,因为它们有相同的单词“Tesla”,但是第二个标题的结果不太令人满意,因为第二个标题与训练集中的任何标题,包括第1-3号,没有明确的词汇相似性。在测试日志的第三个标题中,情况类似。相比之下,在图7(b)中,我们看到注意网络精确地捕捉了两个类别“Cars”和“Politics”之间的关联性。这是因为在知识图谱中,“General Motors”和“Ford Inc.”与“Tesla Inc.”和“Elon Musk”分享了大量的上下文。
图7. 随机抽样用户训练日志和测试日志的注意力可视化
▌总结
本文提出了一种基于知识图表示的深度知识感知网络DKN。DKN解决了新闻推荐中的三大挑战:1)DKN是一种基于内容的深度点击率预测模型,适用于高度时间敏感的新闻。2)在新闻内容中利用知识实体和常识,设计了DKN中的KCNN模块,共同学习新闻的语义层和知识层表示。单词和实体的多通道和对齐使KCNN能够组合来自异构源的信息,并保持每个单词不同表达的对应性。3)为了模拟用户不同历史兴趣对当前候选新闻的不同影响,DKN使用注意里模块动态计算用户的聚合历史表示。作者在Bing新闻的一个数据集上进行了大量实验,结果表明DKN与最好的baseline相比具有更好的表现,知识实体嵌入和注意力模块也有显著效果。
原文:https://arxiv.org/pdf/1801.08284v1.pdf
参考:https://blog.csdn.net/u011748542/article/details/80137257
云社区:https://cloud.tencent.com/developer/article/1095691
代码:https://github.com.hwwang55/DKN