Wor2vec 微调

Sam*_*rix 2 python machine-learning word2vec data-science

我需要微调我的 word2vec 模型。我有两个数据集,data1data2.

到目前为止我所做的是:

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

这样对吗?我需要将学习的权重存储在某个地方吗?

我检查这个答案这一个,但我不明白它是如何做。

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

goj*_*omo 7

注意:您没有需要调用train()data1,如果你已经提供data1的模型实例的时间。如果您没有在实例化中指定一个,模型将已经在提供的语料库中完成它自己的内部build_vocab()train()提供的语料库,使用默认数量epochs(5)。

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

特别是,如果data2模型不知道in的词,它们将被忽略。(有一个选项可以build_vocab()使用参数调用update=True来扩展已知词汇,但这样的词与之前的词并不完全平等。)

如果data2包括了一些话,而不是其他人,只有那些在data2通过额外的培训得到更新-这基本上可以拉的那些话可比对齐从只出现在换句话说data1。(只有在交错的共享培训课程中一起训练的单词才会经历“推拉”,最终将它们留在有用的安排中。)

增量训练最安全的做法是重新洗牌data1data2在一起,做上的所有数据继续训练:让所有的话得到新的交织在一起训练。


小智 3

\n

它是否正确?

\n
\n

是的。您需要确保 data2 的单词在 data1 提供的词汇表中。如果不是的话,词汇中未出现的单词就会丢失。

\n

请注意,权重将通过以下方式计算

\n

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

\n

\n

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

\n

不等于

\n

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

\n
\n

我需要将学习到的权重存储在某处吗?

\n
\n

不,你不需要。

\n

但如果您愿意,可以将权重保存为文件,以便以后使用。

\n
model.save("word2vec.model")\n
Run Code Online (Sandbox Code Playgroud)\n

然后你通过以下方式加载它们

\n
model = Word2Vec.load("word2vec.model")\n
Run Code Online (Sandbox Code Playgroud)\n

来源

\n
\n

我需要微调我的 word2vec 模型。

\n
\n

请注意,“Word2vec 训练是一项无监督任务,没有很好的方法来客观评估结果。评估取决于您的最终应用程序。” (来源)但是您可以在此处查找一些评估(“如何衡量词向量的质量”部分)

\n

希望有帮助!

\n