嵌入(embedding)方法是目前文本分析,知识图谱相关中非常常见的一种算法。其为表示学习的一类方法,可以自动地从数据中学习“有用”的特征,并可以直接用于后续的具体任务。后面学习的相关嵌入学习均为表示学习中的内容。

节点嵌入

关于图的一些信息如何能够转化为计算机可以识别的语言呢?通常的方法也是进行嵌入(embedding)。在此之前,我们已经学习了双曲嵌入:

  • 双曲嵌入深度学习
  • 双曲嵌入论文与代码实现——1. 数据集介绍
  • 双曲嵌入论文与代码实现——2. 方法与代码

其将图结构嵌入到双曲空间中而后根据双曲距离进行embedding的训练。这种做法其实是一种比较新的方法,而在此之前的那些传统的节点嵌入方法都没有进行学习。因此,基于双曲空间的节点嵌入方法,本系列博客不再进行具体介绍。


总体而言,节点的嵌入通常采取编码-解码结构进行训练。编码示意图如下:

embedding算法 embedding的方法_机器学习

总体的编解码核心思路如下:

  • 编码器ENC定义了一个从图中的节点embedding算法 embedding的方法_图_02到一个空间中的嵌入embedding算法 embedding的方法_图_03的映射;

embedding算法 embedding的方法_图_04

  • 定义一个节点相似度函数(即原始网络中的相似度度量, similarity);
  • 解码器DEC定义一个从嵌入到相似度评分的映射;
  • 通过编码器优化参数,使得下式左右两边尽可能接近:
    embedding算法 embedding的方法_图_05

左式表示原始网络中节点embedding算法 embedding的方法_embedding算法_06的相似度;右式表示解码后的相似度评分。


基于随机游走的方法

1. DeepWalk

DeepWalk方法受到 word2vec 的启发,首先选择某一特定点为起始点,做随机游走得到点的序列,然后将这个得到的序列视为句子,用 word2vec 来学习,得到该点的表示向量。DeepWalk通过随机游走去可以获图中点的局部上下文信息,因此学到的表示向量反映的是该点在图中的局部结构,两个点在图中共有的邻近点(或者高阶邻近点)越多,则对应的两个向量之间的距离就越短。

embedding算法 embedding的方法_节点嵌入_07

图上的随机游走:给定一个图和一个起点,我们随机选择它的一个邻居,并移动到这个邻居;接着我们随机选择这一点的一个邻居,然后继续移动到它,重复这个操作。以这种方式访问的(随机)节点序列是图上的一个随机游走。

我们的目标是学习到一个映射 embedding算法 embedding的方法_节点嵌入_08 embedding算法 embedding的方法_节点嵌入_09

Log-likelihood 定义如下:
embedding算法 embedding的方法_embedding算法_10

  • embedding算法 embedding的方法_机器学习_11 是从节点 embedding算法 embedding的方法_机器学习_12 出发,通过游走策略embedding算法 embedding的方法_节点嵌入_13 所能到达的节点。给定节点 embedding算法 embedding的方法_机器学习_12,我们想要学习的特征表示是节点对随机游走邻居 embedding算法 embedding的方法_机器学习_11的预测。直觉上,我们的优化目的是要使得从embedding算法 embedding的方法_机器学习_12出发,尽可能使预测到邻居的概率更大,然后遍历所有的节点对总体进行优化。

下面为具体的算法过程:

  • 从图的每个节点embedding算法 embedding的方法_embedding算法_17开始,使用一些随机游走策略embedding算法 embedding的方法_节点嵌入_13进行短的固定长度随机游走;
  • 对于每个节点 embedding算法 embedding的方法_机器学习_12 计算 embedding算法 embedding的方法_机器学习_11,即从embedding算法 embedding的方法_机器学习_12开始游走路过的节点集合;
  • 给定节点embedding算法 embedding的方法_机器学习_12,预测其邻居结点embedding算法 embedding的方法_机器学习_23,通过最大化似然函数(下式)最优化嵌入:

embedding算法 embedding的方法_embedding算法_24

上述的式子其实等价于下面的损失函数:

embedding算法 embedding的方法_机器学习_25

  • 我们用softmax函数来参数化 embedding算法 embedding的方法_embedding算法_26

