论文题目: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就是淘宝上进行意图推荐的例子,搜索栏里就是意图推荐的结果,点击搜索按钮就会自动跳转到相关商品的页面。
什么是历史数据?
历史数据可以粗略分为两类
- 属性数据:节点的属性信息,比如用户的个人信息、商品的属性信息;
- 交互数据:由users, items, queries组成的三元组数据,例如用户点击(item)日志、用户搜索(query)日志、query guide(item)日志。
本文的意图推荐和传统的查询推荐的不同之处
- 根据用户的行为数据做推荐,而不是做与之前类似的查询,也就是说推荐的query可能不是先前的query;
- 不需要用户提供任何输入信息。
本文的意图推荐与商品推荐的不同之处
- 商品推荐考虑的是users和items的二元交互信息,而本文的意图推荐考虑的是三元组的交互关系,例如 users, items, queries。
- 和静态的推荐不同,意图是不断动态变化的。
现有的意图推荐方法
淘宝和亚马逊通常采用人工抽取特征的方法,然后将这些特征输入到例如GBDT, XG-Boost的分类器中。
这些方法非常依赖于专业的领域知识,而且耗费人工。而且现有的方法仅仅使用静态的users, queries的信息和属性信息,不能充分利用实体间丰富的交互信息。
HIN的引入
将丰富的交互信息构建成HIN,如图2(a)所示,HIN可以清晰地刻画出节点和它们之间的各种关系,例如“用户点击商品”、“用户搜索商品”、“查询搜索出商品”(query guide item)。
也有一些方法使用HIN进行推荐,基于元路径挖掘出users和items的交互信息,但是这些方法不能处理三元组的交互信息。
作者提出
作者提出MEIRec模型用于意图推荐,使用异质的GNN学习users和queries的结构特征表示。
作者还使用了metapath-guided的邻居,以聚合丰富的邻居信息。另外,针对邻居的不同类型的信息,设计不同的聚合函数。
为了能够处理大规模数据,减少参数量,作者设计了统一的嵌入机制,让users和querise映射到term的嵌入空间,users和queries都是由多个term组成的。4.2对term进行了解释
同时使用 静态的特征 以及 从交互信息中学习到的users和queries的嵌入表示,构建预测模型以用于意图推荐。
本文的贡献
- 提出意图推荐问题,即根据用户的历史行为对其进行自动的意图推荐。
- 提出基于GNN的模型MEIRec,将意图推荐系统建模成HIN,利用元路径指导下的邻居的丰富信息。提出统一的嵌入机制以减少参数。
- 线下实验超过baselines,淘宝线上实验也证明了模型的有效性。
3 一些定义
(1)意图推荐
给定集合 ,其中 表示个用户, 表示个商品, 表示个请求, 表示个terms, 表示节点的属性, 表示不同类的节点间的交互关系。
本文中的一个请求或者是一个商品,都是有多个terms 组成的。
意图推荐的目的是为user推荐最贴合意图的query。
(2)元路径指导的邻居(Metapath-guided Neighbors)
从给定的节点出发,按照元路径的模式访问到的邻居节点。定义第步访问到的邻居为 ,就是节点。
如图2(a)所示,给定元路径"User - Item - Query(UIQ)"和user ,可以得到metapath-guided neighbors 。这样,节点在元路径指导下的所有邻居为:。
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的概率。接下来将对模型详细介绍。
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,组成词典 。
由图3(a)-(b)所示,query "Hand Bag"由"Hand"和"Bag"两个term组成,item “LV Hand Bag"由"LV”, “Hand”, "Bag"三个term组成。
以图3(b)中的为例,由组成,由组成。使用multi-hot编码来表示:
term embedding映射函数将所有term映射成了维的向量表示。在look-up层,queries/items被表示成term embedding的组合,使用函数(文章中使用的是取平均)聚合这些term embeddings就可以得到queries/items的embeddings:
这样就将queries, items的嵌入表示统一到了term的嵌入空间中。而且可以同时利用所有的节点嵌入来优化term embeddings,这样就可以得到包含user-query, user-item交互信息的term embeddings。
4.3 Metapath-guided Heterogeneous Graph Neural Network
受GCN的启发,提出元路径指导的异质GNN。利用元路径来获得在游走过程中,从初始节点出发,在不同步下的邻居节点。通过聚合在不同元路径下得到的邻居信息,得到uers, queries的嵌入。
图4就描述了基于多个元路径(UIQ, UQI)得到的嵌入的过程。
(1)首先根据元路径UIQ聚合邻居信息:先使用统一的term embedding获得queries的初始嵌入。
(2)然后根据元路径UIQ得到邻居节点 。
(3)接着,聚合二阶邻居的嵌入来得到一阶邻居的嵌入。也就是聚合的嵌入得到的嵌入,聚合的嵌入得到的嵌入。
(4)最后,聚合一阶邻居的嵌入得到目标节点的嵌入。
(5)按照上述方法得到在多条元路径指导下的嵌入,然后再将它们聚合成user 的最终嵌入表示。
4.4 User Modeling
本小节介绍MEIRec建模user嵌入的细节。
基于元路径得到的节点的二阶邻居节点集合,聚合它们的嵌入表示,得到的一阶邻居节点集合 的嵌入表示。例如item 的嵌入 表示为:
其中是聚合函数,针对不同类型的邻居,使用不同的聚合韩式,上式使用的是求平均值。queries集合是item 的邻居。
接着聚合的一阶邻居节点集合 ,得到的嵌入表示:
注意,由于users不同时间和不同的queries, items有交互(带有时间戳),所以users的邻居节点(例如 items, queries)被建模成序列。
RNN更适合处理序列数据,所以MEIRec使用LSTM动态建模users的邻居节点,也就是说(4)式中的指的是LSTM。
最后,聚合基于不同元路径(均以user节点为起始点)的user嵌入,得到最终的混合的user嵌入表示:
4.5 Query Modeling
像user信息聚合一样,对于query也是同样的操作。基于不同元路径(均以query节点为起始点),得到混合后的query嵌入:
注意,queries的邻居节点(例如 items, users)没有时间顺序,所以使用CNN为queries的邻居节点动态建模,聚合函数指的是CNN。
4.6 优化目标
首先计算出静态特征,包括users, queries的属性特征和交互信息中的静态特征。然后将这些特征输入到多层感知机(MLP),得到静态特征。
接着,将作为输入,对于user 预测其搜素query 的概率为。
其中,就是MLP,是向量拼接操作。
采样正样本和负样本,表示真实标签,最终的损失函数如下:
5 实验
5.1 离线实验
数据集:
从淘宝客户端收集了真实的5天的交互数据
对比方法:
- 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间的交互信息),不能输入静态特征
实验结果:
文章中还进行实验研究了不同聚合函数的影响、不同元路径的影响、不同数目的邻居的影响。
5.2 在线实验
在淘宝移动客户端上进行了在线实验
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种。就算人为设定,工作量也不是很大。