如何使用 gensim 处理 KeyError(f"Key '{key}' not present") wor2vec

How to handle KeyError(f"Key '{key}' not present") wor2vec with gensim

我已经用 gensim 库构建了一个模型,我正在尝试获取词汇表中不存在的单词向量,但我遇到了一个错误,我想以最好的方式处理这个错误。 如果我能得到模型中不存在的词的向量,那就完美了。

代码

model = KeyedVectors.load('nice.model')
token_vector = model.wv['bla bla bla']

错误

  File "/home/ahmed/PycharmProjects/WebScarping/venv/lib/python3.9/site-packages/gensim/models/keyedvectors.py", line 421, in get_index
    raise KeyError(f"Key '{key}' not present")
KeyError: "Key 'hmed' not present"

请帮我解决错误

如果模型中不存在标记,则无法为您提供向量。

您的模型没有用于(伪)词 'bla bla bla' 的向量,它所能做的就是报告这一点。

您可以通过 pre-checking 令牌是否存在来避免异常,并且仅在存在时请求它:

if token in model.wv:
    token_vector = model.wv[token]
else:
    # whatever your next-best step is when a vector not available
    ...

或者,您可以捕获异常:

try:
    token_vector = model.wv[token]
except KeyError:
    # whatever your next-best step is when a vector not available
    ...

但是没有神奇的方法可以为未知标记创建一个好的向量。你将不得不忽略这样的词,或者 make-up 一些插件 stand-in 值,或者想出一些其他 project-appropriate 解决方法。

(如果您有足够的训练数据以及令牌实际用法的各种示例,则可以训练包含令牌的模型。您还可以考虑查找或训练 word2vec 变体模型,例如 FastText,可以合成 guess-vectors 未知标记,基于它们可能与在训练中学习的单词共享哪些子串——但此类向量的质量可能很差。)