学习C2CRSⅠ (Encoding Multi-type Context Data)

代码地址:https://github.com/RUCAIBox/WSDM2022-C2CRS
论文地址:https://arxiv.org/abs/2201.02732

(一)CoarseFineKGModel模型结构与功能

CoarseFineKGModel 是一个基于 PyTorch 的神经网络模型,用于学习知识图谱中的用户表示和实体表示。它通过两个主要的模块来实现:

  1. 知识图谱(KG)编码器:用于学习知识图谱中实体的嵌入表示。
  2. 对比学习(Contrastive Learning)投影:用于将知识图谱嵌入映射到用户嵌入空间,以便进行后续的对比学习或其他任务。

主要方法与逻辑

1. 初始化方法 (__init___build_model)
  • __init__
    • 接收一个配置对象 config,其中包含了模型的各种参数(如实体数量、嵌入维度、关系数量等)。
    • 调用 _build_model 方法来构建模型的各个组件。
  • _build_model
    • 调用 _build_kg_layer_build_kg_cl_project_head_build_ekg_cl_project_head 方法,分别构建知识图谱编码层、知识图谱对比学习投影头和实体级知识图谱对比学习投影头。
2. 知识图谱编码层 (_build_kg_layer_get_kg_user_rep)
  • _build_kg_layer
    • 构建了知识图谱编码器 kg_encoder,使用了 RGCNConv(Relational Graph Convolutional Network)来处理多关系图数据。
    • 添加了一个自注意力层 kg_attn,用于聚合用户相关的实体嵌入。
    • 添加了一个全连接层 kg_user_rep_dense,用于将知识图谱嵌入映射到用户嵌入空间。
  • _get_kg_user_rep
    • 使用 kg_encoder 对知识图谱进行编码,生成所有实体的嵌入表示 kg_embedding
    • 调用 _encode_user 方法,根据用户上下文中的实体列表,从知识图谱嵌入中提取对应的实体嵌入。使用自注意力层 kg_attn 对实体嵌入进行聚合,生成用户表示。如果某个用户上下文中的实体列表为空,则返回一个零向量。最终,生成用户表示 user_rep
    • 返回知识图谱用户表示和实体嵌入表示。
3. 去重逻辑 (get_duplicate_removal_ids)
  • get_duplicate_removal_ids
    • 用于去除上下文中重复的实体 ID 和对应的对话 ID。
    • 通过一个集合 dr_ekg_ids_set 来记录已经出现过的实体 ID,确保每个实体只被处理一次。
    • 返回去重后的实体 ID 列表和对应的对话 ID 列表。
4. 实体表示生成 ( _get_project_entity_kg_reps_get_entity_kg_reps)
  • _get_project_entity_kg_reps
    • 调用 _get_entity_kg_reps 获取实体嵌入,然后通过投影头 _project_entity_kg_reps 将其映射到用户嵌入空间。
  • _get_entity_kg_reps
    • 根据给定的实体 ID 列表,从知识图谱嵌入中提取对应的实体嵌入。
    • 如果实体 ID 列表为空,则返回一个零向量。
5. 对比学习投影
  • _build_kg_cl_project_head_build_ekg_cl_project_head
    • 构建了两个投影头,分别用于知识图谱用户表示和实体表示的对比学习。
    • 每个投影头包含两个全连接层(fc1fc2),用于将原始嵌入映射到目标嵌入空间。
  • _project_kg_user_rep_project_entity_kg_reps
    • 这两个方法分别对用户表示和实体表示进行投影,通过两个全连接层和 ReLU 激活函数,将嵌入映射到用户嵌入空间。

主要方法的输出

  • get_kg_rep
    • 输入:包含上下文实体的批量数据。
    • 输出:
      1. 知识图谱用户表示 kg_user_rep
      2. 知识图谱实体嵌入表示 kg_embedding
  • get_project_kg_rep
    • 输入:包含上下文实体、实体 ID 和对话 ID 的批量数据。
    • 输出:
      1. 投影后的知识图谱用户表示 project_kg_user_rep
      2. 去重后的实体 ID 列表 duplicate_removal_ekg_ids
      3. 去重后的对话 ID 列表 duplicate_removal_ekg_conv_ids
      4. 投影后的知识图谱实体表示 project_entity_kg_reps

(二)CoarseFineContextModel模型结构与功能

CoarseFineContextModel主要用于处理文本上下文信息,特别是与用户表示学习和上下文嵌入相关的任务。它通过多个模块来实现对上下文的编码、用户表示的生成以及对比学习的投影。它通过以下模块实现:

  1. 上下文编码器:使用 Transformer 编码器对文本上下文进行编码。
  2. 对比学习投影头:将上下文嵌入映射到用户嵌入空间,用于对比学习。
  3. 自注意力机制:用于聚合上下文中的重要信息。
  4. 实体级上下文投影头:针对实体相关的上下文文本生成嵌入。

主要方法与逻辑

