论文:
论文地址:https://dl.acm.org/doi/pdf/10.1145/3340531.3411927
论文题目:《TGCN: Tag Graph Convolutional Network for Tag-Aware Recommendation》
前面一篇论文我们提到了微信看一看团队如何用图神经网络的方式通过对videa-videa进行建模,从而学习出优质的tag-embedding,最后在利用这些tag-embedding为每个短视频给不同的用户展示topk个tag。
今天我们同样的来介绍一下华为发表在CIKM上面也是关于tag-recommend的论文,下面就来看看这篇论文跟微信那篇论文有何异同。
一 、背景
跟微信看一看场景不同,华为这篇论文所处的场景是这样:用户可以给浏览的短视频,文章,电影等内容进行打标签的行为,这种打标签的行为不仅能反映出用户的一些个性化偏好,同时也能让对应的浏览内容的特征更加丰富。
不同的用户会对同一个item打上不同的标签,同一个tag也可能被不同的用户解答出不同的意思,比如说“apple”,对于那些数码达人来说,他们对这个tag的理解就是苹果手机,苹果公司等等苹果公司的概念,而对于一般人而言,看到apple想到的自然是水果了。
在这种对item打tag的场景下,这种行为同样是稀疏的,跟前一篇文章所说的一样,除了sparsity外,这种场景下还有着另一个缺点redundancy冗余性和ambiguity模糊性,我们来简单解释下这几个概念:
sparsity:用户对于item进行打标的行为是很少见的,所以具有稀疏性
ambiguity:一个tag有多种不同的意思,所以在使用的时候会带来模糊性
redundancy:由于用户的拼写习惯和表达方式的差异,一些具有不同拼写的标签具有相同的含义,并且表示相似的偏好,比如说“mobile phone” 和 “cellphone”,表示的都是手机。 但是,由于在基于特征的模型中缺少对于这种关系的建模,因此这些同义词标签可能会解释为完全不同的语义,从而导致冗余性。
为了解决这些问题,文中采用了对(u,t,i)三元组进行建模的方法,如上图所示,图中有三类节点,分别是user,tag和item,我们之前所说的apple这个tag被不同的人理解成不同的意思也可以从上面这张图进行直观的理解。对于apple这个标签而言,由于图中存在multi-hot的关系,这个tag连接着i2和i1这两个节点,因为i2跟乔布斯,手机相连接,所以可以清楚的将多义标签解释称一家技术公司。此外,由于“mobile phone” 和 “cellphone”这两个tag在图中也是相近的,所以可以让他们的语义更为接近。所以,这种三元组建模的图可以有效的解决模糊性和冗余性。对于稀疏性而言,multi-hot的多跳聚合信息可以很好的缓解稀疏性。
论文主要解决一下三个问题:
C1:如何在保留所有类型的邻域信息的情况下聚合异构邻居,并考虑邻居的不同影响在异构图建模中是很重要的。user-tag-item图非常复杂,因为每个中心节点可能具有不同数量和类型的邻居。因此,必须考虑各个异类邻居的不同贡献。
C2:一旦表示了不同类型的邻域,如何建模它们之间的要素交互就至关重要。现有的异构图卷积模型仅在信息更新阶段执行基于pooling的操作,而忽略了特征的交互信号。然而,在推荐系统中,有效地建模特征交互是至关重要的。
C3:由于用户打标签是代表用户对商品的偏好的关键因素,因此如何在user-tag-item三元组中捕获这些语义至关重要。user,tag和item之间如此强烈的语义对于推荐出让用户满意的结果可能非常重要。但是,基于GNN的模型的聚合策略忽略了此类语义,导致学习到的embedding不够理想。
二、图的定义和TGCN模型结构
图的定义
节点:user,tag,item三种类型的节点
边:
1. = (,, 1) ,表示的user u对于item i有过交互的行为,边的权值为1
2. = (, ,),表示user u使用tag t对一些item进行打标,w是u使用t的次数,也是边的权值
3. = (, ,),表示item i被打上tag t一共w次,w是边的权值
还有一条自己到自己的权值为1的边
TGCN模型结构
老规矩,在写一堆麻烦的公式之前先来直观的理解一下这个模型结构图。首先左边是我们定义的图,然后是将邻居节点分成三种类型u,i,t,这三类的聚合方式都一样,只不过是在类型内进行聚合。紧接着,为了让不同类型的节点的信息进行交叉,采用CNN进行卷积。可以看到整个TGCN是分成L层的,这个是为了提取高阶聚合信息,同NGCF的方法一样。
接下来我们来一部分一部分的讲解原理。
2.1 Type-aware Neighbor Aggregation (C1)
2.1.1 Heterogeneous Neighbor Sampling
假如不对三种类型的邻居节点进行区分,而是直接对所有的邻居节点进行聚合,就会有几个问题:
1. 随着跳数的增加,邻域大小呈指数增长,这使得在大规模图中进行存储和计算变得不切实际。
2.由于邻居的大小各异,某些“热”节点(受欢迎的item或常用tag)可能有很多邻居,而某些“冷”节点(长尾item或冷门标签)只有几个邻居。 因此,弱关联的邻居可能会损害“热”节点嵌入,而“冷”节点嵌入可能无法充分表示。
3)聚集所有邻居可能会导致过度平滑问题。节点之间的密集连接使邻居过于相似,从而导致难以区分。
这个说了一大堆,其实跟GraphSAGE的方式一样,也就是对于邻居节点进行sample。
2.1.2 Neighbor Aggregation
前面我们已经说过了,我们是type-specific 聚合的方式,也就是对于每种类型的节点在类型内进行聚合:
a是attention生成的weight:
其中是邻居节点j本身的embedding,是中心节点v的embedding,是边的权值w的embedding,k表示是哪一类的节点
2.2 Information Updating (C2)
为了解决特征交互的问题,本文采用了用CNN进行卷积的方式来操作,具体为水平卷积和垂直卷积的两种方法。
2.2.1 Type-level Information Re-scale
由于有三种不同类型的信息,但是从直觉上来理解,不同的类型的信息有着不同的作用,为了更好的结合这三种类型的信息,同时区分不同雷系的信息的重要性,本文采用了attention的方式:
计算出三种类型的权值后,我们将其拼接成3×d的矩阵:
这个Mv也就是我们CNN作用的地方,Mv的shape为K×d
2.2.2 Feature Interaction Extraction
这部分主要介绍怎么使用水平卷积和垂直卷积的方式来对Mv进行特征抽取,我们先来介绍下这两个卷积核。
vertical filters:垂直卷积核,卷积核的大小为K×1,这个卷积主要是为了进行类似于weight sum的方式。
horizontal filters:水平卷积核,大小为h×d,这个卷积带来的作用是让特征之间进行交叉
Bit-level Feature Interactions
Bit-level 特征提取的方式就是用垂直的卷积核,对Mv进行卷积,具体的计算过程如上,总共用了m个卷积核,所以一共有m个向量拼接成。
Vector-level Feature Interactions
卷积核:
卷积方式如下,跟text-cnn的做法类似:
最后,我们需要将两部分的信息结合:
2.2.3 High-order Propagation
这部分的工作跟之前介绍的NGCF的方式一样,为了计算出高阶的节点信息:
预测的结果为:
2.3 TransTag Regularization (C3)
在问题三中,论文提到:user,tag和item之间是有强烈的语义关系的,如果说u给i打了t的标签,可以理解为u跟i之间有了t的关系,这个跟知识图谱中对于两类实体之间关系的定义是相似的。
item的属性和用户的兴趣是不同的,举个例子,一部电影具有导演,情节,主题,演员等属性。此外,不同的用户出于不同的原因选择同一部电影,这可以从图4反映出来。从约翰的角度来看,他选择电影《变形金刚》是因为 考虑“科幻小说”主题,这与玛丽(为了导演“迈克尔·贝”而观看)不同。 这些不同的偏好可以通过标签在本地连接,从而有助于识别用户对给定特定item的实质性偏好。但是,这些基本语义不能通过图卷积很好地建模。为了捕获user-item-tag三元组中的语义,识别用户的实质偏好并解决挑战C3,论文提出了TransTag正则化功能。
具体而言:
这个方法给TransE中建模知识图谱中两个实体之间的关系一样。
这个Re的损失函数为margin-based pari ranking loss,跟fb的ebr中采取的损失函数一样:
2.4 Jointly Training Details
上面的损失为BPR loss,下面的损失为两个损失直接相加