如何在gensim中使用build_vocab?

UN2*_*758 3 nlp gensim word2vec doc2vec

  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()
Run Code Online (Sandbox Code Playgroud)

goj*_*omo 7

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

特别是,如果你提供你的sentences阴茎上可迭代的Doc2Vec()初始化时,它会自动做词汇发现通和所有的培训都-这样你就不会再需要调用build_vocab()train()自己。进一步,你将永远不会调用build_vocab()不带任何参数。(文档或在线示例中的任何示例都无法完成您的代码所做的工作——因此,在您遵循示例并了解它们为什么这样做之前,不要即兴创作新事物。)

有一个可选update参数build_vocab(),它声称允许扩展早期训练课程中的词汇(为使用较新的单词进行进一步训练做准备)。但是,它仅针对Word2Vec模型进行了开发/测试- 有报告称它在与Doc2Vec. 即使在 中Word2Vec,它在所有训练模式中的整体效果和最佳使用方法也不清楚。所以我不推荐使用它,除了可以阅读和解释源代码的专家,以及许多涉及的权衡,他们自己。如果您收到大量带有新单词的新文本,那么最有根据且最容易评估/推理的方法是使用所有文本示例的组合语料库从头开始重新训练。

  • 如果您在实例化“Doc2Vec”时提供可迭代的语料库,则初始化方法将只调用“build_vocab()”,然后调用“train()”。(如果您不提供语料库,它只会跳过该步骤并等待您调用它们。)因此,无论哪种方式,实例化/初始化/构建词汇/训练所需的总时间都是相同的。明确地执行此操作只会更清楚地显示代码中的每个步骤,并且您可以选择在每个步骤之间执行额外的步骤,或更改常用参数。(通常只有更高级的修补才需要这样做。) (2认同)