1. 初始化方法 (__init___build_model)
  • __init__
    • 接收一个配置对象 config 和一个预训练的词嵌入 token_embedding
    • 调用 _build_model 方法构建模型的各个组件。
  • _build_model
    • 调用 _build_context_transformer_layer_build_context_cl_project_head_build_atten_build_ect_cl_project_head 方法,分别构建上下文编码层、上下文对比学习投影头、自注意力模块和实体级上下文对比学习投影头。
2. 上下文编码层 (_build_context_transformer_layer_get_context_user_rep)
  • _build_context_transformer_layer
    • 构建了一个 Transformer 编码器 context_encoder,用于对文本上下文进行编码。
    • 添加了一个全连接层 context_user_rep_dense,用于将上下文嵌入映射到用户嵌入空间。
  • _get_context_user_rep
    • 使用 _get_hidden_state_context_transformer 方法获取上下文的隐藏状态。
    • 使用自注意力模块 ContextHiddenStateAttenFunc 对上下文隐藏状态进行聚合,生成用户表示。
    • 返回上下文用户表示和上下文隐藏状态。
3. 对比学习投影头
  • _build_context_cl_project_head_build_ect_cl_project_head
    • 构建了两个投影头,分别用于上下文用户表示和实体级上下文表示的对比学习。
    • 每个投影头包含两个全连接层(fc1fc2),用于将原始嵌入映射到目标嵌入空间。
  • _project_context_user_rep_project_entity_context_text_reps
    • 这两个方法分别对上下文用户表示和实体级上下文表示进行投影,通过两个全连接层和 ReLU 激活函数,将嵌入映射到用户嵌入空间。
4. 自注意力机制 (_build_atten)
  • _build_atten
    • 构建了一个自注意力机制 ContextHiddenStateAttenFunc,用于聚合上下文中的重要信息。
  • _get_hidden_state_context_transformer
    • 使用 Transformer 编码器对上下文进行编码,获取隐藏状态。
    • 提取隐藏状态的第一个 token(通常为 [CLS])作为上下文的表示。
5. 实体级上下文表示生成
  • _get_project_entity_context_text_reps
    • 输入:上下文隐藏状态和实体掩码。
    • 输出:投影后的实体级上下文表示。
  • _get_entity_context_text_reps
    • 根据实体掩码,从上下文隐藏状态中提取与实体相关的部分。
    • 对每个实体的上下文表示进行加权求和,生成实体级上下文表示。
  • _project_entity_context_text_reps
    • 使用实体级上下文投影头对实体级上下文表示进行投影,映射到用户嵌入空间。

主要方法的输出

  • get_project_context_rep
    • 输入:包含上下文、上下文掩码、上下文填充掩码、实体掩码和实体 ID 的批量数据。
    • 输出:
      1. 投影后的上下文用户表示 project_context_user_rep
      2. 投影后的实体级上下文表示 project_entity_context_text_reps

(三)CoarseFineDistReviewModel模型结构与功能

CoarseFineDistReviewModel 主要用于处理评论(review)数据,生成用户表示和评论表示。它通过多个模块来实现对评论的编码、用户表示的生成以及对比学习的投影。它通过以下模块实现:

  1. 评论编码器:使用 Transformer 编码器对评论文本进行编码。
  2. 对比学习投影头:将评论嵌入映射到用户嵌入空间,用于对比学习。
  3. 自注意力模块:用于聚合评论中的重要信息。
  4. 分布式评论表示聚合模块:用于聚合多个评论的表示,生成用户表示。

主要方法与逻辑

1. 初始化方法 (__init___build_model)
  • __init__
    • 接收一个配置对象 config 和一个预训练的词嵌入 token_embedding
    • 调用 _build_model 方法构建模型的各个组件。
  • _build_model
    • 调用 _build_review_transformer_layer_build_review_cl_project_head_build_atten_build_distReviewRepAtten_build_entity_review_cl_project_head 方法,分别构建评论编码层、评论对比学习投影头、自注意力模块、分布式评论表示聚合模块和实体级评论对比学习投影头。
2. 评论编码层 (_build_review_transformer_layer_get_review_user_rep)
  • _build_review_transformer_layer
    • 构建了一个 Transformer 编码器 review_encoder,用于对评论文本进行编码。
    • 添加了一个全连接层 review_user_rep_dense,用于将评论嵌入映射到用户嵌入空间。
  • _get_review_user_rep
    • 使用 _get_hidden_state_review_transformer 方法获取评论的隐藏状态。
    • 使用自注意力模块 ReviewHiddenStateAttenFunc 对评论隐藏状态进行聚合,生成评论表示。
    • 使用分布式评论表示聚合模块 distReviewRepAtten 对多个评论的表示进行聚合,生成用户表示。
    • 返回评论用户表示、评论表示和评论隐藏状态。
3. 对比学习投影头
  • _build_review_cl_project_head_build_entity_review_cl_project_head
    • 构建了两个投影头,分别用于评论用户表示和实体级评论表示的对比学习。
    • 每个投影头包含两个全连接层(fc1fc2),用于将原始嵌入映射到目标嵌入空间。
  • _project_review_user_rep_project_review_rep
    • 这两个方法分别对评论用户表示和实体级评论表示进行投影,通过两个全连接层和 ReLU 激活函数,将嵌入映射到用户嵌入空间。
