Gensim W2V - UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

Gensim W2V - UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

我训练并保存了一个 word2Vec 模型 'myWord2Vec.model' 以将其传递给逻辑回归模型进行训练,但向量大小比我的训练数据集大,因此我需要减小向量大小。我试过下面的代码:

model = gensim.models.KeyedVectors.load_word2vec_format('myWord2Vec.model', limit=2021)

它给了我这个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

我不知道如何修复它,也不知道如何减小矢量大小。 我将不胜感激!

在 UTF-8 中,多字节序列以具有位 11xxxxxx 和连续字节 10xxxxxx 的字节开始。错误表明在起始位置遇到了连续字节 0x80 = 10000000。

这可能发生在非 UTF-8 text/binary 数据上,或者当不小心读取缓冲文本时,缓冲区开始或结束拆分多字节序列。

限制可能会破坏解码,但我会考虑先检查数据。您可以尝试使用 ISO-8859-1 来检查解码静默通过时会发生什么。

位置 0 处的 0x80 错误 data/wrong 算法。

你是如何保存 myWord2Vec.model 的?

如果用.save()保存,需要用.load()加载,同型号class。 (注意:.load() 是全有或全无,没有任何 limit= 选项只加载向量集的一部分。)

只有当您使用 .save_word2vec_format() 保存时,才适合使用 .load_word2vec_format() 加载。 (并且,尝试使用 .load_word2vec_format() 加载错误格式的文件可能会产生您所看到的那种错误。)

另外:limit=2021是一个很奇怪的选项。你真的只想加载 2,021 个向量吗? (通常人们至少要加载几万个。)

此外,您的观察结果“向量大小比我的训练数据集大”没有任何意义。 word2vec 中的矢量大小通常为 100-400 维,前提是您有足够的训练数据来支持该大小。如果您有 less 数据,则更有可能减小向量大小,这不足以训练更高维度的模型。减小向量大小 确实 节省了一点内存。但是,与训练数据集站点相比,模型大小更多地是词汇量(唯一单词的数量)的函数。而且,如果你真的有太多的词汇量无法存储在内存中,通常通过选择更高的 min_count 选项来丢弃频率较低的单词,这比缩小 vector_size.

更好。