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!