推荐系统结合知识图谱简单总结

2024-06-21 07:18

本文主要是介绍推荐系统结合知识图谱简单总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对近几年推荐系统(Recommendation System)领域结合Knowledge Graph Embedding (知识图谱表示学习) 或者 Network Embedding(网络表示)的几篇论文做了极简介绍。 首先对简单介绍推荐系统,之后整理了几篇结合知识表示的论文。

推荐系统简介

一句话来介绍的话,就是通过分析历史数据,来给用户 推荐 可能会喜欢/购买的商品, 这里面的核心就是用户 (User) 和 商品 (Item)。 更进一步,推荐系统的关键有下面三部分:

  • 用户偏好建模:User Preference
  • 商品特征建模: Item Feature
  • 交互: Interaction

在RS中,具体的问题有多种,这篇笔记暂时侧重于Click-Through-Rate(点击预测) 问题,即根据用户历史点击/购买的Item列表,来预测 是否会点击/购买当前item,因此不考虑user的一些属性因素的话,本质就是判断历史item集合与当前新的item的相似度。

因此item的建模比较关键,在推荐系统中,目前不少工作开始融合一些结构信息来提高性能与解释性,至于如何建模结构,个人理解已有工作大概可以分为两种类型:

  • 结合知识图谱(Knowledge Graph)
  • 结合异质信息网络 (Heterogenerous Network)

本篇笔记主要集中在推荐系统结合知识图谱的几篇工作做个非常简单的总结,后续如时间允许,会将这一系列补全。

论文

CKE

Zhang F, Yuan N J, Lian D, et al. Collaborative knowledge base embedding for recommender systems[C]// KDD, 2016: 353-362.

问题:给用户推荐 一个商品列表, 评价指标是使用Map@K: Recall@K 。

总览

使用item各种外部辅助信息来融合到CF中, 包含:

- 结构信息: 异质结构信息(知识图谱),如 (演员-》出演-电影)

- 文本信息: item的文本描述,如电影的文字简介。

- 图片信息: item的图片,如电影海报 其中编码方式: - 结构信息: TransE/R - 文本信息/图片信息: SDAE(堆叠自动编码)

得到关于item的三种Embedding,与CF的latent factor 加起来,得到item最终的embedding 用户:仅仅有CF的latent factor.

得到item和user的Embedding之后, loss则使用pair-wise 的rankinig loss. 此外需要注意的是,CF过程中 user/item的交互是通过评分矩阵来的, 这里仅仅使用了Postive的评分信息(不小于3)。

评价

  • 局限性稍微大,需要大量的知识图谱中的额外信息,在实际的推荐中不易获得。
  • 融合方法略微简略粗暴,直接使用向量相加

DKN

Wang H, Zhang F, Xie X, et al. Dkn: Deep knowledge-aware network for news recommendation[C]//WWW, 2018: 1835-1844.

本篇文章侧重于新闻推荐场景,将KG Embedding结合到CTR中(预训练的方式), 基本结合用户点击的历史新闻纪录,来判断是否会点击新的新闻。 本质上相当与 判断 历史新闻集合与新的新闻的相似度。

动机如下图,通过提取新闻标题中的实体,接着通过知识图谱来传递相关其他新闻,如下图:

下面介绍模型的主要部分。

Multi Channel CNN

类似RGB的3通道: 作为CNN的输入(文本为新闻title)

- word embedding: 词的word embedding

- entity emebdding: KG Embedding得到的 entity embedding. 对于非实体的词,直接补全为0即可.

- entity context embedding: 对于实体词,其在知识图谱中的一阶邻居实体平均embedding作为补充信息 组成三通道作为cnn的输入

User-Candidate News Attention

  • Attention计算:将u点击的新闻与候选新闻embedding进行连接,输入到DNN
    • Query Vector: 候选新闻的标题特征
    • Key/Value:用户点击的所有历史新闻的标题特征
    • 加权求得用户的点击偏好

  • 是否点击二分类:aggreate得到user embedding 与 候选新闻进行 相似度计算,这里还是使用dnn

总结

本篇文章更加侧重于对短文本的建模,三通道CNN那里很有技巧性,可以借鉴到其他领域。此外attention的计算方法(target item 为query,history items 为 key) 应用也比较广泛。

RippleNet

Wang H, Zhang F, Wang J, et al. Ripplenet: Propagating user preferences on the knowledge graph for recommender systems[C]//CIKM, 2018: 417-426.

