word2vec 和 glove 有什么区别?两种方法都可以训练词嵌入吗?如果是,那么我们如何同时使用两者?
2 回答
是的,它们都是训练词嵌入的两种方法。它们都提供了相同的核心输出:每个单词一个向量,向量的排列方式很有用。也就是说,向量的相对距离/方向大致对应于人类对整体单词相关性的想法,甚至是沿某些显着语义维度的相关性。
Word2Vec 通过反复迭代训练语料库对神经网络进行增量、“稀疏”训练。
GloVe 致力于拟合向量以对从语料库构建的巨大单词共现矩阵进行建模。
从相同的语料库中工作,创建相同维度的词向量,并同样关注元优化,它们生成的词向量的质量将大致相似。(当我看到有人自信地声称其中一个肯定更好时,他们经常将一种算法的一些调整/最佳情况使用与另一种算法的一些粗略/任意默认值进行比较。)
我更熟悉 Word2Vec,我的印象是 Word2Vec 的训练可以更好地扩展到更大的词汇表,并且具有更多可调整的设置,如果你有时间,可能允许将你自己训练的词向量更多地调整到你的特定应用程序。(例如,使用 small-versus-largewindow
参数可以对单词的最近邻居是否是“插入替换词”或更一般地在同一主题中使用的词产生强烈影响。不同的下游应用程序可能更喜欢以一种或另一种方式倾斜的词向量。)
相反,一些 GLoVe 的支持者吹捧它在不需要元参数优化的情况下做得相当好。
除非将它们相互比较,否则您可能不会同时使用它们,因为它们对于词向量的任何下游应用程序都起着相同的作用。
Word2vec 是一个预测模型:通过尝试预测给定上下文(CBOW方法)或来自目标的上下文词(skip-gram方法)的目标词进行训练。它使用可训练的嵌入权重将单词映射到其相应的嵌入,用于帮助模型进行预测。训练模型的损失函数与模型的预测有多好有关,因此当模型训练以做出更好的预测时,它将导致更好的嵌入。
Glove 基于词上下文矩阵的矩阵分解技术。它首先构造一个包含(单词 x 上下文)共现信息的大矩阵,即对于每个“单词”(行),您计算我们在某个“上下文”(列)中看到这个单词的频率(矩阵值)一个大的语料库。“上下文”的数量会非常大,因为它本质上是组合大小的。所以我们分解这个矩阵以产生一个低维(单词 x 特征)矩阵,其中每一行现在为每个单词产生一个向量表示。通常,这是通过最小化“重建损失”来完成的。这种损失试图找到可以解释高维数据中大部分方差的低维表示。
在 GloVe 之前,单词表示的算法可以分为两大流,基于统计的(LDA)和基于学习的(Word2Vec)。LDA 通过对共现矩阵的奇异值分解 (SVD) 生成低维词向量,而 Word2Vec 采用三层神经网络来执行中心上下文词对分类任务,其中词向量只是副产品。
Word2Vec 最令人惊奇的一点是,相似的词一起位于向量空间中,对词向量的算术运算可以构成语义或句法关系,例如,“king” - “man” + “woman” -> “queen” 或 “更好”-“好”+“坏”->“更糟”。然而,LDA 无法在向量空间中保持这种线性关系。
GloVe 的动机是强制模型显式地基于共现矩阵学习这种线性关系。本质上,GloVe 是具有加权最小二乘目标的对数双线性模型。显然,它是一种混合方法,使用基于统计矩阵的机器学习,这也是 GloVe 和 Word2Vec 的一般区别。
如果我们深入研究 GloVe 中方程的推导过程,我们会发现直觉中固有的差异。GloVe 观察到词-词共现概率的比率具有编码某种形式意义的潜力。以 StanfordNLP ( Global Vectors for Word Representation ) 为例,考虑目标词 ice 和 steam 与词汇表中的各种探测词的共现概率:
- 正如人们所预料的那样,冰与固体共存的频率高于与气体共存的频率,而蒸汽与气体共存的频率高于与固体共存的频率。
- 这两个词经常与它们的共有属性 water 共同出现,并且都很少与不相关的词时尚共同出现。
- 只有在概率的比率中,来自非区分词(如 water 和 fashion)的噪声才会被抵消,因此大值(远大于 1)与冰的特定属性有很好的相关性,而小值(远小于 1)与蒸汽特有的特性。
然而,Word2Vec 在纯共现概率上工作,以便将目标词周围的词作为上下文的概率最大化。
在实践中,为了加快训练过程,Word2Vec 采用负采样来代替 softmax 函数,用 sigmoid 函数对真实数据和噪声数据进行操作。这隐含地导致单词在向量空间中聚集成一个圆锥体,而 GloVe 的词向量的位置更加离散。