python - 为什么 word2vec 创建词嵌入的速度如此之快?
问题描述
蟒蛇 3.9.6
我编写了代码来为我的领域(医学书籍)创建词嵌入。我的数据包含 45,000 个正常长度的句子(31 519 个唯一词,591 347 个所有词)。当我创建/学习模型时:
from gensim.models.word2vec import Word2Vec
model = Word2Vec(sentences,
min_count = 5,
vector_size = 200,
workers = multiprocessing.cpu_count(),
window = 6
)
model.save(full_path)
,它训练了大约 1-2 秒,保存的模型大小约为 15MB。
如何检查我的词嵌入创建的正确性?
解决方案
词嵌入并没有真正的“正确性”,只是“对预期目的有用”。
尤其是当您训练特定领域的向量时,对于某些特定的预期任务,您应该尝试创建自己的评估组合。
这些可能从一些特别的健全性检查开始,例如:“如果我查看model.most_similar('esophageal')
(或许多其他探测词),结果对我有意义吗?”
但是,如果你的评估是一些可重复的定量评分,那就更好了——比如一堆“应该”比其他词更接近的词——可以在你已经使用的新模型中快速运行调整参数或添加训练数据,将其与其他模型进行排名。
如果您的下游应用程序(信息检索、分类或推荐等)本身对理想结果有一些稳健的评分,并且您可以将其应用回来以表明一组词向量是否比另一组更好,则最好,以及多少。
另外:对于 word2vec,这不是一个非常大的训练集,但对于一些有用的结果可能就足够了。但这可能是令人怀疑的快速完成。尝试在INFO
级别启用日志记录,并观察进度信息以确保它在每个步骤中都有意义。测试使用超过默认值epochs=5
是否具有使训练花费更多时间的预期效果。(一个常见的错误是只传递一个迭代器,它只能产生一次训练数据,而不是一个真正的迭代器,可以重复多次迭代,给模型。这个错误允许模型一次通过它需要发现词汇,而不是epochs
真正训练所需的额外通行证。)
推荐阅读
- javascript - 从从 http 调用接收到的数据中删除数组 - angularJS
- php - Laravel - 我的关系递归中的 N+1 问题
- c++ - 使用 fopen 打开 .pak 文件并将该文件应用于 const unsigned char* (C++)
- python - 使用输入while循环python的最大和最小数字
- aws-lambda - 无服务器框架和 AWS Lambda 函数代码
- vim - Vim 以 REPLACE 模式打开,添加 'set noesckeys' 使箭头键无法使用
- .htaccess - 使用 htaccess 重写搜索 URL
- excel - “工作簿”对象没有属性“单元格”?我需要帮助将数据列表导出到另一个 Excel 文件
- reactjs - wordpress 可以做复杂的事情,比如反应吗?
- javascript - Express 和 mongoose 应用程序在一条路线低于另一条路线时出现错误 404,但在其上方时有效