训练 word2vec 时出现内存错误:分层 softmax

memory Error while training word2vec: hierarchical softmax

我正在使用 word2vec 和一些参数配置训练词嵌入,但我总是遇到内存错误。我为整个英文维基百科执行此操作,并使用 PathLineSentence 作为输入(超过 11 GB)。我真的不知道,哪个参数设置是错误的,但我看到一个趋势:当 hierachical softmax 设置为 1 时,我得到一个错误 - 那么 hs 的默认值是多少 - 0 或 1?是不是也可以做hs和negative sampling?

如果你能帮我解决我的问题以及我能做些什么来解决我的问题,那就太好了。

您通常只想执行 negative-sampling 或 hierarchical-softmax,而不是两者。

默认值为 negative-sampling,相当于您明确指定 negative=5, hs=0。如果启用 hierarchical-softmax,则应禁用 negative-sampling,例如:hs=1, negative=0

如果您遇到内存错误,最常见的原因(如果您有足够的 RAM)是:

  • 尝试将整个 larger-than-practical 语料库加载到内存中。然而,如果你使用的是一个好的语料库迭代器,比如PathLineSentence,正确地,它只会根据需要从文件中读取数据

  • 试图创建一个太大的模型 - 模型大小的最大贡献者是已知词汇表的大小和选择的 vector-size。如果我没记错的话,对于像维基百科这样的东西,你可以设置 min_count=100 并且仍然会得到大约 100 万个单词的词汇量。对于 300 维向量,这将需要(100 万 * 300 维 * 4 bytes-per-dimension=)1.2GB 仅用于 word-vectors,而对于模型的内部权重又需要那么多,然后是一些其他结构的内存量较小。

因此,要解决内存问题,请考虑:(1) 获取更多 RAM; (2) 确保语料库只被流式传输; (3) 减少vector-size; (4) 减少 trained-vocabulary,最常见的方法是使用更大的 min_count 截止值来丢弃较稀有的单词。