python-3.x - 在 Gensim 中找不到 Word2Vec 单词,但出现在 TensorFlow 嵌入投影仪上?
问题描述
我最近开始尝试使用预训练的词嵌入来提高我的 LSTM 模型在 NLP 任务中的性能。在这种情况下,我查看了 Google 的 Word2Vec。根据在线教程,我首先下载了 Word2Vecwget https://s3.amazonaws.com/dl4j-distribution/GoogleNews-vectors-negative300.bin.gz
并使用 python 的gensim
包来查询嵌入,使用以下代码。
from gensim.models import KeyedVectors
if __name__ == "__main__":
model = KeyedVectors.load_word2vec_format("./data/word2vec/GoogleNews-vectors-negative300.bin", binary=True)
print(model["bosnia"])
然而,在注意到模型中没有找到许多常用词后,我开始怀疑是否有问题。bosnia
如上所示,我尝试在嵌入存储库中搜索,但没有找到。所以,我继续使用TensorFlow 嵌入投影仪,加载 Word2Vec 模型,然后搜索bosnia
——它就在那里。
所以,我的问题是:为什么会这样?我下载的Word2Vec版本不完整吗?还是 gensim 无法将所有单词加载到内存中,因此省略了一些?
解决方案
您应该检查下载文件的长度,以确保它符合预期(以防它被截断或下载不完整)。
您应该仔细检查是否在两个地方都使用了相同的文件,并通过两个路径检查完全相同的标记(例如'bosnia'
vs )。( https://projector.tensorflow.org/下拉列表'Bosnia'
中的 5 个选项均不对应300-d、3-million-token 数据集,并且该按钮似乎不支持 word2vec文件,所以我我不确定如何使用它来交叉检查该文件中的内容。)GoogleNews
load
.bin
(在 gensim 中没有任何已知的错误load_word2vec_format()
可以解释它缺少实际存在的向量。)
推荐阅读
- binary - 在 VS 中获取十六进制转储时,这些句点是什么意思?
- r - 每天使用 R 随机分配参与者进行治疗
- swift - GKRTree 根本不想工作,还有其他类似的方法吗?
- mysql - 了解 MySQL 表的最大列宽
- python - 许多函数和许多变量
- dns - Google 域注册主机(粘合记录)在 48 小时后未解析
- java - Toolkit.getImage(URL url) 适用于 Java 8,但不适用于 Java 11
- python - 如何取消选择 Altair 的下拉框
- twilio - 从 Twilio 中的另一个流运行一个流
- asp.net - ASP.NET MVC 标识向后 Cookie 过期时间