在 gensim word2vec 中使用 PathLineSentences 嵌入多词 ngram 短语
Embedding multiword ngram phrases with PathLineSentences in gensim word2vec
我有大约 82 个 gzip 文件(每个大约 180MB,总共 14GB),每个文件都包含换行分隔的句子。我正在考虑将 PathLineSentences from gensim Word2Vec to train word2vec model on the vocabularies. In that way 列表用于 RAM。
现在我还想让嵌入包含多词短语。但是从 documentation 来看,我似乎需要一个已经训练好的短语检测器和我拥有的所有句子,例如
from gensim.models import Phrases
# Train a bigram detector.
bigram_transformer = Phrases(all_sentences)
# Apply the trained MWE detector to a corpus, using the result to train a Word2vec model.
model = Word2Vec(bigram_transformer[all_sentences], min_count=1)
现在,我有两个问题:
- 有什么方法可以在 运行 Word2Vec 以流式传输的方式在每个单独的文件之上进行短语检测?
- 如果不是,有没有什么方法可以像 PathLineSentences 一样以流式方式进行短语检测,以类似的方式进行初始短语检测?
Gensim Phrases
class 将接受与 Word2Vec
完全相同形式的数据:所有标记化文本的可迭代。
您可以提供它作为初始训练语料库,然后作为要转换为成对二元语法的语料库。
但是,我强烈建议您 不要 尝试在同时流中进行短语组合作为馈送 Word2Vec
,出于清晰和效率的原因.
相反,进行一次转换,将结果写入一个新的单一语料库文件。那么:
- 您可以轻松查看二元组合的结果
- 决定组合哪些单词的逐对计算将只进行一次,创建一个由 space 分隔的标记组成的简单语料库。 (否则,`Word2Vec 完成的每个
epochs + 1
遍都需要重复相同的计算。)
大致是这样的:
with open('corpus.txt', 'w') as of:
for phrased_sentence in bigram_transformer[all_sentences]:
of.write(' '.join(phrased_sentence)
of.write('\n')
(如果您愿意,您可以改为使用 GzipFile
或 smart_open
的 gzip 功能写入 gzip 文件,如 corpus.txt.gz
。)
然后新文件会向您显示 Word2Vec
正在运行的确切数据,并且可以作为简单的语料库提供 - 用 LineSentence
包装为可迭代对象,甚至使用 corpus_file
选项可以更好地使用更多 workers
个线程。
我有大约 82 个 gzip 文件(每个大约 180MB,总共 14GB),每个文件都包含换行分隔的句子。我正在考虑将 PathLineSentences from gensim Word2Vec to train word2vec model on the vocabularies. In that way
现在我还想让嵌入包含多词短语。但是从 documentation 来看,我似乎需要一个已经训练好的短语检测器和我拥有的所有句子,例如
from gensim.models import Phrases
# Train a bigram detector.
bigram_transformer = Phrases(all_sentences)
# Apply the trained MWE detector to a corpus, using the result to train a Word2vec model.
model = Word2Vec(bigram_transformer[all_sentences], min_count=1)
现在,我有两个问题:
- 有什么方法可以在 运行 Word2Vec 以流式传输的方式在每个单独的文件之上进行短语检测?
- 如果不是,有没有什么方法可以像 PathLineSentences 一样以流式方式进行短语检测,以类似的方式进行初始短语检测?
Gensim Phrases
class 将接受与 Word2Vec
完全相同形式的数据:所有标记化文本的可迭代。
您可以提供它作为初始训练语料库,然后作为要转换为成对二元语法的语料库。
但是,我强烈建议您 不要 尝试在同时流中进行短语组合作为馈送 Word2Vec
,出于清晰和效率的原因.
相反,进行一次转换,将结果写入一个新的单一语料库文件。那么:
- 您可以轻松查看二元组合的结果
- 决定组合哪些单词的逐对计算将只进行一次,创建一个由 space 分隔的标记组成的简单语料库。 (否则,`Word2Vec 完成的每个
epochs + 1
遍都需要重复相同的计算。)
大致是这样的:
with open('corpus.txt', 'w') as of:
for phrased_sentence in bigram_transformer[all_sentences]:
of.write(' '.join(phrased_sentence)
of.write('\n')
(如果您愿意,您可以改为使用 GzipFile
或 smart_open
的 gzip 功能写入 gzip 文件,如 corpus.txt.gz
。)
然后新文件会向您显示 Word2Vec
正在运行的确切数据,并且可以作为简单的语料库提供 - 用 LineSentence
包装为可迭代对象,甚至使用 corpus_file
选项可以更好地使用更多 workers
个线程。