NLP Tutorial 2 Word2Vec

写在前面:词向量的意义:将字典中的单个词映射为一个固定长度的向量

基于词向量,语言可以更好地被引入机器学习模型并进行训练

1. Word2Vec

Word2Vec于2013年被提出,成为后来绝大多数NLP模型的理论基础

Word2Vec的本质就是一个将单词,依据其与上下文的关系映射为一个向量的轻量级的神经网络,这些向量应该能体现单词之间的联系

有两类Word2Vec的模型框架

1. 连续词袋模型CBOW (continuous bag of words): 知道词w_{t} 的上下文w_{t-2}, w_{t-1}, w_{t+1}, w_{t+2}的情况下预测当前词 w_{t}

2. 跳词模型Skip-gram: 在知道w_{t} 的情况下预测  w_{t-2},w_{t-1},w_{t+1}, w_{t+2}  

两类框架的主要区别:

1. CBOW对上下文词,无论顺序将他们的词向量拿来做当前词的预测。而Skip只用一个输入词预测,因此相比下来,CBOW比Skip gram训练快,而skip-gram对生僻词训练更好

1.1 CBOW模型

CBOW的三层结构

1. Input Layer : 接受one-hot张量V\epsilon R^{^{1\times vocab\_size}} (词表长度)作为网络输入,里面存储着当前句子中上下文的one-hot表示

2. Hidden Layer: 将张量V 乘以一个 word embedding张量 W^{^{1}} \in R^{vocab\_size \times embed\_size}, 得到一个 R^{1 \times embed\_size} 形状的张量

3. Output Layer:  将隐藏层的结果乘以张量 W^{2} \in R^{embed\_size \times vocab\_size}, 该张量经过softmax变换后,得到使用上下文对该中心的预测结果

在实际操作中,使用一个滑动窗口(一般情况下,长度是奇数),从左到右开始扫描当前句子。每个扫描出来的片段被当成一个小句子,每个小句子中间的词被认为是中心词,其余的词被认为是这个中心词的上下文。

目标函数:

L = maxlog \, p(w|Context(w))) = max \,log(\frac{exp(u_j))}{\sum exp(u_k))})

1.2 Skip-gram Model

Skip-gram model是通过输入一个词去预测多个词的概率。输入层到隐藏层的原理和simple CBOW一样,不同的是隐藏层到输出层,损失函数变成了C个词损失函数的总和,权重矩阵W'还是共享的。

几个问题:

1. Word2Vec在学什么?

        本质还是在学习word和context的关系,既可以理解为学习word和context的co-currence

2. Word2Vec和对One-hot降维处理学习有啥优势

        本质是相似的计算,word2vec同样可以得到中间向量与输出向量,减少one-hot输入的稀疏性。但是word2vec减少了计算量

1.3 Word2Vec训练技巧

1. Hierarchical Softmax

采用哈夫曼树,即带权路径长度最短的二叉树,即最优二叉树

在word2vec中,对词汇表中所有单词都作更新的话,随着词汇表的延长训练也会越发困难,而用哈夫曼树去构造这V个神经元(词),越靠近root节点的地方,词频是越高的,我们可以更快的使用到该词,而越靠近叶节点的地方,词频越低,这样就提高了训练效率

哈夫曼树的每一个节点都是一个逻辑回归判断,从根节点开始,向下判断,直到落到目标节点上,此时把已走的路径的LR值相乘,即得到此时的条件概率,而训练的目标就是使得整个条件概率达到最大。

  • 由于是二叉树, 之前计算量为V,现在变成了log 2V。
  • 由于使用霍夫曼树是高频的词靠近树根,这样高频词需要更少的时间会被找到,这符合我们的贪心优化思想。

Ref : https://www.cnblogs.com/rossiXYZ/p/13427829.html

2. 负采样

词汇表规模越大,word2vec的训练权重系数越多,使得训练速度缓慢

负采样(negative sampling)解决了这个问题,它是用来提高训练速度并且改善所得到词向量的质量的一种方法。不同于原本每个训练样本更新所有的权重,负采样每次让一个训练样本仅仅更新一小部分的权重,这样就会降低梯度下降过程中的计算量。

当我们用训练样本 ( input word: "fox",output word: "quick") 来训练我们的神经网络时,“ fox”和“quick”都是经过one-hot编码的。如果我们的vocabulary大小为10000时,在输出层,我们期望对应“quick”单词的那个神经元结点输出1,其余9999个都应该输出0。在这里,这9999个我们期望输出为0的神经元结点所对应的单词我们称为“negative” word

如何选取negative words?

1, 出现频次越高的单词越容易被选作negative words。联想于停用词

P(w_i) = \frac{f(w_i)^{a}}{\sum_{j=0}^{n} f(w_j)^{a}}

2。 对于小规模数据集,选取5-20个negative words, 对于大规模数据集,选取2-5个negative words

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值