Metapath2vec的前世今生

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Metapath2vec的前世今生相关的知识,希望对你有一定的参考价值。

参考技术A

最近看到的一些文章会提到Metapath2vec。于是乎抽了点时间整理了一下从word2vec方法发展到metapath2vec的路径。比较单纯的算是知识总结。本文尽量阐述思想,不过度使用公式表达。

本文中可能会涉及到的比较重要的知识,及其出处:

word2vec: Efficient Estimation of Word Representations in Vector Space

论文地址: https://arxiv.org/pdf/1301.3781.pdf

word2vec: word2vec Parameter Learning Explained

论文地址: https://arxiv.org/abs/1411.2738

Random walk:Random Walk: A Modern Introduction

书籍地址: http://www.math.uchicago.edu/~lawler/srwbook.pdf

Deepwalk:DeepWalk: Online Learning of Social Representations

论文地址: https://arxiv.org/pdf/1403.6652.pdf

node2vec:node2vec: Scalable Feature Learning for Networks

论文地址: https://arxiv.org/pdf/1607.00653.pdf

综述:LEARNING REPRESENTATIONS OF GRAPH DATA: A SURVEY

论文地址: https://arxiv.org/abs/1906.02989v2

在深度学习的应用过程中,Embedding 这样一种将离散变量转变为连续向量的方式为神经网络在各方面的应用带来了极大的扩展。该技术目前主要有两种应用,NLP 中常用的 word embedding 以及用于类别数据的 entity embedding。这一章节中,我们所有的探讨都围绕以下两个问题:

上面说了,Embedding 是一个将离散变量转为连续向量表示的一个方式。在神经网络中,embedding是非常有用的,因为它不光可以减少离散变量的空间维数,同时还可以有意义的表示该变量。

我们可以总结一下,embedding 有以下 3 个主要目的:

要了解 embedding 的优点,我们可以对应 One-hot 编码来观察。One-hot 编码是一种最普通常见的表示离散数据的表示,首先我们计算出需要表示的离散或类别变量的总个数 N,然后对于每个变量,我们就可以用 N-1 个 0 和单个 1 组成的 vector 来表示每个类别。这样做有两个很明显的缺点:

因此,考虑到这两个问题,表示类别变量的理想解决方案则是我们是否可以通过较少的维度表示出每个类别,并且还可以一定的表现出不同类别变量之间的关系,这也就是embedding 出现的目的。而为了更好的表示类别实体,我们还可以是用一个 embedding neural network 和 supervised 任务来进行学习训练,以找到最适合的表示以及挖掘其内在联系。

neural network embedding中最早的应用之一就是word2vec。

Word2Vec是从大量文本语料中以无监督的方式学习语义知识的一种模型,它被大量地用在自然语言处理(NLP)中。那么它是如何帮助我们做自然语言处理呢?Word2Vec其实就是通过学习文本来 用词向量的方式表征词的语义信息 ,即 通过一个嵌入空间使得语义上相似的单词在该空间内距离很近 。Embedding其实就是一个映射,将单词从原先所属的空间映射到新的多维空间中,也就是把原先词所在空间嵌入到一个新的空间中去。

举个例子:
有四个词:man, woman, king, queen.我们通常是希望这四个词的embedding结果有相近的(距离)关系。man和woman的距离比man和queen的距离小,类似地,man和king的距离与woman和queen的距离相差无几,但比man和queen的距离以及woman和king的距离更小。

Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文。而CBOW是给定上下文,来预测input word。如下图所示。

下图表达的是CBOW的网络结构,这里是输入是多个单词,一般是 求和然后平均再进行计算 ,最终的损失函数保持不变。

下图表示skip-gram的网络结构,输入一个词,预测周边的词。

正如我们所看到的,如果想要计算相关的模型,对于我们来说,计算代价是很大的。因此有了hierarchical softmax和negative sampling两个方法。这里稍微提一下hierarchical softmax这个方法,其本质是将一个N分类问题,通过建立树模型,变成一个log(N)次二分类问题。今天的重点在negative sampling。

负采样的思想更简单直接:in order to deal with the difficulty of having too many output vectors that need to be updated per iteration , we only update a sample of them .

这就是此思想最核心的部分,它的实现过程则是如下面的例子:

当训练样本 ( input word: "fox",output word: "quick") 来训练我们的神经网络时,“ fox”和“quick”都是经过one-hot编码的。如果vocabulary大小为10000时,在输出层,我们 期望对应“quick”单词的那个神经元结点输出1,其余9999个都应该输出0 。这9999个我们期望输出为0的神经元结点所对应的单词我们称为“negative” word。使用负采样时,我们将随机选择 一小部分的negative words(比如选5个negative words)来更新对应的权重 。我们也会 对我们的“positive” word进行权重更新 (在我们上面的例子中,这个单词指的是”quick“)。

下面请出今天的一号主角, 负采样目标函数表达式

因此,这个目标函数可以理解为两方面的限制:

word2vec是将词变成向量,顾名思义,node2vec其实就是将复杂网络中的节点变成向量。其核心思想为: 生成随机游走,对随机游走采样得到(节点,上下文)的组合,然后用处理词向量的方法对这样的组合建模 得到网络节点的表示。

Deepwalk和node2vec的思想是高度一致的。相比于deepwalk,node2vec在生成随机游走过程中做了一些创新。这里我们不对两者进行深入比较,但由此提出一个结论,也请出今天的二号主角, 这一类编码方式的核心结构 :我个人把它看做是“上、下”结构

:想尽一切办法,在你的网络中进行游走,并采集成序,具体什么游走策略取决于你想采集到什么信息。

:将采集好的序当作文本,后续与处理词向量的方法相似。

下面以node2vec为例,简单介绍一下这个过程。

采序的目的很单纯:

当然,你采序的思想反映了你希望获取到什么样的信息。论文原文中提到关于广度优先或者深度优先的采序方式在本质上就表达了对不同累心信息的重视。 BFS倾向于在初始节点的周围游走,可以反映出一个节点的邻居的微观特性;而DFS一般会跑的离初始节点越来越远,可以反映出一个节点邻居的宏观特性。 因此!因此!因此! 采序策略是直接反应操作者对哪部分信息更加重视!(二号主角再度出现)

node2vec原文中提出的随机游走策略,实际上就是 综合BFS与DFS的策略 。下面我们细细品一哈。

上图表示我们 刚刚从已经采集了t到v ,那么下一个临幸的对象应该是谁?原文作者,给出了以下的转移概率:

释一下这个分布:

参数p、q的意义分别如下:
返回概率p:

出入参数q:

当p=1,q=1时,游走方式就等同于DeepWalk中的随机游走

再一次,采序策略是 直接反应操作者对哪部分信息更加重视! (二号主角再度出现)!

这部分我们只挑重点的说,原文作者通过扩展skipgram,定义了目标函数:

到此,我们已经基本了解到了embedding方法中,这一类方法的结构特点(所谓“上、下”)。但是之前接触的方法均是 处理同质网络的方法 ,而metapath2vec恰恰是可以处理异质网络的一个方法。

Metapath2vec是Yuxiao Dong等于2017年提出的一种用于异构信息网络(Heterogeneous Information Network, HIN)的顶点嵌入方法。metapath2vec使用基于meta-path的random walks来构建每个顶点的异构邻域,然后用Skip-Gram模型来完成顶点的嵌入。在metapath2vec的基础上,作者还提出了metapath2vec++来同时实现异构网络中的结构和语义关联的建模。

这里说说metapath的贡献:

下面我们看看metapath2vec是怎么样实现对异质网络编码的。

对于一个异质网络 ,目标是学习到 维的表达式,其中 的长度远小于邻接矩阵边长,并且同时保持图的结构信息与语义关系。

这部分划重点 :虽然顶点的类型不同,但是 不同类型的顶点的表征向量映射到同一个维度空间 。由于网络异构性的存在,传统的基于同构网络的顶点嵌入表征方法很难有效地直接应用在异构网络上。

metapath2vec方法,着重强调对采序过程的改进。其训练过程方面的改进并不明显。

meta-path-based random walk

该随机游走方式可以同时 捕获不同类型顶点之间语义关系和结构关系 ,促进了异构网络结构向metapath2vec的Skip-Gram模型的转换。

此处有个 小技巧 。一般来说metapath的定义都是 对称 的,比如:一个meta-path的scheme可以是"o-a-p-v-p-a-o"。

这个时候可以将这一小节的内容对比上面4.1 采序中的内容,可以发现metapath的第一个核心贡献:采序策略。

顾名思义,通过最大化条件概率来学习异质网络的顶点特征。

这个时候再次请出我们的一号主角,原始skip-gram的负采样下的目标函数:

有没有发现区别。本质上的区别非常细微。甚至可以说没有区别。因此,这部分最主要的贡献在“采序”升级。

上面我看到了metapath2vec对“上”部分的升级。下面我们看看metapath2vec++是怎么对“下”进行升级的。
主要两点:

首先,softmax函数根据不同类型的顶点的上下文 进行归一化,即是:

这里的目标函数和我们的一号主角虽然也没有本质区别。但是!但是!但是!异质网络的异质信息不仅仅在采序中体现出来,也在目标函数中被体现出来。我把metapath2vec的目标函数和metapath2vec++的目标函数放在一起比较看看:

这里也就引出了metapath2vec++在“训练”目标上的升级。

实验效果说明,下图是原论文中的截图。类别聚类准确率:

人工智能的前世今生

腾讯叮当 AI 助手中的 “AI” 是 “人工智能” 的英文缩写,而人工智能究竟是什么?它与深度学习、神经网络的关系是什么?下面这段视频可以给你答案。






推荐阅读:






以上是关于Metapath2vec的前世今生的主要内容,如果未能解决你的问题,请参考以下文章

云计算的前世今生

Lambda的前世今生

原创 | 函数 scanf 的前世今生

GIT前世今生

.Net Core001.NetCore前世今生

科普文JavaScript前世今生 and 安全隐患