Gab*_*cea 5 machine-learning nltk keras word-embedding nltk-trainer
例如,当使用gensim,word2vec或类似方法训练嵌入矢量时,我想知道嵌入尺寸与词汇量之间的最佳比例是多少?随着更多数据的到来,这又将如何变化?
正如我仍在讨论的主题,在训练嵌入矢量时,如何选择合适的窗口大小?
我之所以这样问是因为我不是在用真实的语言词典来训练我的网络,而是用句子来描述进程与文件以及其他进程之间的关系等等。例如,我的文本语料库中的一个句子如下所示:
smss.exe irp_mj_create systemdrive Windows system32 ntdll dll DesiredAccess:执行/遍历,同步,处置:打开,选项:,属性:不适用,ShareMode:读取,AllocationSize:不适用,OpenResult:已打开”
您可能会想到变体很多,但问题仍然在于,如何才能以最佳方式微调这些超参数,以使嵌入空间不会过度拟合,但每个单词都有足够有意义的特征。
谢谢,
加布里埃尔
我不记得有任何关于这个问题的具体论文,但这个问题感觉有点奇怪 - 一般来说,如果我有一个很棒的模型但想切换到一个两倍或十倍大的词汇表,我不会改变嵌入维度。
恕我直言,它们是非常正交的,不相关的参数。决定最优嵌入维度的关键因素主要与计算资源的可用性(越小越好,所以如果结果没有差异,你可以将维度减半),任务和(最重要的)数量有关监督训练示例 - 嵌入维度的选择将决定您将压缩/故意限制词汇信息的程度;更大的维度将使您的模型能够区分更多的词汇细节,当且仅当您的监督数据有足够的信息可供使用时,这才是好的词法细节正确,但如果它不存在,那么额外的词法信息将过度拟合并且较小的嵌入维度将更好地泛化。因此,词汇量大小和嵌入维度之间的比率不是(恕我直言,我无法提供证据,这只是实践经验)值得关注的东西,因为嵌入维度的最佳大小取决于您使用嵌入的位置,而不是您训练嵌入的数据。
在任何情况下,这似乎是您的里程会有所不同的情况 - 任何理论和讨论都会很有趣,但是您的任务和文本领域非常具体,一般 NLP 的发现可能适用于您的案例,也可能不适用于您的案例,这将是最好获得对您的数据有效的经验证据。训练 64/128/256 或 100/200/400 或任何大小的嵌入,使用其中的每一种训练模型,并比较效果;与考虑效果应该是什么相比,这将花费更少的精力(人,而不是 GPU)。
好吧,以下“公式”提供了关于嵌入维数的一般经验法则:
Run Code Online (Sandbox Code Playgroud)embedding_dimensions = number_of_categories**0.25
也就是说,嵌入向量维度应该是类别数的 4 次方根。
有趣的是,Word2vec 维基百科文章说(强调我的):
尽管如此,对于在中等大小的语料库中训练的 skip-gram 模型,有50 个维度,15 个和 10 个负样本的窗口大小似乎是一个很好的参数设置。
假设一个标准大小的词汇表有 150 万个单词,这个经验法则非常接近:
50 == 1.5e6 ** 0.2751
归档时间: |
|
查看次数: |
2543 次 |
最近记录: |