RippleNet: 将知识图谱作为额外信息,融入到CTR/Top-K推荐

动机

考虑到水波(Ripple)的传播,以user感兴趣的item为seed,在商品知识图谱上向外一圈一圈的扩散到其他的item,这个过程称之为偏好传播(Preference Propagation).

该模型认为外层的item同样属于用户的潜在偏好, 因此在刻画user时候,需要将其考虑进去,而不能仅仅使用观测到的items去表示user偏好。

KG结合RS两种思路

  • Embedding:item以及属性构建知识图谱,然后利用KG Embedding,计算item 的Embedding.
  • Path-Based: 将user-item以及属性构建异质信息网络(HIN), 然后利用HIN相关的算法建模(Metapath)

一般情况,KG 只能考虑item,而HIN可以考虑user+item. 下面简要介绍下模型部分。

模型介绍

  • 输入: 一个user u 和一个候选的 item i
  • 输出: user会点击item的概率
  • 构建 与 u 先关的 k-hop的 item 集合(知识图谱上以初始的item set向外扩展). [这些item可以作为user的偏好信息)
  • 根据embedding 向量内积,计算候选item i 与 每一层hop上的head item的归一化相似度
  • 根据相似度,对尾实体 items 加权求和,作为这一层hop的输出 (本质上,属于Attention,其中Q=候选item i, K=Head Item, V= Tail Item)
  • 重复上述过程k次
  • 将所有k hop的输出向量相加,作为user的Embedding, 与 item的Embedding 内积计算最终的相似度

总结

这篇文章动机非常直观,因此可解释性非常强,模型的构建也充满技巧,比如采样等,很多地方值的挖掘。


下面简单介绍下结合网络表示或者异质信息网络的的两篇文章。

NERM

Zhao W X, Huang J, Wen J R. Learning distributed representations for recommender systems with a network embedding approach[C]//AIRS, 2016: 224-236.

将推荐的user,item以及属性作为graph中的节点,构造网络。 之后使用network embedding的方法来学习节点特征向量, 利用相似度来做TopK推荐.

构建Graph

user, item ,feature 作为不同类型的节点, 构建网络: - user-item的二分网络,边为user购买或者其它行为item - user-item-tag的三分网络: 将item的tag属性加进来,也作为节点。

学习Embedding

本文完全使用LINE的一阶表示: 即对于a pair nodes (u, v) 如果 二者之间存在边,则二者的向量内积较大

推荐:

直接使用上述计算得到的user-item或者属性的 embedding, 利用内积来计算相似度,根据相似度排序来计算TopK

总览

完全使用Network Embedding的方法来做Top-N推荐,属于尝试性工作, 对比工作也很单薄。

CDNE

Gao L, Yang H, Wu J, et al. Recommendation with multi-source heterogeneous information[J]. IJCAI 2018.

问题与CKE(fzzhang)一致:为user推荐Top N可能感兴趣的item. 利用Network Embedding的方法建模辅助信息,继而结合CF: (Network Embedding 模型基本完全参考:Tri-Party Deep Network Representation)

融合辅助信息

为了更好的建模item, 结合辅助信息: - item的文本内容(word sequence) - item的标签tag(也是word) - item 与 item 的连接结构信息

Deep Walk/Skip Gram 建模辅助信息

  • 模仿skip gram, 中心词预测上下文的词。这里用中心item来预测在文本内容中word,以及用item的tag来预测word
  • 利用deep walk 来学习结构表示(本质上也是skip gram) 这与Tri-Party Deep Network Representation 完全一样。

这样可以学到节点的Embedding, word 的Embedding, tag的Embedding。 其中节点的Embedding用于下面的CF。

结合CF

同CKE, 将上述节点的Embedding 与CF的latent vectors 直接相加,作为item的表示向量, 用户的向量还是CF的latent vectors. 最后利用Min(R-UV) 来优化 (这里区别于CKE的pair wise ranking)

数据: 用的两份CiteULike的数据,其中 item的节点并非使用paper的reference而是根据如果有多于4个相同作者的两篇文章,那么两篇文章之间加一条边。

简要

  • 方法与动机基本类似与CKE, 不过并没有对比CKE。
  • 相当于CKE + Tri-DNR的结合

这篇关于推荐系统结合知识图谱简单总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080552

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除