近年来,新闻推荐领域蓬勃发展,各种深度学习模型层出不穷。然而,传统的推荐系统往往只关注用户历史行为,忽略了新闻内容本身的语义信息和知识关联。为了解决这个问题,深度知识感知网络 (DKN) 应运而生,它将知识图谱融入到深度学习框架中,为新闻推荐带来了新的突破。
友情链接:ACEJoy
DKN:将知识图谱与深度学习完美结合
DKN 是一种深度学习模型,它利用知识图谱来增强新闻推荐的准确性。具体来说,DKN 使用 TransX 方法来学习知识图谱的表示,然后应用一个名为 KCNN 的卷积神经网络框架,将实体嵌入与词嵌入结合起来,生成新闻文章的最终嵌入向量。最后,通过一个基于注意力的神经评分器来预测点击率 (CTR)。
DKN 的独特优势
与传统的基于 ID 的协同过滤方法不同,DKN 是一种基于内容的深度模型,它能够更深入地理解新闻内容。通过联合学习新闻文章的语义级和知识级表示,DKN 能够充分利用新闻内容中的知识实体和常识。此外,DKN 还使用了一个注意力模块,能够动态计算用户的历史行为的聚合表示,从而更好地捕捉用户的兴趣偏好。
DKN 数据格式
DKN 需要以下几个文件作为输入:
- 训练/验证/测试文件: 每一行代表一个样本。印象 ID 用于评估印象会话内的性能,因此只在评估时使用,训练数据可以设置为 0。格式为:
<label> <userid> <CandidateNews>%<impressionid>
,例如:1 train_U1 N1%0
。 - 用户历史文件: 每一行代表一个用户的点击历史。需要在配置文件中设置
his_size
参数,它代表我们使用的用户点击历史的最大数量。如果用户的点击历史超过his_size
,我们将自动保留最后his_size
个点击历史,如果用户的点击历史少于his_size
,我们将自动用 0 进行填充。格式为:<Userid> <newsid1,newsid2...>
,例如:train_U1 N1,N2
。 - 文档特征文件: 该文件包含新闻的词语和实体特征。新闻文章由(对齐的)标题词和标题实体表示。例如,一个新闻标题可能是:特朗普将在下周发表国情咨文,那么标题词值可能是:CandidateNews:34,45,334,23,12,987,3456,111,456,432,标题实体值可能是:entity:45,0,0,0,0,0,0,0,0,0。由于 “特朗普” 这个词,只有实体向量的第一个值是非零的。标题值和实体值是从 1 到 n(n 是不同词语或实体的数量)进行哈希的。每个特征长度应该固定为 k(
doc_size
参数),如果文档中的词语数量超过 k,则应该截断文档到 k 个词语,如果文档中的词语数量少于 k,则应该在末尾填充 0。格式为:<Newsid> <w1,w2,w3...wk> <e1,e2,e3...ek>
。 - 词嵌入/实体嵌入/上下文嵌入文件: 这些是预训练嵌入的 npy 文件。加载后,每个文件都是一个 [n+1,k] 的二维矩阵,n 是其哈希字典中的词语(或实体)数量,k 是嵌入的维度,注意我们保留嵌入 0 用于零填充。在本实验中,我们使用 GloVe 向量来初始化词嵌入。我们使用 TransE 在知识图谱上训练实体嵌入,上下文嵌入是知识图谱中实体邻居的平均值。
DKN 模型训练与评估
首先,我们需要创建超参数,并使用 DKNTextIterator 类来创建输入数据。然后,我们可以使用 DKN 类来创建模型并进行训练。训练完成后,我们可以使用 run_eval
方法来评估模型在验证集上的性能。
epoch=5
hparams = prepare_hparams(yaml_file,
news_feature_file = news_feature_file,
user_history_file = user_history_file,
wordEmb_file=wordEmb_file,
entityEmb_file=entityEmb_file,
contextEmb_file=contextEmb_file,
epochs=epoch,
is_clip_norm=True,
max_grad_norm=0.5,
history_size=20,
MODEL_DIR=os.path.join(data_path, 'save_models'),
learning_rate=0.001,
embed_l2=0.0,
layer_l2=0.0,
use_entity=True,
use_context=True
)
print(hparams.values())
input_creator = DKNTextIterator
model = DKN(hparams, input_creator)
model.fit(train_file, valid_file)
print(model.run_eval(test_file))
DKN 性能对比
以下表格展示了 DKN 与其他模型在新闻推荐任务上的性能对比:
模型 | Group-AUC | MRR | NDCG@2 | NDCG@4 |
---|---|---|---|---|
DKN | 0.9557 | 0.8993 | 0.8951 | 0.9123 |
DKN(-) | 0.9506 | 0.8817 | 0.8758 | 0.8982 |
LightGCN | 0.8608 | 0.5605 | 0.4975 | 0.5792 |
结果表明,DKN 在所有指标上都显著优于其他模型,证明了知识图谱在新闻推荐中的重要作用。
总结
DKN 是一种强大的深度学习模型,它将知识图谱与深度学习框架完美结合,为新闻推荐带来了新的突破。它能够更深入地理解新闻内容,并有效地捕捉用户的兴趣偏好,从而提高新闻推荐的准确性和效率。
参考文献
[1] Wang, Hongwei, et al. “DKN: Deep Knowledge-Aware Network for News Recommendation.” Proceedings of the 2018 World Wide Web Conference on World Wide Web. International World Wide Web Conferences Steering Committee, 2018.