这两篇文章是去年夏天疫情在家的时候看过的,还讲过讨论班的,转眼间一年都过去了。看了下 PPT 的日期,刚好是去年的这个时候(6月下半月),不禁再次感叹时间过得好快,去年正在一眼望不到毕业尽头的状态飘零,趁着疫情完全在家躺平,反而整个人精气神很好,再次回到学校进步就比较快,各方面都有提升。所以尽管无法完全放弃工作,但是还是要适当给自己放假,从繁忙的工作中抽身出来,留一些属于自己的时间, 感受活着的感觉呀,这样才能走得远。那时候做梦都想不到自己会发出论文并且赶上了这次的开题。好了没有时间感慨了,还有4篇笔记要写,写完要写开题报告,加油鸭~
R-MeN
paper: A Relational Memory-based Embedding Model for Triple Classification and Search Personalization
简介: 这篇是 ConvKB 的作者 Dai Quoc Nguyen 发表在 ACL 2020 上的工作,这个作者的论文风格就是浅显易懂(毕竟我这种小白都能看懂=.=|),非常适合我这种菜鸟。文章提出了关系记忆网络 R-MeN,利用自注意力机制捕捉 memory 和新的三元组交互,并利用 CNN 解码计算三元组得分。
模型
文章首先提出的问题是 KGE 模型不擅长记忆,因此本文提出 Relational Memory Network 来编码关系三元组的内部依赖。
在这里我要插一点点感想,科研象牙塔中的人是不了解工业界中的应用是怎样的,尽管论文中充斥着“实际应用场景”云云,我们不知道实际应用场景及其遇到的问题是怎样的。因为看了 KG 领域的文章比较多了,觉得灌水现象还是比较严重的,随随便便的 idea 就可以转化为一篇 paper,尽管这可以让我拿到博士学位,但我仍然感觉在仅有的几个数据集上跑来跑去,提升了一丢丢百分比然后发出一篇甚至是顶会的 paper 是没有任何意义的,论文中的那些句子越看越觉得是冠冕堂皇的套话,但是又不得不去看、去写。所以此时的心境又有些偏向工业实战了,想要看看真实的工业界中会遇到什么样的问题呢,我的能力能不能解决那样的问题呢?这样想……
哦为什么会有上面的一段感慨,是每每在论文中看到 “捕捉交互”、“内部依赖” 这样模糊的表述,都觉得不清不楚的,看起来是那么回事,但是具体地这个交互是啥、依赖是啥?论文里也没讲清楚。也可能是因为这个领域中国人做的工作比较多,写作都是一个套路,或许我应当多读一读英语母语者的 paper。之前看论文是不敢质疑的,现在越来越能跳出来思考,思考为什么,有的问题会在后文的阅读中找到答案,更多的没有答案,但是提问和思考的过程还是很有必要的。还是有进步的。(收)
整体架构

整个模型可以分为 4 个部分:位置编码、self-attention、记忆与输入进行交互、CNN 解码
位置编码
对头尾实体和关系加上位置进行编码:

其中,p 即代表位置 embedding。
self attention 与 memory network
假设一个记忆为 M,它有 N 行,每一行是一个 memory slot。第 t+1 个时刻,第 i 个 memory slot 的值由多头注意力计算得出:

其中,H 是 attention 头的数量,n 是 head size,memory size k=nH。attention 权重由如下的 softmax 函数及缩放点积计算得出:

文中提到,在 \(x_t\) 和 \(\hat{M}_{i,:}^{(t+1)}\) 间加了一个残差连接,然后过一个 MLP,再过记忆门,产生编码向量 \(y_t\) 和下一时刻的 memory slot \(M_{i,:}^{(t+1)}\)。
CNN 解码
得到 3 个编码向量 {\(y_1\),\(y_2\),\(y_3\)},堆叠成矩阵,然后用 CNN 进行解码:

max 代表 max-pooling 操作,代替了 ConvKB 中的向量拼接,可以从 feature map 中捕捉到更重要的特征,并减少权重参数。
Loss
使用 Adam 优化器进行训练,loss 定义为:

实验
采用了两个比较小众的实验:三元组分类和搜索个性化
三元组分类
三元组分类采用的是 FB13 和 WN11 数据集,并采用 GloVe 的 50 维预训练词向量作为实体和关系 embedding 的初始化。

还比较了具体每个关系上 R-MeN 与 TransE 的效果:

搜索个性化(search personalization)
搜索个性化实验是将搜索任务表示为类似三元组的表示形式 \((query,user,document)\),然后套用 KGE 模型。数据集采用 SEARCH17。

超参的影响
在三个数据集上测试了 head size n 和 attention 头的数量 H 的影响:

消融实验

