自然语言处理知识图谱

一文详解图表示学习

2022-06-30  本文已影响0人  晓柒NLP与药物设计

Graph Embedding与Word Embedding一样,目的是用低维、稠密、实值的向量表示网络中的节点。目前Graph Embedding在推荐系统、搜索排序、广告等领域非常流行,并且也取得了非常不错的实践效果。图Graph表示一种==二维==的关系,而序列Sequence表示一种==一维==的关系。因此,要将图转换为Graph Embedding,一般需要先通过一些算法把图变为序列;然后通过一些模型或算法把这些序列转换为Embedding。

一. 图表示学习意义

需要使用图形嵌入有以下几个原因:

二. 图表示学习常用方法

2.1 DeepWalk

DeepWalk方法是首先以随机游走(Random Walk)的方式在网络中进行节点采样,生成序列然后使用Skip-Gram模型将序列转换为Embedding的过程(仿照Word2vec)

算法步骤如下:

  1. 首先使用Random Walk的方式进行节点采样,其是一种可重复访问已访问节点的深度优先遍历算法。然后给定当前访问起始节点,从其邻居中随机选择一个节点作为下一个访问节点
  2. 重复此过程,直到访问序列长度满足预设条件
  3. 获取足够数量的节点访问序列后,使用Skip-Gram模型进行向量学习,最终获得每个节点的Embedding
2.1.1 随机游走(random walk)

对于无向图G=(V,E)e_{i,j}表示顶点v_i和顶点v_j之间边的权值(如果不存在边则为0)。使用随机游走构建长度为T的序列\mathcal{S}=\{s^{(1)},s^{(2)},\cdots, s^{(T)}\},从顶点v_i游走到顶点v_j的概率为
\begin{equation}p(s^{(t+1)}=v_j|s^{(t)}=v_i) = \begin{cases} \frac{e_{i,j}}{Z_i}, if \quad e_{i,j} \neq 0 \\ 0, if \quad e_{i,j} = 0 \end{cases}\end{equation} \tag{1}
其中,Z为所有以v_i为顶点的边的权值之和,即:
Z_i=\sum_{j=1}^{|V|}e_{i,j}\tag{2}

显然,顶点v_i和顶点v_j之间边的权值越大,越有可能从顶点v_i游走到顶点v_jrandom walk可以看作是一个可回头的深度优先搜索。有向图理论上可以进行随机游走,但是容易游走到出度为0的顶点,一般情况下,deep walk用于无向图比较多

2.1.2 word2vec(skip-gram)

使用随机游走得到句子序列后,根据word2vec算法(skip-gram模型)得到目标函数:
argmax \frac{1}{T}\sum_{t=1}^{T}\sum_{-c \leq j \leq c, j \neq 0}\log p(w_{s^{(t+j)}}|w_{s^{(t)}})\tag{3}
其中,w为顶点的向量表示,最开始为随机初始化,随着目标函数的不断优化,逐渐收敛,可以使用hierarchical softmaxnegative sampling实现p(w_{O}|w_I)

2.2 Line

LINE算法适用于任意类型的图,包括有向图、无向图、有权图和无权图。使用LINE算法学习到的embeddings可以保留顶点的局部结构和全局结构(local and global network structures)。其核心思想是使用一阶相似度first-order proximity表征==local structure==,使用二阶相似度second-order proximity表征==global structure==

2.2.1 相关定义
2.2.2 LINE with First-order Proximity

LINE with first-order proximity只适用于无向图公式(4)用来衡量顶点v_iv_j的向量表示之间的一阶相似度。
p_1(v_i,v_j)=\frac{1}{1+exp(-u_i^{T}u_j)}\tag{4}
其中,u_iu_j分别对应顶点v_iv_j的向量表示,顶点v_iv_j在原始图中的一阶相似度使用empirical probability定义,如公式(5)所示:
\hat{p}_1(i,j)=\frac{w_{i,j}}{W},W=\sum_{(i,j)\in E} w_{i,j}\tag{5}
为了使得学习到的embeddings能够保留顶点在原始图中的一阶相似度,最直接的做法是,最小化\hat{p}_1(\cdot,\cdot)p_1(\cdot,\cdot)两个分布之间的差异
O_1=d(\hat{p}_1(\cdot,\cdot),p_1(\cdot,\cdot))\tag{6}
使用KL-divergence来衡量分布间的差异(D_{KL}(P,Q)=\sum_i P(i)\log \frac{P(i)}{Q(i)}),LINE with first-order proximity的目标函数如式:
O_1=-\sum_{(i,j)\in E}w_{i,j}\log p_1(v_i, v_j)\tag{7}

2.2.3 LINE with Second-order Proximity

LINE with second-order proximity既可以使用于无向图,也可以适用于有向图。以有向图为例,每个顶点都有2个向量表示:

