知识图谱嵌入|KG-BERT代码 ConvE ConvR

KG-BERT开源项目实现

python安装

【】(原本是图片)

Q: 左侧的几个环境有什么不同?怎么使用?

A:选了第一行的virtualenv环境,下上两个按顺序都试了一下(一顿瞎操作)1.几个需要新加的库 pytorch等(项目主界面跳出提醒添加)好像都添加在了 D盘的AppData里的python37里;2.项目文件夹里出现了虚拟环境venv,但是没有我添加的新库。

修改初始化参数

【】

【】

将参数添加进去:

【】

点绿箭头运行,晚上8点40开始,报错:

【】

意思应该是device为空值

【】

又重新点击运行,device的值为cpu了…奇怪

之后就是漫长的训练过程

搭pytorch-gpu环境

CPU训练如果可以的话,试着搭一下pytorch-gpu的环境

Q:需不需要额外的安装cuda和cudnn?还是只在官网安装pytorch就行?

  1. Anaconda+虚拟环境装

  2. cuda+cudnn+Anaconda+虚拟环境装

A: 需要

参考链接:

  1. https://blog.csdn.net/Andone_hsx/article/details/87942968
  2. https://blog.csdn.net/Andone_hsx/article/details/87946183
  3. https://blog.csdn.net/weixin_41032724/article/details/109559373

安装了: CUDA8.0+CUDNN+Anaconda3+Python3.7+pytorch-gpu

一些问题:

  1. gpu用不了,我使用方法torch.cuda.is_available(),确认pytorch和cuda是否匹配,如果返回False,需要调整一下cuda或torch的版本,重新部署一下环境;返回True说明环境没有问题,但是代码检测不到我的gpu,仍然使用cpu进行训练,我没有查到相关博文,最后看代码明白是作者有多个gpu,他通过CUDA_VISIBLE_DEVICES 环境变量来限制CUDA程序所能使用的GPU设备,他设置使用编号为6的gpu,而我的设备只有一个编号为0的gpu,CUDA应用运行时,CUDA将遍历当前可见的设备,并从零开始为可见设备编号,如果为CUDA_VISIBLE_DEVICES 设置了不存在的设备,所有实际设备将被隐藏,所以CUDA 应用将无法使用GPU设备,同样地,将其设置为-1时也只可以使用cpu
  2. 训练模型时报错内存不足RuntimeError: CUDA out of memory,这个问题总结有几种原因:
  • PyTorch占用的GPU空间没有释放,导致下次运行时,出现CUDA out of memory
    用终端结束占用GPU的进程

  • 有一部分自编码特征是通过keras训练的。而keras或tensorflow初始化时会默认占满全部显卡和全部剩余显存,这样就导致pytorch的显存不够用了,就算把batch_size调小到1也不行
    这种情况下,可以通过对keras/tensorflow的显存进行限制

  • 最后就是考虑调小每次用于参数更新的数据量即batch_size或者用一些程序优化方法了

我尝试了上面地解决办法都没有解决我的问题,应该还是我的显存太小低于4G,而模型比较复杂,模型显存占用和单个样本显存占用比较大。

所以之后我想要么还是用cpu继续跑,就是花费的时间长点,要么用实验室的机器跑。

论文部分

介绍

解决浅层架构的可扩展性问题和全连接深度架构的过拟合问题的方法之一,是使用参数高效、快速的算子组成深度网络

相关工作

一维卷积与二维卷积的交互次数

与1D卷积相比,2D卷积能够提取更多的两个嵌入之间的特征交互,同样的原理可以扩展到更高维度的卷积,但我们把这个留作未来的工作

背景知识

神经链接预测模型:可以看作是由一个编码部分和一个评分部分组成的多层神经网络

  • 编码组件映射实体s, o∈ E 到它们的分布式嵌入表示 es,eo∈ Rk

  • 评分组件里两个嵌入的实体是由一个函数评分ψr

  • 三元组(s, r, o)的分数 ψ(s, r, o) = ψr(es,eo)∈R

总结了文献中几种链接预测模型的评分函数:

【】

模型 评分函数 关系参数 空间复杂度

Q: W不知道是啥

A: 应该和KG-BERT里的W参数差不多,也需要通过训练得到

