标签: AGI

  • 个性化新闻推荐:让新闻更懂你

    每天,我们都被海量的新闻信息包围,如何从纷繁复杂的新闻中找到自己感兴趣的内容,成为一个越来越重要的课题。个性化新闻推荐系统应运而生,它能够根据用户的兴趣和偏好,为用户推荐他们可能感兴趣的新闻,帮助用户在信息海洋中快速找到自己想要的内容,缓解信息过载带来的压力。

    然而,传统的新闻推荐系统往往存在一些局限性。例如,它们难以准确捕捉用户的个性化兴趣,无法理解不同用户对同一新闻的不同关注点,也无法有效识别新闻标题中不同词语的重要性。

    为了解决这些问题,来自清华大学、北京大学和微软亚洲研究院的研究人员提出了一种名为“个性化注意神经网络”(NPA)的新闻推荐模型。该模型的核心在于通过神经网络学习新闻和用户的表示,并利用个性化注意机制来识别不同用户对新闻的不同关注点。

    NPA:让新闻更懂你

    NPA 模型主要包含三个模块:新闻编码器、用户编码器和点击预测器。

    新闻编码器负责学习新闻的表示。它首先利用词嵌入将新闻标题中的每个词语转化为一个低维稠密向量,然后使用卷积神经网络(CNN)来提取词语之间的局部上下文信息,最后通过一个词级个性化注意网络来识别不同用户对新闻标题中不同词语的不同关注点。

    用户编码器负责学习用户的表示。它根据用户点击过的新闻来学习用户的兴趣,并利用一个新闻级个性化注意网络来识别不同用户对同一新闻的不同关注点。

    点击预测器负责预测用户点击新闻的概率。它利用用户和新闻的表示,通过内积运算和 Softmax 函数来计算用户点击新闻的概率。

    个性化注意机制:识别用户的关注点

    NPA 模型的核心是个性化注意机制,它能够根据用户的个人特征,识别用户对新闻中不同词语和不同新闻的不同关注点。

    在词级个性化注意网络中,模型首先将用户的 ID 嵌入到一个低维向量中,然后利用一个全连接层来学习用户的词语偏好查询向量。接着,模型计算每个词语与查询向量之间的相似度,并利用 Softmax 函数将相似度转化为注意权重。最后,模型根据注意权重对词语的表示进行加权求和,得到用户对新闻标题的表示。

    在新闻级个性化注意网络中,模型同样将用户的 ID 嵌入到一个低维向量中,并利用一个全连接层来学习用户的新闻偏好查询向量。接着,模型计算每个新闻的表示与查询向量之间的相似度,并利用 Softmax 函数将相似度转化为注意权重。最后,模型根据注意权重对新闻的表示进行加权求和,得到用户的表示。

    实验验证:NPA 带来显著提升

    研究人员在来自微软新闻的真实新闻推荐数据集上对 NPA 模型进行了测试,并将其与其他主流新闻推荐模型进行了比较。实验结果表明,NPA 模型在 AUC、MRR、nDCG@5 和 nDCG@10 等指标上均取得了显著的提升,证明了 NPA 模型的有效性。

    此外,研究人员还通过可视化分析,展示了 NPA 模型的个性化注意机制如何识别不同用户对新闻的不同关注点。例如,对于喜欢运动新闻的用户,模型会更多地关注新闻标题中的“NBA”、“NFL”等关键词;而对于喜欢电影新闻的用户,模型则会更多地关注新闻标题中的“电影”、“超级英雄”等关键词。

    总结:NPA 为个性化新闻推荐开辟新方向

    NPA 模型利用神经网络和个性化注意机制,有效地学习了新闻和用户的表示,并识别了不同用户对新闻的不同关注点,从而实现了更精准的个性化新闻推荐。这项研究为个性化新闻推荐领域开辟了新的方向,也为其他推荐系统提供了新的思路。

    参考文献

    [1] Wu, C., Wu, F., An, M., Huang, J., Huang, Y., & Xie, X. (2019). NPA: Neural News Recommendation with Personalized Attention. In Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining (pp. 1029-1038).

    [2] Wang, H., Zhang, F., Xie, X., & Guo, M. (2018). DKN: Deep Knowledge-Aware Network for News Recommendation. In Proceedings of the 2018 World Wide Web Conference (pp. 1835-1844).

    [3] Lian, J., Zhang, F., Xie, X., & Sun, G. (2018). Towards Better Representation Learning for Personalized News Recommendation: a Multi-Channel Deep Fusion Approach. In Proceedings of the 27th International Joint Conference on Artificial Intelligence (pp. 3805-3811).

  • LSTUR:利用长短期用户表示进行新闻推荐

    在信息爆炸的时代,个性化的新闻推荐系统变得越来越重要。LSTUR (Long- and Short-term User Representations) 是一种基于神经网络的新闻推荐方法,它能够有效地捕捉用户的长短期兴趣,从而提供更精准的推荐结果。

    LSTUR 的核心思想

    LSTUR 的核心是新闻编码器和用户编码器。新闻编码器通过学习新闻标题的表示,来理解新闻内容。用户编码器则分为两个部分:长短期用户表示。

    • 长短期用户表示:LSTUR 利用用户的 ID 来学习其长期偏好,并使用 GRU 网络来学习用户最近浏览新闻的短期兴趣。
    • 结合长短期用户表示:LSTUR 提供两种方法来结合长短期用户表示。第一种方法是使用长期用户表示来初始化 GRU 网络的隐藏状态,从而将长期偏好信息融入短期兴趣学习中。第二种方法是将长短期用户表示拼接起来,形成一个统一的用户向量。

    LSTUR 的优势

    LSTUR 具有以下优势:

    • 同时捕捉用户的长短期兴趣:LSTUR 能够同时学习用户的长期偏好和短期兴趣,从而提供更精准的推荐结果。
    • 利用用户 ID 学习长期偏好:LSTUR 利用用户的 ID 来学习其长期偏好,这是一种简单而有效的学习长期兴趣的方法。
    • 利用 GRU 网络学习短期兴趣:LSTUR 利用 GRU 网络来学习用户最近浏览新闻的短期兴趣,这是一种能够捕捉用户动态兴趣变化的有效方法。

    数据格式

    为了方便训练和评估,LSTUR 使用了 MIND 数据集。MIND 数据集分为三个版本:largesmalldemodemo 版本包含 5000 个用户,是 small 版本的子集,用于快速实验。large 版本则包含了更多用户和新闻数据,用于更全面的评估。

    MIND 数据集包含两个文件:news 文件和 behaviors 文件。

    • news 文件:包含新闻信息,例如新闻 ID、类别、子类别、新闻标题、新闻摘要、新闻链接以及新闻标题和摘要中的实体信息。

    示例:

    N46466    lifestyle   lifestyleroyals The Brands Queen Elizabeth, Prince Charles, and Prince Philip Swear By  Shop the notebooks, jackets, and more that the royals can't live without.   https://www.msn.com/en-us/lifestyle/lifestyleroyals/the-brands-queen-elizabeth,-prince-charles,-and-prince-philip-swear-by/ss-AAGH0ET?ocid=chopendata   [{\"Label\": \"Prince Philip, Duke of Edinburgh\", \"Type\": \"P\", \"WikidataId\": \"Q80976\", \"Confidence\": 1.0, \"OccurrenceOffsets\": [48], \"SurfaceForms\": [\"Prince Philip\"]}, {\"Label\": \"Charles, Prince of Wales\", \"Type\": \"P\", \"WikidataId\": \"Q43274\", \"Confidence\": 1.0, \"OccurrenceOffsets\": [28], \"SurfaceForms\": [\"Prince Charles\"]}, {\"Label\": \"Elizabeth II\", \"Type\": \"P\", \"WikidataId\": \"Q9682\", \"Confidence\": 0.97, \"OccurrenceOffsets\": [11], \"SurfaceForms\": [\"Queen Elizabeth\"]}]  []
    • behaviors 文件:包含用户行为信息,例如印象 ID、用户 ID、印象时间、用户点击历史以及印象新闻。

    示例:

    1    U82271  11/11/2019 3:28:58 PM   N3130 N11621 N12917 N4574 N12140 N9748  N13390-0 N7180-0 N20785-0 N6937-0 N15776-0 N25810-0 N20820-0 N6885-0 N27294-0 N18835-0 N16945-0 N7410-0 N23967-0 N22679-0 N20532-0 N26651-0 N22078-0 N4098-0 N16473-0 N13841-0 N15660-0 N25787-0 N2315-0 N1615-0 N9087-0 N23880-0 N3600-0 N24479-0 N22882-0 N26308-0 N13594-0 N2220-0 N28356-0 N17083-0 N21415-0 N18671-0 N9440-0 N17759-0 N10861-0 N21830-0 N8064-0 N5675-0 N15037-0 N26154-0 N15368-1 N481-0 N3256-0 N20663-0 N23940-0 N7654-0 N10729-0 N7090-0 N23596-0 N15901-0 N16348-0 N13645-0 N8124-0 N20094-0 N27774-0 N23011-0 N14832-0 N15971-0 N27729-0 N2167-0 N11186-0 N18390-0 N21328-0 N10992-0 N20122-0 N1958-0 N2004-0 N26156-0 N17632-0 N26146-0 N17322-0 N18403-0 N17397-0 N18215-0 N14475-0 N9781-0 N17958-0 N3370-0 N1127-0 N15525-0 N12657-0 N10537-0 N18224-0

    代码示例

    以下是使用 LSTUR 模型进行新闻推荐的代码示例:

    1. 导入必要的库

    import os
    import sys
    import numpy as np
    import zipfile
    from tqdm import tqdm
    from tempfile import TemporaryDirectory
    import tensorflow as tf
    tf.get_logger().setLevel('ERROR') # only show error messages
    
    from recommenders.models.deeprec.deeprec_utils import download_deeprec_resources 
    from recommenders.models.newsrec.newsrec_utils import prepare_hparams
    from recommenders.models.newsrec.models.lstur import LSTURModel
    from recommenders.models.newsrec.io.mind_iterator import MINDIterator
    from recommenders.models.newsrec.newsrec_utils import get_mind_data_set
    from recommenders.utils.notebook_utils import store_metadata
    
    print("System version: {}".format(sys.version))
    print("Tensorflow version: {}".format(tf.__version__))

    2. 设置参数

    epochs = 5
    seed = 40
    batch_size = 32
    
    # 选择数据集版本: demo, small, large
    MIND_type = "demo"

    3. 下载并加载数据

    tmpdir = TemporaryDirectory()
    data_path = tmpdir.name
    
    train_news_file = os.path.join(data_path, 'train', r'news.tsv')
    train_behaviors_file = os.path.join(data_path, 'train', r'behaviors.tsv')
    valid_news_file = os.path.join(data_path, 'valid', r'news.tsv')
    valid_behaviors_file = os.path.join(data_path, 'valid', r'behaviors.tsv')
    wordEmb_file = os.path.join(data_path, "utils", "embedding.npy")
    userDict_file = os.path.join(data_path, "utils", "uid2index.pkl")
    wordDict_file = os.path.join(data_path, "utils", "word_dict.pkl")
    yaml_file = os.path.join(data_path, "utils", r'lstur.yaml')
    
    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)
    
    if not os.path.exists(valid_news_file):
        download_deeprec_resources(mind_url, os.path.join(data_path, 'valid'), mind_dev_dataset)
    if not os.path.exists(yaml_file):
        download_deeprec_resources(r'https://recodatasets.z20.web.core.windows.net/newsrec/', os.path.join(data_path, 'utils'), mind_utils)

    4. 创建超参数

    hparams = prepare_hparams(yaml_file, 
                              wordEmb_file=wordEmb_file,
                              wordDict_file=wordDict_file, 
                              userDict_file=userDict_file,
                              batch_size=batch_size,
                              epochs=epochs)
    print(hparams)

    5. 创建迭代器

    iterator = MINDIterator

    6. 训练 LSTUR 模型

    model = LSTURModel(hparams, iterator, seed=seed)
    
    # 评估模型
    print(model.run_eval(valid_news_file, valid_behaviors_file))
    
    # 训练模型
    %%time
    model.fit(train_news_file, train_behaviors_file, valid_news_file, valid_behaviors_file)
    
    # 再次评估模型
    %%time
    res_syn = model.run_eval(valid_news_file, valid_behaviors_file)
    print(res_syn)

    7. 保存模型

    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"))

    8. 生成预测文件

    group_impr_indexes, group_labels, group_preds = model.run_fast_eval(valid_news_file, valid_behaviors_file)
    
    with open(os.path.join(data_path, 'prediction.txt'), 'w') as f:
        for impr_index, preds in tqdm(zip(group_impr_indexes, group_preds)):
            impr_index += 1
            pred_rank = (np.argsort(np.argsort(preds)[::-1]) + 1).tolist()
            pred_rank = '[' + ','.join([str(i) for i in pred_rank]) + ']'
            f.write(' '.join([str(impr_index), pred_rank])+ '\n')
    
    f = zipfile.ZipFile(os.path.join(data_path, 'prediction.zip'), 'w', zipfile.ZIP_DEFLATED)
    f.write(os.path.join(data_path, 'prediction.txt'), arcname='prediction.txt')
    f.close()

    总结

    LSTUR 是一种基于神经网络的新闻推荐方法,它能够有效地捕捉用户的长短期兴趣,从而提供更精准的推荐结果。LSTUR 的优势在于能够同时学习用户的长期偏好和短期兴趣,并利用用户 ID 和 GRU 网络来学习用户表示。实验结果表明,LSTUR 模型在新闻推荐任务中取得了较好的效果。

    参考文献

    1. An, Mingxiao, et al. “Neural News Recommendation with Long- and Short-term User Representations.” Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. 2019.
    2. Wu, Fangzhao, et al. “MIND: A Large-scale Dataset for News Recommendation.” Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. 2019.
    3. Pennington, Jeffrey, et al. “GloVe: Global Vectors for Word Representation.” Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). 2014.
人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 2245 | UV: 1213
Last updated: 2025-06-24 06:55:49
沪ICP备2024052574号-1