LaTex在新详情的表现测试

来源:互联网 发布:linux curl命令详解 编辑:程序博客网 时间:2024/04/29 15:21

1.简介

word2vec 是google在2013发布的开源工具包, 用于生产分布式词向量. 它简单高效, 特别适合大规模, 超大规模的语料库, 从中获取高精度的词向量表示.

词向量的介绍看 这里 .
Q: 对于形如v(w)={0.054,0.22,0.12,0.215,0.17093,...} 这样的向量, 要怎么用呢?
A: 通过向量间的距离(如 余弦距离) 来刻画不同词汇之间的相似度. 这里的相似度并不是同义词, 近义词等, 而是语料库中跟它具有同样相邻词的词.

基于词向量的LSTM架构, 在中文分词, 词性标注, 语义组块, 命名实体识别 等方面取得了良好的效果. 在精度上均与 概率图 模型不相上下, 而产生的模型要小得多.

2.算法原理

word2vec用的是神经网络模型,分为两种

  • CBOW, Continuous Bag of Words
  • skip-gram

每个模型的训练方法又分别有两种

  • Hierarchical Softmax
  • Negative Sampling

所以搭配起来, C12C12=4 , 就有4种具体实现.
本文讲述CBOW+Hierarchical Softmax 的原理. 通过周围词来预测当前词.
PS: 网络上《word2vec中的数学原理详解》一文流传甚广, 但我觉得它的符号约定不太友好, 于是写了自己的. 本文不展开偏导计算部分.

2.1 符号约定

  • w
    要预测的当前词.
  • Context(w)
    w上下文相关的词, 它之前的c个词 与 它之后的c个词, 共2c个词.
    设c=2, Context(w)=[w(t2),w(t1),w(t+1),w(t+2)]
  • m
    分布式词向量的固定长度
  • D
    语料库Corpus中所有出现单词组成的词典.
  • path(w)
    huffman树中, 单词w的路径.
    path(w)i(0,1) 表示路径向量中第i个分量的值.
  • len(path(w))
    huffman树中, 单词w的路径长度.
  • θ(w)i
    huffman树中, 单词w的路径中第i个非叶子节点.
    θ(w)=(θ(w)1,...,θ(w)len(path(w)))

    其中θ(w)1对应的就是根节点.
    θ(w)i也代指该非叶子节点的向量. 它也是m维的.

2.2 网络结构


图2-1 CBOW网络结构 syn0[.] 即为 w[.], 表示邻居词汇
每层展开来讲:
ps:自己画图太费时间, 所以下文的符号没有与图2-1 结构对应上, sorry.

  • 输入层
    Context(w)=[w(t2),w(t1),w(t+1),w(t+2)].
    所以共有2c*m个节点.
    一般神经网络的输入都是已知的, 而Word2Vec 网络中的输入, 是通过SoftMax()计算后才得到的.
  • 投影层
    有m个节点. 对输入层各词向量作加和处理. Context(w)
  • 输出层
    输出层是一棵树, 一棵Huffman树! 这是与普通神经网络的显著不同之处. 这棵树的叶子节点数就是词典D的大小|D|.
    Huffman树相关知识可以回顾 树-总述 .
    以词频作权重, 我们就构建出了这么一棵Huffman树.


图2-2 网络输出层的示例

how这个单词来讲, 它的路径就是(1,1,0,0).

2.3 推导计算

每一个单词w, 都对应一个huffman树叶子节点, 因为是二叉的, 所以从根节点走到w的叶子节点, 相当于再不断地进行二分类.
P(w|Context(w))
label(path(w)i)=

参考文章

huffman-tree-in-word2vec
drawing-word2vec

原创粉丝点击