卷积二维知识图嵌入

提出一个 神经链接预测模型,其中输入实体和关系之间的交互是由卷积和全连接层建模的

模型的主要特征为 分数是由二维形状嵌入上的卷积定义的

评分函数:

【】

rr∈Rk是一个取决于r的关系参数,–es and --rr表示es and rr的2D重塑,如果es,rr∈Rk,–es,–rr∈Rkwxkh,则k = kwxkh

【】

【】

Q: 两个非线性函数f有什么不同,第二个f是内积的意思吗?

Q: 第4点是什么意思?

为了训练模型参数,用一个非线性函数σ(·)sigmoid作用在得分上:

【】

尽量减少以下二进制交叉熵损失:

【】

Q: 这个公式看起来对es 和 rr处理,然后和eo匹配?和上面定义的不一样;关系是同一类别算一个关系吗?实体呢?不然怎么1-N评分?

其中,标签向量t 的维度为R1x1为1-1评分或R1xN为1-N评分,向量t的元素如果关系存在为1,否则为0。

模型细节:(需要进一步了解)

1.用改正的线性单元作为非线性f为了更快的训练,并在每一层之后进行批归一化,以稳定、正则化和增加收敛速度

2.通过使用dropout分几个阶段规范我们的模型,在嵌入、卷积运算后的特征图和全连接层后的隐藏单元上使用dropout

3.使用Adam作为优化器,标签平滑以减少由于标签处输出非线性饱和而导致的过拟合

链路预测任务的快速评估

此模型中,卷积大约消耗总计算时间的75-90%,尽可能减少卷积操作的数量以提高计算速度,对于链接预测模型,通常增加批大小以加快评估,对于卷积模型是不可行的,因为当增加批大小时,内存需求很快就会超过GPU内存容量

使用1-N评分:

如果我们在批大小和嵌入大小为128的高端GPU上进行1-1的基准评分,然后在FB15k(实验中使用的数据集之一)上使用卷积模型进行一次训练和一次评估,耗时2.4分钟和3.34小时(Q:为什么训练比评估耗时少?这里的评估指的是什么?和打分应该不是一个东西吧),使用1-N评分,分别是45秒和35秒。1.在评估时间方面有超过300倍的显著改进

对于批次大小为128的单次向前向后传递,从N= 100,000到N=1,000,000个实体只会将计算时间从64ms增加到80ms, 换句话说,实体数量增加10倍只会增加25%的计算时间——这证明了该方法的可扩展性 2. 该方法可扩展到大型知识图,并提高收敛速度

如果我们使用1-(0.1N)计分而不是1- N计分,也就是说,对10%的实体计分,我们可以以快25%的速度计算向前-向后传递,然而,我们在训练集上的收敛速度要慢230%。因此,1-N评分有一个额外的效果,3. 类似于批处理归一化(Ioffe和Szegedy 2015)(?)——我们用一些计算性能换取了大幅提高的收敛速度,也获得了更好的性能

实验

知识图谱数据集

为了评估模型,使用了从文献中选择的数据集:

WN18:是WordNet的一个子集,由18个关系和40,943个实体组成,在151442个三元组中,大部分是由下义词(?)关系和上义词关系构成的,因此,WN18倾向于遵循严格的分层结构

FB15k:这个知识图谱中的大部分内容描述了关于电影、演员、奖项、体育和运动队的事实

YAGO3-10:由每个至少有10个关系的实体组成,大多数三元组处理人的描述性属性,如公民身份、性别和职业

Countries:是一个基准数据集,用于评估模型学习实体和关系之间长期依赖的能力,它由三个子任务组成,这些子任务以循序渐进的方式增加难度,其中寻找解的最小路径长度从2增加到4

Toutanova和Chen(2015)首先注意到WN18和FB15k由于逆关系存在测试泄漏:如,测试集经常包含(s,上义词,o)这样的三元组,而训练集则包含它的逆(o,上义词,s)。为了创建一个没有这个属性的数据集,引入了FB15k-237——一个FB15k的子集,其中去除了逆关系。由于无人调查这个问题的严重性,后续研究依旧使用这些数据集进行评估。

