单词A和B之间的语义相似度:取决于语料库中A和B的频率?

时间:2019-04-04 16:07:49

标签: python nlp gensim word2vec word-embedding

背景:

给出一个语料库,我想用word2wec(Gensim)的实现来训练它。

想了解两个标记之间的最终相似性是否取决于语料库中的A和B的频率(保留所有上下文),还是与之无关。

示例: (可能并不理想,但可以用它来详细说明问题陈述)

假设在语料库中的3个不同上下文中使用了单词“ A”:

Context 1 : 1000 times
Context 2 : 50000 times
Context 3 : 50000 times

'B'在2种不同的情况下使用:

Context 1 : 300 times 
Context 5 : 1000 time

问题:

如果我更改了语料库中“ A”的频率(确保没有上下文丢失,即“ A”在所有语境中仍像原始语料库中一样至少使用了一次),是否是A snd之间的相似性B会一样吗?

跨上下文的“ A”新分布

 Context 1 : 5 times
 Context 2 : 10 times
 Context 3 : 5000 times

任何潜在客户表示赞赏

3 个答案:

答案 0 :(得分:0)

我的感觉是(#转化为直觉,而不是数学):

相似度将根据这两个词彼此接近或在相同上下文中使用的频率来计算。

提供您从那里出发的信息:

如果这两个词实际上是相似的,则它们使用得越频繁=>您拥有的训练数据越多=>模型越好=>它们将越接近。

如果您使用的是更多上下文,则使用这两个词,则它们之间的关系会更紧密。

但是,如果它们在语料库中出现的频率较低,但在一起的频率更高,那么它们之间的关系也会更紧密。

因此,它更多是(frequency_same_context)/(frequency_overall)。 如果您不进行更改,我想您应该没事吗?

答案 1 :(得分:0)

Gensim实现了两个单词向量模型:

  1. 跳过图
  2. CBOW

两者之间的区别在于如何使用特征化和标签来训练单词向量模型。

两个模型都在令牌上下文上进行训练,以将令牌自动编码到连续的语义向量空间中。

跳过语法

用于训练的输入是上下文窗口n-gram,而预测的标签是第n个标记。

如果我们使用bigram上下文窗口,则输入向量将使用标记;

[Token_(n-2), Token_(n-1), Token_(n+1), Token_(n+2)]

要预测的标签是

Token_n

CBOW

用于训练的输入是上下文窗口n-gram,而预测的标签是第n个标记。

如果我们使用bigram上下文窗口,则输入向量将使用令牌;

Token_n

要预测的标签是

[Token_(n-2), Token_(n-1), Token_(n+1), Token_(n+2)]

目的是什么?

显然,这是一个过分的简化,但这可以帮助我们问,单词向量模型有什么作用?

在gensim中实现的单词向量模型的目的是什么?

这两个模型为给定标记编码语义上下文

因此,问模型中的相似单词应与它们在其上受训练的上下文成正比。

TL; DR

WV模型以表示形式对单词上下文进行编码。

因此,单词的相似度与它们的数量不成正比,而与它们出现的上下文成正比。

答案 2 :(得分:0)

如果您“精简”了一个单词(而不是其他单词)的示例上下文的数量,相似性肯定会改变。

Word2Vec依赖于单词用法的许多不同示例。培训过程一次仅考虑同现的单个示例。 (在流行的跳过语法模式中,仅单个context-word -> target-word示例。)

训练会反复向神经网络呈现一个单一的上下文,沿着有趣的路径的一小部分检查网络的响应,并通过更改网络的内部权重和“定义单词向量的投影权重。

与所有其他向量相比,所有这些更新在多次迭代中的总效果最终导致将每个单词的向量推到一个有用的位置。 (这是在改进一些示例与改进其他示例之间的“拉锯战”。)

任何改变所用示例的组合都会改变最终结果。特别地,如果总体上单词A的示例较少,那么将花费较少的总体培训时间来使模型在包括A的上下文中表现良好。它的最终位置和相关权重将受到其他词的更多示例的影响。

此外,精简A的示例实际上还改变了它与所有曾经训练过的所有单词的共现率。 A上下文较少意味着A -> BB -> A上下文的数量也将改变,这也将改变单词B的最终位置。这适用于与C同时出现的所有其他词DA等,尤其是当某些上下文比其他上下文更稀疏时。 (例如,在您的A新分布示例中,“上下文2”的出现频率是第1/5000,而“上下文3”的出现频率是第1/10。)

请注意,大多数Word2Vec实现中都有一个频繁的单词下采样功能,通常使用名为sample的参数来控制,这有意丢弃许多非常常见的单词。这确实有意改变了训练语料库中单词的相对频率。

与不下采样相比,此处选择的值往往会加快训练速度并提高最终词向量的质量。为什么?一旦有了成百上千个常用单词的不同示例,额外的边际示例并不能帮助您对该单词进行很大的改进-但这 需要花费更多的时间,并且训练时间所占的比例更高总体而言,改进了那些常见单词的模型。而且,在许多示例中,这些单词的细微改进必须按照上述过程进行,而不是对带有较少示例的更多单词进行改进。丢弃某些“过分频繁”的单词可以使其他单词对模型的最终状态产生更大的相对影响,甚至可以有效地缩小稀有单词之间的有效上下文距离(当掉落更频繁的中间单词时)。