Entrenamiento de ejercicio de análisis de sentimientos

Autor: | Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

En otro artículo realizamos un ejercicio de análisis de sentimientos en NLP y, en este caso, realizaremos el entrenamiento de dicho ejercicio.

Entrenamiento de ejercicio de análisis de sentimientos

Ya que tenemos nuestras palabras preprocesadas y con el TfIdf, vamos a hacer el entrenamiento de las mismas.

Vamos a establecer un hiperparámetro para realizar la regularización del algoritmo en nuestro entrenamiento de ejercicio de análisis de sentimientos.

Lo que haremos, entonces, es realizar diferentes iteraciones, entrenar y obtener la precisión.

#Entrenamiento de ejercicio de análisis de sentimientos
c_params = [0.01, 0.05, 0.25, 0.5, 1, 10, 100, 1000, 10000]

train_acc = list ()
test_acc = list ()
for c in c_params:
      lr = LogisticRegression (C = c, solver = 'lbfgs', max_iter = 500)
      lr.fit (X_train_, y_train)

      train_predict = lr.predict (X_train_)
      test_predict = lr.predict (X_test_)

print ("Accuracy for C = {}: {}".format (c, accuracy_score (y_test, test_predict)))

train_acc.append (accuracy_score (y_train, train_predict))
test_acc.append (accuracy_score (y_test, test_predict))

Accuracy for C = 0.01: 0.6579738144329897

Accuracy for C = 0.05: 0.6579938144329897

Accuracy for C = 0.25: 0.688659793814433

Accuracy for C = 0.5: 0.7391752577319588

Accuracy for C = 1: 0.7680412371134021

Accuracy for C = 10: 0.77319587628866

Accuracy for C = 100: 0.7628865979381443

Accuracy for C = 1000: 0.7649484536082474

Accuracy for C = 10000: 0.7618556701030927

Aquí podríamos probar otro algoritmo, si quisiéramos.

Algunas métricas

Para cada uno de los algoritmos que hemos entrenado, vamos a ver las medias que obtenemos:

#Entrenamiento de ejercicio de análisis de sentimientos
print ('Confussion matrix: \n{}'.format (confusion_matrix (y_test, test_predict)))
print ('\nClassification report: \n{}'.format (classification_report (y_test, test_predict)))
print ('Accuracy score_ {}'.format (accuracy_score (y_test, test_predict)))

Confussion matrix:

[[198 132]

[ 99 541]]

Classification report:

precisionrecallf1 – scoresupport
00.670.600.63330
10.800.850.82640
accuracy0.76970
macro avg0.740.720.73970
weighted avg0.760.760.76970

Accuracy score: 0.7618556701030927

Podemos inferir de la tabla anterior que el algoritmo es bastante flojo cuando se trata de reviews negativas, ya que la precisión es bastante baja.

#Entrenamiento de ejercicio de análisis de sentimientos
plt.figure (figsize = (12, 8))
plt.plot (train_acc, label = 'train')
plt.plot (test_acc, label = 'test')
plt.axvline (np.argmax (test_acc), c = 'g', ls = ' - - ', alpha = 0.8)
plt.title ('Accuracy evolution for different C values')
plt.xlabel ('C')
plt.ylabel ('Accuracy')
plt.legend ()
plt.grid ()
plt.xticks (list (range (len (c_params))), c_params)
plt.tight_layout ()
plt.show ()
Entrenamiento de ejercicio de análisis de sentimientos

Aquí vemos cómo evoluciona el performance en función del parámetro que hemos propuesto inicialmente. Vemos, por ejemplo, que en el punto 10 es cuando más se estabiliza; este podría considerarse el valor óptimo.

Predict

Ahora haremos la predicción:

#Entrenamiento de ejercicio de análisis de sentimientos
def predic_review_sentiment (review_index, model):
       print ('Actual sentiment: {}'.format (df.iloc [review_index] ['sentiment_label']))
       r = df.iloc [review_index] ['review']
       print ('Prediction: {}'.format (lr.predict (cv.transform ([r]))))
#Entrenamiento de ejercicio de análisis de sentimientos
for i in random.sample (range (0, len (df)), 5):
       print ('\nReview no. {}'.format (i))
       predict_review_sentiment (i, lr)

Review no. 1402

Actual sentiment: 0

Prediction: [0]

Review no. 96

Actual sentiment: 1

Prediction: [0]

Review no. 2720

Actual sentiment: 1

Prediction: [1]

Review no. 1518

Actual sentiment: 1

Prediction: [1]

Review no. 1493

Actual sentiment: 1

Prediction: [1]

Con estos resultados vemos que en algunos casos se ha hecho una predicción acertada, mientras que en otros se ha equivocado. Lo importante es evaluar correctamente el modelo para obtener no los resultados que queremos, sino resultados reales.

En este caso se podría usar también un GridSearch para hacer la optimización de parámetros. En nuestro caso, por poner algo sencillo, hicimos la optimización en el entrenamiento lo más sencilla posible.

De hecho, GridSearch tiene más sentido cuando, más que un parámetro, son varios. Además de esto, tiene la capacidad de hacer la evaluación él solo.

Así pues, hemos terminado nuestro ejercicio de análisis de sentimientos. Vemos cómo aplicando tfidf se simplifica muchísimo a la hora de entrenar. Con este método hemos abreviado el proceso, dado que en computación no ha tardado prácticamente nada y los resultados son bastante buenos. Esto demuestra que este método es mucho más eficiente que si pasamos el texto como tal, cosa que en este caso no podríamos hacer.

¿Quieres seguir avanzando?

Tras este entrenamiento de ejercicio de análisis de sentimientos, si quieres seguir aprendiendo y acceder a las opciones laborales del Big Data, uno de los mercados con mayor demanda y mejores sueldos, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con la guía de esta formación intensiva adquirirás los conocimientos tanto teóricos como prácticos imprescindibles para abrirte paso en el mundillo IT en pocos meses. ¡Atrévete a dar el paso que transformará tu futuro y entra ya para solicitar más información!

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado