嵌入向量维度和词汇量之间的比率

数据挖掘 nlp 词嵌入
2021-09-23 13:17:19

在相当小的词汇表(~300)上使用EmbeddingKeras 中的层,我正在研究在给定 300 维向量时如何选择该层的输出(密集向量)。我认为嵌入向量需要具有最小长度才能映射给定的词汇表。

2个回答

确定神经网络中其他层大小的词汇与嵌入长度的比率并不重要。词嵌入的长度总是在 100 和 300 左右,较长的嵌入向量不会添加足够的信息,而较小的嵌入向量不能很好地表示语义。更重要的是网络架构、算法和数据集大小。

理解这个概念的一个简单方法是,一个具有 50 个神经元(节点)和一个由 70 个神经元组成的完全连接层的双向 LSTM 模型将优于一个简单的由 1000 个神经元(节点)连接到嵌入层的 MLP,这仅仅是因为它的架构。添加 dropout 也会提高性能。

此外,即使词汇表只有 300 个单词,使用预训练嵌入可能会比直接在数据集上训练嵌入产生更好的结果。这同样适用于数据大小,与只有几千个样本的数据集相比,具有更多样本的数据集将成为更好的分类器。

总之,最好尝试许多架构并交叉验证它们(和/或集成它们,这取决于你是否有足够大的数据集)尽可能少的神经元,然后根据计算资源开始扩大规模你有你需要的发展速度。大型模型会减慢开发速度,而小型模型会加快开发速度。无论您的词汇量是普通爬网的大小还是仅 300,这都适用。像往常一样,尝试特征工程(句子长度、特殊字符等)并增加数据集大小,因为这样做通常有助于您尝试预测的任何任务.

此处提出了类似的问题

这篇 Google Developers 博客文章说:

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

embedding_dimensions =  number_of_categories**0.25

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

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

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

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

50 == 1.5e6 ** 0.2751