python - 我什么时候应该考虑使用预训练模型 word2vec 模型权重?
问题描述
假设我的语料库相当大——有数万个独特的词。我可以使用它直接构建 word2vec 模型(下面代码中的方法 #1),或者使用预先训练的模型权重初始化一个新的 word2vec 模型,并使用我自己的语料库对其进行微调(方法 #2)。方法#2值得考虑吗?如果是这样,是否有关于何时应该考虑预训练模型的经验法则?
# Approach #1
from gensim.models import Word2Vec
model = Word2Vec(my_corpus, vector_size=300, min_count=1)
# Approach #2
model = Word2Vec(vector_size=300, min_count=1)
model.build_vocab(my_corpus)
model.intersect_word2vec_format("GoogleNews-vectors-negative300.bin", binary=True, lockf=1.0)
model.train(my_corpus, total_examples=len(my_corpus))
解决方案
此类问题的一般答案是:您应该同时尝试它们,看看哪个更适合您的目的。
没有您的确切数据和项目目标,没有人可以确定哪个更适合您的情况,并且您需要具有完全相同的评估替代选择的能力,以对您的工作进行各种非常基本、必要的调整.
分别地:
- “微调”word2vec-vector 可能意味着很多事情,并且可能会引入许多专家级棘手的权衡决策 - 只有当你有一种强大的方法来测试针对每个选项的不同选择时才能导航的那种权衡其他。
- 您的代码显示的特定简单调整方法(依赖于
intersect_word2vec_format()
可能在最新的 Gensim 中不起作用的实验方法( ,也抛弃了人们经常想要混合旧向量的主要原因之一——以覆盖更多不在训练数据中的词。(我怀疑这种方法在许多情况下是否有用,但如上所述,以确保您想针对您的数据/目标尝试它。 min_count=1
与 word2vec 和类似算法一起使用几乎总是一个坏主意。如果这些稀有词真的很重要,那就找到更多的训练例子,这样就可以为它们训练出好的向量。但是如果没有足够的训练示例,通常最好忽略它们——保留它们甚至会使周围单词的向量变得更糟。
推荐阅读
- python - 我想根据我的演讲刷新我的报告是否可以在 Power BI 中使用?
- java - Java 中的 Nats 请求/回复
- typescript - Apollo、Express、WS 会话未共享
- selenium - Selenium webdriver连接超时后如何清理等待请求
- java - h2o.xgboost 训练错误 java.lang.NullPointerException h2o 版本:3.26.0.2
- discord.js - 如何通过我自己的机器人使用音乐不和谐机器人
- vba - 使用定义的函数执行直到
- phabricator - 在 Phabricator 中实现甘特图
- java - 使用 spring @Scheduled 的问题
- javascript - 在比较字符串中使用变量