【问题标题】:keyerror while implementing the word2vec model in natural language processing在自然语言处理中实现 word2vec 模型时出现 keyerror
【发布时间】:2021-12-24 02:02:25
【问题描述】:
i=0
list_of_sent=[]
for sent in df["Heading"]:
    filtered_sentence=[]
    for w in sent.split():
        
        if len(w)==0:
            continue
        print(w)    
        for cleaned_words in clean_punc(w).split():
            if(cleaned_words.isalpha()):
                filtered_sentence.append(cleaned_words.lower())
            else:
                continue
    list_of_sent.append(filtered_sentence)

我想应用 word2vec 模型,我首先将我的数据列值转换为句子列表,而 cleanpunc 是以下函数:-

import re
def clean_punc(sentence):
    cleaned=re.sub(r'[?|!| \'|"|#]',r'',sentence)
    cleaned=re.sub(r'[.|,)|(|\|/]',r' ',cleaned)
    return cleaned

我正在应用 word2vec 模型:

w2v_model=gensim.models.Word2Vec(list_of_sent,min_count=1,vector_size=50,workers=4)

当我运行以下代码时:-

words=list(w2v_model.wv)
print(len(words))

我收到错误:-

KeyError                                  Traceback (most recent call last)
/tmp/ipykernel_38/1883829707.py in <module>
----> 1 words=list(w2v_model.wv)
      2 print(len(words))

/opt/conda/lib/python3.7/site-packages/gensim/models/keyedvectors.py in __getitem__(self, key_or_keys)
    377         """
    378         if isinstance(key_or_keys, KEY_TYPES):
--> 379             return self.get_vector(key_or_keys)
    380 
    381         return vstack([self.get_vector(key) for key in key_or_keys])

/opt/conda/lib/python3.7/site-packages/gensim/models/keyedvectors.py in get_vector(self, key, norm)
    420 
    421         """
--> 422         index = self.get_index(key)
    423         if norm:
    424             self.fill_norms()

/opt/conda/lib/python3.7/site-packages/gensim/models/keyedvectors.py in get_index(self, key, default)
    394             return default
    395         else:
--> 396             raise KeyError(f"Key '{key}' not present")
    397 
    398     def get_vector(self, key, norm=False):

KeyError: "Key '141101' not present"

请帮我解决错误

【问题讨论】:

  • 你能不能把函数clean_punc()也贴出来(假设它是一个函数)。

标签: python nlp word2vec keyerror


【解决方案1】:

我不确定当您尝试执行 list(w2v_model.wv) 时会发生什么 - 但这不是典型或必要的操作,而且您的回溯似乎没有显示 list() 调用如何变成一些__getitem__ 调用向量。

所以,我建议你实现你的实际目标,不要尝试将KeyedVectors 转换为list

例如,如果你只想要模型学习的单词数量,你可以这样做:

print(len(w2v_model.wv)

如果您想要单词本身的列表,单词是您可以用来查找向量的键,因此单词列表位于:

w2v_model.wv.index_to_key

你可以得到一个字典,它将每个单词映射到它的相对索引位置,在后备数组中,通过:

w2v_model.wv.key_to_index

(检查此字典的len() 是另一种计算单词的方法,或者询问其.keys() 将显示所有单词。)

另外:min_count=1 使用这种算法几乎总是一个坏主意。稀有词没有有足够多的例子来训练模型,并为这些稀有词提供一个良好的向量……但总的来说,它们在通常的自然语言文本中出现的频率足够高,以至于它们 可以作为削弱其他词的“噪音”。 丢弃只出现几次的词几乎总是更好,例如min_count=5默认值的工作原理,以使其他词训练得更快、更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多