4. 自注意力模块 (_build_atten)
  • _build_atten
    • 构建了一个自注意力模块 ReviewHiddenStateAttenFunc,用于聚合评论中的重要信息。
  • _get_hidden_state_review_transformer
    • 使用 Transformer 编码器对评论进行编码,获取隐藏状态。
    • 提取隐藏状态的第一个 token(通常为 [CLS])作为评论的表示。
5. 分布式评论表示聚合模块 (_build_distReviewRepAttenencode_review_user_rep)
  • _build_distReviewRepAtten
    • 构建了一个自注意力模块 distReviewRepAtten,用于聚合多个评论的表示。
  • encode_review_user_rep
    • 根据每个用户的评论数量,将所有评论的表示聚合为一个用户表示。
    • 使用 distReviewRepAtten 对每个用户的评论表示进行聚合。
6. 处理评论样本表示 (get_review_sample_reps )
  • 整理评论数据
    • 将每个用户的所有评论表示和嵌入整理成统一的格式。
    • 确保每个用户的数据形状一致,即使某些用户评论数量不足,也会通过填充(padding)补齐。
  • 生成两个掩码
    • review_pad_mask:标记哪些评论是真实的,哪些是填充的。
    • review_token_padding_mask:标记每条评论中哪些位置是真实的,哪些是填充的。
  • 返回整理后的数据
    • 返回整理后的评论表示、掩码和嵌入表示,以便后续响应生成模型可以使用这些数据。

主要方法的输出

  • get_review_user_rep_and_review_rep
    • 输入:包含评论数据、评论掩码、评论填充掩码和每个用户的评论数量的批量数据。
    • 输出:
      1. 评论用户表示。
      2. 评论的表示。
      3. 评论的隐藏状态。
  • get_project_review_rep
    • 输入:包含评论数据、评论掩码、评论填充掩码和每个用户的评论数量的批量数据。
    • 输出:
      1. 投影后的评论用户表示。
      2. 投影后的实体级评论表示。

(四)CoarseFineDRUserModel模型结构与功能

CoarseFineDRUserModel ,它是一个组合模型,综合了知识图谱(KG)、上下文(Context)和评论(Review)三个模块的信息来生成用户表示:

  1. 知识图谱模块(CoarseFineKGModel:处理知识图谱数据,生成用户表示和实体表示。
  2. 上下文模块(CoarseFineContextModel:处理文本上下文信息,生成用户表示和实体相关的上下文表示。
  3. 评论模块(CoarseFineDistReviewModel:处理评论数据,生成用户表示和实体级评论表示。

主要方法与逻辑

1. 初始化方法 (__init___build_model)
  • __init__
    • 接收一个配置对象 config 和一个预训练的词嵌入 token_embedding
    • 调用 _build_model 方法构建模型的各个组件。
  • _build_model
    • 初始化三个子模块:
      • kGModel:知识图谱模块,用于处理知识图谱数据。
      • contextModel:上下文模块,用于处理文本上下文信息。
      • reviewModel:评论模块,用于处理评论数据。
2. 获取投影后的用户表示 (get_project_user_rep)

调用三个子模块的方法,分别获取知识图谱、上下文和评论模块生成的用户表示和实体表示。

  • 调用知识图谱模块
    • self.kGModel.get_project_kg_rep(batch, mode)
    • 获取知识图谱模块生成的用户表示 project_kg_user_rep
    • 获取去重后的实体 ID 列表 duplicate_removal_ekg_ids 和对应的对话 ID 列表 duplicate_removal_ekg_conv_ids
    • 获取投影后的实体表示 project_entity_kg_reps
  • 调用上下文模块
    • self.contextModel.get_project_context_rep(batch, mode)
    • 获取上下文模块生成的用户表示 project_context_user_rep
    • 获取投影后的实体级上下文表示 project_entity_context_text_reps
  • 调用评论模块
    • self.reviewModel.get_project_review_rep(batch, mode)
    • 获取评论模块生成的用户表示 project_review_user_rep
    • 获取投影后的实体级评论表示 proj_entities_review_rep
  • 输出
    1. 投影后的知识图谱用户表示 project_kg_user_rep
    2. 投影后的上下文用户表示 project_context_user_rep
    3. 投影后的评论用户表示 project_review_user_rep
    4. 投影后的知识图谱实体表示 project_entity_kg_reps
    5. 投影后的上下文实体表示 project_entity_context_text_reps
    6. 投影后的评论实体表示 proj_entities_review_rep
    7. 去重后的实体 ID 列表 duplicate_removal_ekg_ids
    8. 去重后的对话 ID 列表 duplicate_removal_ekg_conv_ids
3. 获取用户表示 (get_user_repget_kg_user_rep)
  • get_user_rep
    • 调用 get_kg_user_rep 方法,获取知识图谱模块生成的用户表示和实体嵌入,用于后续的推荐任务。
  • get_kg_user_rep
    • 调用知识图谱模块的 get_kg_rep 方法,获取用户表示和实体嵌入。
    • 返回用户表示和实体嵌入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值