训练 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
截止值来丢弃较稀有的单词。
我正在使用 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
截止值来丢弃较稀有的单词。