博客

  • 从 MAG 数据集构建 DKN 模型训练数据

    这篇文章将带你了解如何从 MAG (Microsoft Academic Graph) 数据集构建 DKN (Deep Knowledge-aware Network) 模型的训练数据。DKN 是一种用于推荐系统的深度学习模型,它可以利用知识图谱来提升推荐效果。

    数据准备:论文相关文件

    首先,我们需要准备论文相关文件。在 DKN 中,论文数据格式如下:

    [Newsid] [w1,w2,w3...wk] [e1,e2,e3...ek]

    其中,Newsid 代表论文的 ID,w1,w2,w3...wk 代表论文中每个词的索引,e1,e2,e3...ek 代表论文中每个实体的索引。词和实体是相互对应的。

    例如,一篇论文的标题为:

    One Health approach in the South East Asia region: opportunities and challenges

    那么,标题词的索引可以是:

    101,56,23,14,1,69,256,887,365,32,11,567

    标题实体的索引可以是:

    10,10,0,0,0,45,45,45,0,0,0,0

    前两个实体索引为 10,表示这两个词对应同一个实体。词和实体的索引是从 1 到 n 和 m 进行哈希的,其中 n 和 m 分别代表不同词和实体的数量。

    构建论文特征文件

    1. 词和实体哈希:首先,我们需要对词和实体进行哈希,将每个词和实体映射到一个唯一的索引。
    2. 论文内容表示:为了简化,在本教程中,我们只使用论文标题来表示论文内容。当然,你也可以使用论文摘要和正文来更全面地表示论文内容。
    3. 特征长度固定:每个论文特征的长度应该固定为 k (max_word_size_per_paper)。如果论文中的词数超过 k,我们将截断论文,只保留前 k 个词。如果词数少于 k,我们将用 0 填充到 k 个词。

    构建知识图谱文件

    接下来,我们需要构建知识图谱文件。知识图谱由三元组组成,每个三元组表示一个事实:

    head, tail, relation

    例如,一个三元组可以表示:

    "COVID-19", "Respiratory disease", "is_a"

    表示 COVID-19 是一种呼吸道疾病。

    构建用户相关文件

    接下来,我们需要准备用户相关文件。我们的第一个任务是用户到论文的推荐。对于每个用户,我们收集他/她引用的所有论文,并按时间顺序排列。然后,推荐任务可以被描述为:给定用户的引用历史,预测他/她将来会引用哪些论文。

    构建 DKN 训练数据文件

    DKN 模型需要以下几个文件作为输入:

    • 训练/验证/测试文件:每个文件中的每一行代表一个实例。Impressionid 用于评估一个印象会话内的性能,因此它只在评估时使用,在训练数据中可以设置为 0。格式如下:
    [label] [userid] [CandidateNews]%[impressionid]

    例如:

    1 train_U1 N1%0
    • 用户历史文件:每个文件中的每一行代表一个用户的引用历史。你需要在配置文件中设置 his_size 参数,该参数表示我们使用的用户点击历史的最大数量。如果用户的点击历史超过 his_size,我们将自动保留最后 his_size 个用户的点击历史。如果用户的点击历史少于 his_size,我们将自动用 0 填充到 his_size 个。格式如下:
    [Userid] [newsid1,newsid2...]

    例如:

    train_U1 N1,N2

    DKN 将推荐任务视为一个二元分类问题。我们根据项目的流行度对负样本进行采样。

    构建 item-to-item 推荐数据集

    我们的第二个推荐场景是关于 item-to-item 推荐。给定一篇论文,我们可以推荐一系列相关的论文供用户引用。

    这里我们使用监督学习方法来训练这个模型。每个实例是一个 的元组。Label = 1 表示这对论文高度相关;否则 label 将为 0。

    正样本的构建方式如下:

    1. 论文 A 和 B 在它们的引用列表中有很多重叠;
    2. 论文 A 和 B 被许多其他论文共同引用;
    3. 论文 A 和 B 由同一个作者(第一作者)在 12 个月内发表。

    总结

    本文介绍了如何从 MAG 数据集构建 DKN 模型的训练数据。通过对论文、知识图谱和用户行为数据的处理,我们可以生成 DKN 模型所需的训练数据,并进一步进行模型训练和评估。

    参考文献

  • 个性化推荐中的子图挖掘:让推荐更懂你

    你是否曾经在电商平台上浏览过一件商品,却迟迟没有下手?然后,你发现首页推荐里出现了类似的商品,甚至还有一些你可能感兴趣的周边产品?这背后,正是推荐系统利用了子图挖掘技术,它能从用户行为数据中找到隐藏的关联关系,从而实现更精准的个性化推荐。

    本文将带你深入了解子图挖掘在推荐系统中的应用,并以 KDD 2020 年教程为例,解析如何利用 Pandas 和 NetworkX 库进行子图提取和分析。

    子图挖掘:从用户行为中发现宝藏

    传统的推荐系统往往只关注用户与商品之间的直接交互关系,例如购买记录、浏览记录等。然而,用户行为数据中蕴藏着更丰富的信息,例如用户对不同商品的偏好程度、用户之间的社交关系等等。子图挖掘技术可以帮助我们从这些复杂的数据中提取出有价值的子图,从而更好地理解用户行为,并为推荐系统提供更精准的依据。

    举个例子:假设一位用户购买了篮球鞋,并浏览了篮球服和篮球训练视频。通过子图挖掘,我们可以发现这位用户对篮球运动有着浓厚的兴趣,并推荐他可能感兴趣的篮球装备、比赛直播等信息。

    Pandas 和 NetworkX:高效的子图挖掘工具

    在 Python 中,Pandas 和 NetworkX 库为我们提供了强大的子图挖掘工具。

    • Pandas 擅长处理表格数据,可以方便地将用户行为数据转换为图结构。
    • NetworkX 提供了丰富的图操作函数,可以用于子图提取、分析和可视化。

    KDD 2020 年教程中,作者展示了如何利用 Pandas 和 NetworkX 库提取用户行为子图。

    1. 数据准备

    首先,我们将用户行为数据存储在 Pandas DataFrame 中,并将其转换为 NetworkX 图结构。

    import pandas as pd
    import networkx as nx
    
    # 读取用户行为数据
    interactions = pd.read_csv("interactions.csv")
    
    # 创建 NetworkX 图
    G = nx.from_pandas_edgelist(interactions, source="user_id", target="item_id")

    2. 子图提取

    接下来,我们可以利用 NetworkX 的 ego_graph 函数提取以特定用户为中心的子图。

    # 提取以用户 1 为中心的子图
    ego_graph = nx.ego_graph(G, 1, radius=2)
    
    # 打印子图节点和边
    print(ego_graph.nodes())
    print(ego_graph.edges())

    3. 子图分析

    我们可以对提取的子图进行进一步分析,例如计算节点度、中心性等指标,以更好地理解用户行为。

    # 计算子图节点度
    degrees = dict(ego_graph.degree())
    print(degrees)
    
    # 计算子图节点中心性
    centrality = nx.degree_centrality(ego_graph)
    print(centrality)

    4. 子图可视化

    最后,我们可以利用 NetworkX 的 draw 函数将子图可视化,以便更好地理解用户行为和推荐策略。

    # 可视化子图
    nx.draw(ego_graph, with_labels=True)
    plt.show()

    子图挖掘:推荐系统的未来

    子图挖掘技术为推荐系统提供了更精准、更个性化的解决方案。它可以帮助我们更好地理解用户行为,并为用户提供更符合其兴趣和需求的推荐。

    随着数据量的不断增长和算法的不断发展,子图挖掘技术将在推荐系统中发挥越来越重要的作用。未来,我们将看到更多基于子图挖掘的推荐系统,为用户提供更智能、更便捷的体验。

    参考文献

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 1 | UV: 1
Last updated: 2025-07-10 00:25:20
沪ICP备2024052574号-1