word2vec

  • 基于上下文得词汇表征:它的核心想法是:一个单词的意思是由经常出现在它附近的单词给出的。当一个单词 w w w出现在文本中时,它的上下文是出现在其附近的一组单词(在一个固定大小的窗口中),基于海量数据,使用 w w w的许多上下文来构建 w w w的表示。

Word2vec介绍

  • 词向量表示:

    • 词向量有时被称为词嵌入或词表示。
    • 稠密词向量是分布式表示。
  • Word2vec是一个学习单词向量的框架,思路:

    • 基于海量文本语料库构建
    • 固定词汇表中的每个单词都由一个向量表示
    • 文本中的每个位置t,其中有一个中心词c和上下文(“外部”)单词o
    • 使用c和o的词向量来计算概率P(o|c),即给定中心词推断上下文词汇的概率。(反之亦然)
    • 不断调整词向量来最大化这个概率。

    举例:下图窗口大小为 j = 2 j=2 j=2时的 P ( w t + j ∣ w t ) P(w_{t+j}|w_t) P(wt+jwt),它的中心词为into。

    3

  • Word2vec目标函数

    • 似然函数 :对于每个位置t=1,…,T,在大小为m的固定窗口内预测上下文单词,给定中心词 w j w_j wj,似然函数可以表示为:
      L ( θ ) = ∏ t = 1 T ∏ − m ≤ j ≤ m , j ≠ 0 P ( w t + j ∣ w t ; θ ) L(\theta)=\prod_{t=1}^{T}\prod_{-m\leq j \leq m,j\neq 0}P(w_{t+j}|w_t;\theta) L(θ)=t=1Tmjm,j=0P(wt+jwt;θ)
      上述公式中, θ \theta θ为模型包含的所有待优化权重变量。
    • 目标函数:
      J ( θ ) = − 1 T ∑ t = 1 T ∑ − m ≤ j ≤ m , j ≠ 0 log ⁡ P ( w t + j ∣ w t ; θ ) J(\theta)= - \frac{1}{T}\sum_{t=1}^T\sum_{-m\leq j \leq m,j\neq0} \log P(w_{t+j}|w_t;\theta) J(θ)=T1t=1Tmjm,j=0logP(wt+jwt;θ)
      注意:最小化目标函数和最大化似然函数等价。

    对于每个词 w w w都会用两个向量:

    • w w w是中心词时,我们标记词向量为 v w v_w vw
    • w w w是上下文词时,我们标记词向量为 u w u_w uw
      则对于一个中心词c和一个上下文词o,我们有如下概率计算方式
      P ( o ∣ c ) = e x p ( u o T v c ) ∑ w ∈ V e x p ( u w T v c ) P(o|c) = \frac{exp(u_o^Tv_c)}{\sum w∈V exp(u^T_wv_c)} P(oc)=wVexp(uwTvc)exp(uoTvc)
      公式补充:公式中,向量 u o u_o uo和向量 v c v_c vc进行点乘。向量之间越相似,点乘结果越大,从而归一化后得到的概率值也越大。
      模型的训练正式为了使得具有相似上下文的单词具有相似的向量。点积是计算相似性的一种简单方法,在注意力机制中常使用点积计算Score。
  • Word2vec预测函数:
    P ( o ∣ c ) = e x p ( u o T v c ) ∑ w ∈ V e x p ( u w T v c ) P(o|c) = \frac{exp(u_o^Tv_c)}{\sum w∈V exp(u^T_wv_c)} P(oc)=wVexp(uwTvc)exp(uoTvc)

    • 取幂使任何数都为正。
    • 点积比较o和c的相似性,点积越大则概率越大。
    • 分母:对整个词汇表进行标准化,从而给出概率分布。
    • 将任意值 x i x_i xi映射到概率分布 p i p_i pi
      s o f t m a x ( x i ) = e x p ( x i ) ∑ j = 1 n e x p ( x j ) = p i softmax(x_i) = \frac{exp(x_i)}{\sum_{j=1} ^nexp(x_j)} = p_i softmax(xi)=j=1nexp(xj)exp(xi)=pi
      对于softmax解释如下:
      soft:因为仍然为较小的 x i x_i xi赋予了一定概率。
      max:因为放大了最大的概率。
  • word2vec中的体服梯度下降训练细节推导。在这里插入图片描述
    我们可以对上述结果重新排列如下,第一项是真正的上下文单词,第二项是预测的上下文单词,使用梯度下降法,模型的预测上下文将逐步接近真正的上下文。
    2
    再对 u o u_o uo进行偏微分计算,注意这里的 u o u_o uo u w = o u_{w=o} uw=o的缩写。
    3
    可以理解,当P(o|c)→1,即通过中心词c我们可以正确预测上下文o,此时我们不需要调整 u o u_o uo,反之,则相应调整 u o u_o uo

  • 训练模型:计算所有向量梯度。

    • θ \theta θ代表所有模型参数,写在一个长的参数向量里。
      对于参数和训练细节的补充解释:U、V矩阵,每行代表一个单词的词向量,点乘后得到的分数通过softmax映射为概率分布。得到的概率分布是对于该中心词而言的上下文中单词的概率分布,该分布与上下文所在的具体位置无关,所以在每个位置的预测都是一样的。
      the、and、that、of等停用词,是每个单词点乘后得到的较大概率的单词,去掉这一部分可以使词向量效果更好。
  • 小结:
    word2vec的主要思想是遍历整个语料库中的每个单词以及使用单词向量预测周围的单词。(要更新向量以便更好的预测)。
    核心知识:

    • 模型会便历整个语料库中的每个单词。
    • 使用中心单词向量预测周围的单词 。
      P ( o ∣ c ) = e x p ( u o T v c ) ∑ w ∈ V e x p ( u w T v c ) P(o|c)=\frac{exp(u_o^Tv_c)}{\sum_{w∈ V}exp(u_w^Tv_c)} P(oc)=wVexp(uwTvc)exp(uoTvc)
    • 更新向量(参数)以便更好地预测上下文。

经过word2vec最大化目标函数后,通过可视化可以发现,相似的词汇在词汇量空间里是比较接近的。

  • 梯度下降会一次性使用所有数据样本进行参数更新,对应到我们当前的词向量建模问题,就是 J ( θ ) J(\theta) J(θ)的计算需要基于语料库所有的样本(窗口),数据规模非常大。计算很耗资源,计算时间太长,处理方式是把优化算法调整为随机梯度下降算法,即在单个样本里计算和更新参数,并遍历所有样本。但基于单个样本更新会表现为参数震荡很厉害,收敛过程并不平稳,所以很多时候我们会改为使用mini-batch gradient descent。
    Mini-batch具有以下优点:通过batch平均,减少梯度估计的噪音;在GPU上并行化运算,加快运算速度。

  • 词向量建模中的随机梯度下降:

    • 应用随机梯度下降,在每个窗口计算和更新参数,遍历所有样本。
    • 在每个窗口内,我们最多只有2m+1个词,因此代价函数 J ( θ ) J(\theta) J(θ)的梯度是非常稀疏的。
    • 对于矩阵稀疏,一种解决方式是只更新实际出现的向量, 需要稀疏矩阵更新操作来只更新U和V中的特定行;需要保留单词向量的哈希/散列。
    • 如果有数百万个单词向量,并且进行分布式计算,我们无需再传输巨大的更新信息(数据传输有成本)。
  • 词向量分布探究:
    如果对词向量进行空间分布,会发现同一个词汇的附近分布着它不同时态语态的单词。

  • 得到词向量的方式有如下两种,基于共现矩阵计数和基于预估模型:

    • 基于计数:使用整个矩阵的全局统计数据来直接估计
      • 优点:训练快速;统计数据高效利用
      • 缺点:主要用于捕捉单词相似性;对大量数据给予比例失调的重视
    • 基于预估模型:定义概率分布并试图预测单词
      • 优点:提高其他任务的性能;能捕获除了单词相似性意外的复杂的模式
      • 缺点:随语料库增大会增大规模;统计数据的低效使用(采样是对统计数据的低效使用)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值