3 python gensim word2vec deep-learning doc2vec
我是doc2vec的新手.我最初试图理解doc2vec,下面提到的是我使用Gensim的代码.正如我所希望的,我得到了两个文件的训练模型和文档向量.
但是,我想知道在几个时代重新训练模型的好处以及如何在Gensim中进行训练?我们可以使用iter或alpha参数来做,还是我们必须单独训练它for loop?请让我知道如何更改以下代码以训练20个epoches的模型.
此外,我有兴趣知道word2vec模型还需要多次训练迭代.
# Import libraries
from gensim.models import doc2vec
from collections import namedtuple
# Load data
doc1 = ["This is a sentence", "This is another sentence"]
# Transform data
docs = []
analyzedDocument = namedtuple('AnalyzedDocument', 'words tags')
for i, text in enumerate(doc1):
words = text.lower().split()
tags = [i]
docs.append(analyzedDocument(words, tags))
# Train model
model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4)
# Get the vectors
model.docvecs[0]
model.docvecs[1]
Run Code Online (Sandbox Code Playgroud)
Word2Vec和相关的算法(如'Paragraph Vectors'又名Doc2Vec)通常会对文本语料库进行多次训练.
如果您还在对象初始化中提供语料库以触发即时训练,则Gensim的Word2Vec/ Doc2Vec允许iter参数指定传递次数.(上面的代码通过提供构造函数调用docs来完成此操作Doc2Vec(docs, ...).)
如果未指定,itergensim使用的默认值为5,以匹配Google原始word2vec.c版本使用的默认值.所以上面的代码已经使用了5个培训通行证.
已发表的Doc2Vec作品通常使用10-20次.如果您想要执行20次传递,则可以将Doc2Vec初始化更改为:
model = doc2vec.Doc2Vec(docs, iter=20, ...)
Run Code Online (Sandbox Code Playgroud)
因为Doc2Vec经常为每个文档使用唯一标识符标记,所以更多的迭代可能更重要,因此随着模型的逐步改进,每个doc-vector都会在培训过程中多次进行培训.另一方面,因为Word2Vec语料库中的单词可能出现在整个语料库中的任何位置,所以每个单词的相关向量将在模型改进的过程中在过程的早期和中期以及后期进行多次调整 - 即使只进行一次通过.(因此,对于一个巨大的,不同的Word2Vec语料库,使用少于默认通道数的思维是可以想象的.)
您不需要自己进行循环,大多数用户不应该这样做.如果你做管理的独立build_vocab()和train()步骤你自己,而不是供应的更简单的步骤docs在初始化呼叫语料库触发即时的训练,那么你必须提供一个epochs参数train()-它会执行的遍数,所以你仍然只需要一个电话train().
| 归档时间: |
|
| 查看次数: |
3083 次 |
| 最近记录: |