如何用gensim word2vec处理大量的句子?
How to deal with large amount of sentences with gensim word2vec?
我有很多句子,问题是我无法一次将它们全部加载到内存中,特别是当我标记句子并将它们分成单词列表时,我的 RAM 很快就满了。
但我找不到任何示例来说明如何批量训练 gensim word2vec,这意味着在每个时期我想我必须以某种方式从磁盘加载批量数据,标记它们然后将其提供给模型卸载它并加载下一批。
当我没有足够的内存来加载所有句子(甚至不到 20%)时,我该如何克服这个问题并训练 word2vec 模型。
我的句子基本上都在一个文本文件里,每一行代表一个句子。
您可以按照 docs 中的建议定义自己的语料库,在这种情况下语料库的大小基本上无关紧要:
from gensim.test.utils import datapath
from gensim import utils
class MyCorpus(object):
"""An interator that yields sentences (lists of str)."""
def __iter__(self):
corpus_path = datapath('lee_background.cor')
for line in open(corpus_path):
# assume there's one document per line, tokens separated by whitespace
yield utils.simple_preprocess(line)
然后训练如下:
import gensim.models
sentences = MyCorpus()
model = gensim.models.Word2Vec(sentences=sentences)
我有很多句子,问题是我无法一次将它们全部加载到内存中,特别是当我标记句子并将它们分成单词列表时,我的 RAM 很快就满了。
但我找不到任何示例来说明如何批量训练 gensim word2vec,这意味着在每个时期我想我必须以某种方式从磁盘加载批量数据,标记它们然后将其提供给模型卸载它并加载下一批。
当我没有足够的内存来加载所有句子(甚至不到 20%)时,我该如何克服这个问题并训练 word2vec 模型。
我的句子基本上都在一个文本文件里,每一行代表一个句子。
您可以按照 docs 中的建议定义自己的语料库,在这种情况下语料库的大小基本上无关紧要:
from gensim.test.utils import datapath
from gensim import utils
class MyCorpus(object):
"""An interator that yields sentences (lists of str)."""
def __iter__(self):
corpus_path = datapath('lee_background.cor')
for line in open(corpus_path):
# assume there's one document per line, tokens separated by whitespace
yield utils.simple_preprocess(line)
然后训练如下:
import gensim.models
sentences = MyCorpus()
model = gensim.models.Word2Vec(sentences=sentences)