词汇量大小和嵌入维度之间的首选比例是多少?

时间:2018-01-27 19:50:25

标签: machine-learning keras nltk word-embedding nltk-trainer

当使用例如 gensim word2vec 或用于训练嵌入向量的类似方法时,我很想知道什么是好的比例或嵌入之间是否有优选的比例维度到词汇量? 此外,随着更多数据的出现,这又如何变化?

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

我之所以这样问,是因为我没有使用真实语言字典训练我的网络,而是句子会描述进程和文件以及其他进程之间的关系等等。 例如,我的文本语料库中的一个句子看起来像:

  

smss.exe irp_mj_create systemdrive windows system32 ntdll dll DesiredAccess:执行/遍历,同步,处置:打开,选项:,   属性:不适用,ShareMode:Read,AllocationSize:不适用,OpenResult:   打开"

正如您可能想象的那样,变化很多,但问题仍然存在,我如何才能最好地调整这些超参数,以便嵌入空间不会过度拟合,但每个单词也有足够的有意义的特征。

谢谢,

加布里埃尔

2 个答案:

答案 0 :(得分:3)

比率不是您的目标

我不记得任何关于这个问题的具体论文,但这个问题感觉有点奇怪 - 一般来说,如果我有一个很好的模型,但想要切换到两倍或十倍的词汇量如果更大,我会更改嵌入尺寸。

恕我直言,他们是非常正交,无关的参数。决定最佳嵌入维度的关键因素主要与计算资源的可用性有关(越小越好,如果结果没有差异,你可以将维度减半,那么),任务和(大多数)重要的是监督训练样本的数量 - 嵌入维度的选择将决定你将压缩/故意瓶颈词汇信息的程度;更大的维度将允许您的模型区分更多的词汇细节,当且仅当您的受监督数据具有足够的信息正确使用词汇细节时,如果它不存在,那么额外的词汇信息会过度拟合,较小的嵌入维度会更好地概括。因此,词汇量大小和嵌入维度之间的比率不是(恕我直言,我无法提供证据,它只是实践经验)需要注意的事项,因为嵌入维度的最佳大小由< em>你在哪里使用嵌入,而不是训练嵌入的数据。

在任何情况下,这似乎都是您的里程会有所不同的情况 - 任何理论和讨论都会很有趣,但您的任务和文本域非常具体,一般NLP的结果可能适用于您的案例,也可能不适用于您的案例,以及最好能获得有关 数据的经验证据。使用64/128/256或100/200/400或任何尺寸训练嵌入物,使用每种训练模型,并比较效果;除了考虑应该产生什么影响之外,人们(而不是GPU)的努力会更少。

答案 1 :(得分:1)

This Google Developers blog post说:

  

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

embedding_dimensions =  number_of_categories**0.25
     

也就是说,嵌入矢量维应为类别数的第4个根。

有趣的是,the Word2vec Wikipedia article说(强调我):

  

尽管如此,对于以中等大小的语料库训练的跳跃语法模型, 50个维度,窗口大小为15和10个负样本似乎是一个很好的参数设置。

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

50 == 1.5e6 ** 0.2751