【问题标题】:how to use build_vocab in gensim?如何在 gensim 中使用 build_vocab?
【发布时间】:2018-02-09 09:53:11
【问题描述】:
  1. Build_vocab 扩展我的旧词汇?

例如,我的想法是当我使用 doc2vec(s) 来训练模型时,它只是从数据集中构建词汇表。如果我想扩展它,我需要使用 build_vocab()

  1. 我应该在哪里使用它?我应该把它放在“gensim.doc2vec()”之后吗?

例如:

sentences = gensim.models.doc2vec.TaggedLineDocument(f_path)
dm_model = gensim.models.doc2vec.Doc2Vec(sentences, dm=1, size=300, window=8, min_count=5, workers=4)
dm_model.build_vocab()

【问题讨论】:

    标签: nlp word2vec gensim doc2vec


    【解决方案1】:

    您应该遵循 gensim 文档/教程/笔记本或在线教程中的工作示例,以了解哪些步骤是必要的以及按什么顺序进行。

    特别是,如果您在 Doc2Vec() 初始化时提供了您的 sentences 语料库迭代,它将自动进行词汇发现传递和所有训练 -所以你不要然后需要自己打电话给build_vocab()train()。而且,您永远不会在没有参数的情况下调用build_vocab()。 (文档或在线中的任何工作示例都无法完成您的代码所做的事情 - 因此,在您遵循示例并知道他们为什么这样做之前,不要即兴创作新事物。)

    build_vocab() 有一个可选的update 参数,旨在允许扩展早期培训课程中的词汇表(为使用新单词进行进一步培训做准备)。然而,它只针对Word2Vec 模型进行了开发/测试——有报告称它在与Doc2Vec 一起使用时会导致崩溃。即使在Word2Vec 中,它的整体效果和最佳使用方式在所有训练模式中都不清楚。所以我不推荐使用它,除非专家可以自行阅读和解释源代码,以及许多相关的权衡。如果您收到一大段带有新词的新文本,那么最有根据且最容易评估/推理的做法是使用所有文本示例的组合语料库从头开始重新训练。

    【讨论】:

    • 单独或在 Doc2Vec 初始化期间调用 build_vocab 有什么好处吗?尤其是速度方面
    • 如果您在实例化Doc2Vec 时提供语料库可迭代,则初始化方法将为您调用build_vocab(),然后调用train()。 (如果您不提供语料库,它只会跳过该步骤并等待您调用它们。)因此,实例化/初始化/构建词汇/训练所需的总时间是相同的。明确地这样做只会更清楚地显示代码中的每个步骤,并且可以选择在每个步骤之间执行额外的步骤,或者更改常用参数。 (通常只有更高级的修补需要。)
    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2017-04-19
    • 2018-12-31
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多