Python Gensim框架:保存和存储word2vec键控向量

Python Gensim框架:保存和存储word2vec键控向量,python,gensim,word2vec,Python,Gensim,Word2vec,我正在使用word2vec模型,我在存储和读取它时遇到问题 import gensim.models.keyedvectors as w2v from gensim.models import KeyedVectors word_vectors = w2v.wv word_vectors.save(filepath + "Vectors.bin") m = word2vec.KeyedVectors.load_word2vec_format(filepath + "Vectors.bin",

我正在使用word2vec模型,我在存储和读取它时遇到问题

import gensim.models.keyedvectors as w2v
from gensim.models import KeyedVectors

word_vectors = w2v.wv
word_vectors.save(filepath + "Vectors.bin")

m = word2vec.KeyedVectors.load_word2vec_format(filepath + "Vectors.bin", binary=True)
我发现以下错误:

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

老顶将以以下方式工作:

vectors = KeyedVectors.load(filepath + "Vectors.bin", mmap='r')
但如果我再打电话

vectors.similar_by_word("cat")
我发现以下错误: TypeError:不支持**或pow()的操作数类型:'list'和'int'

我做错了什么?
如何使用save_word2vec_format()函数?

将gensim.models.keyedvectors导入为w2v和
word_vectors=w2v.wv
的初始代码块没有多大意义

从字面上看,这是将完整的Python代码模块
gensim.models.keyedvectors
分配给变量
w2v
。该模块没有
.wv
属性,因此我甚至不希望执行
word\u vectors=w2v.wv
。它当然不会导致
word\u向量
然后成为一组实际的经过训练的词向量,除非有一堆其他的训练代码没有显示出来

你确定你问题中的代码能代表你实际在做什么吗

尽管如此,如果您确实成功地将
word\u vectors
保存到
gensim
KeyedVectors
对象中,并填充了要保存的词向量,那么您有两个选择:

  • 要以谷歌原始版本
    word2vec.c
    使用的相同格式保存单词向量,您可以使用
    .save\u word2vec\u格式(path…)
    方法。然后,要在以后重新加载这些向量,您需要使用匹配的
    reloated\u vectors=KeyedVectors.load\u word2vec\u format(path,…)
    方法

  • 要以
    gensim
    自己的基于Python的格式保存单词向量,可以使用
    .save(path)
    方法。然后,要在以后重新加载这些向量,您需要使用匹配的
    reloated\u vectors=KeyedVectors.load(path)
    方法。这种方法可以保存更多的信息(如果培训中有),比如字数。为了更大对象的效率,它可以将大部分向量存储到单独的文件中,如果将文件移到其他位置,则应将该文件与主
    路径
    文件一起保存,并允许以后使用
    mmap
    选项(但不是要求)

您无法混合和匹配这些格式:由
save\u word2vec\u format()
保存的文件只能由
load\u word2vec\u format()
读取,而由
save()
保存的文件只能由
load()
读取

关于你的另一个
类型错误
,没有足够的信息来推测出哪里出了问题。您需要编辑您的答案以添加更多细节,并使演示代码自我一致

例如,您将显示加载到名为
vectors
的变量中,然后是对名为
model
的变量的操作。这种差异暗示问题可能是未显示代码中的其他不匹配


类似地,如果您遇到任何错误,您应该在问题中准确地引用错误消息和报告的完整错误堆栈,以便回答者能够准确地看到您的代码和您所依赖的库中的哪些代码行与您的错误有关。(这通常有助于准确指出您的期望/代码偏离库要求的地方。)

将gensim.models.keyedvectors导入为w2v和
word_vectors=w2v.wv
的初始代码块没有多大意义

从字面上看,这是将完整的Python代码模块
gensim.models.keyedvectors
分配给变量
w2v
。该模块没有
.wv
属性,因此我甚至不希望执行
word\u vectors=w2v.wv
。它当然不会导致
word\u向量
然后成为一组实际的经过训练的词向量,除非有一堆其他的训练代码没有显示出来

你确定你问题中的代码能代表你实际在做什么吗

尽管如此,如果您确实成功地将
word\u vectors
保存到
gensim
KeyedVectors
对象中,并填充了要保存的词向量,那么您有两个选择:

  • 要以谷歌原始版本
    word2vec.c
    使用的相同格式保存单词向量,您可以使用
    .save\u word2vec\u格式(path…)
    方法。然后,要在以后重新加载这些向量,您需要使用匹配的
    reloated\u vectors=KeyedVectors.load\u word2vec\u format(path,…)
    方法

  • 要以
    gensim
    自己的基于Python的格式保存单词向量,可以使用
    .save(path)
    方法。然后,要在以后重新加载这些向量,您需要使用匹配的
    reloated\u vectors=KeyedVectors.load(path)
    方法。这种方法可以保存更多的信息(如果培训中有),比如字数。为了更大对象的效率,它可以将大部分向量存储到单独的文件中,如果将文件移到其他位置,则应将该文件与主
    路径
    文件一起保存,并允许以后使用
    mmap
    选项(但不是要求)

您无法混合和匹配这些格式:由
save\u word2vec\u format()
保存的文件只能由
load\u word2vec\u format()
读取,而由
save()
保存的文件只能由
load()
读取

关于你的另一个
类型错误
,没有足够的信息来推测出哪里出了问题。您需要编辑您的答案以添加更多细节,并使演示代码自我一致

例如,您将显示加载到名为
vectors
的变量中,然后是对名为
model
的变量的操作。这种差异暗示了问题的存在