word2vec 是很多知识表示算法的鼻祖,这里对其核心原理进行介绍
参考论文
📎Distributed Representations of Words and Phrases and their Compositionality.pdf
📎Efficient Estimation of Word Representations in vector space.pdf
基本原理
为什么要提出 word2vec?
one-hot 表示的局限性
传统词向量表示用得比较多的是 one-hot ,one-hot 是一种高维稀疏的表示方法,它的词向量维度与词表的大小成正比;而且 one-hot 表征的每个词之间都是正交的,即词与词之间没有任何关联关系,故无法进行语义计算,这与实际情况不相符,实际中词与词之间会存在近义、反义等关系。Word2vec虽然学习不到反义这种高层次语义信息,但它巧妙的运用了一种思想:“具有相同上下文的词语包含相似的语义”,使得语义相近的词在映射到欧式空间后中具有较高的余弦相似度。
word2vec的原理
word2vec虽然整体使用上是无监督的(因为无需提供有监督的语料),但实际上它是有监督的,他通过cbow或skip-gram的方式去构造训练语料,cbow使用周边词去预测当前词,skip-gram使用当前词去预测周边词。
这两个模型都是利用共现关系来构造语料(通过设定滑动窗口c,c指当前词左右两边各取c个词)认为共现窗口内的词是近义的,优点是实现简单,缺点是共现关系不一定是近义的还有可能是极性相反的词,所以用来做情感分类可能会受影响。以 skip-gram 为例,它的结构如下图:
可见 word2vec是一种三层网络结构,有输入层、隐藏层、输出层
- 输入层:是用 one-hot 编码表征的向量 (不过传入大多数深度学习框架的输入是压缩的 one-hot 编码,即字典下标表征的向量,输入的维度是 [batch_size, n_words, vocab_size])
- 隐藏层:是一个随机初始化的词嵌入层(一般用正态分布初始化),词嵌入层矩阵中每一行代表一个词的词向量,通过训练更新参数得到一张含有先验知识的词嵌入层,从而可用于语义计算和迁移学习等任务, *隐藏层是我们最终要使用的权值矩阵 (隐藏层的维度一般是 [vocab_size, embed_size])
输出层:其实就是一个 softmax 分类器,它的分类空间大小为词典大小 (如果未做优化则需要把输出投影到字典大小即 vocab_size 这时训练时间比较长,所以作者提出了 hierarchical softmax ,negative sampling 两种优化方式)
CBOW & skip-gram
推荐阅读:word2vec原理(一) CBOW与Skip-Gram模型基础
hierarchical softmax & negative sampling
推荐阅读:
- word2vec原理(三) 基于Negative Sampling的模型
补充:
- negative sampling: 负采样使得 softmax 计算时不用轮训每个词,而只需轮询选取的负样本即可,负样本是除了当前词外的其他词, negative sampling 将正样本标记为1,负样本标记为0,那么它们就相当于将正例和n个负例进行二元逻辑回归训练
- hierarchical softmax:和negative sampling目的一样,使得 softmax 计算时不用轮询每个词。它使用了Huffman树来加速,求解 softmax 时(其实是逻辑回归,因为huffman是二叉的)只需轮询从根节点到目标词叶子节点的路径
negative sampling 和 hierarchical softmax 的优缺点:
- hierarchical softmax的缺点:使用了huffman树,导致高频词和低频词的计算路径长度不一致(高频词路径短,低频词路径长,梯度上升时路径长的比路径短的更难找到全局最优点),根据大数定理可知词频可以认为是词发生的概率,往往低频词的信息量是大于高频词的
- negative sampling没有采用树优化,不存在计算路径长短问题
若有收获,就点个赞吧
olvz、Sean Lee
04-21 08:33
4
0
上一篇Transformer下一篇预训练语言模型
回复
返回文档
正文
⌘ + B粗体
