修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

v5.0
搜索
    v5.0

      Skip-gram模型

      Skip-gram(SG)模型是自然语言处理(NLP, Natural Language Processing)领域中用于创建词嵌入的重要方法。它也被用于图嵌入算法,如Node2VecStruc2Vec,来生成节点嵌入。

      背景介绍

      Skip-gram模型来源于Word2Vec算法。Word2Vec将单词映射到一个向量空间,在这个向量空间中,语义相似的单词由距离接近的向量表示。Google的T. Mikolov等人于2013年提出Word2Vec。

      在图嵌入领域,一般认为是2014年提出的DeepWalk算法首次将Skip-gram模型应用于生成图中节点的向量表示。其核心概念是将节点视为“单词”,将随机游走生成的节点序列视为“句子”和“语料库”。

      后续提出的Node2Vec、Struc2Vec等图嵌入算法对DeepWalk进行了若干改进,但都仍使用Skip-gram模型。

      接下来,我们将使用Skip-gram原始应用的自然语言作为例子进行说明。

      模型概览

      Skip-gram的基本模式是通过给定的一个目标词(Targat Word)预测出它的若干个上下文单词(Context Word)。如下图所示,单词w(t)被输入模型,然后模型生成与w(t)相关的四个上下文词汇:w(t-2)w(t-1)w(t+1)w(t+2)。在这里,符号+/-表示与目标词的前后上下文。生成的上下文单词数量可以根据需要进行调整。

      然而,很重要的一点是,Skip-gram模型的最终目标并不是预测。它的真正任务是获得映射关系中的权重矩阵(在图中表示为PROJECTION),该权重矩阵代表了单词的向量表示。

      语料库

      语料库(Corpus)是模型用来学习单词之间语义关系的句子或文本集合。

      假设一个语料库中的所有不同单词组成一个大小为10的词汇表(Vocabulary),这些单词分别是:graph、is、a、good、way、to、visualize、data、very、at。

      语料库中包含一系列若干这些单词构成的句子,其中一个是:

      Graph is a good way to visualize data.

      滑动窗口采样

      Skip-gram模型采用滑动窗口采样(Sliding Window Sampling)技术来生成训练样本。这种方法使用一个“窗口”,依次将窗口的中心目标位置放在句子中的每个单词上。目标单词分别与它前后范围在window_size内的每个上下文单词组合在一起。

      以下是当window_size=1时抽样过程的示例:

      需要留意的是,当window_size>1时,所有落在窗口内的上下文单词,无论它们与目标单词的距离远近,其重要性没有区别。

      独热编码

      模型无法直接识别单词,因此必须将单词转换为机器可读的表示形式。

      对单词进行编码的一种常见方法是独热编码(One-hot Encoding)。在这种方法中,每个单词被表示为一个唯一的二进制向量,其中只有一个元素是“热”的(1),而其他所有元素都是“冷”的(0)。向量中1的位置对应于词汇表中单词的索引。

      以下是将独热编码应用于示例词汇表的结果:

      单词 独热编码向量
      graph 1000000000
      is 0100000000
      a 0010000000
      good 0001000000
      way 0000100000
      to 0000010000
      visualize 0000001000
      data 0000000100
      very 0000000010

      模型架构

      Skip-gram模型的架构如上所示,其中:

      • 输入向量xV×1是目标单词的独热编码,V是词汇表中的单词数。
      • WV×N是输入层 → 隐藏层的权重矩阵,N是单词嵌入的维度。
      • hN×1是隐藏层向量。
      • WN×V是隐藏层 → 输出层的权重矩阵。WW不同,W不是W的转置。
      • uV×1是应用激活函数Softmax前的向量。
      • 每个输出向量ycc=12...C)也被称为一个面板(Panel),C个面板对应于目标单词的C个上下文单词。

      Softmax:激活函数Softmax能够将一个数值向量归一化为一个概率分布向量。转换后的向量中,所有分量的概率总和等于1。Softmax的公式如下:

      前向传播过程

      在我们的示例中,V = 10,设置N = 2。先随机初始化权重矩阵WW,如下所示。接着,我们将使用样本 (is, graph)、(is, a) 进行说明。

      输入层 → 隐藏层

      计算隐藏层向量h

      由于x是一个仅有xk=1的独热编码向量,h就对应于矩阵W的第k行。这个操作本质上是一个简单的查表(Lookup)过程:

      其中vwI是目标单词的输入向量(Input Vector)。

      事实上,矩阵W的每一行,表示为vw,将被视为词汇表中每个单词的最终嵌入结果。

      隐藏层 → 输出层

      计算向量u

      向量u的第j个分量等于向量h与矩阵W的第j列向量的转置的点积:

      其中,vwj是词汇表中第j个单词的输出向量(Output Vector)。

      在Skip-gram模型的设计中,词汇表中的每个单词都有两种不同的表示:输入向量vw和输出向量vw。输入向量代表单词作为目标词时的表示,而输出向量则代表单词作为上下文词时的表示。

      在计算过程中,uj本质上是目标单词的输入向量vwI与词汇表中第j个单词的输出向量vwj的点积。Skip-gram模型的设计原则之一是,两个向量越相似,它们的点积就越大。

      此外,值得强调的是,Skip-gram最终只使用输入向量作为单词的嵌入表示。输入和输出向量的分离简化了计算过程,并且提高了模型训练的效率和准确性。

      计算输出面板yc

      其中,yc,jyc的第j个分量,表示考虑给定目标词时,预测得出词汇表中第j个单词的概率。显然,所有概率的总和为1

      概率最高的C个词被视为预测的上下文词。在我们的示例中,C=2,预测的上下文词分别是good和visualize。

      反向传播过程

      为了调整WW中的权重,使用SGD进行误差反向传播

      损失函数

      我们希望最大化C个真实的上下文单词的概率,即最大化这些概率的乘积:

      其中,jc*是期望的第c个输出上下文单词的索引。

      由于在通常情况下,最小化的目标更为直观和易行,因此我们对上述目标进行一些转换:

      因此,Skip-gram的损失函数E为:

      计算E相对于uj的偏导数:

      为了简化后续的表示,定义以下内容:

      其中,tc是第c个期望输出上下文单词的独热编码向量。在我们的示例中,t1t2是单词graph和a的独热编码向量,因此计算得到e1e2如下:

      因此,Euj可以写成:

      带入示例中的数值进行计算:

      输出层 → 隐藏层

      调整矩阵W中的所有权重,这意味着所有单词的输出向量都会更新。

      计算E相对于wij的偏导数:

      根据学习率η调整wij

      设置η=0.4。举例来说,w14=0.86w24=0.67被更新为:

      w14 = w14 - η ( e1,4 + e2,4 ) h1 = 0.86 - 0.4 × 0.314 × 0.65 = 0.78
      w24 = w24 - η ( e1,4 + e2,4 ) h2 = 0.67 - 0.4 × 0.314 × 0.87 = 0.56

      隐藏层 → 输入层

      只调整矩阵W中与目标单词输入向量相对应的权重。

      向量h是通过查找矩阵W的第k行获得的(假设xk=1):

      计算E相对于wki的偏导数:

      根据学习率η调整wki

      在我们的示例中,k等于2,因此w21=0.65w22=0.87被更新:

      E w21 = ( e1,1 + e2,1 ) w11 + ( e1,2 + e2,2 ) w12 + ... + ( e1,10 + e2,10 ) w1,10 = 0.283
      w21 = w21 - η E w21 = 0.65 - 0.4 × 0.283 = 0.54

      E w22 = ( e1,1 + e2,1 ) w21 + ( e1,2 + e2,2 ) w22 + ... + ( e1,10 + e2,10 ) w2,10 = 0.081
      w22 = w22 - η E w22 = 0.87 - 0.4 × 0.081 = 0.84

      优化计算效率

      我们已经探讨了Skip-gram模型的原始形式。然而,为了确保模型在实际应用中的计算复杂性保持可行和实用,必须加入一些优化措施。点击这里继续阅读。

      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写