Análisis de sentimientos en NLP [parte 1]

| Última modificación: 28 de junio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

El análisis de sentimientos en NLP es uno de los ejercicios más comunes que existen en esta área. Se utiliza para determinar la naturaleza de los datos que tenemos en términos de positivo, negativo o neutro. Normalmente, los corpus que se usan son comentarios de clientes de una marca o un producto en específico, lo que sirve para comprender cómo funciona y cuáles son las necesidades de mercado y así poder brindar mejores servicios.

En este artículo veremos la primera parte de un ejercicio de análisis de sentimientos en NLP.

Análisis de sentimientos en NLP

Librerías necesarias

#Análisis de sentimientos en NLP
! wget https://transfer.sh/KWNxRn/datasets.zip
! wget https://transfer.sh/XoRKUW/utils.py
#Análisis de sentimientos en NLP
! unzip datasets.zip

En este caso también utilizaremos, como en otros ejercicios de NLP, el CountVectorizer y el TfidfVectorizer:

#Análisis de sentimientos en NLP
from utils import load_cinema_reviews

import random
import numpy as np
import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizier, TfidfVectorizer
from sklearn.feature_selection import chi2
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracyscore, confusion_matrix, classification_report, roc_curve

import matplotlib.pyplot as plt

Carga de datos

Una vez importada la función, cargamos los datos:

#Análisis de sentimientos en NLP
#Path al directorio donde tenemos los datasets con las reviews
datasets_path = './datasets'
corpus_cine_folder = 'corpusCine'
#Análisis de sentimientos en NLP
reviews_dict = load_cinema_reviews (datasets_path, corpus_cine_folder)

Vamos a ver una de las reviews:

#Análisis de sentimientos en NLP
reviews_dict.get (10)
Análisis de sentimientos en NLP

Lo que vamos a usar es el texto (text) y luego el sentimiento (sentiment) que nos muestra y que indica, en una escala de 1 a 5, el grado de positivo o negativo del mismo:

#Análisis de sentimientos en NLP
reviews_text = [  ]
reviews_sentiment = [  ]

#Recorremos el dataset
for review in reviews_dict.values ():
      reviews_text.append (review.get ('review_text'))
      review_sentiment.append (review.get ('sentiment'))

#Almacenamiento en dataframe
df = pd.DataFrame ({
      'review': reviews_text,
      'sentiment': reviews_sentiment
})
df.dropna (subset = ['review', 'sentiment'], inplace = True)
df.reset_index (drop = True, inplace = True)
#Análisis de sentimientos en NLP
df.head ()
reviewsentiment
0Cada vez me gusta menos el cine de masas. Las…1
1El otro día fui a ver “la de los sioux” como d…3
2Es que no la cagan en ninguna, todas las pelis…5
3Es un dolor esto del cine. Yo ya voy con miedo…2
4Tras una insufrible primera hora, la cas…2

El estado neutro sería 3, más de 3 sería positivo y menos de 3 sería un sentimiento negativo.

#Análisis de sentimientos en NLP
set (df ['sentiment'])

{‘1’, ‘2’, ‘3’, ‘4’, ‘5’}

#Análisis de sentimientos en NLP
def label_sentiment (row):
      if int (row ['sentiment']) < 3:
            return 0
      else:
            return 1
#Análisis de sentimientos en NLP
df ['sentiment_label'] = df.apply (lambda row: label_sentiment (row), axis = 1)
#Análisis de sentimientos en NLP
df.head (5)
reviewsentimentsentiment_label
0Cada vez me gusta menos el cine de masas. Las…10
1El otro día fui a ver “la de los sioux” como d…31
2Es que no la cagan en ninguna, todas las pelis…51
3Es un dolor esto del cine. Yo ya voy con miedo…20
4Tras una insufrible primera hora, la cas…20

Separamos en conjunto de train y test

#Análisis de sentimientos en NLP
X_train, X_test, y_train, y_test = train_test_split (
       df ['review'],
       df ['sentiment_label'],
       train_size = 0.75
       test_size = 0.25,
       random_state = 42,
       shuffle = True
)
#Análisis de sentimientos en NLP
X_train.iloc [:10]
1924Zhan Yimou ya no es el poeta de lo íntimo, el…
3250Las aventuras amorosas del joven Molire es el…
1620El cientifismo naturalista es un género cinema…
907Quizá esperaba una crítica más demoledora del…
1864Colateral de Michael Mann desnuda con claridad…
3007No es Gracia Querejeta una directora a la que…
1583Esta es una de esas extrañas películas que emp…
370Suele ocurrir que cuando alguien pone las expe…
2045Vivian vive en Bucarest, trabaja en una tienda…
3601Algunos filmes pasan a ser de culto por un hec…
Name: review, dtype: object
#Análisis de sentimientos en NLP
y_train.iloc [:10]
19241
32501
16200
9070
18641
30071
15831
3701
20450
36010
Name: sentiment_label, dtype: int64

Para poder acceder a las opciones laborales del Big Data, uno de los mercados con mayor demanda y mejores salarios, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva adquirirás los conocimientos tanto teóricos como prácticos imprescindibles para abrirte paso en el mundillo tecnológico en pocos meses. ¡No dudes en dar el paso que transformará tu vida y entra ya para pedir más información!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

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