embedding算法 embedding的方法_节点嵌入_27

因此实际的损失函数为:
embedding算法 embedding的方法_图_28

但注意到上式的分母embedding算法 embedding的方法_人工智能_29需要遍历网络的所有节点,计算量非常大。为了减少算法复杂度,可以使用负采样策略(Negative sampling,REF: https://arxiv.org/pdf/1402.3722.pdf)。

embedding算法 embedding的方法_人工智能_30

其中,embedding算法 embedding的方法_机器学习_31为节点随机分布,embedding算法 embedding的方法_人工智能_32

这样只要随机选取embedding算法 embedding的方法_图_33个“负样本”,即可快速近似到原式,在实际的操作中,通常选自5-20之间的数。

最终优化时用随机梯度下降的方法进行优化即可。

至此,整个基于随机游走的嵌入方法已经基本阐述完了。但有一个关键问题是:我们应该使用什么策略来进行随机游走?

通常最简单的做法是直接固定游走长度,每个邻接节点都是等概率进行游走。但这样的游走其实并不高效,基于这个原因,node2vec方法被提出。

2. node2vec

与DeepWalk相似,node2vec通过最大化随机游走得到的序列中的节点出现的概率来保持节点之间的高阶邻近性。与DeepWalk的最大区别在于,node2vec采用有偏随机游走,在广度优先(bfs)和深度优先(dfs)图搜索之间进行权衡,从而产生比DeepWalk更高质量和更多信息量的嵌入。

对于节点 embedding算法 embedding的方法_人工智能_34,node2vec发展了一个有偏的二阶随机游走策略 embedding算法 embedding的方法_embedding算法_35 来生成网络的领域 embedding算法 embedding的方法_机器学习_36。核心思想为:使用一个灵活、有偏差的随机游走,其可以在网络的局部和全局视角之间进行权衡。

embedding算法 embedding的方法_embedding算法_37

为此,我们定义节点embedding算法 embedding的方法_人工智能_34的两种邻居embedding算法 embedding的方法_机器学习_39。如上图所示,embedding算法 embedding的方法_embedding算法_40 为局部微观视角下的游走;embedding算法 embedding的方法_embedding算法_41为全局宏观视角下的游走。

这个非常有意思,这种游走策略其实是考虑了节点之间的层级特点(可以与双曲空间的嵌入相结合),考虑到了二阶性质。具体算法思想如下:

  • 设置两个参数:返回参数embedding算法 embedding的方法_人工智能_42,定义随机游走返回到前一个节点的概率;参数embedding算法 embedding的方法_embedding算法_43为探索参数,用于控制较大邻域的发现。
  • 算法需要记忆上一步走过的节点。

embedding算法 embedding的方法_机器学习_44

假设我们上一步从节点embedding算法 embedding的方法_embedding算法_45走到了绿节点embedding算法 embedding的方法_图_46,此时在绿节点上有四种走法:

  1. 返回到红色节点embedding算法 embedding的方法_节点嵌入_47的概率是embedding算法 embedding的方法_embedding算法_48;
  2. 返回到与前一个红节点没有连接的节点embedding算法 embedding的方法_图_49的概率是embedding算法 embedding的方法_图_50;
  3. 到红节点embedding算法 embedding的方法_节点嵌入_47相邻节点embedding算法 embedding的方法_embedding算法_52的概率是embedding算法 embedding的方法_图_53

注意:这里的概率是未归一化的,归一化之后才是真实的概率。因此,我们可以根据距离上一步节点embedding算法 embedding的方法_embedding算法_45的距离,来定义三种不同的概率:

embedding算法 embedding的方法_人工智能_55

局部游走的情况用embedding算法 embedding的方法_人工智能_56进行控制,其越小,越可能进行局部的随机游走;全局游走用embedding算法 embedding的方法_embedding算法_57控制,其越小越可能进行全局的随机游走。最后在实际的应用中固定随机游走的步长embedding算法 embedding的方法_图_58,而后剩下的优化过程和损失函数的定义都和前文一样了。

后续还有一系列文章是基于有偏随机游走进行的,不再进行详细的介绍。

参考