经典协同过滤
假设行为相似的用户有着相似的偏好,根据大量用户user的行为反馈识别用户群体的感兴趣的内容item并推荐,通常使用用户内容矩阵(User-Item Interaction Matrix)来表示。
显式反馈(打分)
能够明确反应出用户对内容的喜好程度,但数据获取难度高,数据量小。
隐式反馈(点击)
数据获取难度低,但点击不意味用户一定喜欢,需要大量数据支撑。
算法思想
- 根据已有的用户历史行为数据,计算U4与其他用户的相似度\(\mathbf{sim_{u4}}\);
- 预测U4对i1的喜欢程度,是将U4与其他用户的相似度\(\mathbf{sim_{u4}}\)作为权重,计算其它用户对i1的喜欢程度的加权平均;
存在的问题
- 矩阵稀疏:用非常少的数据预测,非常容易过拟合;
- 冷启动:因为新用户或新内容没有历史数据,故无法针对新用户或新产品进行推荐;
知识图谱辅助的推荐系统
王鸿伟 博士后 斯坦福大学
主页:https://hongweiw.net
源码:https://github.com/hwwang55
针对协同过滤因为单纯依靠用户历史数据而存在的问题,需要考虑引入领域知识增强推荐系统+领域知识举例:
- 关系网络:如用户的社交网络;
- 属性信息:用户、产品的属性;
- 多模态:比如文本、图片、音视频等;
- 上下文:比如用户点击时的时间、地点、网络等状态;
知识图谱模型
知识图谱是一种有向异构图,其三元组结构(head、relation、tail)组成的实体及其关系,可以提供辅助信息。
上面的三元组例子中,Forrest Gump是要推荐的内容,其它信息都是知识图谱中查到的这条内容的辅助信息。
Q1:知识图谱能做什么?
案例一:根据知识图谱关联的同staff信息推荐相似电影
案例二:根据关键词关联关系推荐相似新闻
知识图谱可以帮助推荐系统引入某领域内的知识,根据领域知识联想相关信息,将这些信息重组,检索得到类似的新闻。
Q2:如何构建知识图谱?
图向量模型
图向量模型又称为图嵌入模型(Knowledge Graph Embedding),其目标是学习得到每个实体和关系的低维表征向量(类似词嵌入模型)。
Translational Distance Model
将关系视为从Head到Tail的翻译过程。
- TransE:将关系视为从\(\mathbf h\)到\(\mathbf t\)的翻译过程,即 \(\mathbf h + \mathbf r\) 与 \(\mathbf t\) 的距离:\(f_r(h,t)=\left\| \mathbf h + \mathbf r - \mathbf t \right\|_2^2\) 应该足够小。
- TransH:将\(\mathbf h\) 和 \(\mathbf t\) 投影到 \(\mathbf r\) 得到 \(\mathbf h_\perp\) 和 \(\mathbf t_\perp\) 后计算距离
- TransR:将\(\mathbf h\) 和 \(\mathbf t\) 映射到特定的关系空间得到 \(\mathbf h_r\) 和 \(\mathbf t_r\) 后计算距离
问题定义
我们有:
- 用户
- 内容
- 用户与内容存在关联(点击、订阅等)
- 领域知识图谱
目标:实现一个能够预测用户\(u\)对内容\(v\)的点击概率\(\hat y_{uv}\),要求结合用户行为与领域知识。
解决方法
Embedding-based Method
用图向量的方法处理知识图谱,然后将4种向量经过某种模型实现融合。
Deep Knowledge-aware Networks
H.Wang 于 2018 发表在WWW,用于新闻推荐。
知识蒸馏
知识蒸馏(knowledge distillation),大致步骤如下:
- 从新闻语料提取实体;
- 从知识图谱中提取出这些实体相关的子图;
- 计算子图的图向量,从而得到实体的向量表达;
上下文向量
将实体向外扩展一跳的邻居实体嵌入求平均得到上下文。
Kim CNN
计算一句话的向量
Knowledge-Aware CNN
将Kim CNN扩展的输入矩阵扩展为“3通道”:
- 词向量(word embedding)
- 实体向量(entity embedding):如果某个词对应知识图谱的一个实体,就能够获取该实体对应的向量,否则用0补充;
- 上下文向量(context embedding):如果某个词对应知识图谱的一个实体,就能够获取该实体的上下文向量,否则用0补充;
给一段文字描述,通过Knowledge-aware CNN模型就可以学到新闻标题的embedding。
Attention-Based User Interest Extraction
任务:给定用户历史上点击过的内容(以下称历史内容)以及一条新的待推荐内容(以下称候选内容),判断用户是否对这条候选内容感兴趣;
计算流程如下:
-
计算每条内容的embedding
-
用Attention Network计算历史内容与候选内容的重要程度
- 拼接候选内容与历史内容
- 通过一个DNN计算得到权重系数
-
用权重系数对每条历史内容加权得到用户的向量表达(user embedding)
-
拼接候选内容与用户的向量表达
-
通过另一个DNN得到用户想看该候选内容的概率
数据集:Bing News
平均每个标题中得到的实体个数有3.7个,质量算比较高的。
Multi-Task Feature Learning for KG-Enhanced RS
H. Wang 于2019年发表在WWW
模型框架
- 左边用来预测用户点击某条内容的概率
- 右边是知识图谱的向量表达
- 两边存在某种关系,比如待推荐的内容可能就是知识图谱的某个实体
- 因此这里用cross&compress units建立内容与实体的关联
Cross&Compress Unit
Structure-based Method
整合图结构信息
RippleNet: Propagating User Preference in KGs
H. Wang 于2018发表在CIKM
假设:用户对某条内容感兴趣,同时也对该内容在周围的实体感兴趣。
模型框架
输入:用户和内容
输出:用户对内容感兴趣的概率
计算过程:
- 获取一个用户点击过的内容节点\(\mathbf V_u\)(对应上图知识图谱发亮的两个节点)作为起点;
- 从内容节点出发,沿着知识图谱的关系向外传播,计算某个内容节点与其1阶邻居节点的相关概率\(p_i\);
- 对周边节点加权平均,计算用户对其1阶邻居节点的兴趣向量;
- 重复2、3步,得到用户对所有内容的兴趣向量;
- 将兴趣向量求和作为用户兴趣向量\(\mathbf u\);
- 对用户兴趣向量\(\mathbf u\)和候选内容\(\mathbf v\)求内积,得到用户对候选内容的点击概率;
优化目标:给定知识图谱\(\mathcal{G}\)和用户-内容矩阵\(\mathcal{M}\),优化推荐模型参数\(\Theta\):
贝叶斯定理
\[P(\Theta | \mathcal{G}, \mathcal{M}) = \frac{P(\Theta, \mathcal{G}, \mathcal{M})}{P(\mathcal{G}, \mathcal{M})} \propto P(\Theta) P(\mathcal G | \Theta) P(\mathcal M | \mathcal G, \Theta) \]其中,设定先验为高斯分布:
\[P(\Theta) = \mathcal N (\mathbf 0, \lambda_1^{-1}\mathbf I) \]似然:给定参数\(\Theta\),知识图谱\(\mathcal G\)中每个三元组似然概率(高斯分布)的乘积:
\[P(\mathcal G | \Theta) = \prod_{h,r,t \in \mathcal E \times \mathcal R \times \mathcal E} P\left( (h,r,t) | \Theta \right) \\ = \prod_{(h,r,t \in \mathcal E \times \mathcal R \times \mathcal E)} \mathcal N \left( I_{h,r,t} -\mathbf h^ \mathsf{T} \mathbf {Rt}, \lambda_2^{-1} \right) \]似然:给定参数\(\Theta\)、知识图谱\(\mathcal G\),计算用户-内容矩阵\(\mathcal M\)的似然概率(伯努利分布):
\[P(\mathcal G | \Theta) P(\mathcal M | \mathcal G, \Theta) = \prod_{(u,v) \in \mathcal M} \sigma (u^{\mathsf T}v )^{m_{uv}} \left( 1 - \sigma (u^{\mathsf T}v )^{1-m_{uv}} \right) \]损失函数:
\[\mathcal L = - \log \left( P(\Theta) P(\mathcal G | \Theta) P(\mathcal M | \mathcal G, \Theta) \right) \]
Knowledge Graph Convolutional Networks
"Knowledge Graph Convolutional Networks for Recommender Systems" H. Wang 于2019年发表在WWW
"Knowldge-aware Graph Neural Networks with Label Smoothness regularization for Recommender syustems" H. Wang 于2019年发表在KDD
Relation Scoring Function
- 将知识图谱用带权图表示(比如邻接矩阵);
- 知识图谱中的边没有显式的权重;
- 引入关系打分函数\(S_u(r)=\mathbf u^\mathsf T \mathbf r\):计算给定用户\(u\)对外关系的重要程度,得到用户\(u\)-关系的邻接矩阵\(\mathcal A_u\);
Lay-wise Forward Propagation
使用GCN计算每个实体的表征:
\(\mathbf W_l\) 是需要学习的参数矩阵
最后用sigmoid函数归一化,得到\(H_{l+1}\)表示下一层的实体表达矩阵。
预测用户\(u\)喜欢内容\(v\)的概率:
\[\hat y_{uv} = f(\mathbf u, \mathbf v_u) \]- \(\mathbf u\) -- 用户向量;
- \(\mathbf v_u\) -- KGNN最后一层的实体向量;
- \(f\) -- MLP, 内积等等。
方法对比
性能
KGCN (2019.08) > MKR (2019.05) > RippleNet (2018.10) > DKN (2018.04)
实际性能取决于不同的数据集;
可扩展性
Embedding-based Method > Structure-based Method: KG一般变动比较小,其 embedding 是可复用的,但如果要新增某些节点或关系,图对结构的改动就要重新进行端到端的训练。
可解释性
Structure-based Method > Embedding-based Method
显然图结构比向量更加直观。
总结
- 知识图谱可作为推荐系统新的辅助信息(new type of side information)
- 用于解决数据稀疏以及冷启动问题;
- 提升准确性、多样性以及可解释性;
- Embedding-based methods
- DKN:用于新闻推荐;
- MKR:融合RS与KGE的多任务学习;
- Structure-based Methods
- RippleNet:在KG上传播用户的喜好;
- KGCN:在KG上使用GCN传播相邻实体信息;
- 与阿里 DIN 的比较:DIN使用了attention-based method,而这里引入了KG;