【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

论文题目:Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

论文来源:KDD 2019

论文链接:http://www.shichuan.org/doc/67.pdf

代码链接:https://github.com/googlebaba/KDD2019-MEIRec

关键词:推荐系统, 意图推荐, HIN, GNN



1 摘要

本文是通过学习到节点的表示,解决意图推荐问题

什么是意图推荐:意图推荐在电商领域应用广泛,是指在用户没有输入的前提下,根据用户的历史行为为用户做推荐。淘宝的搜索栏在你没有输入的时候,会有一些灰色的字,这就是意图推荐。

作者提出,将意图推荐中的复杂对象和丰富的交互信息建模为HIN。为了充分利用HIN中丰富的结构信息,作者设计了metapath-guided的异质GNN,以学习意图推荐中节点的嵌入表示,提出了Metapath-guided Embedding method for Intent Recommendation (MEIRec)模型。

作者在真实数据集上进行了线下实验,并且在淘宝上进行了线上实验,证明了MEIRec的有效性。


2 引言

什么是意图推荐?意图推荐有什么意义?

推荐系统已成为电商平台的一项基本业务,近两年来意图推荐开始兴起。意图推荐通过分析用户的历史行为,揣测出用户的搜索意图,用几个单词概括,在App搜索栏自动地为用户预先输入搜索词。

意图推荐节省了用户输入的时间,当用户不知道用什么词描述想要搜索的商品时,意图推荐也有助于帮助用户找到他们想要的商品。

图1就是淘宝上进行意图推荐的例子,搜索栏里就是意图推荐的结果,点击搜索按钮就会自动跳转到相关商品的页面。

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

什么是历史数据?

历史数据可以粗略分为两类

  1. 属性数据:节点的属性信息,比如用户的个人信息、商品的属性信息;
  2. 交互数据:由users, items, queries组成的三元组数据,例如用户点击(item)日志、用户搜索(query)日志、query guide(item)日志。

本文的意图推荐和传统的查询推荐的不同之处

  1. 根据用户的行为数据做推荐,而不是做与之前类似的查询,也就是说推荐的query可能不是先前的query;
  2. 不需要用户提供任何输入信息。

本文的意图推荐与商品推荐的不同之处

  1. 商品推荐考虑的是users和items的二元交互信息,而本文的意图推荐考虑的是三元组的交互关系,例如 users, items, queries。
  2. 和静态的推荐不同,意图是不断动态变化的。

现有的意图推荐方法

淘宝和亚马逊通常采用人工抽取特征的方法,然后将这些特征输入到例如GBDT, XG-Boost的分类器中。

这些方法非常依赖于专业的领域知识,而且耗费人工。而且现有的方法仅仅使用静态的users, queries的信息和属性信息,不能充分利用实体间丰富的交互信息。


HIN的引入

将丰富的交互信息构建成HIN,如图2(a)所示,HIN可以清晰地刻画出节点和它们之间的各种关系,例如“用户点击商品”、“用户搜索商品”、“查询搜索出商品”(query guide item)。

也有一些方法使用HIN进行推荐,基于元路径挖掘出users和items的交互信息,但是这些方法不能处理三元组的交互信息。

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

作者提出

作者提出MEIRec模型用于意图推荐,使用异质的GNN学习users和queries的结构特征表示。

作者还使用了metapath-guided的邻居,以聚合丰富的邻居信息。另外,针对邻居的不同类型的信息,设计不同的聚合函数。

为了能够处理大规模数据,减少参数量,作者设计了统一的嵌入机制,让users和querise映射到term的嵌入空间,users和queries都是由多个term组成的。4.2对term进行了解释

同时使用 静态的特征 以及 从交互信息中学习到的users和queries的嵌入表示,构建预测模型以用于意图推荐。


本文的贡献

  1. 提出意图推荐问题,即根据用户的历史行为对其进行自动的意图推荐。
  2. 提出基于GNN的模型MEIRec,将意图推荐系统建模成HIN,利用元路径指导下的邻居的丰富信息。提出统一的嵌入机制以减少参数。
  3. 线下实验超过baselines,淘宝线上实验也证明了模型的有效性。

3 一些定义

(1)意图推荐

给定集合 <U,I,Q,W,A,B><U,I,Q,W,A,B>,其中 U={u1,...,up}U={\{u_1,...,u_p\}} 表示pp个用户, I={i1,...,iq}I={\{i_1,...,i_q\}} 表示qq个商品,Q={q1,...,qr}Q={\{q_1,...,q_r\}} 表示rr个请求,W={w1,...,wn}W={\{w_1,...,w_n\}} 表示nntermsAA 表示节点的属性,BB 表示不同类的节点间的交互关系。

本文中的一个请求qq或者是一个商品ii,都是有多个terms ww组成的。

意图推荐的目的是为user推荐最贴合意图的query。

(2)元路径指导的邻居(Metapath-guided Neighbors)

从给定的节点oo出发,按照元路径pp的模式访问到的邻居节点。定义第ii步访问到的邻居为 Npi(o)N^i_p(o)Np0(o)N^0_p(o)就是oo节点。

