我刚接触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 answer和this one,但我不明白它是如何完成的。
有人可以向我解释要遵循的步骤吗?
先感谢您
最佳答案
请注意,如果在模型实例化时已经提供了train()
,则无需使用data1
调用data1
。如果未在实例化中指定一个模型,则该模型将使用默认数字build_vocab()
(5)在提供的语料库上完成其内部的train()
和epochs
。
“微调”不是一个简单的过程,要保证可靠的步骤来改进模型。这很容易出错。
特别是,如果模型不知道data2
中的单词,则将忽略它们。 (可以选择使用参数build_vocab()
调用update=True
来扩展已知词汇,但是这些单词与早期单词并没有完全平等的地位。)
如果data2
包括某些单词,但不包括其他单词,则只有data2
中的单词会通过额外的培训进行更新-这实际上可能会使这些单词脱离与仅出现在data1
中的其他单词可比的对齐方式。 (只有在交错的共享培训课程中一起训练过的单词才会经过“推拉”操作,最终使它们处于有用的安排中。)
进行增量训练的最安全的方法是将data1
和data2
一起洗牌,并对所有数据进行连续训练:这样所有单词都将得到新的交错训练。
关于machine-learning - Wor2vec微调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56166089/