我刚接触word2vec。我需要微调我的word2vec模型。

我有2个数据集:data1和data2到目前为止我所做的是:

model = gensim.models.Word2Vec(
        data1,
        size=size_v,
        window=size_w,
        min_count=min_c,
        workers=work)
model.train(data1, total_examples=len(data1), epochs=epochs)

model.train(data2, total_examples=len(data2), epochs=epochs)


它是否正确?我需要将学习到的重量存储在某个地方吗?

我检查了this answerthis one,但我不明白它是如何完成的。

有人可以向我解释要遵循的步骤吗?

先感谢您

最佳答案

请注意,如果在模型实例化时已经提供了train(),则无需使用data1调用data1。如果未在实例化中指定一个模型,则该模型将使用默认数字build_vocab()(5)在提供的语料库上完成其内部的train()epochs

“微调”不是一个简单的过程,要保证可靠的步骤来改进模型。这很容易出错。

特别是,如果模型不知道data2中的单词,则将忽略它们。 (可以选择使用参数build_vocab()调用update=True来扩展已知词汇,但是这些单词与早期单词并没有完全平等的地位。)

如果data2包括某些单词,但不包括其他单词,则只有data2中的单词会通过额外的培训进行更新-这实际上可能会使这些单词脱离与仅出现在data1中的其他单词可比的对齐方式。 (只有在交错的共享培训课程中一起训练过的单词才会经过“推拉”操作,最终使它们处于有用的安排中。)

进行增量训练的最安全的方法是将data1data2一起洗牌,并对所有数据进行连续训练:这样所有单词都将得到新的交错训练。

关于machine-learning - Wor2vec微调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56166089/

10-12 18:10