Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como adcionar mais palavras ao meu bag of words

Boa noite pessoal!

Vamos lá, estou com um projeto onde devo fazer classificações finaceiras pelo os históricos bancários, e o curso de nlp me ajudou muito, consegui tratar o texto, criar o bag of words, criar meu modelo, otimizar e validar! Perfeito, super empolgado fui testar "Na realidade". Peguei um extrato bancário qualquer para testar... eeee, não funcionou.... meu modelo não conseguiu fazer clasificaçao pq ele esperava 269 Labels e só tinha 170.

Aí surgiu algumas dúvidas:

  • as Labels que ele não utiliza teria como colocar como zero?
  • treinei meu modelo errado?
  • e se em algum momento o dataset de predição tiver mais Labels do que o dataset que meu modelo foi treinado, oque aconteceria?
  • é possível selecionar só as Labels "n grams"?
  • em produção como ficaria o bag of Word? Teria que pegar a base antiga e vetorizar tambem?

Espero não está incomodando e muito obrigado por tudo! Vcs são tops de verdades!!

2 respostas

Olá Raphael, fico muito feliz que de alguma maneira estamos ajudando!

Para responder com precisão todas as perguntas precisaria entender mais afundo seu modelo e dados, mas vou tentar ajudar de uma forma mais geral!

  • as Labels que ele não utiliza teria como colocar como zero?

R: Em relação ao BOW era para gerar um vetor sempre do mesmo tamanho, se o vocabulário tem 200 palavras era para gerar um vetor de 200 palavras. Será que vc não está retreinando o BOW com os dados de teste (No dados de teste não use o .fit nem .fit_trasform). Portanto as Labels que ele não utilizam já seriam zero e as labes desconhecidas pelo BOW seriam descartas.

  • treinei meu modelo errado?

R: Não consigo garantir sem código e mais informação, vale debugar e escrever alguns testes unitários para tentar validar se está tudo correto.

  • e se em algum momento o dataset de predição tiver mais Labels do que o dataset que meu modelo foi treinado, oque aconteceria?

R: Se está se referindo ao BOW elas seriam "descartadas", é como se aquelas labels não estive nos dados. Por isso e outros motivos! Vc precisa pensar em estratégias de como vc vai retreinar seu modelo, será depois de um tempo? Qual será esse tempo? Vou treinar a cada nova entrada? Os dados são dinâmicos e mudam com o tempo, então precisa pensar nestas estratégias quando for colocar em produção!

  • é possível selecionar só as Labels "n grams"?

R: Sim, se estiver usando o countvectorizer é só mudar o parâmetro ngram_range. Por exemplo, para usar só bigram use ngram_range = (2,2), se quer usar o token e o bigram juntos use ngram_range = (1,2).

  • em produção como ficaria o bag of Word? Teria que pegar a base antiga e vetorizar tambem?

R: Em produção vc já vai ter seu BOW treinado e apenas fará a transformação dos dados, como eu disse anteriormente é preciso pensar em quando vc vai retreinar seu modelo com os novos dados e toda sua base antiga para deixalo cada vez mais abragente!

Bom, é difícil responder sem grandes informações, mas espero que tenha ajudado!

Bons estudos!

solução!

Perfeito o senhor me ajudou bastante!!

Uma outra forma que eu achei para solucionar o problema das labels, na hora que a ML faz a classificação dos dados, foi a função contida no CountVectorizer( ) a "vocabulary="

Primeiro passo: No momento que eu criar o Bag of Word para o desenvolvimento do meu modelo, posso exportar o vocabulário também, ele da um dicionário com a palavra e posição na coluna.

Segundo passo: Após meu modelo treinado, validado e salvo... Também salvo o dicionário/vocabulário (no modelo e no dicionário utilizei o joblib)... Importo eles para aplicação e no momento de criar o Bag of Word com o CountVectorizer( ) eu passo o dicionário importado para a função.

Assim fazendo com o os meus dados para classificação tenhas as mesmas labels que utilizei para o desenvolvimento do meu modelo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software