与完整模型相比,我想使用Gensim的FastText Embedding的只读版本来节省一些RAM。
加载KeyVectors版本后,获取矢量时出现以下错误:
IndexError: index 878080 is out of bounds for axis 0 with size 761210
使用应超出词汇范围的单词时发生错误,例如“ lawyerxy”而不是“ lawyer”。完整模型会同时返回两个向量。
from gensim.models import KeyedVectors
model = KeyedVectors.load("model.kv")
model .wv.__getitem__("lawyerxy")
因此,我的假设是KeyedVectors不提供FastText的可变词汇功能-这是我的用例的关键功能。文档中未给出此限制: https://radimrehurek.com/gensim/models/word2vec.html
任何人都可以证明这一假设和/或命名修正以允许“ lawyerxy”等向量吗?
答案 0 :(得分:1)
KeyedVectors
的名称(自gensim-3.8.0
起)只是类Word2VecKeyedVectors
的{{3}},它仅维护一个简单的单词(作为键)到矢量(作为值) )映射。
您不应该期望FastText的高级功能来合成词汇外单词的矢量出现在任何未明确声称具有此功能的模型/表示中。
(我希望查询词汇外的单词可以使您更清楚地显示KeyError
,而不是您报告的IndexError
。但是,您需要准确显示什么代码创建了您要加载的文件,并触发了错误和完整的错误堆栈,以进一步猜测您的情况到底出了什么问题。)
根据model.kv
文件的保存方式,您可以使用类alias而不是普通的KeyedVectors
来使用保留的OOV矢量功能加载文件。