Python Gensim框架:保存和存储word2vec键控向量
我正在使用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",
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,…)
- 要以
自己的基于Python的格式保存单词向量,可以使用gensim
方法。然后,要在以后重新加载这些向量,您需要使用匹配的.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,…)
- 要以
自己的基于Python的格式保存单词向量,可以使用gensim
方法。然后,要在以后重新加载这些向量,您需要使用匹配的.save(path)
方法。这种方法可以保存更多的信息(如果培训中有),比如字数。为了更大对象的效率,它可以将大部分向量存储到单独的文件中,如果将文件移到其他位置,则应将该文件与主reloated\u vectors=KeyedVectors.load(path)
文件一起保存,并允许以后使用路径
选项(但不是要求)mmap
save\u word2vec\u format()
保存的文件只能由load\u word2vec\u format()
读取,而由save()
保存的文件只能由load()
读取
关于你的另一个类型错误
,没有足够的信息来推测出哪里出了问题。您需要编辑您的答案以添加更多细节,并使演示代码自我一致
例如,您将显示加载到名为vectors
的变量中,然后是对名为model
的变量的操作。这种差异暗示了问题的存在