使用Facebook的Pytorch的BigGraph从知识图谱中提取知识

4次阅读

共计 7162 个字符,预计需要花费 18 分钟才能阅读完成。

机器学习使咱们可能训练一个能够将数据转换为标签的模型,从而把 类似的 数据映射到 类似 或雷同的标签。

例如,咱们正在为电子邮件构建一个垃圾邮件过滤器。咱们有很多电子邮件,其中一些标记为垃圾邮件,另一些标记为失常邮件(INBOX)。咱们能够构建一个模型,该模型学习辨认垃圾邮件。被标记为垃圾邮件的邮件在某种程度上相似于曾经标记为垃圾邮件的邮件。

相似性 的概念对于机器学习至关重要。在事实世界中,相似性的概念与某个主题相干,它取决于咱们的 常识

另一方面,数学模型定义了相似性的概念。通常,咱们将数据表示为多维向量,并测量向量之间的间隔。

https://www.quora.com/Why-do-we-use-cosine-similarity-on-Word2Vec-instead-of-Euclidean-distance

特色工程是将咱们对事实世界中的某个对象的常识转换为数字示意的过程。咱们认为类似的对象转化为数字后的向量也会很凑近。

例如,咱们正在估算房价。咱们的教训通知咱们,屋宇是由卧室的数量,浴室的数量,房龄,屋宇面积,地位等来定义的。位于同一社区,具备雷同大小和房龄的屋宇的价格应该大致相同。咱们将对屋宇市场的理解转化为表征屋宇的数字,并用它来估算屋宇的价格。

可怜的是,如上所述,手动特色工程在将咱们的常识转换为描述性特色的能力方面存在局限性。

有时,常识的应用仅限于相似性原理,而不是对象的确切类似特色。通常,咱们对事实世界的理解要比简略的表格所代表的要简单得多。它通常是互相分割的概念和图形。

嵌入模型 使咱们可能获取原始数据,并依据咱们的常识主动将其转换为特色。

Word2Vec

Word2Vec 可能是最驰名的嵌入模型,它为单词建设类似度向量。在这种状况下,咱们对世界的理解用文字来进行示意,即文字序列。

尽管数十年来,人们尝试应用手动定义的特色来刻画单词,但收效甚微。这些解决方案通常无奈扩大到全副常识,也无奈在无限的状况下起作用。

托马斯·米科洛夫(Tomas Mikolov)和他在 Google 的团队决定建设模型时,所有都扭转了,该模型基于家喻户晓的相似性原理进行工作。在类似上下文中应用的词通常类似。在这种状况下,上下文由左近的单词来定义。

单词序列的图形示意。

咱们看到的是,只有牢记这些准则,咱们就能够通过在预约义窗口(通常为 5 个单词)内将每个单词与其相邻单词简略地连接起来,从而在文本中构建图形。

当初咱们有了一个基于咱们的常识连接起来的实在单词对象的图形。

最简略 / 最简单的单词示意

咱们依然无奈建设任何模型,因为单词没有以表格或向量示意。

如果咱们须要将单词转换为数字,那么有一个简略的解决方案。让咱们来看看字典,并为每个单词指定其在字典中的地位。

例如,如果我有三个单词:猫(cat),毛毛虫(caterpillar),小猫(kitten)。

我的向量表示法如下:cat—[1],caterpillar—[2],和 kitten—[3]。

可怜的是,这不起作用。通过这样调配数字,咱们隐式地引入了单词之间的间隔。猫和毛毛虫之间的间隔是 1,猫和小猫之间的间隔是 2。这样进行示意就等于,咱们说猫比起小猫更像毛毛虫,这与咱们的常识是互相矛盾的。

另外一个解决方案也称为 独热编码(one-hot encoding)

cat — [1,0,0]

caterpillar — [0,1,0]

kitten — [0,0,1]

该办法示意所有单词都彼此正交。咱们没有单词相似性的先入观点。咱们将依附咱们的常识图谱(如上所述)和的单词相似性原理来构建嵌入模型。

在事实世界中,字典的大小远远大于 3。字典的维数可能是数万到数百万。这些向量不仅不能真正代表咱们的相似性概念,而且它们的体积也很大,无奈在理论中应用。

建设词嵌入(word embeddings)

