一、word2vec
word2vec 是 google 在 2013 年推出的一个 NLP 工具,它的特点是将所有的词向量化,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。
Distributed representation 可以解决 One hot representation 的问题,它的思路是通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。这个较短的词向量维度是多大呢?这个一般需要我们在训练时自己来指定。
1、 CBOW 与 Skip-Gram 用于神经网络语言模型
CBOW 模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。假设我们上下文大小取值为 4 ,那么我们输入就是 8 个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大)。因此输入层 8 个神经单元,输出层是词汇表大小个神经元,隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN 模型的参数,同时得到所有的词对应的词向量。
Skip-Gram 模型和 CBOW 的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。输入是特定词, 输出是 softmax 概率排前 8 的 8 个词,对应的 Skip-Gram 神经网络模型输入层有 1 个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。
2、基于Hierarchical Softmax的模型概述
传统的神经网络词向量语言模型,输入层(词向量),隐藏层和输出层(softmax层)。最大的问题在于从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。
1、word2vec 对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法
2、为了避免要计算所有词的 softmax 概率,word2vec 采样了霍夫曼树来代替从隐藏层到输出 softmax 层的映射
3、基于Negative Sampling的模型概述
使用霍夫曼树来代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词 w 是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。
Negative Sampling 由于没有采用霍夫曼树,每次只是通过采样 neg 个不同的中心词做负例,就可以训练模型,因此整个过程要比 Hierarchical Softmax 简单。
二、GloVe
word2vec 并没有充分运用整个语料库中的词共现的统计信息,只考虑词的上下文信息,忽略了语料库中大量的重复信息。GloVe 算法却充分运用了语料库中的词共现的统计信息。
GloVe 是一个基于全局词频统计的词表征工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。
image.png三、上下文的选则
1、窗口大小的影响
滑动窗口的大小对向量相似度结果有很大的影响。窗口较大易于产生更大的主题相似性(dog,bark,leash 分组在一起),而较小的窗口易于产生更多的功能和句法相似性。(walk,running,approaching 分组在一起)
参考链接
https://zhuanlan.zhihu.com/p/33136229
https://cndocr.github.io/text2vec-doc-cn/glove.html
https://www.fanyeong.com/2018/02/19/glove-in-detail/
https://nlp.stanford.edu/projects/glove/
https://www.cnblogs.com/pinard/p/7160330.html
网友评论