Word2Vec
简介
对于图像和音频处理采用的使庞大的高纬度数据集,对于图像数据来说,此类数据集会编码为单个像素强度向量。不过,自然语言处理系统一直将字词视为离散的原子符号,将字词表示为唯一离散id还会导致数据稀疏性,并且通常意味着我们可能需要更多数据才能成功训练统计模型,使用向量法可以扫除其中一些障碍。
统计语言模型
- 统计语言模型:统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合可能性
- N-Gram:N元模型就是假设当前词的出现频率只与它前面的N-1个词有关
- 语言使一种序列,词与词之间并不是相互独立
- 1元模型:当前词出现在这的概率=这个词在词语库在出现的概率使一样的
- 二元模型:当前词出现的概率=这个词前面一个词出现的情况下这个词出现的概率
- 三元模型::当前这个词出现的概率=这个词前面两个出现的情况下当前词出现的概率
- 一般情况下使用三元模型,由于语料库的限制,使用过大的N,会导致计算量增加,对语料库的要求也会越大
神经网络语言模型NNLM
- 神经网络语言模型NNLM依然属于概率语言模型,它通过神经网络来计算概率语言模型中每个参数。
- 模型解释
- 输入层:将context(w)每个词映射成一个长度为m的词向量,向量开始时随机的,也参与网络训练
- 投影层:将所有的上下文的向量拼接成一个长向量,作为目标w的特征向量,向量为[1,(词个数-1)*词向量长度]
- 隐藏层:拼接后的向量会经过一个规模为h的隐藏层,向量为[(词个数-1)*词向量长度,语料库词个数]
- 输出层:最后经过softmax输出所有词出现的概率
- 训练过程:
- 训练时,使用交叉熵作为损失,反向传播算法进行训练
- 当完成训练时,得到一个N-Gram神经网络语言模型,以及副产品词向量
Word2Vec
- word2vec本质上也是一个神经语言模型,但是它的目标并不是语言模型本身,而是词向量;因此,其所作的一系列优化,都是为了更快更好的得到词向量
- Word2Vec提供了两套模型:CBOW和Skip-Gram,其基本思想:
- CBOW:在已知countext(w)的情况下,预测w
- Skip-Gram:在已知w的情况下预测countext(w)
CBOW向前计算与向量更新推导
- CBOW与2003年Bengio的结构由些不同,不同点在于CBOW去掉了最耗时的非线性隐藏层、并且所有词共享隐层。下图不包含softmax与负采样优化过程
- 向前计算:
- 输入层到隐藏层:输入上下问词向量的平均值与W权重计算,[1,V]*[V,N]=[1,N]得到中间向量h
- 隐藏层到输出层:h向量乘上隐藏层的矩阵,[1,N]*[N,总词语数]
- 输出层接softmax:计算每个词出现的概率
使用
Spark使用
1 | from pyspark.ml.feature import Word2Vec, Word2VecModel |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com