咱们的常识图谱为咱们提供了十分多的边,每条边都能够解释成输出数据作为边的终点,标签为边的起点。咱们正在构建一个模型,该模型试图应用被标签突围的单词来预测单词。通常以两种形式实现。咱们要么从某个单词的所有街坊来结构单词向量,要么从某个单词来结构其所有街坊。

https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf

该模型的详细信息超出我要讲的范畴,并且在许多其余文章中都有详细描述。从根本上讲,该团队应用根本的编码器 / 解码器模型来学习从高维空间(数百万个维)到无限维空间(通常为 300 个)到高维空间的投影。训练的目标是在压缩过程中保留尽可能多的信息(用最小化穿插熵的办法)。

http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/

把稠密,正交,高维的数据空间投影到更密集的低维空间,这一概念是许多其余嵌入训练模型的根底。

该模型通常应用 Google,Twitter 或 Wikipedia 数据集等来进行训练。咱们耗费世界的常识,以此建设咱们的单词嵌入模型。

Word2Vec 嵌入的属性

Word2Vec 的重要属性是保留单词之间的关系和示意构造关系。

下图显示了国家与首都之间的分割。

或其余不同的概念。

https://www.tensorflow.org/tutorials/representation/word2vec

实质上,它容许像这样对单词进行代数运算:

国王 - 男人 + 女人 = 女王。

应用单词嵌入

单词嵌入能够极大地改善诸如文本分类,命名实体辨认,机器翻译等等工作的执行成果。

更多信息:http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

Node2Vec

Node2Vec(作者:A. Grover and J. Leskovec)是在 Word2Vec 思维的根底上,对齐次加权图进行剖析。本文的思维是通过摸索图节点的周围环境来刻画图节点的特色。咱们对世界的了解是建设在两个准则的根底上的——同质和构造对等。

同质

类似的节点位于左近。

示例:

  • 社交网络 - 咱们与像咱们这样的人有更多的分割
  • 商业地点 - 金融公司、医生办公室或营销公司仿佛通常位于同一条街上
  • 组织构造 - 同一团队的人有类似的特色

构造对等

不同的社区共享雷同的构造:

  • 组织构造 - 尽管团队之间可能存在弱连贯,但团队的构造(经理、高级成员、新成员、高级成员)在团队之间反复。

https://arxiv.org/pdf/1607.00653.pdf

为了将这两个准则联合到咱们的嵌入中,Node2Vec 的作者提出了一种联合广度优先采样和深度优先采样的随机游走办法来捕捉同质性和构造等价性。

如咱们所见,节点(u)在组(s1、s2、s3、s4)中充当核心,这相似于 s6 是(s7、s5、s8、s9)的核心。咱们通过 BFS 发现(s1,s2,s3,s4)社区,通过 DFS 发现(u)<->(s6)相似性。

咱们通过摸索每个节点的周围环境来理解它们。这种摸索将图转换为随机游动产生的大量序列(句子),将 BFS 和 DFS 摸索联合起来。BFS 和 DFS 的混合由图边的权值和模型的超参数管制。

一旦咱们有了残缺的序列(句子),咱们就能够像利用于文本一样利用 Word2Vec 办法。它产生了基于咱们定义的准则和从图中取得的常识的图节点嵌入。

Node2Vec 性质

Node2Vec 示意改良了节点的聚类和分类模型。嵌入中学习到的相似性将有助于欺诈检测等工作。

node2vec 生成的 Les Misérables 共现网络的互补可视化,标签色彩反映了同质(顶部)和构造等价性(底部)。— https://arxiv.org/pdf/1607.00653.pdf

https://arxiv.org/pdf/1607.00653.pdf

Node2Vec 在链路预测(link prediction)方面有显著的改良。它可能进步重建图的能力,其中删除了肯定比率的边。本文将进一步探讨链路预测评估过程。

常识图谱

上面咱们将探讨 PYTORCH-BIGGRAPH: 一个大规模的图嵌入零碎论文(进一步命名为 PBG)以及相干论文。

常识图谱是一种非凡的图形类型,它蕴含已知的实体和不同类型的边。它代表构造常识。

在常识图谱中,节点通过不同类型的关系连接起来。

https://arxiv.org/pdf/1503.00759.pdf

训练的指标是产生代表常识的嵌入。一旦咱们有了节点的嵌入,就应该很容易通过特定类型的关系来确定相应的节点在咱们的常识图谱中是否是连贯的(或应该连贯的)。

