Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Passando duas colunas de embeddings para o classificador (Erro)

Olá, estou com problemas em passar os dados de treino para meu classificador. Em meu projeto, possuo 2 colunas de texto, as quais já estão vetorizadas. Porém, quando passo para a regressão linear, o seguinte erro é exibido:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
TypeError: only size-1 arrays can be converted to Python scalars

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-142-75f779d182e4> in <module>()
      2 
      3 lr = LinearRegression()
----> 4 lr.fit(x, y)

3 frames
/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
     83 
     84     """
---> 85     return array(a, dtype, copy=False, order=order)
     86 
     87 

ValueError: setting an array element with a sequence.

Para vetorizar o texto, usei uma função parecida com a do curso, e a apliquei para cada coluna de texto, separadamente, usando o pandas.DataFrame.apply()

def get_sentence_embeddings(texto):
  tokens = nltk.word_tokenize(texto)
  result = np.zeros(300)
  for t in tokens:
    if t in ft_model.vocab:
      try:
        result += ft_model.get_vector(t)
      except KeyError:
        if t.isnumer():
          t = '0'*len(t)
          result += ft_model.get_vector(t)
        else:
          result += ft_model.get_vector('unknown')

  return result  

Gostaria de uma dica para saber o que estou fazendo de errado. Grato pela atenção.

1 resposta
solução!

Olá Otávio, esta me parecendo um problema no formato (shape) final dos seus vetores!

Quando vc for treinar o seu X.shape deve retornar algo do tipo (n_de_amostras, 300) se tiver 1000 amostra X.shape será (1000, 300). Quando você for realizar a predisão de uma unica amostra o shape deve ser (1, 300), e provavelmente a saída da função gera um vetore de shape (300,) é preciso fazer o reshape neste caso, .reshape(1, -1) para uma amostra! Agora para todos seus dados de treinamento depende de qual formato ele está!

Mas se você verificar esses detalhes, vai conseguir resolver!

Bons estudos!

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