1
resposta

Erro no código da aula

Estou rodando o mesmo código da aula porém em outra base de dados. Estou tentando fazer a análise de sentimentos para uma base de tweets.

segue meu código:

import numpy as np 
def matriz_vetores(textos):
    x = len(textos)
    y = 300
    matriz = np.zeros((x,y))

    for i in range(x):
        palavras_numeros = tokenizador(textos.iloc[i])
        matriz[i] = combinacao_de_vetores_por_soma(palavras_numeros)
    
    return matriz

matriz_vetores_treino = matriz_vetores(df_treino["tweet"]) 
matriz_vetores_treino = matriz_vetores(df_teste["tweet"])     

O erro:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-60-95e14761acea> in combinacao_de_vetores_por_soma(palavras_numeros)
      4         try:
----> 5             vetor_resultante += modelo.get_vector(pn)
      6         except KeyError:

6 frames
KeyError: "word '1498321048902384092' not in vocabulary"

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
/usr/local/lib/python3.8/dist-packages/gensim/models/keyedvectors.py in word_vec(self, word, use_norm)
    450             return result
    451         else:
--> 452             raise KeyError("word '%s' not in vocabulary" % word)
    453 
    454     def get_vector(self, word):

KeyError: "word '0000000000000000000' not in vocabulary"

Minha questão: a função anterior não deveria resolver esse problema de palavras fora do vocabulário? Segue a função que deveria corrigir isso:

def combinacao_de_vetores_por_soma(palavras_numeros):
    vetor_resultante = np.zeros(300)
    for pn in palavras_numeros:
        try:
            vetor_resultante += modelo.get_vector(pn)
        except KeyError:
            if pn.isnumeric():
               pn = "0"*len(pn)
               vetor_resultante += modelo.get_vector(pn)
            else:
               vetor_resultante += modelo.get_vector("unknown")   

    return vetor_resultante
1 resposta

Oii, Vitória! Tudo bem?

Peço desculpas pela demora para te responder.

De fato, o erro se encontra no uso do modelo de vetores de palavras para palavras que não estão no vocabulário do modelo. E isso acontece dentro da função combinacao_de_vetores_por_soma e com o ID.

A abordagem que você apresenta no código como solução, pode lidar com as palavras fora do vocabulário, fornecendo uma maneira de continuar o processamento, mas é importante entender como as substituições afetarão seus resultados de análise de sentimentos e ajustar a abordagem conforme necessário.

Como a base de dados que está sendo utilizada é outra e não a do curso, outros testes deverão ser realizados conforme a realidade do projeto, e como é algo externo ao curso eu não consigo acessar as informações dele em sua totalidade.

Portanto, é importante considerar se o impacto das substituições, por exemplo, se você substituir uma palavra importante por zeros ou "unknown", isso pode afetar negativamente a precisão da sua análise de sentimentos.

Outro detalhe, certifique de que a variável modelona função tenha sido corretamente inicializada com o modelo Word2Vec contendo todas as palavras relevantes. Além disso, a tokenização e pré-processamento de texto tenham sido aplicados adequadamente antes de chamar a função.

E você mencionou que há um erro no código da aula, para podermos analisar e realizar mudanças adequadas, poderia me informar qual aula você encontrou o erro, por gentileza.

Espero ter ajudado. Continue interagindo no fórum compartilhando suas dúvidas, feedback e sugestões.

Bons estudos, Vitória!