[英]How can a Word2Vec pretrained model be loaded in Gensim faster?
[英]Manage KeyError with gensim and pretrained word2vec model
我使用wang2vec( https://github.com/wlin12/wang2vec )對單詞嵌入進行了預訓練,然后通過gensim將其加載到python中。 當我試圖獲取某些單詞不在詞匯表中的向量時,我顯然得到:
KeyError: "word 'kjklk' not in vocabulary"
因此,我考慮過要在詞匯表中添加一個項以映射oov(詞匯表之外)的單詞,比如說<OOV>
。 由於詞匯是Dict
格式的,因此我只需添加項目{"<OOV>":0}
。
但是,我搜索了一個詞匯,
model = gensim.models.KeyedVectors.load_word2vec_format(w2v_ext, binary=False, unicode_errors='ignore')
dict(list(model.vocab.items())[5:6])
輸出是這樣的
{'word': <gensim.models.keyedvectors.Vocab at 0x7fc5aa6007b8>}
因此,是否有辦法將<OOV>
令牌添加到通過gensim加載的預訓練單詞嵌入的詞匯表中,並避免KeyError? 我查看了gensim doc,發現了這一點: https ://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec.build_vocab,但它似乎不適用於update參數。
添加一個合成的'<OOV>'
令牌只會讓您查找該令牌,就像model['<OOV>']
。該模型仍然會為缺少鍵的錯誤提供鍵錯誤,例如'kjklk'
。
沒有內置支持添加任何此類“全部捕獲”映射。 通常,忽略未知標記比使用某些插入值(例如零向量或隨機向量)更好。
在Python中,通過in
關鍵字顯式檢查某個鍵是否存在是相當習慣的,如果您想對不存在的鍵做一些不同的事情。 例如:
vector = model['kjklk'] if 'kjklk' in model else DEFAULT_VECTOR
(值得注意的是, *expr1* if *expr2* else *expr3*
推遲對初始expr1的求值 ,從而避免KeyError
。)
Python還具有defaultdict
變體字典,可以為任何未知鍵返回默認值。 看到:
https://docs.python.org/3.7/library/collections.html#collections.defaultdict
如果該行為確實很重要,則可以嘗試用其中之一替換KeyedVectors
vocab
詞典,但是對其他代碼可能會有副作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.