【问题标题】:Embedding multiword ngram phrases with PathLineSentences in gensim word2vec在 gensim word2vec 中使用 PathLineSentences 嵌入多词 ngram 短语
【发布时间】:2021-01-05 04:14:57
【问题描述】:

我有大约 82 个 gzip 文件(每个大约 180MB,总共 14GB),其中每个文件都包含换行符分隔的句子。我正在考虑使用 gensim Word2Vec 中的PathLineSentences 在词汇表上训练 word2vec 模型。这样I do not have to worry about taking all the sentences 就被列进内存了。

现在我还想让嵌入包含多词短语。但是从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)

现在,我有两个问题:

  1. 有什么方法可以在以流式方式在每个单独文件上运行 Word2Vec 时进行短语检测?
  2. 如果没有,我有什么方法可以像 PathLineSentences 一样进行初始短语检测,就像以流方式进行短语检测一样?

【问题讨论】:

    标签: python gensim word2vec


    【解决方案1】:

    Gensim Phrases 类将接受与Word2Vec 完全相同格式的数据:所有标记化文本的可迭代。

    您可以将其作为初始训练语料库,然后作为要转换为成对二元组的语料库。

    但是,出于清晰和效率的原因,我强烈建议您不要尝试在同时流中进行短语组合作为馈送到Word2Vec

    改为进行一次转换,将结果写入一个新的单一语料库文件。那么:

    • 您可以轻松查看二元组合的结果
    • 决定哪些单词将被组合的逐对计算将只进行一次,从而创建一个简单的以空格分隔的标记语料库。 (否则,`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')
    

    (如果您愿意,您可以改为使用GzipFilesmart_open 的gzip 功能写入像corpus.txt.gz 这样的gzip 压缩文件。)

    然后,新文件会向您显示 Word2Vec 正在运行的确切数据,并且可以作为简单的语料库提供 - 使用 LineSentence 包装为可迭代,甚至使用可以更好地使用更多 @ 的 corpus_file 选项传递987654332@线程。

    【讨论】:

      猜你喜欢
      • 2017-09-21
      • 2019-05-17
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 2018-11-02
      • 2023-03-24
      相关资源
      最近更新 更多