随着google bert的面试,以及一系列的推演和变种,人们越来越淡忘了word2vec,由于bert预训练的词向量模型参数太大,运行效率大大减少,所以在个别任务还是推荐使用wordvec。
最近引入的连续Skip-gram模型是一种学习高质量的分布式矢量表示的有效方法,该表示可以捕获大量精确的句法和语义词关系。另外论文提出了几种扩展,它们既提高了词向量的质量,又提高了训练速度。 通过对频繁出现的单词进行二次采样,不仅获得了明显的加速,而且还学习了更多常规的单词表示形式。 论文中还描述了用于替代分层softmax的简单方案,称为负采样。
向量空间中单词的分布式表示在自然语言处理任务中通过对相似单词进行分组可帮助算法来实现更好的性能。论文中,介绍了原始Skip-gram 模型 几个扩展类型。
Figure 1: The Skip-gram model architecture. The training objective is to learn word vector representations
that are good at predicting the nearby words.
给定训练word ,目标函数为:
其中baseline skip-gram模型的 使用softmax函数计算:
其中是输出向量,v是输入向量,W是总词汇数量。
分层softmax 目标函数为:
其中,n(w,j)是从根到w的路径上的第j个节点,令L(w)是该路径的长度,因此n(w,1)=root 并且n(w,L( w))= w。
一种替代分层softmax的方法是使用NCE loss,NCE的思想,认为好的模型应该能够通过逻辑回归将数据与噪声区分开。google 教程提供tensorflow word2vec模型就是使用NCE loss。由于skip-gram只是学习词向量的表示,论文讲NCE简化为NEG,其目标函数如下:
为了平衡稀有词和常见词之间的平衡,并提高稀有词的向量表示,提出了子采样,当词w的词频大于t,则以一定的概率丢弃,丢弃概率计算如下图:
上篇论文主要提出
该论文主要提出三个不同方式构建
其目标函数和词预测词一样,只是窗口范围不一样。
其目标函数为:
其中
Nc是上下文ngram的顺序。
优点:不仅可以学习词共现信息,还可以学习ngram共现学习。
缺点:词汇量太大,需要统计word,ngram作为词汇。
论文对流行的Word2Vec工具中的模型进行了两个简单的修改,以生成更适合涉及语法任务的嵌入。 原始模型的主要问题是它们对单词顺序不敏感。 尽管依序关系对诱导语义表示很有用,但是当它们用于解决基于语法的问题时,这会导致结果不理想。 论文展示了使用提出的structed Word2vec对模型有很大的改进。
skip-gram 模型通过给定中心词w0的嵌入,输出 O∈| V |×d预测每个上下文词 ,wc,...,w-1,w1,...,wc。 论文提出了对模型进行了调整,以使其对单词的位置敏感。 通过定义了一组c×2个输出预测变量Oc,...,O-1,O1,Oc,大小为O∈(| V |)×d, 每个输出矩阵专用于预测相对于中心的特定相对位置的输出词,如图所示:
在模型预测p(wo | wi)时,选择适当的输出矩阵Oo-i来将单词嵌入投影到输出矢量。
优点:可以很好地学习词与词之间的位置信息。
缺点:模型参数太多,需要多个窗口位置信息,导致模型训练速度很慢。
论文提出了DSG模型,一种通过显式区分左右上下文,简单有效地改进的skip-gram模型。作者通过为每个单词引入了方向向量,因此不仅通过其上下文中的单词共现模式还可以通过其上下文单词的方向来学习其嵌入。
其中 ,是输出向量, v是输入向量。
优点:相对于skip-gram模型能够学习词左右上下文关系,参数相对于structed skip-gram小很多,腾讯AILab开源的embedding使用该wordembedding。
腾讯开源词向量: https://ai.tencent.com/ailab/nlp/en/embedding.html
上百种预训练中文词向量: cihttps://github.com/yanqiuxia/Chinese-Word-Vectors
使用tensorflow写的skip-gram 训练word2vec: 我自己写的一个代码 https://github.com/yanqiuxia/word2vec
1.查询扩展
可以使用已有训练好的wordembedding扩展查询term,测试开源这两款词向量,腾讯开源词向量扩展后的term更相关。
2.获得相似词
3.作为深度学习例如文本分类、实体识别的wordembedding。