2.4.Word2Vec,词向量推理
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
2012年,微软实习生Thomas Mikolov发现了一种用一定维度的向量表示词的含义的方法。Mikolov训练了一个神经网络来预测每个目标词附近的共现词。2013年,Mikolov和他的队友在Google发布了创建这些词向量的软件——Word2vec。
定义:词向量是对词语义或含义的数值向量表示,包括字面意义和银行意义。词向量可以捕捉到词的内涵,所有这些含义会结合成一个稠密(没有零值)的浮点数向量,该向量支持查询和逻辑推理。
无监督学习和监督学习是两种截然不同的机器学习方法。
监督学习中,必须对训练数据进行某种标注。如垃圾信息分类标签、点赞数量的量化。
无监督学习,同样也是训练模型去执行某种任务,但是没有任何任务标注,只有原始数据。
计算目标词附近的向量,而不是通过带有词含义的标签来直接学习目标词的含义,从这点上讲,Word2vec不需要手工标注,确实也是一个无监督学习算法。注意:通过使用低维内部表示来重新预测输入的模型称为自编码器,这种模型也是一种常见的神经网络,几乎可以应用到任何数据集。
您可以使用
nlpia
中提供的工具为Word2vec词汇表中的任何词或n-gram
计算属性向量(nessvector
)。LSA中基于整篇文档构建的主题向量很适合文档分类、语义搜索和聚类,但生成的主题-词向量精确度不够,不能用于短语或复合词的词义推理、分类和聚类。
可以用词向量做数学运算,再把得到的结果向量转换成词,这样就可以得到有意义的答案。
Word2vec
45%
LSA
11%
二者精确度有4倍差距。
Word2Vec中的代数几何:
进行向量加减运算后,得到的向量一般不会正好等于词向量表中的某个向量,不过,Word2vec词向量通常有100维,每个维度上都有连续的实数值,词向量表中和运算结果最接近的就是NLP问题的答案。
研究结果:单词的单数和复数之间的差异在大小和方向上基本相同
词向量表示法不但对推理和类比问题有用,而且对其他所有使用自然语言向量空间模型处理的问题都有用。如词向量的计算结果和城市本身坐标类似:
训练Word2vec嵌入有两种方法:
Skip-Gram:skip-gram
方法,基于目标词(输入词)预测上下文(输出词)
CBOW:连续词袋(continuous bag-of-words, CBOW
)方法,基于临近词(输入词)预测目标词(输出词)
注:都是词嵌入模型,只是名称为连续词袋。
在Skip-Gram训练方法中,需要预测输入词周围窗口的词,Skip-Gram相应的训练输出示例:
Skip-Gram是一种包含间隙的跳跃式n-gram
语法,因为它跳过了中间词条,在上述例子中,基于painted
去预测Claude
,跳过了Monet
。它的神经网络由两层权重组成,隐藏层由n
个神经元组成,其中n
表示词的向量维数;输入层和输出层都包含个神经元,是模型的词汇表中词的总数,输出层激活函数则是分类问题中常用的softmax
函数。
如果神经网络的目标是学习分类问题时,经常使用softmax
函数作为神经网络输出层激活函数,它可以将输出结果压缩到0
到1
之间的值,所有输出的和加起来等于1,这样它的输出结果就可以当做概率。对于个输出节点,softmax输出可通过归一化方程计算:
举例说明:
注意softmax之后的结果之和约等于1
。
句子:"Claude Monet painted the Grand Canal of Venice in 1806."
参考下边表格:
中间是当前词,计算前两个和后两个。
词向量模型训练结束后便不再需要额外的训练,因此可忽略网络的输出层,只用隐藏层的输入权重来作为词嵌入表示,换句话说,这个权重矩阵就是所需的词嵌入,输入词的独热向量表示和权重的点积代表词向量嵌入。
线性代数检索词向量:
连续词贷方法中,将根据周围词预测中心词,它不用创建输入和输出词条标记对,而可以创建一个多热向量(multi-hot vector
)作为输入向量,多热向量是围绕中心词的所有周围词的独热向量和。
它的神经网络模型如下:
连续词袋类似在句子中设定了一个滑动窗口来选择目标词的周围词,滑动窗口内的所有词将被认为是窗口中央的目标词的连续词袋的内容。
skip-gram方法对于小型语料库和一些罕见的词项比较适用(会产生更多训练样本);CBOW方法在常用词上有更高精确性,并且训练速度快很多。
三个改进方案。
在Word2vec词汇表中加入了一些2-gram
和3-gram
作词项,它们使用共现频率来区分应该被认为是单个词项的2-gram, 3-gram
,如下边公式:
如果和计算得到的分数高于阈值,则这两个词应当作为词项对被包含在Word2vec词汇表中。
另一个改进原算法是高频词条降采样,像the
或a
这样的常用词通常不包含重要信息,语料库中the
和许多名词都共现;为了减少像停用词这样的高频词的影响,可以在迅联过程中对词进行与其出现频率成反比的采样,原理类似IDF
对TF-IDF
的影响。
最早的采样概率公式如:
C++版本中Word2vec则使用下边公式(二者效果一致):
表示一个词在语料库中出现的概率
表示频率阈值,超出该阈值就会进行降采样(该词取决于语料库规模、平均文档长度、词的多样性)。
最后一个技巧是负采样,当一个训练样本(一对词)输入网络后,会引起网络中所有的权重更新而影响所有词的向量词,如果规模很大,这个过程将会特别低效,为了加快训练速度,可以采用负采样。
只在输出向量中选取少量的负样本进行权重更新,而不更新词窗口以外所有其他词的权重,如选取n
个负样本词对,根据其对输出的贡献来更新对应权重。
如果是一个小型语料库上训练词向量,则可以使用
5 ~ 20
个样本的负采样率,而对较大的语料库,则推荐降低到2 ~ 5
个样本。
某些情况下,您需要创建面向特定领域的词向量模型,此时可通过定制化词向量来提高模型的精确率。
将文档拆分成句子,将句子拆分成词条。gensim.word2vec
模型接收的输入是一个句子列表,其中每个句子都已经切分成了词条,这样确保向量模型不会学习到相邻句子中出现的无关词。
NLTK, gensim中可以用经过精度优化的莫尔斯检测器。
代码如:
Word2vec模型开销大,但只有隐藏层的权重矩阵有意义,使用下边命令可丢掉神经网络中不需要的输出权重:
Word2Vec是一个巨大突破,但它依赖必须经反向传播来训练的神经网络模型,反向传播在效率上通常不如使用梯度下降法直接优化的代价函数。
GloVe是根据Word2Vec的工作原理而来,它可以产生相当于Word2Vec输入权重矩阵和输出权重矩阵的矩阵,其生成的语言模型具有和Word2Vec相同的精确率,且花费时间更少,更高效。
Word2Vec依赖反向传播来更新表示词嵌入的权重
GloVe使用SVD的优化算法
GloVe优点如:
训练过程更快
更有效利用CPU、内存(可处理大规模的文档)
更有效地利用数据(对小型语料库有帮助)
在相同训练次数的情况下精确率更高
Facebook研究人员将Word2vec概念又向前推进一步,在模型训练中加入了一个新规则:该算法预测周围的n
个字符,而不是词,如:whisper
生成的2-gram
和3-gram
如:
这种方法为每个n
字符的gram
训练一个向量标识,包括:词、拼错的词、此片段、单个字符,这种方式更容易处理罕见词。
LSA的优点是:
训练速度快
长文本的区分度更好
Word2Vec和GloVe的优点是:
对大型语料库的利用更有效
在回答类比问题等用词推理的领域更精确
语义词之间的关系非常有用,通过可视化可以得到一些有趣的发现。
词向量根据训练语料库来学习词之间的关系,如果语料库是关于金融的,那么bank
的词向量将主要与存款业务相关,如果语料库是关于地质学的,那么bank
的词向量将被训练为与河流和消息有关。于是可使用主成分分析:
低语义距离(接近零的距离值)表示词相似度高;语义距离——即“意义”距离,是由训练文档中相邻出现的词决定的。如果两个词经常用于相似上下文中,则它们的Word2vec词向量在词向量空间中也比较接近。
Word2vec的概念可以扩展到句子、段落或整个文档。
Doc2vec训练使用额外的文档向量作为输入