图2(a)所示,给定元路径"User - Item - Query(UIQ)"和user u2u_2,可以得到metapath-guided neighbors NUIQ1(u2)={i1,i2},NUIQ2(u2)={q1,q2,q3}N^1_{UIQ}(u_2)={\{i_1, i_2\}}, N^2_{UIQ}(u_2)={\{q_1, q_2, q_3\}}。这样,节点u2u_2在元路径指导下的所有邻居为:NUIQ(u2)={NUIQ0(u2),NUIQ1(u2),NUIQ2(u2)}={u2,i1,i2,q1,q2,q3}N_{UIQ}(u_2)={\{N^0_{UIQ}(u_2), N^1_{UIQ}(u_2), N^2_{UIQ}(u_2)\}}={\{u_2, i_1, i_2, q_1, q_2, q_3\}}


4 模型

4.1 模型概览

MEIRec的基本思想是设计一个异质的GNN以学习到users和queries的丰富表示。模型在元路径的指导下选择每一步的邻居节点。由于节点类型多样,为了减少参数,提出了统一的嵌入方法(uniform term embedding)。注意,queries和items的标题(titles)都是由一定数量的terms组成的

图3展示了MEIRec的整体框架。首先,将三元组<user, item, query>作为输入。接着,使用统一的term embedding为items和queries生成初始的嵌入。然后,聚合元路径指导得到的邻居信息,通过异质的GNN学习到users和queries的嵌入。再分别把基于不同元路径得到的users和queries的嵌入融合。最后,同时利用融合后的users, queries的嵌入和它们的静态特征,预测user会搜索特定query的概率。接下来将对模型详细介绍。

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

4.2 Uniform Term Embedding

之前的基于神经网络的推荐方法,为每个user/query都提供一个唯一的嵌入表示。但是在意图推荐场景下,有数以十亿的users和queries,若使用传统的协同过滤方法或者基于神经网络的方法处理所有的users和queries,参数的规模将会非常非常大。

作者注意到,queries和items的标题都是由多个term组成的,而且term的数量并不是很多。所以,使用一定数量的term的嵌入表示作为queries和items的嵌入表示,这样就只需要学习term的嵌入就可以了,不需要学习所有节点的嵌入,参数量就大大减少了。而且之前没有被搜索过的query也可以通过这些term表示。

个人感觉如果把query, item看成NLP中的单个词语的话,term就可以看成是义原。

首先,要从queries和items的标题中抽取出terms,组成词典 W={w1,w2,...,wn1,wn}W={\{w_1,w_2,...,w_{n-1},w_n\}}

图3(a)-(b)所示,query "Hand Bag"由"Hand"和"Bag"两个term组成,item “LV Hand Bag"由"LV”, “Hand”, "Bag"三个term组成。

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

图3(b)中的q2,i2q_2, i_2为例,q2q_2{w1,wn}{\{w_1, w_n\}}组成,i2i_2{w1,wn1,wn}{\{w_1, w_{n-1}, w_n\}}组成。使用multi-hot编码来表示q2,i2q_2, i_2

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

term embedding映射函数将所有term映射成了dd维的向量表示ewie_{w_i}。在look-up层,queries/items被表示成term embedding的组合,使用函数g()g(\cdot)(文章中使用的是取平均)聚合这些term embeddings就可以得到queries/items的embeddings

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

这样就将queries, items的嵌入表示统一到了term的嵌入空间中。而且可以同时利用所有的节点嵌入来优化term embeddings,这样就可以得到包含user-query, user-item交互信息的term embeddings


4.3 Metapath-guided Heterogeneous Graph Neural Network

受GCN的启发,提出元路径指导的异质GNN。利用元路径来获得在游走过程中,从初始节点出发,在不同步下的邻居节点。通过聚合在不同元路径下得到的邻居信息,得到uers, queries的嵌入。

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

图4就描述了基于多个元路径(UIQ, UQI)得到u2u_2的嵌入U2U_2的过程。

(1)首先根据元路径UIQ聚合邻居信息:先使用统一的term embedding获得queries的初始嵌入。

(2)然后根据元路径UIQ得到邻居节点 NUIQ1(u2)={i1,i2},NUIQ2(u2)={q1,q2,q3}N^1_{UIQ}(u_2)={\{i_1, i_2\}}, N^2_{UIQ}(u_2)={\{q_1, q_2, q_3\}}

(3)接着,聚合二阶邻居的嵌入来得到一阶邻居的嵌入。也就是聚合q1q_1的嵌入得到i1i_1的嵌入,聚合q2,q3q_2, q_3的嵌入得到i2i_2的嵌入。

(4)最后,聚合一阶邻居{i1,i2}{\{i_1, i_2\}}的嵌入得到目标节点u2u_2的嵌入U2UIQU^{UIQ}_2

(5)按照上述方法得到在多条元路径指导下的u2u_2嵌入,然后再将它们聚合成user u2u_2的最终嵌入表示U2U_2