文章介绍一个简单的基于规则的模型,该模型通过在WN18和FB15k上取得最先进的结果来证明这种偏差的严重性。将基于规则的模型应用于每个数据集,除了FB15k-237修正的FB15k外,我们还发现了WN18的缺陷,创建了WN18RR来改造WN18作为一个数据集,这个数据集不容易使用单一规则完成,但需要对完整的知识图谱建模。在今后的研究中,我们不建议使用FB15k和WN18,而是推荐使用FB15k-237、WN18RR和YAGO3-10。

实验设置

神经网络中还有很多的需要人工进行选择的参数,比如神经网络的层数和每层神经网络的神经元个数以及正则化的一些参数等等,我们将这些参数称为–超参数。这些参数不同选择对模型最终的效果也很重要,我们在开发模型的时候总是需要调节这些超参数

也就是说我们将数据划分训练集、验证集和测试集。在训练集上训练模型,在验证集上评估模型,一旦找到的最佳的参数,就在测试集上最后测试一次,测试集上的误差作为泛化误差的近似

根据验证集上的平均倒数秩(MRR)(?),通过网格搜索选取ConvE模型的超参数(Q:这些超参数训练得不到?)。网格搜索的超参数范围如下:
嵌入dropout{0.0,0.1,0.2},特征图dropout{0.0,0.1,0.3,0.5},投影层dropout{0.0,0.1,0.3,0.5},嵌入大小{100,200},批大小{64,128,256},学习速率{0.001,0.003},和标签平滑{0.0,0.1,0.2,0.3}

除了网格搜索,还研究了模型的二维卷积层的修改,特别的,研究尝试了用全连通层和一维卷积代替,然而,这些修正不断降低了模型的预测精度;还实验了不同大小的滤波器,发现只有在第一层卷积层使用较小的(即 3x3)滤波器时,我们才会收到好的效果

我们发现以下(超)参数组合在WN18, YAGO3-10和FB15k上效果很好(略)。我们根据验证集上的平均倒数秩(WN18, FB15k, YAGO3-10)和AUC-PR (Countries)统计量使用早期停止(?),我们每三个时期(epoch)评估一次。与其他数据集不同的是,对于Countries,结果有很高的方差,因此我们平均10次运行并产生95%的置信区间。对于1-1训练的DistMult和ComplEx结果,我们使用嵌入尺寸为100,AdaGrad (Duchi, Hazan, and Singer 2011)进行优化,并通过在每次参数更新后强制实体嵌入达到L2范数为1来规范我们的模型。和Bordes等人(2013a)一样,我们使用了基于利润的两两排名损失。

逆模型

训练数据集94%和81%的三元组与测试集有关联的逆关系,在这些数据集上表现良好的链接预测器可能只是了解哪些关系是与其他关系相反的,而不是对实际的知识图建模。

为了衡量此问题的严重性,作者构建了一个简单的基于规则的模型,该模型仅对逆关系建模。作者将此模型称为逆模型。该模型自动从训练集中提取逆关系,给定两个关系对r1, r2∈ R,作者检查(s, r1, o)是否等于(o, r2, s),反之亦然。

【】

Q: 没咋看懂,所以这个模型能做什么?

A:大概懂了

结果

与之前的工作相似(Y et al.2015;Trouillon等人2016;Niepert 2016),我们使用过滤设置报告结果,即我们将测试三元组与所有其他未出现在训练、验证或测试集中的候选三元组进行排名,候选获得通过用知识图谱中的所有实体重新排列测试三元组的头实体或尾实体。

(添加 逆模型 和 ConvE 在测试结果方面的相同点和不同点)

引人注目的是,反向模型在FB15k和WN18的许多不同指标上都达到了最先进的水平。然而,它没有捕捉到Y AGO310和FB15k-237的逆关系。Toutanova和Chen(2015)推导FB15k-237所用的程序并没有消除某些对称关系,例如“similar to”。这些关系的存在解释了我们的WN18RR反演模型的好成绩,该模型是用同样的程序推导出来的。

提出的模型,ConvE,在YAGO3-10的所有指标上实现了最先进的性能,在FB15k上实现了一些指标,在WN18上也做得很好。在Countries方面,它解决了S1和S2任务,在S3方面表现也很好,比其他模型(如DistMult和ComplEx)得分更高。对于FB15k-237,我们无法复制Toutanova et al.(2015)的基本模型结果,此模型总体上比我们所能达到的效果更好。与Schlichtkrull等人(2017)相比,我们对标准模型的结果略好于他们的,并与他们的R-GCN模型相当。

