【问题标题】:Gensim W2V - UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byteGensim W2V - UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 的字节 0x80:无效的起始字节
【发布时间】:2021-09-21 18:56:57
【问题描述】:

我训练并保存了一个 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

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

【问题讨论】:

    标签: python-3.x utf-8 gensim word2vec


    【解决方案1】:

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

    这可能发生在非 UTF-8 文本/二进制数据上,或者当无意中读取缓冲文本时,缓冲区开始或结束拆分了多字节序列。

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

    位置 0 处的 0x80 代表错误的数据/错误的算法。

    【讨论】:

      【解决方案2】:

      你是如何保存myWord2Vec.model的?

      如果您使用.save() 保存它,则需要使用相同模型类的.load() 加载它。 (注意:.load() 是全有或全无,没有任何 limit= 选项来仅加载部分向量集。)

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

      另外:limit=2021 是一个非常奇怪的选项。您真的只需要加载 2,021 个向量吗? (通常人们希望加载至少数万。)

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

      【讨论】:

      • 谢谢你成功了!我正在保存它 .save 确实,当我更改它时,它工作正常。是的,我的数据集目前非常小,这是该项目的挑战之一。
      猜你喜欢
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2020-09-22
      • 2021-12-01
      • 2016-05-13
      • 2020-02-06
      • 2017-09-27
      • 1970-01-01
      相关资源
      最近更新 更多