import os
import sys
import numpy as np
import tensorflow as tf
from recommenders.models.deeprec.deeprec_utils import download_deeprec_resources
from recommenders.models.newsrec.newsrec_utils import prepare_hparams
from recommenders.models.newsrec.models.nrms import NRMSModel
from recommenders.models.newsrec.io.mind_iterator import MINDIterator
from recommenders.models.newsrec.newsrec_utils import get_mind_data_set
print("System version: {}".format(sys.version))
print("Tensorflow version: {}".format(tf.__version__))
Wu, C. , Wu, F., An, M., Huang, J., Huang, Y., & Xie, X. (2019). Neural News Recommendation with Multi-Head Self-Attention. In Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP) (pp. 6389-6394).✅
Wu, F. , Qiao, Y., Chen, J. H., Wu, C., Qi, T., Lian, J., … & Xie, X. (2020). MIND: A Large-scale Dataset for News Recommendation. In Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics (pp. 3597-3606).✅
在当今信息爆炸的时代,如何从海量的新闻中为用户推荐感兴趣的内容是一个重要的研究课题。本文将介绍一种基于神经网络的新闻推荐方法——NRMS(Neural News Recommendation with Multi-Head Self-Attention),该方法利用多头自注意力机制来有效地学习新闻和用户的表示。
NRMS模型简介
NRMS是一种基于内容的神经新闻推荐方法,其核心由新闻编码器和用户编码器两部分组成:
NRMS的主要特点包括:
数据集介绍
为了快速训练和评估,本文使用了从MIND小型数据集中抽样的MINDdemo数据集,包含5000名用户的数据。MINDdemo数据集与MINDsmall和MINDlarge具有相同的文件格式。数据集分为训练集(MINDdemo_train)和验证集(MINDdemo_dev),每个集合包含新闻文件和用户行为文件。
新闻数据
新闻文件包含新闻ID、类别、子类别、标题、摘要、URL以及标题和摘要中的实体信息。每行代表一条新闻,格式如下:
用户行为数据
用户行为文件记录了用户的点击历史和展示新闻。每行代表一个展示实例,格式如下:
其中,点击历史是用户在该时间戳之前点击过的新闻ID列表,展示新闻是该次展示的新闻ID列表及其是否被点击的标签(0表示未点击,1表示点击)。
模型实现
接下来,我们将使用TensorFlow框架来实现NRMS模型,并在MINDdemo数据集上进行训练和评估。
环境准备
首先,我们需要导入必要的库和模块:
数据下载与准备
接下来,我们需要下载并准备MINDdemo数据集:
模型参数设置
我们需要设置模型的超参数:
这里我们设置了批次大小为32,训练轮数为5。其他重要参数包括:
word_emb_dim
: 300 (词嵌入维度)attention_hidden_dim
: 200 (注意力层隐藏单元数)head_num
: 20 (多头注意力的头数)head_dim
: 20 (每个注意力头的维度)模型训练
现在我们可以创建NRMS模型并开始训练:
训练过程中,模型会输出每个epoch的训练损失和验证集上的评估指标。
模型评估
训练完成后,我们可以在验证集上评估模型的性能:
评估指标包括:
实验结果与分析
在MINDdemo数据集上训练5个epoch后,NRMS模型在验证集上的表现如下:
让我们对这些结果进行分析:
这个指标衡量了模型区分用户点击和未点击新闻的能力。0.6521的分数表明模型的性能明显优于随机猜测(0.5),但仍有改进空间。
平均倒数排名反映了相关项目在推荐列表中的平均位置。0.3198的分数表明相关新闻平均排在第3-4位左右,这是一个不错的开始,但仍有提升空间。
这两个指标衡量了推荐列表前5项和前10项的质量。分数表明模型在短推荐列表上表现尚可,但仍有改进余地。
总体而言,这些结果表明NRMS模型在新闻推荐任务上展现出了一定的效果,但仍有很大的优化空间。以下是一些可能的改进方向:
模型优化策略
MINDdemo数据集只包含5000名用户,这可能限制了模型的学习能力。使用更大的数据集(如MIND small或MIND large)可能会显著提升模型性能。
将NRMS与其他推荐模型(如协同过滤或基于内容的方法)集成,可能会产生更好的效果。
考虑用户的设备类型、时间、位置等上下文信息,可能会提高推荐的相关性。
对于新用户或新闻,可以设计特殊的策略,如基于内容的推荐或探索性推荐。
结论
NRMS模型通过利用多头自注意力机制,在新闻推荐任务中展现出了潜力。它能够有效地捕捉新闻标题中词语之间的关系,以及用户历史行为中新闻之间的关联。虽然在MINDdemo数据集上的初步结果还有提升空间,但通过上述优化策略,NRMS模型有望在更大规模的数据集上取得更好的性能。
未来的研究方向可以包括:
总的来说,NRMS为基于深度学习的新闻推荐系统提供了一个有前景的框架,随着进一步的研究和优化,它有望在实际应用中发挥更大的作用。
参考文献