3

我有一个用于词嵌入的语料库。使用这个语料库,我训练了我的词嵌入。然而,每当我训练我的词嵌入时,结果都大不相同(这个结果是基于 K-Nearest Neighbor(KNN))。例如,在第一次训练中,' computer '最近邻词是' laptops '、' computerized '、' hardware '。但是,在第二次训练中,这个 knn 词是 ' software ', ' machine ',...('laptops' 排名靠后!)——所有训练都独立进行了 20 个 epoch,并且超参数都相同。

我想训练我的词嵌入非常相似(例如,“笔记本电脑”排名很高)。我应该怎么做?我应该调整超参数(学习率、初始化等)吗?

4

1 回答 1

2

您没有说您使用的是什么 word2vec 软件,这可能会改变相关因素。

word2vec 算法在初始化和其训练的几个方面(如负样本的选择,如果使用负采样,或非常频繁的词的随机下采样)固有地使用随机性。此外,如果您正在进行多线程训练,操作系统线程调度中的本质上随机抖动将改变训练示例的顺序,从而引入另一个随机源。因此,您不必期望后续运行,即使使用完全相同的参数和语料库,也会给出相同的结果。

尽管如此,有了足够好的数据、合适的参数和适当的训练循环,每次运行的相对邻居结果应该非常相似。如果不是,更多数据或更多迭代可能会有所帮助。

如果模型对于您的语料库来说过大(维度/单词太多),则很可能会出现截然不同的结果——因此容易出现过度拟合。也就是说,它通过本质上记住数据的特性,为数据找到了一个很好的配置,而没有获得任何泛化能力。如果这样的过度拟合是可能的,那么通常会有许多同样好的这样的记忆——所以它们可能与 run-to-tun 非常不同。同时,一个包含大量数据的大小合适的模型将捕获真正的普遍性,并且尽管有任何随机化,但这些模型在每次运行中都会更加一致。

获取更多数据,使用更小的向量,使用更多的训练通道,或者增加单词出现的最小数量来保留/训练一个单词都可能会有所帮助。(非常罕见的词不会得到高质量的向量,所以最终只会干扰其他词的质量,然后随机侵入最相似的列表。)

要知道还有什么问题,您应该在问题中澄清以下内容:

  • 使用的软件
  • 使用的模式/元参数
  • 语料库大小、示例数、平均示例大小(以单词为单位)和唯一字数(在原始语料库中以及在应用任何最小计数后)
  • 预处理方法
  • 您用于培训的代码(如果您自己管理多个培训通行证)
于 2017-08-18T03:25:58.577 回答