NAML:基于注意力机制的多视角新闻推荐算法 2024-06-29 作者 C3P00 引言 在信息过载的时代,个性化新闻推荐显得尤为重要。为了更精准地捕捉用户的兴趣,NAML 算法利用多视角学习,从新闻标题、正文、类别和子类别等多个角度学习新闻表示,并结合用户历史行为学习用户表示,从而实现更精准的新闻推荐。 NAML 算法原理 NAML 算法的核心思想是利用注意力机制,从多视角学习新闻表示和用户表示,并根据两者之间的匹配程度预测用户点击新闻的概率。具体来说,NAML 算法包含以下几个步骤: 新闻编码器: 标题编码器: 使用卷积神经网络 (CNN) 对新闻标题进行编码,得到新闻标题的语义表示向量。 正文编码器: 使用 CNN 对新闻正文进行编码,得到新闻正文的语义表示向量。 类别编码器: 使用嵌入向量表示新闻的类别。 子类别编码器: 使用嵌入向量表示新闻的子类别。 注意力网络: 使用注意力网络对上述四个向量进行加权平均,得到最终的新闻表示向量。 用户编码器: 使用 GRU 网络对用户浏览过的新闻进行编码,得到用户的兴趣表示向量。 注意力机制: 使用加性注意力机制分别对新闻表示向量和用户表示向量进行加权,选择重要的词语和新闻,学习更具信息量的新闻表示和用户表示。 点击率预测: 将新闻表示向量和用户表示向量输入到一个全连接神经网络中,预测用户点击该新闻的概率。 MIND 数据集 MIND 数据集是一个大规模英文新闻数据集,包含了 1,000,000 用户、161,013 篇新闻文章和 15,777,377 条点击日志。每篇新闻文章包含丰富的文本内容,包括标题、摘要、正文、类别和实体。每条点击日志包含用户的点击事件、未点击事件以及该用户在该次点击之前的历史点击行为。 本示例使用 MIND 数据集的子集 MIND demo,包含 5,000 用户、9,432 篇新闻文章和 6,134 条点击日志。由于 MIND 数据集没有发布新闻正文,本示例使用新闻摘要代替正文。 NAML 模型训练 首先,需要下载 MIND demo 数据集和预训练的 GloVe 词嵌入文件。 tmpdir = TemporaryDirectory() data_path = tmpdir.name # ... 定义数据文件路径 ... mind_url, mind_train_dataset, mind_dev_dataset, mind_utils = get_mind_data_set(MIND_type) if not os.path.exists(train_news_file): download_deeprec_resources(mind_url, os.path.join(data_path, 'train'), mind_train_dataset) # ... 下载验证集和词嵌入文件 ... 然后,设置模型超参数,并创建 NAML 模型。 # 设置超参数 epochs = 5 seed = 42 batch_size = 32 # ... # 创建 NAML 模型 hparams = prepare_hparams(yaml_file, wordEmb_file=wordEmb_file, wordDict_file=wordDict_file, userDict_file=userDict_file, vertDict_file=vertDict_file, subvertDict_file=subvertDict_file, batch_size=batch_size, epochs=epochs) iterator = MINDAllIterator model = NAMLModel(hparams, iterator, seed=seed) 最后,使用训练集和验证集对模型进行训练。 model.fit(train_news_file, train_behaviors_file, valid_news_file, valid_behaviors_file) 模型评估 模型训练完成后,可以使用验证集对模型性能进行评估。 res_syn = model.run_eval(valid_news_file, valid_behaviors_file) print(res_syn) 评估指标包括 Group AUC、Mean MRR、NDCG@5 和 NDCG@10。 模型保存 训练完成后,可以使用 save_weights 方法保存模型参数。 model_path = os.path.join(data_path, "model") os.makedirs(model_path, exist_ok=True) model.model.save_weights(os.path.join(model_path, "naml_ckpt")) 总结 NAML 算法是一种基于注意力机制的多视角新闻推荐算法,能够有效学习新闻的多方面特征和用户的兴趣,从而提升推荐效果。微软 Recommenders 工具提供了 NAML 算法的示例代码,方便用户快速上手并进行实验。
引言
在信息过载的时代,个性化新闻推荐显得尤为重要。为了更精准地捕捉用户的兴趣,NAML 算法利用多视角学习,从新闻标题、正文、类别和子类别等多个角度学习新闻表示,并结合用户历史行为学习用户表示,从而实现更精准的新闻推荐。
NAML 算法原理
NAML 算法的核心思想是利用注意力机制,从多视角学习新闻表示和用户表示,并根据两者之间的匹配程度预测用户点击新闻的概率。具体来说,NAML 算法包含以下几个步骤:
MIND 数据集
MIND 数据集是一个大规模英文新闻数据集,包含了 1,000,000 用户、161,013 篇新闻文章和 15,777,377 条点击日志。每篇新闻文章包含丰富的文本内容,包括标题、摘要、正文、类别和实体。每条点击日志包含用户的点击事件、未点击事件以及该用户在该次点击之前的历史点击行为。
本示例使用 MIND 数据集的子集 MIND demo,包含 5,000 用户、9,432 篇新闻文章和 6,134 条点击日志。由于 MIND 数据集没有发布新闻正文,本示例使用新闻摘要代替正文。
NAML 模型训练
首先,需要下载 MIND demo 数据集和预训练的 GloVe 词嵌入文件。
然后,设置模型超参数,并创建 NAML 模型。
最后,使用训练集和验证集对模型进行训练。
模型评估
模型训练完成后,可以使用验证集对模型性能进行评估。
评估指标包括 Group AUC、Mean MRR、NDCG@5 和 NDCG@10。
模型保存
训练完成后,可以使用
save_weights
方法保存模型参数。总结
NAML 算法是一种基于注意力机制的多视角新闻推荐算法,能够有效学习新闻的多方面特征和用户的兴趣,从而提升推荐效果。微软 Recommenders 工具提供了 NAML 算法的示例代码,方便用户快速上手并进行实验。