肯定是possible。在给定一定数量的数据的情况下,它是否有意义更难回答。
请注意,在单独的训练课程中,给定的单词A由于算法使用的固有随机性,不一定会出现在相同的坐标中。即使在训练时也是如此完全相同的数据.
一般来说,到其他词的距离/方向B, C当有足够的数据/训练和精心选择的参数时,等应该具有类似的整体有用性。所以A, B, C等可能位于不同的地方,距离/方向略有不同 - 但相对关系仍然相似,就词邻域或(A-B)如果应用于其他单词,方向仍然可以预测某些人类可感知的含义差异C etc.
因此,您应该避免在来自不同训练运行或语料库的单词之间进行直接余弦相似度比较,但您可能会在相似性差异中发现意义(A-B vs A' - B')或前 N 个列表或相对排名。 (这也可能是如何与第三个语料库进行比较:某些成对相似性、前 N 个列表或相关单词在彼此“最相似”结果中的顺序排列在多大程度上存在差异或相关性。)
您可能想要对您的测量进行健全性检查,通过查看它们在多大程度上暗示了逻辑上“不应该”的比较中有意义的差异。例如,针对刚刚重新洗牌的完全相同的语料库或针对完全相同的语料库的随机子集进行多次运行。 (我不知道有什么像“t 测试”那样正式的东西来检查 word2vec 模型之间差异的重要性,但检查一些差异是否足以区分真正不同的语料库,仅是 1/N 随机子集对于同一语料库,达到一定的置信水平可能是断言有意义的差异的基础方法。)
在某种程度上,这种“应该非常相似”的运行反而显示出明显不同的最终向量结果,这可能表明:
您还需要注意训练语料库大小的不匹配。 10 倍大的语料库意味着更多的单词可以通过固定的min_count
阈值,以及任何选择的N epochs
训练将涉及 10 倍多的常用词示例,并支持较大(向量大小)模型中的稳定结果 - 而具有较小语料库的相同模型参数会产生更不稳定的结果。
您可以考虑的另一种技术是将语料库合并到一个训练集中,但根据相关说话者的不同,将感兴趣的关键词的标记进行修改。例如,您可以替换单词'family'
with 'f-family'
or 'm-family'
,取决于说话者的性别。 (您可以对每次出现或出现的某些部分执行此操作。您还可以将每个语音多次输入到语料库中,有时使用实际单词,有时使用上下文标记的替代词替换部分或全部。 )
在这种情况下,您最终会得到一个最终模型,并且所有单词/上下文标记都位于“相同”坐标空间中以进行直接比较。但是,伪词'f-family'
and 'm-family'
会更多地受到其特定于上下文的用法的影响 - 因此它们的向量可能彼此不同,并且与原始向量不同'family'
(如果您还保留了其使用的未修改实例)以有趣的暗示方式。
另请注意:如果使用原始 Google word2vec 代码版本的“类比求解”方法,或遵循其示例的其他库(例如gensim
),特别注意won't返回作为输入提供的任何单词作为答案。所以当解决充满性别的类比时'man' : 'doctor' :: 'woman' : _?_
,通过调用model.most_similar(positive=['doctor', 'woman'], negative=['man'])
,即使底层模型still has 'doctor'
作为最接近目标坐标的单词,它会自动跳过作为输入单词之一,而是生成第二个最接近的单词。
一些早期的“词向量偏差”文章忽略了这个细节,因此由于这种实现工件,往往意味着更大的偏差,即使这种偏差很小甚至不存在。 (您可以提供原始向量,而不是字符串标记,以most_similar()
- 然后获得完整结果,无需对输入标记进行任何过滤。)