对于有向边(i,j),给定顶点v_i,顶点v_j作为v_i的上下文(context),顶点v_j相对于顶点v_i的一阶相似度为p_2(v_j|v_i)
p_2(v_j|v_i) = \frac{exp({u^{'}}_j^\top u_i)}{\sum_{k=1}^{|V|}{u^{'}}_k^\top u_i}\tag{8}
在原始图中,empirical probability为:
\hat{p}_2(v_j|v_i)=\frac{w_{i,j}}{d_i},d_i=\sum_{k\in N(i)}w_{i,k}\tag{9}
其中,N(i)表示顶点v_i的out neighbor(与v_i出边相连的顶点)。为了使得学习到的embeddings能够保留顶点在原始图中的二阶相似度,最小化\hat{p}_2(\cdot|v_i)p_2(\cdot|v_i)两个分布之间的差异:
O_2=\sum_{i\in V}d(\hat{p}_2(\cdot|v_i),p_2(\cdot|v_i))\tag{10}

O_2=-\sum_{(i,j)\in E}w_{i,j}\log p_2(v_j|v_i)\tag{11}

如果想要学习到的embedding既保留一阶相似度,也保留二阶相似度,最简单的做法是,分别使用LINE with first-order proximity和LINE with second-order proximity训练模型,将得到的embedding拼接

2.2.4 Optimization via Edge Sampling

在使用梯度下降算法优化目标函数(9)时,存在一个问题,如果边(i, j)被采样,Embedding_{i→j}如下:
\frac{\partial O_2}{\partial u_i}=w_{i,j}\frac{\partial\log p_2(v_j|v_i)}{\partial u_i}\tag{12}
显然边的权值影响梯度的计算,这会导致模型的learning rate难以确定,如果根据权重大的边确定学习率,那么权重小的边对应的梯度就很小,反之,如果根据权重小的边确定学习率,那么权重大的边对应的梯度就很大。为了解决这一问题,可以对原始图中的边进行采样,每条边被采样的概率正比于该边的权值。令W =(w_1,\cdots,w_{|E|}),w_{sum}=\sum_{i=1}^{|E|}w_i,在范围[0,w_{sum}]内生成一个随机数,选择随机数所在区间对应的边,作为采样边,可以使用alias table method将采样的复杂度从O(|E|)降至O(1)

2.3 Node2vec

Node2ve算法通过表征2种顶点间的关系,得到顶点的低维向量表示

  1. Homophily equivalence
  2. Structural equivalence

homophily equivalence表明直接相连的顶点或是在同一community中的顶点,其embeddings应该比较靠近,如图所示,顶点us_1s_2s_3s_4之间直接相连且属于同一community,因此,这些顶点的embedding在特征空间中比较靠近;structural equivalence表面在图中具有相似结构特征的顶点(顶点间不必直接相连,可以离得很远),其embeddings应该比较靠近,例如,顶点us_6都是各自所在community的中心,具有形似的结构特征,因此,顶点us_6的embedding在特征空间中比较靠近。Node2vec算法设计了一种灵活的邻域采样策略,允许在BFS和DFS之间平滑插值

2.3.1 特征学习框架

Node2vec算法希望,在给定顶点的条件下,其领域内的顶点出现的概率最大。即优化目标函数公式(13):
\max_f\sum_{u \in V}\log Pr(N_S(u)|f(u)) \tag{13}
对于每一个源顶点u\in VN_S(u)为根据采样策略S得到的邻域,为了简化目标函数,论文提出了2个假设:

  1. 条件独立性
  2. 特征空间对称性

假设1表示当源顶点u的特征表示f(u)给定时,Pr(n_i|f(u))Pr(n_j|f(u))无关(n_i\in N_S(u),n_j \in N_S(u),i\neq j)。因此,Pr(N_S(u)|f(u))可写为公式(14):
Pr(N_S(u)|f(u))=\Pi_{n_i \in N_S(u)}Pr(n_i|f(u))\tag{14}
假设2说明源顶点和其邻域内任一顶点,相互之间的影响是相同的。最自然的想法就是将Pr(n_i|f(u))写为公式(15):
Pr(n_i|f(u))=\frac{exp(f(n_i)^\top f(u))}{\sum_{v \in V}exp(f(v)^\top f(u))}\tag{15}
因此,Node2vec算法就需要解决两个问题

  1. 给定一个源顶点u,使用什么样的采样策略S得到其邻域N_S(u)
  2. 如何优化目标函数。

对于第二个问题,可以参考基于negative sampling的skip-gram模型进行求解,关键是确定采样策略S

2.3.2 邻域采样策略

Node2vec算法提出了有偏的随机游走,通过引入2个超参数pq来平衡BFS和DFS,从顶点v有做到顶点x的转移概率为公式(16)
p(c_i=x|c_{i-1}=v) = \begin{cases} \frac{\pi_{vx}}{Z}, if \quad (v,x)\in E \\ 0, otherwise \end{cases}\tag{16}

其中,x表示游走过程中的当前顶点,tv分别为x前一时刻的顶点和下一时刻将要游走到的顶点,\pi_{vx}=\alpha_{pq}(t,x)\cdot w_{vx}w_{vx}为边(v,x)的权值,\alpha_{pq}(t,x)定义如下:
\alpha_{pq}(t,x)=\begin{cases}\frac{1}{p}, if \quad d_{tx}=0\\1,if \quad d_{tx}=1\\ \frac{1}{q},if \quad d_{tx}=2\end{cases}\tag{17}
其中,d_{tx}=0表示顶点tx相同,d_{tx}=1表示顶点tx之间存在之间相连的边,d_{tx}=0表示顶点tx不存在直接相连的边,如图所示,在一个无权图中(可以看作是所有边的权值为1),在一次游走过程中,刚从顶点t游走到v,在下一时刻,可以游走到4个不同的顶点,tx_1x_2x_3,转移概率分别为\frac{1}{p}1\frac{1}{q}\frac{1}{q}

参数p和控制游走探索和离开起始节点附近的速度up越小,随机游走采样的顶点越可能靠近起始顶点;而q越小,随机游走采样的顶点越可能远离起始顶点

2.4 SDNE

2.4.1 SDNE模型架构

SDNE模型(Structural Deep Network Embedding)的结构图如下:

模型主要包括两个部分:无监督和有监督部分

2.4.2 二阶相似度(无监督)

如上图所示,这是一个自编码器,没有标签数据,是一种无监督学习

模型的输入x_i,是节点i的邻接矩阵,因此结构相似的顶点可以学习到相似的embedding向量,不断优化代价函数来捕捉全局结构特征,即二阶相似度

输出是\hat x_i,是重构后的邻接矩阵。其目标是:
f(x) \approx x\tag{18}
所以,二阶相似度损失函数定义为:
\mathcal{L}=\sum_{i=1}^n{||\hat{x_i}-x_i||^2_2}\tag{19}
由于网络的稀疏性,邻接矩阵中的0元素远多于非0元素,使用邻接矩阵作为输入的话要处理很多0,这样就做了太多无用功了。为了解决这个问题,对损失函数做了改进如下:
\mathcal{L_{2nd}}=\sum_{i=1}^n||(\hat{x_i}-x_i)\odot{b_i}||^2_2=||\hat{X}-X\odot{B}||^2_F\tag{20}
其中\odot是哈马达积,表示对应元素相乘。邻接矩阵中的0对应b=1, 非0元素的b>1,这样的目的是对于有边连接的节点增加惩罚,可以理解为对有边连接的节点赋予更高权重

在模型中,从x_iy_i^{(K)}是编码器,从y_i^{(K)}\hat x_i是解码器,y_i^{(K)}是节点i的Embedding向量,编码器的公式为:
y_i^{(1)}=\sigma{(W^{(1)}x_i+b^{(1)})}\\ y_i^{(k)}=\sigma{(W^{(k)}y_i^{(k-1)}+b^{(k)})}, k=2,...,K\tag{21}
其中,\mathbf W^{(k)}为第k层的参数矩阵,b^k为第k层的偏置项

2.4.3 一阶相似度(有监督)

前导知识——拉普拉斯映射(Laplacian Eigenmap),其目的是降维,目标函数如下:
\sum_{i,j}\mathbf W_{ij}||y_i - y_j||^2\tag{22}
y_i^{(K)}是节点i的Embedding向量,若顶点v_iv_j之间存在边,那他们的Embedding的结果y^{(K)}应该也很接近,所以,借助拉普拉斯的思想,其一阶相似度为:
\mathcal{L_{1st}}=\sum_{i,j=1}^n{s_{i,j}||y_i^{(K)}-y_j^{(K)}||^2_2}=\sum_{i.j=1}^n{s_{i,j}||y_i-y_j||^2_2}\tag{23}
最小化\mathcal{L_{1st}},可以使得一条边的两个节点在嵌入空间中的表示相对接近,为了防止过拟合,加入正则化,SDNE的loss为:
\mathcal{L_{mix}}=\mathcal{L_{2nd}+\alpha{\mathcal{L_{1st}}}}+\nu{\mathcal{L_{reg}}} =||(\hat{X}-X)\odot{B}||^2_F+\alpha{\sum_{i.j=1}^n{s_{i,j}||y_i-y_j||^2_2}}+\nu{\mathcal{L_{reg}}}\tag{24}
其中,正则化\mathcal{L_{reg}}的计算公式如下:
mathcal{L_{reg}}=\frac{1}{2}\sum_{k=1}^k({||W^{(k)}||^2_F+||\hat{W}^{k}||_F^2})\tag{25}
\alpha为控制1阶损失的参数,\nu为控制正则化项的参数

2.5 Graph2vec

Graph2Vec原理上和DeepWalk差不多,也是尝试借用word2vec来训练,只是这次为了嵌入整张图,所以尝试利用子图来训练。类似文档嵌入doc2vec,通过最大化作为输入的文档,来预测随机单词的可能性,Graph2vec预测图中子图的概率

2.5.1 算法详解

算法由两个主要组件组成:

  1. 对给定图中每个节点周围生成根子图
  2. 学习给定图嵌入

提取根子图:

负采样Skip-gram:

上一篇下一篇

猜你喜欢

热点阅读