您没有说您使用的是什么 word2vec 软件,这可能会改变相关因素。
word2vec 算法在初始化和其训练的几个方面(如负样本的选择,如果使用负采样,或非常频繁的词的随机下采样)固有地使用随机性。此外,如果您正在进行多线程训练,操作系统线程调度中的本质上随机抖动将改变训练示例的顺序,从而引入另一个随机源。因此,您不必期望后续运行,即使使用完全相同的参数和语料库,也会给出相同的结果。
尽管如此,有了足够好的数据、合适的参数和适当的训练循环,每次运行的相对邻居结果应该非常相似。如果不是,更多数据或更多迭代可能会有所帮助。
如果模型对于您的语料库来说过大(维度/单词太多),则很可能会出现截然不同的结果——因此容易出现过度拟合。也就是说,它通过本质上记住数据的特性,为数据找到了一个很好的配置,而没有获得任何泛化能力。如果这样的过度拟合是可能的,那么通常会有许多同样好的这样的记忆——所以它们可能与 run-to-tun 非常不同。同时,一个包含大量数据的大小合适的模型将捕获真正的普遍性,并且尽管有任何随机化,但这些模型在每次运行中都会更加一致。
获取更多数据,使用更小的向量,使用更多的训练通道,或者增加单词出现的最小数量来保留/训练一个单词都可能会有所帮助。(非常罕见的词不会得到高质量的向量,所以最终只会干扰其他词的质量,然后随机侵入最相似的列表。)
要知道还有什么问题,您应该在问题中澄清以下内容:
- 使用的软件
- 使用的模式/元参数
- 语料库大小、示例数、平均示例大小(以单词为单位)和唯一字数(在原始语料库中以及在应用任何最小计数后)
- 预处理方法
- 您用于培训的代码(如果您自己管理多个培训通行证)