zoukankan      html  css  js  c++  java
  • word2vec:CBOW和skip-gram模型

    1.CBOW模型

    之前已经解释过,无论是CBOW模型还是skip-gram模型,都是以Huffman树作为基础的。值得注意的是,Huffman树中非叶节点存储的中间向量的初始化值是零向量,而叶节点对应的单词的词向量是随机初始化的。

    1.1 训练的流程

    那么现在假设我们已经有了一个已经构造好的Huffman树,以及初始化完毕的各个向量,可以开始输入文本来进行训练了。

    训练的过程如下图所示,主要有输入层(input),映射层(projection)和输出层(output)三个阶段。

     输入层即为某个单词A周围的n-1个单词的词向量。如果n取5,则词A(可记为w(t))前两个和后两个的单词为w(t-2),w(t-1),w(t+1),w(t+2)。相对应的,那4个单词的词向量记为v(w(t-2)),v(w(t-1)),v(w(t+1)),v(w(t+2))。从输入层到映射层比较简单,将那n-1个词向量相加即可。

    1.2 从映射层到输出层

    要完成这一步骤,需要借助之前构造的Huffman树。从根节点开始,映射层的值需要沿着Huffman树不断的进行logistic分类,并且不断的修正各中间向量和词向量。

    此时中间的单词为w(t),而映射层输入为 
    pro(t)=v(w(t-2))+v(w(t-1))+v(w(t+1))+v(w(t+2))

    假设此时的单词为“足球”,即w(t)=“足球”,则其Huffman码可知为d(t)=”1001”(具体可见上一节),那么根据Huffman码可知,从根节点到叶节点的路径为“左右右左”,即从根节点开始,先往左拐,再往右拐2次,最后再左拐。

    既然知道了路径,那么就按照路径从上往下依次修正路径上各节点的中间向量。在第一个节点,根据节点的中间向量Θ(t,1)和pro(t)进行Logistic分类。如果分类结果显示为0,则表示分类错误(应该向左拐,即分类到1),则要对Θ(t,1)进行修正,并记录误差量。

    接下来,处理完第一个节点之后,开始处理第二个节点。方法类似,修正Θ(t,2),并累加误差量。接下来的节点都以此类推。

    在处理完所有节点,达到叶节点之后,根据之前累计的误差来修正词向量v(w(t))。

    这样,一个词w(t)的处理流程就结束了。如果一个文本中有N个词,则需要将上述过程在重复N遍,从w(0)~w(N-1)。

    2. skip-gram模型

    skip-gram与CBOW相比,只有细微的不同。skip-gram的输入是当前词的词向量,而输出是周围词的词向量。也就是说,通过当前词来预测周围的词。由于输出有n-1个词,所以要对于一个词来讲,上述沿着huffman树从顶到底的过程要循环n-1遍。

  • 相关阅读:
    use sortedset
    关于WPF 的快捷键
    关于WPF的UI控件焦点问题
    Hive2.x 版本的安装及配置 以及要注意的事项
    nginx长连接设置
    nginx响应时间监控脚本
    [转]细说Redis监控和告警
    mongodb高级查询
    Python导入自定义包或模块
    [转]大数据hadoop集群硬件选择
  • 原文地址:https://www.cnblogs.com/qniguoym/p/7783796.html
Copyright © 2011-2022 走看看