18

当使用例如gensimword2vec或类似的方法来训练您的嵌入向量时,我想知道什么是好的比率,或者嵌入维度与词汇大小之间是否存在首选比率?此外,随着更多数据的出现,这种情况会如何变化?

由于我仍在讨论这个话题,在训练嵌入向量时如何选择一个好的窗口大小?

我问这个是因为我不是用现实生活中的语言词典来训练我的网络,而是这些句子将描述进程和文件以及其他进程之间的关系等等。例如,我的文本语料库中的句子如下所示:

smss.exe irp_mj_create systemdrive windows system32 ntdll dll DesiredAccess: Execute/Traverse, Synchronize, Disposition: Open, Options: , Attributes: n/a, ShareMode: Read, AllocationSize: n/a, OpenResult: Opened"

正如您可能想象的那样,变化很多,但问题仍然是我如何以最佳方式微调这些超参数,以便嵌入空间不会过度拟合,而且每个单词都有足够的有意义的特征。

谢谢,

加布里埃尔

4

2 回答 2

13

比率不是您的目标

我不记得有任何关于这个问题的具体论文,但这个问题感觉有点奇怪——一般来说,如果我有一个很棒的模型但想切换到两倍或十倍大的词汇表,我不会改变嵌入维度。

恕我直言,它们是非常正交的,不相关的参数。决定最佳嵌入维度的关键因素主要与计算资源的可用性有关(越小越好,所以如果结果没有差异并且可以将维度减半,那么就这样做),任务和(最重要的)数量监督训练示例 - 嵌入维度的选择将决定您将压缩多少/有意限制词汇信息;更大的维度将允许您的模型区分更多的词汇细节,当且仅当您的监督数据有足够的信息可供使用时,这才是好的那个词法细节是正确的,但如果它不存在,那么额外的词法信息将过拟合,并且较小的嵌入维度将更好地泛化。因此,词汇量大小和嵌入维度之间的比率不是(恕我直言,我无法提供证据,这只是实践经验)值得一看的东西,因为嵌入维度的最佳大小取决于您使用嵌入的位置,而不是您训练嵌入的数据。

无论如何,这似乎是您的里程会有所不同的情况 - 任何理论和讨论都会很有趣,但您的任务和文本领域非常具体,一般 NLP 的发现可能适用于您的案例,也可能不适用,它会是最好获得对您的数据有效的经验证据。用 64/128/256 或 100/200/400 或任何大小训练嵌入,使用它们中的每一个训练模型,并比较效果;与思考效果应该是什么相比,这将花费更少的精力(人,而不是 GPU)。

于 2018-01-27T20:10:52.713 回答
13

这篇 Google Developers 博客文章说:

好吧,以下“公式”提供了关于嵌入维数的一般经验法则:

embedding_dimensions =  number_of_categories**0.25

也就是说,嵌入向量维度应该是类别数的第 4 根。

有趣的是,Word2vec 维基百科文章说(强调我的):

然而,对于在中等大小的语料库中训练的 skip-gram 模型,有50 个维度,15 个和 10 个负样本的窗口大小似乎是一个很好的参数设置。

假设一个标准大小的词汇量为 150 万个单词,这个经验法则出人意料地接近:

50 == 1.5e6 ** 0.2751

于 2019-03-29T07:33:54.490 回答