我有一个词汇嵌入语料库。使用这个语料库,我训练了我的单词嵌入。但是,每当我训练单词嵌入时,结果都是完全不同的(这个结果基于K-Nearest Neighbor(KNN))。例如,在第一次培训中,计算机'最近邻词是' 笔记本电脑',' 计算机化' '的硬件&#39 ;.但是,在第二次培训中,这些词语是' 软件' 机器',...(& #39;笔记本电脑排名较低!) - 所有培训均独立完成20个时期,超参数完全相同。
我想训练我的单词嵌入非常相似(例如,'笔记本电脑'排名很高)。我应该怎么做?我应该调整超参数(学习率,初始化等)吗?
答案 0 :(得分:2)
您没有说出您正在使用的word2vec软件,这可能会改变相关因素。
word2vec算法在初始化和训练的几个方面都固有地使用随机性(如选择否定示例,如果使用负采样,或对非常频繁的单词进行随机下采样)。此外,如果您正在进行多线程培训,则OS线程调度中的基本随机抖动将改变训练示例的顺序,引入另一个随机源。因此,即使使用完全相同的参数和语料库,您也不一定要期望后续运行,以得到相同的结果。
尽管如此,如果有足够好的数据,合适的参数和适当的训练循环,相对邻居结果应该在运行之间非常相似。如果不是,更多数据或更多迭代可能会有所帮助。
如果模型的语料库过大(维度/单词太多),则最有可能产生不同的结果 - 因此容易过度拟合。也就是说,它通过基本上记忆其特性而找到了一个很好的数据配置,而没有实现任何泛化能力。如果这种过度拟合是可能的,通常会有许多同样好的记忆 - 因此它们可能与run-to-tun非常不同。同时,具有大量数据的正确大小的模型将反而捕获真正的通用性,并且那些在运行之间会更加一致,尽管有任何随机化。
获取更多数据,使用较小的向量,使用更多的训练传递,或者增加最少的单词出现次数来保留/训练一个单词都可能有所帮助。 (非常罕见的单词不能获得高质量的向量,因此最终会干扰其他单词的质量,然后随机侵入大多数相似的单词。)
要知道还有什么可能出错,你应该在你的问题中澄清: