主流图嵌入模型的原理和应用

Posted 腾讯技术工程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主流图嵌入模型的原理和应用相关的知识,希望对你有一定的参考价值。

作者:蒋铭和全聪,腾讯 PCG 应用研究员

本文梳理了近几年主流的图嵌入(Graph Embedding)模型,并辅以相应的工业界应用,旨在通过算法原理+业务应用的方式更好地帮助大家了解这一领域的发展历史和现状,也希望能为准备入坑 Graph Embedding 的同学提供一些有价值的信息。笔者个人水平有限,欢迎大家批评指正。

1. 概述与基础

图结构(Graph)广泛存在于现实各种应用场景中。比如社交媒体,用户之间的关注关系可以构成一个庞大的社交图网络;又比如推荐系统,用户对商品的购买、浏览和评分等行为可以抽象成用户和商品的交互图。然而,现实中的图结构大多都很复杂。一个复杂的图网络中可能包含十亿个节点、千万条边和上十万个簇,且不同的边可能代表着节点之间不同的关系。因此,如何有效地对图结构信息进行建模是学术界和工业界持续关注的焦点。

近年兴起的图嵌入(Graph Embedding)方法,为图结构的建模提供了很好的解决思路,并在工业界被广泛的应用。嵌入(Embedding)的思想是:把图中的节点或者边嵌入到一个低维的向量空间中,且节点或边在该低维空间的关系能比较完整地保留原图的结构信息(图 1)。换而言之,图嵌入的过程等价于对图中节点或边进行降维表示学习的过程。

图1 图嵌入过程示例

本文介绍了常见的 Graph Embedding 算法及其基本原理,另外还会对 Graph Embedding 在工业界(尤其是我司)实际业务场景中的落地情况进行简单地介绍和总结。

1.1 Word2vec 介绍[1]

说到 Graph Embedding,就不得不从 Word2vec 算法进行切入。2013 年,Google 的 Mikilov 等大神们提出的 Word2vec 算法,正式为我们开启了“万物皆可 embedding”的时代。Word2vec 最早应用在自然语言处理领域(NLP)。大神们认为:同一语义上下文的单词之间存在天然的语义关系。例如:如果把“拜仁赢得欧冠冠军。”这句话看作是同一个语义上下文,“拜仁”这个词与“赢得”,“欧冠”和“冠军”等单词有比较强的语义关系。为了捕捉这一语义关系,Word2vec 利用同一上下文的单词来学习各自的词向量表示(Word Embedding)。

图2 Word2vec滑动窗口示例

具体地,Word2vec 利用语义窗口来捕捉每个句子中的语义上下文,并通过对语义窗口进行滑动,学习每一个句子序列中不同语义上下文窗口中的单词 embedding。还是以句子“拜仁赢得欧冠冠军。”为例,如图 2,假设滑动窗口的长度为 1,当“赢得”这个词位于滑动窗口的中心时,那么“拜仁”,和“欧冠”这两个词就是“赢得”的上下文。因此,我们可以把“赢得”定义为中心词(Center Word),把“拜仁”和“欧冠”这两个上下文词语定义为背景词(Context Word)。在 Word2vec 中,每个词语都关联着两个词向量,分别为中心词向量背景词向量,取决于当前时刻该词语的角色。为了学习每个单词的中心词向量和背景词向量,Word2vec 提出了两种模型,分别是以中心词预测背景词的 Skip-gram 模型,和以背景词去预测中心词的 C-bow 模型。由于它们的模型结构正好相反且前者是目前被使用更多的模型,本文将以 Skip-gram 为例提供关于 Word2vec 的进一步解释。

1.1.1 Skip-gram

在 Skip-gram 模型中,Word2vec 旨在通过中心词来最大化背景词出现的联合概率分布,并以此对中心词和背景词进行有效的嵌入表示(例如,当前以“赢得”为中心词进行上下文预测时,单词“拜仁”和“欧冠”出现的概率需要是最大的):

公式(1)

其中, 代表词库大小, 为中心词, 为背景词,m 为滑动窗口的大小。 为给定中心词 下背景词 出现的概率。那么问题来了,Skip-gram 是如何基于公式(1)这一目标函数分别学习中心词向量和背景词向量的呢?请各位看官稍安勿躁,接下来,慢慢为各位解释 Skip-gram 模型实现中心词预测背景词的过程。

图3 Skip-gram模型图

如图 3 所示,Skip-gram 包含两个权重矩阵,分别为输入层到隐含层之间的 矩阵和隐含层到输出层之间的 矩阵。前者表示中心词向量矩阵,后者表示背景词向量矩阵,分别代表着单词作为不同角色所关联的词向量。开始,Skip-gram 模型的输入为中心词的 one-hot 向量表示,从输入层到隐含层的映射过程,实际上是以中心词 的 one-hot 表示为索引,对矩阵 的行进行查表的过程,并得到中心词 的词向量 。得到 后,为了预测概率 ,skip-gram 在隐含层用其与背景词矩阵 相乘,并把最终的结果带入到 Softmax 函数中:

公式(2)

其中,向量 表示背景词 关联的背景词向量。从公式(2)中可以看到,在预测背景词 的概率时,Skip-gram 需要对整个词典中的所有单词进行遍历计算。因此,在给定中心词,预测每一个背景词出现的概率时,公式(2)的计算复杂度为 。现实中,词表的大小 往往达到百万甚至千万级别,这样的计算代价显然是可接受的。为了解决单词预测复杂度的问题,Mikilov 他们提出了两种优化训练的方法,分别是负采样negative sampling)和层次 softmax。因为负采样在实际情况中应用更广,本文在此只提供关于负采样的思想和原理。对后者感兴趣的童鞋欢迎去阅读 Xing Rong 的论文[2]或 Youtube 相关的视频资料[3]。

1.1.2 负采样机制

因为 Word2vec 最终的目的是获得所有词的向量表示,使得语义相似的词出现在嵌入空间中相近的位置。训练一个精确的背景词预测概率模型倒不是它的最终目标。所以在利用中心词预测背景词时,对所有单词的概率进行准确地预测是非必要的。换而言之,给定中心词 ,除了精确预测同一语义上下文中背景词 的出现概率,Skip-gram 无需精确预测语义窗口外所有单词的出现概率。因此,skip-gram 在进行概率预测时,引入了 个噪声词(负样本)。具体地,在给定当前中心词 和其上下文时: