首页 > 其他 > 详细

训练词向量

时间:2021-04-23 10:31:09      阅读:22      评论:0      收藏:0      [点我收藏+]

词向量演进

  1. fast text:利用英文的每个字母,生成Embedding vector
  2. w2v:predicttive model
    1. cbow:用周围词预测当前
      将C个周围词的onehot向量求和,乘以 输入Embeding矩阵,变成C个周围词的隐藏层表示;再乘以输出Embeding的转置,变回长度为V的向量,对中间词向量的概率取对数,作为损失函数。
      反向传播依次更新 输出Embeding矩阵和输出Embeding矩阵。最后还是求和使用吧。
    2. Skip-gram:当前词预测周围词
      与cbow同理,只是包含多个损失函数
    3. 其他补充
      1. 为什么需要两次Embeding:容易优化;最后将两者取平均
  3. glove:count-base model
    基本概念:基于全局的token共现次数,构造任意两个token之间的共现矩阵,利用词向量去拟合共现矩阵。
    公式推导
    假如两个词之间的距离为d,那么他们的共现值为1/d,作者利用以下的公式表达 词向量和共现值之间的关系

    \[w_i^T\tilde{w_j} + b_i + \tilde{b_j} = log(X_{ij}) \]

    其中\(w_i, \tilde{w_j}\) 是我们要求解的词向量,\(b\) 表示两个词向量的bias term,\(b_i=log(X_i)\),利用上述公式,就可以构造loss function了,论文中利用MSE做为loss function,如下

    \[J=\sum\limits_{i,j=1}^{V}{f(X_{ij})(w_i^T\tilde{w_j} + b_i + \tilde{b_j} - log(X_{ij}))^2} \]

    其中\(f(X_{ij})\)为权重函数,共现次数越多的token,他们的权重越高,共现次数越小,权重越小,共现=0,就不参与loss计算。 同时希望权重函数不能过大。因此设计权重函数如下

    \[ F(x)=\left\{ \begin{array}{cases} (x/x_{max})^{\alpha} & & {x>x_{max}}\1 & & {else} \end{array} \right. \]

    \(\alpha\)论文中设置0.75,\(x_{max}\)取100
    训练过程如下
    采用了AdaGrad的梯度下降算法,对矩阵中的所有非零元素进行随机采样,学习曲率(learning rate)设为0.05。最终学习得到的是两个vector是和 \({x}\)\({\tilde{w}}\),因为\({X}\)是对称的(symmetric),所以从原理上讲 \({x}\)\({\tilde{w}}\) 也是对称的,他们唯一的区别是初始化的值不一样,而导致最终的值不一样。所以这两者其实是等价的,都可以当成最终的结果来使用。但是为了提高鲁棒性,我们最终会选择两者之和作为最终的vector(两者的初始化不同相当于加了不同的随机噪声,所以能提高鲁棒性)。
    优秀博客http://www.fanyeong.com/2018/02/19/glove-in-detail/
  4. cbow vs glove from stanford cs224 lecture02
    1. glove:基于计数
      1. 训练速度快
      2. 高效使用到了统计数据
      3. 能捕捉到单词之间的相似性。比如swim 和 swiming
      4. 对共现次数大的pair过于重视;可以通过限制最大值解决
    2. cbow:基于预测
      1. 随词表库大小变动;glove也是这样?
      2. 在单词相似性之外能捕捉到更复杂pattern
      3. 可以在其他任务上继续训练,提高性能;类似pretrain, finetune的形式
      4. 没有完全利用统计数据
  5. ELMo:两个单向LSTM训练
  6. GPT:transformer in LM
    1. 单向,每个token之前看到之前的token
  7. Bert
    1. Unidirectional Transformer -> Biddirectional Transformer
    2. Standard LM -> Masked LM
    3. Only Token-level prediction -> Next Sentence prediction
  8. ERNIE
    1. 多任务,大数据训练
    2. Ngram mask
  9. XLNET
  10. T5
  11. UniLM看来很叼的样子,支持多输入多输出结构、语言模型结构、seq2seq结构

Bert

  1. 参数量计算
    bert-base 110M,如下
    (30522 + 512 + 2) * 768 + 12 * (768 * 12 * 64 * 3 + 12 * 64 * 3 + 64 * 12 * 768 + 768 + 768 + 768 + 768 * 3072 + 3072 + 3072 * 768 + 768 + 768 + 768) = 108890112
    相关博客:
  2. https://zhuanlan.zhihu.com/p/91903871
  3. https://blog.csdn.net/weixin_43922901/article/details/102602557

ALBert

技术分享图片
Bert 108M = 23.8M(Embedding) + 84.9M(Attention)
ALBert 12M ≈ 4M(Embedding) + 7M(Attention)
Bert -> ALBert
Embedding 30522 * 768 -> 30522 * 128 + 128 * 768
Attention 12层encoder共享参数,84.9M -> 84.9M/12

n-gram mask的公式还是挺有意思的,可以尝试
技术分享图片

ERNIE

ernie的mask机制,最重要的实体识别需要提前训练,入门的门槛太高了。。短语级别的mask,与albert的n-gram mask比较相似
Basic-Level Masking: 跟bert一样对单字进行mask,很难学习到高层次的语义信息;
Phrase-Level Masking: 输入仍然是单字级别的,mask连续短语;
Entity-Level Masking: 首先进行实体识别,然后将识别出的实体进行mask。

XLNet

改进点

  1. Permutation Language Model:将mask融入到自回归LM(从左到右or从右到左,不同时考虑左右context)中;针对每一句话,随机重新排列该句话,针对第i个token的预测,输入只考虑1~i-1之间的token,为了提高输入丰富度,实际上只对后1/K的部分进行预测,K=6-7;解决Bert中mask的token之间相互独立、不相互影响的问题;Bert的mask思路与此类似,只是mask的数量不同,可以对Bert改进达到类似效果。
  2. 引入了Transformer-XL的主要思路:相对位置编码以及分段RNN机制。实践已经证明这两点对于长文档任务是很有帮助的;
  3. 加大增加了预训练阶段使用的数据规模

https://zhuanlan.zhihu.com/p/70257427

训练词向量

原文:https://www.cnblogs.com/wa007/p/14692407.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!