如何在三个预训练模型之间比较余弦相似度?

问题描述 投票:0回答:1

我有两个语料库-一个包含所有女性领导讲话,另一个包含男性领导讲话。我想检验一个假设,即一个语料库中两个单词之间的余弦相似度与另一个语料库中相同两个单词之间的余弦相似度显着不同。这样的t检验(或同等的检验)是否合乎逻辑吗?

此外,如果两个语料库的余弦相似度不同,我如何检查第三语料库中相同两个词之间的余弦相似度是否更类似于第一或第二语料库?

nlp gensim word2vec word-embedding glove
1个回答
0
投票

当然是可能。在给定一定数量的数据的情况下,它是否有意义,很难回答。

请注意,在单独的训练中,由于算法使用的固有随机性,给定的单词A不一定会出现在相同的坐标中。甚至在完全相同的数据上进行训练时也是如此。

通常就是这样,当有足够的数据/训练和精心选择的参数时,到其他单词BC等的距离/方向应该具有相似的总体用途。因此ABC等可能位于不同的位置,距离/方向略有不同-但相对的关系在词的邻域方面仍然相似,或者(AB)方向如果应用于其他词C等,仍可以预测某些人类可理解的含义差异。

因此,您应该避免直接对不同训练或语料库中的单词进行余弦相似度比较,但是您可能会发现相似度差异(AB

vs A'-B')的含义,或者前N个列表或相对排名。 (这也可能是与第三语料库进行比较的方式:在某些程度的成对相似性或前N个列表中,或相关单词在“最相似”结果中相关单词的顺序等级在多大程度上具有差异或相关性。)

您可能希望对度量进行健全性检查,方法是观察它们在逻辑上“不应该”在比较中暗示有意义的差异。例如,针对刚刚改组过的完全相同的语料库或针对完全相同的语料库的随机子集进行多次运行。 (在检查word2vec模型之间差异的重要性时,我不知道有什么像't检验'那么正式的东西,而是检查某些差异是否足以将真正不同的语料库与一个1 / N随机子集区分开同一语料库,达到一定的置信度可能是主张有意义差异的一种扎根方法。)

在某种程度上,“应该非常相似”运行显示的最终向量结果明显不同,这可能表明以下两者之一:

  • 语料库太小,每个单词的用法示例太少-word2vec受益于大量数据,与有时用于大型word2vec模型的数千亿训练词相比,政治演讲集可能很小

  • [[模型参数错误-模型过大(因此容易过度拟合),或者训练次数不足,或者其他次优参数可能会导致对于相同的训练数据变化更大的模型
  • 您还需要提防训练语料库大小不匹配。语料库的10倍大意味着更多的单词将通过固定的min_count阈值,并且任何选择的

    N

epochs训练都将涉及10倍的普通单词示例,并在更大的范围内支持稳定的结果(向量大小)模型-而语料库较小的相同模型参数会产生更多易变的结果。 [您可以考虑的另一种方法是将语料库组合成一个训练集,但根据相关说话者的不同,调整感兴趣的关键词的标记是不同的。例如,根据说话者的性别,将'family'替换为'f-family''m-family'。 (您可能会针对每次出现或部分出现的情况执行此操作。您可能还会多次将每个语音输入到语料库中,有时用实际单词,有时用上下文标记的替代词代替某些或全部词。 )

在那种情况下,您将最终得到一个最终模型,并且将“相同”坐标空间中的所有单词/上下文标记用于直接比较。但是,伪字'f-family''m-family'会受到上下文特定用法的影响更大-因此,它们的向量可能彼此不同,并且与原始'family'有所不同(如果您还保留了无用的它的使用)以有趣的暗示方式。

也请注意:如果使用原始Google word2vec代码版本的'analog-solving'方法或遵循其示例的其他库(例如gensim),请注意,它特别

wontt

返回为回答作为输入提供的任何单词。因此,当通过调用'man' : 'doctor' :: 'woman' : _?_解决充满性别歧视的类比model.most_similar(positive=['doctor', 'woman'], negative=['man'])时,即使基础模型still具有'doctor'作为最接近目标坐标的词,它也会自动作为以下项之一被跳过输入的单词,产生第二个最接近的单词。
一些早期的“单词偏向向量”文章忽略了这个细节,因此由于这种实现伪像而倾向于暗示更大的偏见,即使这种偏见很小甚至不存在。 (您可以向most_similar()提供原始向量而不是字符串令牌,然后获得完整结果,而无需对输入令牌进行任何过滤。)
© www.soinside.com 2019 - 2024. All rights reserved.