ConvE的参数效率

从表2可以看出,对于5个指标中的3个指标,具有0.23M参数的FB15k-237的ConvE比具有1.89M参数的DistMult性能更好。具有0.46M参数的ConvE在FB15k-237上仍然取得了最先进的结果,具有0.425 Hits@10。对比之前最好的模型R-GCN (Schlichtkrull et al.2017),其得到0.417 Hits@10,参数大于8M。总的来说,ConvE的参数效率比R-GCNs高17倍,比DistMult高8倍。

对于整个Freebase,这些模型的大小将是超过82GB的R-GCNs, 21GB的DistMult,而ConvE的5.2GB。

分析

消融研究

评估了不同的参数初始化(n = 2)来计算置信区间。得到,隐藏层dropout是到目前为止最重要的组成部分,这并不奇怪,因为它是主要的正则化技术,1-N评分提高了性能,就像输入dropout一样,特征图dropout也有一个较小的影响,而label smoothing似乎不重要——因为没有它也可以获得好的结果。

Indegree和PageRank分析

与WN18RR相比,我们的模型在YAGO3-10和FB15k-237等数据集上的性能较好,主要假设是这些数据集包含具有非常高的关系特定入度的节点,例如,关系为“出生在”的节点“美国”的入度超过10,000,在这10000个节点中,许多节点彼此之间(演员、作家、学者、政治家、商界人士)非常不同,要成功地对这样一个高入度独立的节点建模,就需要捕捉所有这些差异。

我们的假设是:1. 更深层次的模型,也就是学习多层特征的模型,如ConvE,比浅层模型(如DistMult)更有优势,以捕获所有这些约束条件。

然而,2. 更深层次的模型更难优化,因此我们假设,对于具有较低平均关系特定入度的数据集(如WN18RR和WN18),像DistMult这样的浅层模型可能足以准确地表示网络的结构。

为了检验我们的两个假设,我们取两个具有低(low-WN18)和高(high- FB15k)关系特定入度的数据集,通过删除低和高入度节点,将它们反向为高(high- wn18)和低(lowFB15k)关系特定入度数据集,我们假设,与DistMult相比,ConvE在具有高关系特定入度的数据集上总是做得更好,反之亦然。

事实上,发现两个假设都成立。对于低fb15k,我们有ConvE 0.586 Hits@10 vs DistMult 0.728 Hits@10;对于高wn18,我们有ConvE 0.952 Hits@10 vs DistMult 0.938 Hits@10,这支持了我们的假设。即更深层次的模型,如ConvE,在建模更复杂的图(如FB15k和FB15k-237)时具有优势,但较浅的模型,如DistMult,在建模较不复杂的图(如WN18 WN18RR)时具有优势。

为了进一步研究这个问题,我们来看看PageRank,这是一个衡量节点中心度的指标。PageRank也可以被视为节点递归入度的度量:节点的PageRank值与该节点的入度成正比。还期望ConvE在具有高平均PageRank(高连通性图)的数据集上比DistMult更好。

我们发现DistMult和ConvE在Hits@10方面的性能差异大致与测试集的PageRank均值成正比,即测试集节点的PageRank均值越高,ConvE的性能就越好,这进一步证明了更深层次的模型在建模具有高(递归)入度的节点时具有优势。

根据这些证据,我们得出结论,与标准链接预测器DistMult相比,我们的模型的性能有所提高,部分原因是我们的模型能够以更高的精度建模节点,这可能与它的深度有关

结论与未来工作

我们引入了ConvE,这是一个链接预测模型,它使用嵌入上的二维卷积和多层非线性特征来建模知识图。

  • 与计算机视觉中发现的卷积结构相比,我们的模型仍然是浅层的,未来的工作可能会处理增加深度的卷积模型。
  • 进一步的工作还可能着眼于2D卷积的解释
  • 或者如何在嵌入空间中加强大规模结构,从而增加嵌入之间的交互数量。

你可能感兴趣的:(知识图谱,深度学习,知识图谱)