我正在使用word2vec和某些参数配置来训练单词嵌入,我始终会遇到内存错误。我对整个英语维基百科都这样做,并使用PathLineSentence作为输入(超过11 GB)。我真的不知道哪个参数设置是错误的,但是我看到了一个趋势:当分层softmax设置为1时,我得到一个错误-那么hs的默认值是0还是1?还可以进行hs和负采样吗?
如果您能帮助我解决我的问题以及我能做什么来解决我的问题,那将是很棒的事情。
答案 0 :(得分:0)
您通常只想做负采样或分层softmax,而不是两者都做。
默认值为负采样,等同于您明确指定negative=5, hs=0
的情况。如果启用hierarchical-softmax,则应禁用负采样,例如:hs=1, negative=0
。
如果遇到内存错误,最常见的原因(如果您的RAM数量合理)是:
试图将整个大于实际的语料库加载到内存中。但是,如果您正确使用了PathLineSentence
之类的良好语料库迭代器,它将仅根据需要从文件中读取数据
试图创建一个太大的模型-模型大小的最大贡献者是已知词汇表的大小和所选矢量的大小。如果我没记错的话,对于像Wikipedia这样的东西,您可以设置min_count=100
并最终获得大约一百万个单词的词汇。对于300维矢量,仅单词矢量就需要(100万* 300维* 4字节每维=)1.2GB,而模型的内部权重又需要1.2GB,然后再减少一些其他结构的内存。
因此,要解决内存问题,请考虑:(1)获得更多的RAM; (2)确保仅对主体进行流式处理; (3)减小向量大小; (4)减少训练有素的词汇,最常见的方法是使用较大的min_count
截止点以丢弃稀有词。