手套(Glove)和Word2vec之间的主要区别是什么?

25

word2vec和glove有什么区别?它们都是训练词嵌入的方法吗?如果是,那么我们如何同时使用它们?

2个回答

21

是的,它们都是训练词向量的方式。它们都提供相同的核心输出:每个单词一个向量,并且这些向量排列合理。也就是说,向量的相对距离/方向大致对应于人类对整体词相关性以及某些显著语义维度的想法。

Word2Vec通过反复迭代训练语料库来进行增量稀疏的神经网络训练。

GloVe旨在将向量拟合到从语料库构建的巨型词共现矩阵模型中。

在使用相同的语料库、创建相同维度的单词向量并且注重元优化的情况下,它们产生的结果向量的质量将大致相似。当我看到有人自信地声称其中一种算法明显更好时,他们通常是将某个调整/最佳用途的算法与另一个粗略/任意默认设置的算法进行比较。

我更熟悉Word2Vec,我的印象是Word2Vec的训练对于较大的词汇量更易扩展,并且具有更多可调整的设置,如果您有时间,可能会允许您更具体地调整自己训练的词向量以适应特定应用。 (例如,使用小或大的 window 参数可以强烈影响一个单词的最近邻居是“替换词”还是更一般使用相同主题的词。不同的下游应用可能更喜欢偏向某种方式的词向量。)

相反,GLoVe的一些支持者声称它在不需要元参数优化的情况下表现得相当好。

除非将它们相互比较,否则您可能不会同时使用它们,因为它们在任何词向量下游应用中都扮演着相同的角色。


16
Word2vec是一种预测模型:通过尝试预测给定上下文中的目标单词(CBOW方法)或来自目标单词的上下文单词(skip-gram方法)来训练。它使用可训练的嵌入权重将单词映射到它们对应的嵌入,这些嵌入用于帮助模型进行预测。训练模型的损失函数与模型预测的好坏有关,因此随着模型训练以使预测更准确,它将导致更好的嵌入。
Glove基于单词-上下文矩阵的矩阵分解技术。它首先构建一个大的(单词x上下文)共现信息矩阵,即对于每个“单词”(行),计算我们在大语料库中看到这个单词在某个“上下文”(列)中出现的频率(矩阵值)。由于“上下文”的数量非常大,因为它本质上是组合大小的,所以我们将这个矩阵分解成一个较低维度的(单词x特征)矩阵,其中每一行现在都产生了一个单词的向量表示。通常,这是通过最小化“重建损失”来完成的。这个损失试图找到能够解释高维数据中大部分方差的低维表示。
在GloVe之前,单词表示的算法可以分为两个主要流派:基于统计的(LDA)和基于学习的(Word2Vec)。LDA通过对共现矩阵进行奇异值分解(SVD)来产生低维单词向量,而Word2Vec则使用三层神经网络来执行中心-上下文单词对分类任务,其中单词向量只是副产品。
从Word2Vec中最惊人的一点是,相似的单词在向量空间中彼此靠近,并且对单词向量进行算术运算可以表达语义或句法关系,例如,“king” - “man” + “woman” -> “queen”或“better” - “good” + “bad” -> “worse”。然而,LDA无法在向量空间中保持这种线性关系。
GloVe的动机是强制模型根据共现矩阵显式地学习这种线性关系。实质上,GloVe是一个带有加权最小二乘目标的对数双线性模型。显然,它是一种混合方法,使用基于统计矩阵的机器学习,这是GloVe和Word2Vec之间的一般区别。
如果我们深入推导GloVe中方程式的过程,我们会发现直觉上存在差异。GloVe观察到单词-单词共现概率的比值具有编码某种形式的含义的潜力。以StanfordNLP(Global Vectors for Word Representation)的例子为例,考虑目标单词“ice”和“steam”与来自词汇表的各种探针单词的共现概率:
  • 可以预料的是,冰更常与固体共存,而蒸汽更常与气体共存。
  • 这两个词都经常与它们共享的属性“水”一起出现,而与不相关的词“时尚”很少一起出现。
  • 只有在概率比值中,来自像“水”和“时尚”这样的非判别性词的噪声才会抵消,以便大值(远大于1)与特定于冰的属性相关联,小值(远小于1)与特定于蒸汽的属性相关联。

然而,Word2Vec基于纯共现概率进行工作,以使周围单词成为上下文的概率最大化。

在实践中,为了加速训练过程,Word2Vec使用负采样将softmax函数替换为作用于真实数据和噪声数据的sigmoid函数。这隐含地导致单词在向量空间中聚集成锥形,而GloVe的单词向量则更离散。


太棒了,@Abhi25t,你能详细解释一下你帖子中的最后一段吗?这意味着什么,word2vec使用负采样?为什么会导致单词在向量空间中聚集成一个圆锥体?它在真实数据中如何应用?你是说word2vec比glove快得多吗?是否有任何条件或假设使其发生? - Counter10000
-ve采样是使用不共现的词对进行训练(通过从词汇表中随机选择一个词),从而训练模型将这些词对分开,除了训练模型使共现的词对在向量空间中保持接近。然后,不是要求模型输出每个词与x共现的概率向量(softmax),而是要求模型给出词对共现或不共现的概率(使用sigmoid分布进行二元分类)。这会导致聚类吗,因为负样本比正样本多吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接