不同的模型提出了不同的比拟嵌入的办法。最简略的模型应用余弦或向量积间隔来比拟嵌入向量。比较复杂的模型在比拟之前对向量的元素利用不同的加权计划。加权计划示意为矩阵,并且特定于关系类型。作为训练的一部分,咱们能够学习加权矩阵。

https://www.sysml.cc/doc/2019/71.pdf

咱们须要找到一种办法来度量边之间的 相似性得分,并应用该得分来预计这些节点连贯的可能性。

常识图谱的示意

常识图谱能够示意为邻接张量。要建设它,咱们须要一个平方矩阵来示意每种类型的关系。每个矩阵的列或行数与图形中的节点数雷同。通过这种类型的关系,如果这些节点中相互连接,则矩阵的值将是 1,否则为 0。很显著,这个矩阵十分大,十分稠密。

为了学习咱们的嵌入,咱们须要将每个节点转换成固定大小的向量。让咱们探讨“好”嵌入的性质。

好的嵌入以图边的模式示意咱们的常识。位于“左近”的嵌入向量应该示意更有可能连贯的节点。基于此察看,咱们将训练咱们的模型,使相邻张量中标记为 1 的连贯节点的类似度得分更高,相邻张量中标记为 0 的连贯节点的类似度得分更低。

https://arxiv.org/pdf/1503.00759.pdf

咱们正在训练咱们的嵌入以最小的信息损失从节点嵌入 重建 常识图谱的边。

负采样

咱们的训练方法有点问题。咱们正在尝试应用图数据来辨别 1(节点已连贯)和 0(节点未连贯)。然而,咱们理论领有的惟一数据是连贯在一起的节点。就像只看猫就学会了分辨猫和狗。

负采样是一种通过应用非常简单的观测来扩大数据集并提供更好的训练数据的技术。任何随机抉择的节点,如果没有作为咱们的图的一部分进行连贯,将用标签 0 示意一个样本数据。出于训练的目标,PBG 提出读取图的每条边,而后提出一个负样本,其中一个节点被随机抉择的节点替换。

对于每一条边,咱们能够指定一个正类似度得分和一个负类似度得分。基于节点嵌入和边关系类型权重计算 正类似度得分 。用同样的办法计算 负类似度得分,然而边的一个节点被损坏并被随机节点替换。

排名损失 函数,将在训练期间进行优化。它的结构是为了在图中所有节点和所有关系类型的正负类似度得分之间建设一个可配置的 边距(margin)。排名损失是节点嵌入和特定关系权重的函数,通过寻找最小的排名损失进行学习。

训练

当初咱们有了训练嵌入模型所需的所有:

  • 数据 - 负边和正边
  • 标签 -(1 或 0)
  • 优化函数(能够是排名损失、更传统的 logistic 回归损失或在 word2vec 中应用的穿插熵 softmax 损失)
  • 咱们的参数是用于相似性评分函数的嵌入和权重矩阵。

当初是用微积分来寻找参数 - 嵌入的问题,优化咱们的损失函数。

随机梯度降落

随机梯度降落的本质是逐渐调整损失函数的参数,使损失函数逐步减小。为此,咱们以小批量形式读取数据,应用每个批次计算对损失函数参数的更新,以将其最小化。

随机梯度降落有多种办法。PBG 论文利用随机梯度降落的一种模式 ADAGrad 来寻找使损失函数最小化的参数。我强烈推荐这个博客来理解梯度降落的所有类型:http://ruder.io/optimization-gradient-descent/index.html#adagrad

tensorflow 和 Pythorch 等软件包为不同的类型提供了开箱即用的实现。

梯度降落的要害是模型参数的屡次更新,直到损失函数最小化。在训练完结时,咱们冀望能有嵌入和评分函数,以满足咱们整合常识的指标。

HogWild- 分布式随机梯度降落

随机梯度降落的分布式是一个挑战。如果咱们同时通过调整参数来训练以最小化损失函数,就须要某种锁定机制。在传统的多线程开发中,咱们在更新过程中通过乐观或乐观锁定来锁定数据。锁定会减慢进度,但会确保后果的正确性。

侥幸的是,hogwild paper 证实了咱们不须要锁定机制。咱们能够简略地批量读取数据,计算参数调整,并将这些数据保留在共享参数空间中,而不思考其正确性。HogWild 算法正是这样做的。训练能够是分布式的,每个 HogWild 线程能够更新咱们的参数,而不思考其余线程。

