神经网络模型(三)(CapsE)
作者:互联网
本篇记录用神经网络做 KGE 的模型 —— CapsE。
CapsE
paper: A Capsule Network-based Embedding Model for Knowledge Graph Completion and Search Personalization
简介: 这篇文章是 Dai Quoc Nguyen 发表在 NAACL-HLT 2019 上的文章,还挂了 Dai Quoc Nguyen 的名字,这两个人在 KG 领域都很活跃,很多篇 KGE 的文章都是他们写的,应该都是越南人,有帖子怀疑他们两个是亲兄弟哈哈哈~ Dai 是 ConvKB 的作者,在 CpasE 中也多次提到并对比了 ConvKB 的工作。CapsE 是第一篇用胶囊网络做 KGE 的工作,先对三元组 embedding 拼接的矩阵进行卷积,然后过两层胶囊网络,得到三元组得分。感觉还挺有意思的,“胶囊”这个词本身听起来也萌萌哒~
背景知识:看这篇文章之前大概瞄了一眼胶囊网络的概念,就是普通神经网络中的神经元输出的是一个值,只能表示样本的一种模式,而胶囊输出的是一个向量,它的优势就在于可以表示一类模式(如向左和向右的鸟嘴),层间胶囊的连接通过路由策略进行。只要知道胶囊输出的是向量而不是单个的值,就足够了。
模型
文章没有详细描述所解决的问题,而是开门见山地介绍 CapsE(即使是在摘要里)。胶囊网络是从视觉领域引入过来的,它可以捕捉图像中的一个 part 和整体的位置关系,本文假设在 KG 的三元组中也存在这种“内在关系”的变体不能被直观地展示,因此提出用胶囊网络来处理。模型结构很简单,只看 Intro 里的介绍就已经能明白的差不多了。
先将三元组 \((h,r,t)\) 的 embedding 拼接为一个矩阵,然后用多个 1x3 的过滤器进行卷积,得到多个 feature map,这些 feature map 上相同维度的值被封装为一个胶囊,这个胶囊簇(姑且这么称,我自己造的名词…)被路由为另一个胶囊,输出一个连续的向量,向量的长度代表三元组的得分。第一个胶囊层中的每个胶囊可以编码 embedding triple 中的多个特征,来表示相应维度的条目。
框架图也画得很清楚:
使用过滤器 \(\omega\) 进行卷积的公式化表达为:
卷积层结束得到很多个 feature map,然后相同维度的神经元拼接为一个胶囊。然后接着就是路由过程。路由过程具体来讲就是对胶囊向量 \(u_i\) 乘一个权重矩阵 \(W_i\),然后进行一个加权求和(加权系数通过 第一层胶囊的 softmax 得到)得到路由的结果 \(s\),\(s\) 经过一个 squash 函数得到最终的向量输出 \(e\)。
squash 函数为:
路由过程的算法为:
三元组打分函数可以表示为:
loss 为:
实验
文章进行了两类实验:链接预测和个性化搜索
知识图谱补全
链接预测实验在 WN18RR 和 FB15k-237 两个数据集上进行。
除了在整体数据集上的实验,还评价了在不同关系类型、甚至到具体的每个关系上的实体预测的准确率:
此外,还评价了路由算法中迭代的次数、及过滤器的数量对 CapsE 在 WN18RR 上效果的影响,发现路由算法迭代1次效果最好,这一点与处理图像的胶囊网络的表现相反:
个性化搜索
这个实验很新颖,将搜索任务用三元组表示—— \((query,user,document)\),然后套用 CapsE。具体任务是:给定查询 query 和用户画像 user,对返回的文档进行 re-rank,相关的应该被排在前面,这个任务思想就和三元组的实体预测一样了。在数据集 SERACH 17 上进行了实验:
还展示了验证集上的学习率曲线受过滤器数量的影响:
代码
给出了代码,是基于 Tensorflow 的:https://github.com/daiquocnguyen/CapsE 。
跑了半天,连个 log 都不输出,我一度以为它卡住了,实验室的服务器共有 27 个CPU,我这一个程序的占用率达到了 1800% 多,希望不会被打。。。
下班啦,明早来看希望它能输出点什么~
我是华丽丽的分割线
早上好~,WN18RR 上训练的实验已经跑完了:
运行了验证代码(很快),结果和论文中给出的一样:
小结: 本文用胶囊网络做知识图谱嵌入,先对三元组 embedding 进行卷积,然后将得到的 feature map 封装为胶囊,经过路由再过一层胶囊,最后输出三元组得分。进行了链接预测和个性化搜素的实验。模型很明白、清晰,能看懂,感觉还挺有意思的。
【题外话】 今天(5.25)收到了 KSEM 的来信,我的论文中了,那篇胡乱搞出来的、拿来试试水的论文,竟然中了。真的好开心,这是我的第一篇英文论文,第一篇可以用作毕业的论文,我终于碰到毕业的门槛了。今天真是个好日子。既然有幸被接收,我预备从这一刻开始,认真对待论文和毕业这件事情了。在看到“your paper had been accepted as a regular paper” 这句话的时候,之前的所有不快、疑惑和忐忑,全部都被化解了,“发一篇C”这件事情,对我来说,一直像一座山一样,总以为它很难,直到今天,才觉得,不过如此。以此类推,所谓毕业,不过就是这样的工作量乘以3,也不过如此罢了。说真的这篇文章我并没有花费很大的心血,纯粹是为了谈试一下这件事情的难度。即使再继续水两篇这样的文章就能毕业,我还是会对自己再提高一点点要求,当然,是在踮起脚尖能达到的高度,不会太过不切实际。这证明了我并没有不适合做科研这件事情,做科研本就是在未知的领域探索、无固定招式,一千人有一千种不同的方式,只要我的 paper 能被接收,就说明我的方式 make sense,我完全可以继续下去。不只发论文这一件事,很多事情都像小马过河,只有自己去经历了,才知道对自己是什么感觉,听再多不如自己做一次。很多我们看起来觉得不可逾越的鸿沟,其实并不难,都是纸老虎罢了,只要自己相信自己,一切就还没有成定局。后面我会认真修改文章、补充实验,认真开题,珍惜每一次当众演讲的机会(尤其是英文 oral report,这机会很难得),做最充足的准备。虽然说起来有些不切实际,虽然仍旧“平凡才是唯一的答案”,但是我在离自己想去的地方、想达到的高度越来越近了,这是我与国际接触最近的一次。我会好好努力,一点点进步、突破自己,不断变得更好。对感情认真不一定能得到回报,但对事业认真,一定会有回报。永歌说,抑郁是开挂人生的开始,希望我的人生也是,会在整体向着高处走。生病痊愈以来,我一直在进步,逐渐形成自己的做事风格、重构自己感知世界的方式、与人交际的方式,拥抱变化和新的生活,每一天都活的很乐观,有自己的世界,没有像机器一样活着,重视身心健康,理财存钱做规划。打算中了 C 并且减肥到100斤以下就买一个 XXX,现在条件已经满足一半了,钱也存了1/3了,我会做到的。一切都在向着好的方向发展,真好。又想起了那句话,无论多难的事情,只要不紧不慢地去做,就可以神不知鬼不觉地达到目的,重点就是不急不躁、稳定好情绪,慢就是快,我现在已经体味到这句话的深意了。定个小目标,希望下一篇 C 也能顺利中,再远一点的目标,就是希望毕业的时候能发出 B。
标签:CapsE,卷积,模型,三元组,神经网络,实验,胶囊,路由 来源: https://www.cnblogs.com/fengwenying/p/14810375.html