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)
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 ()
review | sentiment | |
0 | Cada vez me gusta menos el cine de masas. Las… | 1 |
1 | El otro día fui a ver “la de los sioux” como d… | 3 |
2 | Es que no la cagan en ninguna, todas las pelis… | 5 |
3 | Es un dolor esto del cine. Yo ya voy con miedo… | 2 |
4 | Tras 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)
review | sentiment | sentiment_label | |
0 | Cada vez me gusta menos el cine de masas. Las… | 1 | 0 |
1 | El otro día fui a ver “la de los sioux” como d… | 3 | 1 |
2 | Es que no la cagan en ninguna, todas las pelis… | 5 | 1 |
3 | Es un dolor esto del cine. Yo ya voy con miedo… | 2 | 0 |
4 | Tras una insufrible primera hora, la cas… | 2 | 0 |
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]
1924 | Zhan Yimou ya no es el poeta de lo íntimo, el… |
3250 | Las aventuras amorosas del joven Molire es el… |
1620 | El cientifismo naturalista es un género cinema… |
907 | Quizá esperaba una crítica más demoledora del… |
1864 | Colateral de Michael Mann desnuda con claridad… |
3007 | No es Gracia Querejeta una directora a la que… |
1583 | Esta es una de esas extrañas películas que emp… |
370 | Suele ocurrir que cuando alguien pone las expe… |
2045 | Vivian vive en Bucarest, trabaja en una tienda… |
3601 | Algunos filmes pasan a ser de culto por un hec… |
#Análisis de sentimientos en NLP
y_train.iloc [:10]
1924 | 1 |
3250 | 1 |
1620 | 0 |
907 | 0 |
1864 | 1 |
3007 | 1 |
1583 | 1 |
370 | 1 |
2045 | 0 |
3601 | 0 |
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!