我举荐这个博客来获取更多对于 HogWild 的信息:https://medium.com/@krishna_srd/parallel-machine-learning-with-hogwild-f945ad7e48a4

分布式训练

当图逾越数十亿个节点和数万亿条边时,很难在一台机器的内存中拟合所有参数。如果咱们在开始另一批之前期待每一批的完结来实现计算,也须要很多工夫。咱们的图是如此之大,这将有利于可能同时进行并行化的训练和参数学习。这个问题是由 Facebook 团队解决的,他们公布了 PBG 的论文。

节点按实体类型拆分,而后组织为分区:

https://torchbiggraph.readthedocs.io/en/latest/data_model.html


https://torchbiggraph.readthedocs.io/en/latest/data_model.html

https://www.sysml.cc/doc/2019/71.pdf

  1. 节点被划分为 P 个 bucket,边被划分为 PxP 个 bucket。不用对基数较小的实体类型进行分区。
  2. 训练与下列限度同时进行:

对于除第一个外的每个边 bucket(p1;p2),在前一个迭代中训练边 bucket(p1;*)或(*;p2)是很重要的。

只有多个边 buckets 在不相交的分区集上操作,它们能够并行训练。

https://www.sysml.cc/doc/2019/71.pdf

训练在多台机器上并行进行,并且每台机器有多个线程。每个线程依据调配的 bucket 和批数据计算参数更新。锁服务器依据建设的束缚散发训练 buckets。留神,锁服务器只管制 hogwild 线程中批数据的散布,而不控制参数更新。

PBG 嵌入个性

常识嵌入能够通过两种形式应用:

  • 链接预测。

​ 链接预测有助于通过查找可能连贯或行将连贯的节点来填补咱们常识中的空白。

​ 示例:该图示意客户和客户购买的产品。边是洽购订单。嵌入可用于造成下一个购买倡议。

  • 学习节点的属性

​ 嵌入能够用作特征向量作为各种分类模型的输出。所学的类能够填补咱们对对象属性的常识空白。

应用 MRR/Hits10 评估链路预测

这篇论文 Learning Structured Embeddings of Knowledge Bases 形容了这个过程,起初被用作掂量嵌入模型品质的办法,在包含 Facebook PBG 在内的许多其余论文上都有报道。

算法获取测试边的子集并执行以下操作:

  1. 通过将边的开始或完结替换为负采样边来损坏边。
  2. 在局部损坏的数据集上训练模型
  3. 计算测试数据集边的聚合 MRR 和 Hits10 度量。

均匀倒数排序(Mean reciprocal rank)

MRR 或 Mean reciprocal rank 是掂量搜寻品质的指标。咱们选取一个未损坏的节点,以间隔作为类似度得分来寻找“最近邻”。咱们依据类似度得分对最近的街坊进行排序,并冀望连贯的节点呈现在排序的顶部。MRR 会在节点没有歪斜到顶部的状况下升高精度得分。

另一种办法是 Hits10,咱们冀望损坏的节点呈现在前 10 个最近的街坊中。

https://www.sysml.cc/doc/2019/71.pdf

PBG 的钻研表明,在许多数据集上,MRR 指标随着咱们将资源分配到训练中而逐步减少。并行性不会影响排名品质,但能够节俭大量工夫。

能够通过简略地摸索和可视化图来执行进一步的评估。

https://ai.facebook.com/blog/open-sourcing-pytorch-biggraph-for-faster-embeddings-of-extremely-large-graphs/

下面的图像是依据 Freebase 常识图谱构建的嵌入的二维投影。如咱们所见,类似的节点被组合在一起。即便在精心筹备的二维投影图上,国家、数字、迷信期刊行业仿佛也有集群。

常识图谱模型的局限性

如上所述的常识图谱示意的是咱们常识的动态快照。它并不能反映常识是如何建设起来的。在事实世界中,咱们通过观察工夫模式来学习。尽管能够学习节点 A 和节点 B 之间的相似性,但就像 3 年前一样,很难看到节点 A 和节点 C 之间的相似性。

例如,如果咱们看一天森林,咱们会看到两棵大红杉之间的相似性。然而,如果没有对这片森林的长期察看,很难了解哪棵小树会长成一棵大红杉树。

现实状况下,咱们须要摸索在不同工夫点构建的一系列常识图谱,而后构建嵌入,这将蕴含代与代之间的相似性。

原文链接:https://towardsdatascience.co…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

正文完
 0