没有位置编码效果有所下降,但影响不大。
代码
Conclusion 部分给出了代码:https://github.com/daiquocnguyen/R-MeN 。(开题完了一定回来看 orz)
小结: 文章提出了 R-MeN,关系记忆网络,用自注意力机制存储三元组记忆,并用 CNN 进行解码,捕捉 KG 三元组中潜在的内在依赖。整体感受中规中矩吧。
SEEK
paper: SEEK: Segmented Embedding of Knowledge Graphs
简介: 其实严格讲这篇并不属于神经网络模型的类别,只是因为都是 ACL 2020 的文章(去年随便找的两篇),又是一起看的,所以笔记就记到了一起。这篇是中山大学的一个研究所和微软联名发表在 ACL 2020 上的工作。主要思想是对 embedding 进行分段。
模型
文章首先提出的问题是现有模型不能兼顾模型复杂度和表现力。有的模型简单,但表现力差,如 TransE、DistMult 等;另一类模型表现力好,但复杂度也较高,如 TransH、R、D、Single DistMult、ConvE、InteractE 等。因此文章提出了一个轻量级的模型,可以在不增加模型复杂度的情况下实现比较好的表现力。该框架主要有两个重要特点:(1)利用丰富的特征交互(真没看出来。。。);(2)保留关系的对称和非对称的特性。主要工作体现在设计了4种打分函数(虽然有的在之前的模型中出现过。)

f1:多线性点积(Multi-linear Dot Product)
最简单的一种,是三个向量的线性点积:

这种是不分段的情况,等同于 DistMult。
f2:段间的多线性点积(Multi-linear Dot Product Among Segments)
将 h、r 和 t 分为 k 段,emb 维度为 d,因此每段的长度为 d/k。
关系 r 的分段表示为:

打分函数定义为各段线性点积之和:

特别指出,分 2 段(k=2)的情况等同于 ComplEx 和 HolE (有论文证明了这两个模型本质上也是一样的)。
f3:建模对称和非对称关系
f2 只能建模对称的关系,因为 \(f_2(h,r,t) == f_2(t,r,h)\)。为了建模非对称关系,将关系的分段分为奇数部分和偶数部分,奇数段捕捉对称特性,偶数段捕捉非对称特性。打分函数定义为:

这样就会使得 \(f_2(h,r,t) != f_2(t,r,h)\),因此可以建模非对称关系。(这个地方死活没想明白。。。)
给出了分两段的例子:

f4:减少计算负载
分段方法在未经优化时的计算时间复杂度为:\(O(k^3×d)=O(k^2d)\)。为了降低时间复杂度,在 f3 的基础上对 t 下标的取值进行限制,换句话说就是省去了一些段的计算。

这样点积项的数量被减少到 \(k^2\) 个,时间复杂度降低为线性 \(O(kd)\)。同时 f4 保留了奇偶机制,可以建模关系的非对称性。
给出了分 4 段的例子:

Loss

实验
链接预测


分段数 k 的影响

分段数大于 8 之后,效果就不会再提升了。绿线证实了时间复杂度与分段数 k 呈线性。
Case Study

(case study 的这张图死活显示不出来,也不知道是不是上面的人物头像涉及到了敏感信息,咱也不知道,咱也不敢问。。。)
\(f_2\) 不能捕捉非对称关系的特性,因此对于非对称关系,给出了与其正向三元组相同的分数,但显然这是错误的。相比之下,\(f_4\) 给出了与正向三元组差值较大的低分,因此可以建模非对称关系。
代码
https://github.com/Wentao-Xu/SEEK 。
小结: 本文提出了 SEEK(Segmented Embedding for KG),通过对 embedding 进行分段,利用充分的特征交互(还是没看出来),保留了对称和非对称的关系特性。思想没有太高明的地方,本质就是分段,然后进行排列组合,我的那篇烂论文跟这篇有异曲同工之处,或许后面可以借鉴这篇文章改进一下复杂度。
到这里目前攒的神经网络系列的 paper 就看的差不多了。有文章对这一类模型中典型的几个做了简单的比较和总结:https://www.jianshu.com/p/2ad4ea1eecba。
我所写的这些论文笔记,虽然花了一些时间,但也是按照论文的写作套路进行的简单的搬运,由于时间,没有太多个人的理解和思考,代码大多也没有细看,这里涉及到读论文的广度和精度的权衡问题,要读大量论文的话,就没有办法每篇都精读和看代码。我之前列的 KG 领域的经典论文必须是要看的,跟进最新论文的话,可以先粗度,如果感兴趣想要跟进并继续做的话,再去精读和看代码。第二点就是总是写论文笔记已经腻烦了,开完题以后看论文可以考虑换一种形式,看论文,然后讲出来,录视频,可能不失为一种锻炼表达方式的好方法。
还有一篇论文是对几个经典的 NN 模型进行的重评价 —— $ A Re-evaluation of Knowledge Graph Completion Methods $,里面也有对这些模型的复现,是一篇非常能引人深思、有意义的工作。后面打算复现这类模型的时候可以参考下。