4.4 User Modeling

本小节介绍MEIRec建模user嵌入的细节。

基于元路径UIQUIQ得到的节点uiu_i的二阶邻居节点集合{q1,q2,...}{\{q_1,q_2,...\}},聚合它们的嵌入表示,得到uiu_i的一阶邻居节点集合{i1,i2,...}{\{i_1,i_2,...\}} 的嵌入表示。例如item iji_j的嵌入 IjUIQI^{UIQ}_j表示为:

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

其中g()g(\cdot)是聚合函数,针对不同类型的邻居,使用不同的聚合韩式,上式使用的是求平均值。queries集合{q1,q2,...}{\{q_1,q_2,...\}}是item iji_j的邻居。

接着聚合uiu_i的一阶邻居节点集合{i1,i2,...}{\{i_1,i_2,...\}} ,得到uiu_i的嵌入表示:

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

注意,由于users不同时间和不同的queries, items有交互(带有时间戳),所以users邻居节点(例如 items, queries)被建模成序列

RNN更适合处理序列数据,所以MEIRec使用LSTM动态建模users的邻居节点,也就是说(4)式中的g()g(\cdot)指的是LSTM。

最后,聚合基于不同元路径{p1,p2,...,pk}{\{p_1, p_2,..., p_k\}}(均以user节点为起始点)的user嵌入,得到最终的混合的user嵌入表示:

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

4.5 Query Modeling

像user信息聚合一样,对于query也是同样的操作。基于不同元路径{p1,p2,...,pk}{\{p_1, p_2,..., p_k\}}(均以query节点为起始点),得到混合后的query嵌入QiQ_i

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

注意,queries的邻居节点(例如 items, users)没有时间顺序,所以使用CNN为queries的邻居节点动态建模,聚合函数g()g(\cdot)指的是CNN


4.6 优化目标

首先计算出静态特征,包括users, queries的属性特征和交互信息中的静态特征。然后将这些特征输入到多层感知机(MLP),得到静态特征SijS_{ij}

接着,将Ui,Qj,SijU_i, Q_j, S_{ij}作为输入,对于user uiu_i预测其搜素query qjq_j的概率为y^ij\hat{y}_{ij}

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

其中,f()f(\cdot)就是MLP,\oplus是向量拼接操作。

采样正样本和负样本,yij{0,1}y_{ij}\in {\{0, 1\}}表示真实标签,最终的损失函数如下:

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

5 实验

5.1 离线实验

数据集

从淘宝客户端收集了真实的5天的交互数据

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

对比方法

  • LR:使用静态特征的线性模型
  • DNN:输入同LR,3层MLP
  • GBDT:基于树的模型,输入静态特征
  • LR/DNN/GBDT+DW:输入users, queires的静态特征,以及DeepWalk得到的预训练的带有结构信息的embedding
  • LR/DNN/GBDT+MP:同上,区别在于使用MeataPath2vec得到预训练的embedding
  • NeuMF:top-N推荐的state-of-the-art,输入结构信息(users, queries间的交互信息),不能输入静态特征

实验结果

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

文章中还进行实验研究了不同聚合函数的影响、不同元路径的影响、不同数目的邻居的影响。


5.2 在线实验

在淘宝移动客户端上进行了在线实验

【论文解读 KDD 2019 | MEIRec】Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation

6 总结

本文研究的是电商领域中的意图推荐,并且成功运用到了淘宝App中。

意图推荐指的是通过分析用户的历史行为,揣测用户的搜索意图,在搜索栏自动生成搜索词(query),节省了打字的时间,同时也为不知道如何描述想搜索的商品的用户提供了便利。

模型思路清晰,首先建立起user, item, query为节点的HIN,然后按照预先定义的元路径获得目标节点的多阶邻居节点,将其按照GNN迭代的方式逐层聚合,得到目标节点的嵌入表示。然后再将不同元路径下得到的user, query的嵌入表示据聚合,和节点的静态特征一起输入进多层感知机中,预测出user发出该query的概率。最后优化目标函数并调参,以更准确地进行意图推荐。

有两点需要注意:

(1)由于节点数目非常多,数以十亿,为每个节点都学习到唯一的嵌入表示的话,参数量是非常巨大的。所以作者提出了term embedding的概念,即query和item的题目都是由几个term组成的,只为每个term学习到唯一的嵌入表示,再将其组合就可以得到对应的query和item的嵌入表示了,这就大大减少了参数量,增加了应用落地的可行性。

(2)对于不同类型的节点的邻居,采用的聚合函数是不同的。例如对user来说,用户的行为是有时序性的特征的,所以它的邻居节点就被建模成了序列,自然用LSTM这种RNN的方法聚合效果更好。

而对于query来说,它的邻居节点没有顺序性,文章中显示采用CNN聚合效果更好。


元路径需要提前定义好,不过对于电商平台来说,节点类别和边类别没有那么多,例如文章中节点一共有3中,边有3种。就算人为设定,工作量也不是很大。

相关文章: