LSTUR:兼顾长期和短期兴趣的新闻推荐算法

引言

在新闻推荐领域,准确捕捉用户的兴趣至关重要。用户的兴趣可以分为长期兴趣和短期兴趣两类。长期兴趣指的是用户长期以来稳定的偏好,而短期兴趣则指的是用户在短期内表现出的兴趣变化。LSTUR 算法结合了用户的长期兴趣和短期兴趣,能够更精准地为用户推荐新闻。

LSTUR 算法原理

LSTUR 算法的核心思想是分别学习用户的长期表示和短期表示,并将两者融合,得到最终的用户表示。具体来说,LSTUR 算法包含以下几个步骤:

  1. 新闻编码器: 使用卷积神经网络 (CNN) 对新闻标题进行编码,得到新闻的语义表示向量。
  2. 用户编码器:
    • 长期表示: 使用用户 ID 的嵌入向量表示用户的长期兴趣。
    • 短期表示: 使用门控循环单元 (GRU) 网络对用户最近浏览过的新闻进行编码,得到用户的短期兴趣表示向量。
  3. 长期和短期表示融合: 将用户的长期表示和短期表示融合,得到最终的用户表示向量。LSTUR 算法提供了两种融合方法:
    • 使用长期表示初始化 GRU 网络的隐藏状态。
    • 将长期表示和短期表示拼接成一个统一的用户向量。
  4. 点击率预测: 将新闻表示向量和用户表示向量输入到一个全连接神经网络中,预测用户点击该新闻的概率。

MIND 数据集

MIND 数据集是一个大规模英文新闻数据集,包含了 1,000,000 用户、161,013 篇新闻文章和 15,777,377 条点击日志。每篇新闻文章包含丰富的文本内容,包括标题、摘要、正文、类别和实体。每条点击日志包含用户的点击事件、未点击事件以及该用户在该次点击之前的历史点击行为。

本示例使用 MIND 数据集的子集 MIND demo,包含 5,000 用户、9,432 篇新闻文章和 6,134 条点击日志。

LSTUR 模型训练

首先,需要下载 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)

# ... 下载验证集和词嵌入文件 ...

然后,设置模型超参数,并创建 LSTUR 模型。

# 设置超参数
epochs = 5
seed = 40
batch_size = 32

# ...

# 创建 LSTUR 模型
hparams = prepare_hparams(yaml_file, 
                          wordEmb_file=wordEmb_file,
                          wordDict_file=wordDict_file, 
                          userDict_file=userDict_file,
                          batch_size=batch_size,
                          epochs=epochs)

iterator = MINDIterator
model = LSTURModel(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, "lstur_ckpt"))

总结

LSTUR 算法是一种兼顾用户长期兴趣和短期兴趣的新闻推荐算法,能够有效提升推荐效果。微软 Recommenders 工具提供了 LSTUR 算法的示例代码,方便用户快速上手并进行实验。

0 0 投票数
Article Rating
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x