Introducción al análisis de sentimientos en Python

El análisis de sentimientos es una de las formas más populares de analizar texto. Nos permite ver de un vistazo cómo se sienten las personas en una amplia gama de ámbitos y tiene aplicaciones útiles en campos como la atención al cliente, la investigación de mercados y productos, y el análisis de la competencia.
Como cualquier área del procesamiento del lenguaje natural (PLN), el análisis de sentimientos puede resultar complejo. Por suerte, Python cuenta con excelentes paquetes y herramientas que hacen que esta rama del PNL sea mucho más accesible.
En este artículo del blog, exploraremos algunos de los paquetes más populares para analizar sentimientos en Python, cómo funcionan y cómo puede entrenar su propio modelo de análisis de sentimientos utilizando las técnicas más avanzadas. También veremos algunas funcionalidades de PyCharm que facilitan y agilizan el trabajo con estos paquetes.
¿Qué es el análisis de sentimientos?
El análisis de sentimientos es el proceso de analizar un texto para determinar su tono emocional. Como probablemente deduzca de esta definición, el análisis de sentimientos es un campo muy amplio que incorpora una gran variedad de métodos dentro del ámbito del procesamiento del lenguaje natural.
Hay muchas formas de definir el «tono emocional». Los métodos más utilizados determinan la valencia o la polaridad de un texto, es decir, lo positivo o negativo que es el sentimiento que expresa. El tono emocional también suele tratarse como un problema de clasificación de textos, en el que estos se clasifican como positivos o negativos.
Tome como ejemplo la siguiente reseña de producto de Amazon:

Obviamente, no se trata de un cliente satisfecho, y las técnicas de análisis de sentimientos clasificarían esta reseña como negativa.
Contrastémosla con la de un comprador mucho más satisfecho:

Las técnicas de análisis de sentimientos clasificarían esta como positiva.
Diferentes tipos de análisis de sentimientos
Existen varias formas de extraer información emocional de un texto. Repasemos algunas de las más importantes.
Formas de definir el sentimiento
En primer lugar, los enfoques de análisis de sentimientos tienen varias formas diferentes de definir el sentimiento o la emoción.
Binario: en este caso, la valencia de un documento se divide en dos categorías, positivo o negativo, como ocurre con el conjunto de datos SST-2. En relación con esto están las clasificaciones de valencia que añaden una clase neutra (en la que un texto no expresa ningún sentimiento sobre un tema) o incluso una clase conflictiva (en la que un texto expresa un sentimiento por un lado positivo y por otro negativo sobre un tema).
Algunos analizadores de sentimientos utilizan una medida relacionada para clasificar los textos en subjetivos u objetivos.
Granular: este término describe varias formas diferentes de enfocar el análisis de sentimientos, pero aquí se refiere a desglosar la valencia positiva y negativa en una escala Likert. Un ejemplo conocido de esto es el conjunto de datos SST-5, que utiliza una escala Likert de cinco puntos con las clases muy positiva, positiva, neutra, negativa y muy negativa.
Continua: la valencia de un texto también puede medirse de forma continua, con puntuaciones que indiquen lo positivo o negativo que era el sentimiento del autor. Por ejemplo, el analizador de sentimientos VADER otorga a un fragmento de texto una puntuación entre -1 (fuertemente negativo) y 1 (fuertemente positivo), y las puntuaciones cercanas a 0 indican un sentimiento neutro.
Basada en la emoción: este enfoque, también se conoce como detección de emociones o identificación de emociones, intenta detectar la emoción específica que se expresa en un texto. Esto se puede abordar de dos maneras. La detección categórica de emociones trata de clasificar el sentimiento expresado por un texto en una emoción concreta de entre un número determinado, normalmente basándose en el modelo de Ekman, que incluye las siguientes: enfado, asco, miedo, alegría, tristeza y sorpresa. Existe un número de conjuntos de datos para este tipo de detección de emociones. La detección emocional dimensional se utiliza menos en el análisis de sentimientos y, en su lugar, trata de medir tres aspectos emocionales de un texto: polaridad, excitación (lo intensa que es la emoción) y dominancia (el grado de control de la expresión emocional).
Niveles de análisis
También podemos considerar los diferentes niveles en los que podemos analizar un texto. Para entenderlo mejor, veamos otra reseña de la cafetera:

A nivel de documento: este es el nivel más básico de análisis, en el que se obtendrá un sentimiento para todo un texto. El análisis a nivel de documento puede estar bien para fragmentos de texto muy cortos, como los tuits, pero puede dar respuestas engañosas si hay sentimientos mixtos. Por ejemplo, si basáramos el análisis de sentimientos de esta reseña en todo el documento, probablemente se clasificaría como neutro o conflictivo, ya que tenemos dos sentimientos opuestos sobre la misma cafetera.
A nivel de frase: aquí se predice el sentimiento de cada frase por separado. En el caso de la reseña de la cafetera, el análisis a nivel de frase nos diría que el autor opinó positivamente sobre algunas partes del producto, pero negativamente sobre otras. Sin embargo, este análisis no nos dice qué cosas le gustaron la cafetera y cuáles no.
Basado en aspectos: este tipo de análisis de sentimientos profundiza en un texto e intenta comprender el sentimiento de los usuarios sobre aspectos concretos. En nuestra reseña de la cafetera, el autor mencionó dos aspectos: la apariencia y el ruido. Al extraer estos aspectos, tenemos más información sobre lo que le gustó y lo que no le gustó específicamente al usuario. Tenía una opinión positiva sobre el aspecto de la máquina, pero negativa sobre el ruido que hacía.
Combinación del análisis de sentimientos con otras técnicas de PNL
Basado en la intención: en este último tipo de análisis de sentimientos, el texto se clasifica de dos maneras: en función del sentimiento que se expresa y del tema del texto. Por ejemplo, si una empresa de telecomunicaciones recibe una reclamación quejándose de la frecuencia con la que se cae su servicio, podría clasificar la intención del texto o el tema como fiabilidad del servicio y el sentimiento como negativo. Al igual que el análisis de sentimientos basado en aspectos, este análisis proporciona a la empresa mucha más información que saber si sus clientes están en general contentos o descontentos.
Aplicaciones del análisis de sentimientos
A estas alturas, probablemente ya se le ocurran algunos casos de uso potencial para el análisis de sentimientos. Básicamente, puede utilizarse en cualquier lugar en el que pueda obtener comentarios escritos u opiniones sobre un tema. Las organizaciones o los particulares pueden utilizar el análisis de sentimientos para hacer un seguimiento de las redes sociales y ver qué opina la gente sobre una marca, una entidad gubernamental o un tema.
El análisis de los comentarios de los clientes puede utilizarse para conocer los sentimientos expresados en los comentarios o tickets. Las reseñas de productos pueden analizarse para ver el grado de satisfacción o insatisfacción de la gente con los productos de una empresa. Por último, el análisis de sentimientos puede ser un componente clave en la investigación de mercado y el análisis de la competencia, donde la opinión de los usuarios sobre las tendencias emergentes, las características y los competidores puede ayudar a orientar las estrategias de una empresa.
¿Cómo funciona el análisis de sentimientos?
A nivel general, el análisis de sentimientos funciona vinculando palabras (o, en modelos más sofisticados, el tono general de un texto) a una emoción. Los enfoques más comunes del análisis de sentimientos se encuadran en uno de los tres métodos siguientes.
Enfoques basados en el léxico
Estos métodos se basan en un léxico que incluye puntuaciones de sentimientos para una serie de palabras. Combinan estas puntuaciones utilizando un conjunto de reglas para obtener el sentimiento global de un fragmento de texto. Estos métodos suelen ser muy rápidos y también tienen la ventaja de proporcionar puntuaciones de sentimientos más granulares. Sin embargo, como los léxicos deben elaborarse artesanalmente, su producción puede llevar mucho tiempo y ser costosa.
Modelos de aprendizaje automático
Estos métodos entrenan un modelo de aprendizaje automático, normalmente un clasificador Naive Bayes, en un conjunto de datos que contiene texto y sus etiquetas de sentimiento, como las críticas de películas. En este modelo, los textos se clasifican generalmente en positivos, negativos y, a veces, neutros. Estos modelos también suelen ser muy rápidos, pero como no suelen tener en cuenta la relación entre las palabras de la entrada, pueden tener problemas con textos más complejos que incluyan calificadores y negaciones.
Modelos de lenguaje de gran tamaño
Estos métodos consisten en refinar un modelo de lenguaje de gran tamaño preentrenado basado en transformadores sobre los mismos conjuntos de datos utilizados para entrenar los clasificadores de aprendizaje automático mencionados anteriormente. Estos sofisticados modelos son capaces de modelar relaciones complejas entre las palabras de un texto, pero suelen ser más lentos que los otros dos métodos.
Análisis de sentimientos en Python
Python cuenta con un rico ecosistema de paquetes para PNL, lo que significa que tiene mucho donde elegir a la hora de realizar análisis de sentimientos en este lenguaje.
Repasemos algunos de los paquetes Python más populares para el análisis de sentimientos.
Las mejores bibliotecas Python para el análisis de sentimientos
VADER
VADER (Valence Aware Dictionary and Sentiment Reasoner) es un popular analizador de sentimientos basado en léxico. Integrado en el potente paquete NLTK, este analizador presenta cuatro puntuaciones de sentimiento: el grado en que el texto era positivo, neutro o negativo, así como una puntuación de sentimiento compuesta. Las puntuaciones positivas, neutras y negativas van de 0 a 1 e indican la proporción del texto que era positiva, neutra o negativa. La puntuación compuesta oscila entre -1 (extremadamente negativo) y 1 (extremadamente positivo) e indica la valencia general del sentimiento del texto.
Veamos un ejemplo básico de cómo funciona:
from nltk.sentiment.vader import SentimentIntensityAnalyzer import nltk
Primero tenemos que descargar el léxico VADER.
nltk.download('vader_lexicon')
A continuación, podemos instanciar el VADER SentimentIntensityAnalyzer()
y extraer las puntuaciones de sentimiento mediante el método polarity_scores()
.
analyzer = SentimentIntensityAnalyzer() sentence = "I love PyCharm! It's my favorite Python IDE." sentiment_scores = analyzer.polarity_scores(sentence) print(sentiment_scores)
{'neg': 0.0, 'neu': 0.572, 'pos': 0.428, 'compound': 0.6696}
Podemos ver que VADER ha otorgado a este fragmento de texto una puntuación global de sentimiento de 0,67, y ha clasificado su contenido como un 43 % positivo, un 57 % neutro y un 0 % negativo.
VADER funciona buscando las puntuaciones de sentimiento de cada palabra de su léxico y combinándolas mediante un conjunto de reglas matizadas. Por ejemplo, los calificativos pueden aumentar o disminuir la intensidad del sentimiento de una palabra, de modo que un calificativo como «un poco» antes de una palabra disminuiría la intensidad del sentimiento, pero «extremadamente» la amplificaría.
El léxico de VADER incluye abreviaturas como «smh» (shaking my head) y emojis, lo que lo hace especialmente adecuado para los textos de redes sociales. La principal limitación de VADER es que no funciona para idiomas distintos del inglés, pero puede utilizar proyectos como vader-multi
como alternativa. Escribí sobre cómo funciona VADER si le interesa profundizar en este paquete.
NLTK
Además, puede utilizar NLTK para entrenar su propio clasificador de sentimientos basado en el aprendizaje automático, utilizando clasificadores de scikit-learn
.
Hay muchas formas de procesar el texto para alimentar estos modelos, pero la más sencilla es hacerlo basándose en las palabras presentes en el texto, un tipo de modelado de texto denominado enfoque de «bolsa de palabras». El tipo más directo de modelado de bolsa de palabras es la vectorización binaria, en la que cada palabra se trata como una característica, siendo el valor de esa característica 0 o 1 (si la palabra está ausente o presente en el texto, respectivamente).
Si no ha trabajado antes con datos de texto y PNL, y desea obtener más información sobre cómo se puede convertir el texto en entradas para los modelos de aprendizaje automático, impartí una charla sobre este tema que ofrece una ligera introducción.
Puede ver un ejemplo en la documentación de NLTK, donde se entrena un clasificador Naive Bayes para predecir si un fragmento de texto es subjetivo u objetivo. En este ejemplo, añaden un calificador adicional de negación a algunos de los términos basándose en reglas que indican si es probable que esa palabra o carácter esté implicado en la negación de un sentimiento expresado en otra parte del texto. Real Python también tiene un tutorial de análisis de sentimientos sobre cómo entrenar sus propios clasificadores utilizando NLTK, si desea aprender más sobre este tema.
Pattern y TextBlob
El paquete Pattern ofrece otro enfoque basado en el léxico para analizar los sentimientos. Utiliza el léxico SentiWordNet, donde a cada grupo de sinónimos (synset) de WordNet se le asigna una puntuación de positividad, negatividad y objetividad. Las puntuaciones positivas y negativas de cada palabra se combinan mediante una serie de reglas para obtener una puntuación final de polaridad. Del mismo modo, la puntuación de objetividad de cada palabra se combina para obtener una puntuación final de subjetividad.
Como WordNet contiene información sobre las partes del discurso, las reglas pueden tener en cuenta si los adjetivos o adverbios que acompañan a una palabra modifican su sentimiento. El conjunto de reglas también tiene en cuenta las negaciones, los signos de exclamación y los emojis, e incluso incluye algunas reglas para considerar las expresiones idiomáticas y el sarcasmo.
Sin embargo, Pattern como biblioteca independiente solo es compatible con Python 3.6. Como tal, la forma más común de utilizar Pattern es a través de TextBlob. De forma predeterminada, el analizador de sentimientos TextBlob utiliza su propia implementación de la biblioteca Pattern para generar puntuaciones de sentimientos.
Veámoslo en acción:
from textblob import TextBlob
Puede ver que ejecutamos el método TextBlob sobre nuestro texto y, a continuación, extraemos el sentimiento utilizando el atributo sentiment
.
pattern_blob = TextBlob("I love PyCharm! It's my favorite Python IDE.") sentiment = pattern_blob.sentiment print(f"Polarity: {sentiment.polarity}") print(f"Subjectivity: {sentiment.subjectivity}")
Polarity: 0.625 Subjectivity: 0.6
Para nuestra frase de ejemplo, Pattern en TextBlob nos da una puntuación de polaridad de 0,625 (relativamente similar a la puntuación otorgada por VADER), y una puntuación de subjetividad de 0,6.
Pero también hay una segunda forma de obtener puntuaciones de sentimientos en TextBlob. Este paquete también incluye un clasificador Naive Bayes preentrenado, que etiquetará un fragmento de texto como positivo o negativo, y le indicará la probabilidad de que el texto sea positivo o negativo.
Para utilizar este método, primero tenemos que descargar tanto el módulo punkt
como el conjunto de datos movie-reviews
de NLTK, que se utiliza para entrenar este modelo.
import nltk nltk.download('movie_reviews') nltk.download('punkt') from textblob import TextBlob from textblob.sentiments import NaiveBayesAnalyzer
Una vez más, tenemos que ejecutar TextBlob
sobre nuestro texto, pero esta vez añadimos el argumento analyzer=NaiveBayesAnalyzer()
. A continuación, como antes, utilizamos el atributo sentiment para extraer las puntuaciones de sentimiento.
nb_blob = TextBlob("I love PyCharm! It's my favorite Python IDE.", analyzer=NaiveBayesAnalyzer()) sentiment = nb_blob.sentiment print(sentiment)
Sentiment(classification='pos', p_pos=0.5851800554016624, p_neg=0.4148199445983381)
Esta vez acabamos con una etiqueta de pos
(positivo), con lo que el modelo predice que el texto tiene un 59 % de probabilidad de ser positivo y un 41 % de probabilidad de ser negativo.
spaCy
Otra opción es utilizar spaCy para el análisis de sentimientos. spaCy es otro paquete popular para la PNL en Python, y dispone de una amplia gama de opciones para el procesamiento de texto.
El primer método consiste en emplear el complemento spacytextblob para utilizar el analizador de sentimientos TextBlob como parte de su proceso spaCy. Antes de poder hacerlo, tendrá que instalar tanto spacy
como spacytextblob
y descargar el modelo lingüístico correspondiente.
import spacy import spacy.cli from spacytextblob.spacytextblob import SpacyTextBlob spacy.cli.download("en_core_web_sm")
A continuación, cargamos este modelo lingüístico y añadimos spacytextblob
a nuestro proceso de procesamiento de texto. TextBlob puede utilizarse a través del método pipe
de spaCy, lo que significa que podemos incluirlo como parte de una cadena de procesamiento de texto más compleja, incluyendo pasos de preprocesamiento como el etiquetado de partes del discurso, la lematización y el reconocimiento de entidades nombradas. El preprocesamiento puede normalizar y enriquecer el texto, con el fin de ayudar a los modelos posteriores a obtener la máxima información de las entradas de texto.
nlp = spacy.load('en_core_web_sm') nlp.add_pipe('spacytextblob')
Por ahora, nos limitaremos a analizar nuestra frase de ejemplo sin preprocesamiento:
doc = nlp("I love PyCharm! It's my favorite Python IDE.") print('Polarity: ', doc._.polarity) print('Subjectivity: ', doc._.subjectivity)
Polarity: 0.625 Subjectivity: 0.6
Obtenemos los mismos resultados que al utilizar TextBlob anteriormente.
Una segunda forma en la que podemos analizar el sentimiento en spaCy es entrenando nuestro propio modelo utilizando la clase TextCategorizer. Esto le permite entrenar una serie de modelos creados por SpaCy utilizando un conjunto de entrenamiento de análisis de sentimientos. Una vez más, como esto puede utilizarse como parte del proceso spaCy, tiene muchas opciones para preprocesar su texto antes de entrenar su modelo.
Por último, puede utilizar grandes modelos lingüísticos para realizar análisis de sentimientos a través de spacy-llm. Esto le permite hacer peticiones a varios modelos de lenguaje de gran tamaño (LLM) patentados de OpenAI, Anthropic, Cohere y Google que realicen un análisis de sentimientos de sus textos.
Este enfoque funciona de forma ligeramente diferente a los otros métodos de los que hemos hablado. En lugar de entrenar el modelo, podemos utilizar modelos generalistas como GPT-4 para predecir el sentimiento de un texto. Puede hacerlo mediante el aprendizaje de cero intentos (en el que se pasa al modelo una petición pero ningún ejemplo) o el aprendizaje de pocos intentos (en el que se pasa al modelo una petición y varios ejemplos).
Transformers
El último paquete Python para el análisis de sentimientos del que hablaremos es Transformers de Hugging Face.
Hugging Face aloja todos los principales LLM de código abierto para su uso gratuito (entre otros modelos, incluidos los de visión por ordenador y audio), y proporciona una plataforma para entrenar, implementar y compartir estos modelos. Su paquete Transformers ofrece una amplia gama de funcionalidades (incluido el análisis de sentimientos) para trabajar con los LLM alojados en Hugging Face.
Comprender los resultados de los analizadores de sentimientos
Ahora que hemos cubierto todas las formas en las que puede realizar análisis de sentimientos en Python, puede que se pregunte: «¿Cómo aplico todo esto a mis datos?».
Para entenderlo, utilicemos PyCharm para comparar dos paquetes: VADER y TextBlob. Sus distintas puntuaciones de sentimientos nos ofrecen varias perspectivas diferentes sobre nuestros datos. Utilizaremos estos paquetes para analizar el conjunto de datos de reseñas de Amazon.
PyCharm Professional es un potente IDE de Python para ciencia de datos compatible con la finalización de código avanzada de Python, inspecciones y depuración, bases de datos enriquecidas, Jupyter, Git, Conda y mucho más, todo ello sin necesidad de configuraciones adicionales. Además de estas, también obtendrá funcionalidades increíblemente útiles como nuestro DataFrame Column Statistics y Chart View, así como integraciones que hacen que trabajar con LLM sea mucho más rápido y sencillo. En este artículo del blog, exploraremos las funcionalidades avanzadas de PyCharm para trabajar con DataFrames, lo que nos permitirá obtener una visión rápida de cómo se distribuyen nuestras puntuaciones de sentimientos entre los dos paquetes.
Si ya está listo para iniciar su propio proyecto de análisis de sentimientos, puede activar su suscripción gratuita de tres meses a PyCharm. Haga clic en el siguiente enlace e introduzca este código promocional: PCSA24. A continuación, recibirá un código de activación por correo electrónico.
Lo primero que tenemos que hacer es cargar los datos. Podemos utilizar el método load_dataset()
del paquete Datasets para descargar estos datos del Hugging Face Hub.
from datasets import load_dataset amazon = load_dataset("fancyzhx/amazon_polarity")
Puede pasar el ratón por encima del nombre del conjunto de datos para ver la ficha del conjunto de datos de Hugging Face directamente dentro de PyCharm, lo que le ofrece una forma cómoda de obtener información sobre los activos de Hugging Face sin salir del IDE.

Podemos ver el contenido de este conjunto de datos aquí:
amazon
DatasetDict({ train: Dataset({ features: ['label', 'title', 'content'], num_rows: 3600000 }) test: Dataset({ features: ['label', 'title', 'content'], num_rows: 400000 }) })
El conjunto de datos de entrenamiento tiene 3,6 millones de observaciones, y el conjunto de datos de prueba contiene 400 000. En este tutorial trabajaremos con el conjunto de datos de entrenamiento.
Ahora cargaremos en el VADER SentimentIntensityAnalyzer
y el método TextBlob.
from nltk.sentiment.vader import SentimentIntensityAnalyzer import nltk nltk.download("vader_lexicon") analyzer = SentimentIntensityAnalyzer()
from textblob import TextBlob
El conjunto de datos de entrenamiento tiene demasiadas observaciones para visualizarlas cómodamente, así que tomaremos una muestra aleatoria de 1000 reseñas para representar el sentimiento general de todos los autores.
from random import sample sample_reviews = sample(amazon["train"]["content"], 1000)
Obtengamos ahora las puntuaciones VADER y TextBlob de cada una de estas reseñas. Iteraremos sobre cada texto de reseña, los pasaremos por los analizadores de sentimientos y, a continuación, adjuntaremos las puntuaciones a una lista específica.
vader_neg = [] vader_neu = [] vader_pos = [] vader_compound = [] textblob_polarity = [] textblob_subjectivity = [] for review in sample_reviews: vader_sent = analyzer.polarity_scores(review) vader_neg += [vader_sent["neg"]] vader_neu += [vader_sent["neu"]] vader_pos += [vader_sent["pos"]] vader_compound += [vader_sent["compound"]] textblob_sent = TextBlob(review).sentiment textblob_polarity += [textblob_sent.polarity] textblob_subjectivity += [textblob_sent.subjectivity]
A continuación, introduciremos cada una de estas listas en un DataFrame de pandas como columna independiente:
import pandas as pd sent_scores = pd.DataFrame({ "vader_neg": vader_neg, "vader_neu": vader_neu, "vader_pos": vader_pos, "vader_compound": vader_compound, "textblob_polarity": textblob_polarity, "textblob_subjectivity": textblob_subjectivity })
Ahora, estamos listos para empezar a explorar nuestros resultados.
Normalmente, este sería el momento en el que empezaríamos a crear código para el análisis exploratorio de datos. Esto podría hacerse utilizando el método describe
de pandas para obtener estadísticas resumidas sobre nuestras columnas, y escribiendo código Matplotlib o seaborn para visualizar nuestros resultados. Sin embargo, PyCharm tiene algunas funcionalidades capaces de acelerar este proceso.
Sigamos adelante e imprimamos nuestro DataFrame.
sent_scores
Podemos ver un botón en la esquina superior derecha llamado Show Column Statistics. Al hacer clic en este nos ofrece dos opciones diferentes: Compact y Detailed. Seleccionemos Detailed.

Ahora disponemos de estadísticas de resumen proporcionadas como parte de los encabezados de nuestras columnas. Al observarlas, podemos ver que la puntuación compuesta de VADER tiene una media de 0,4 (mediana = 0,6), mientras que la puntuación de polaridad de TextBlob proporciona una media de 0,2 (mediana = 0,2).
Este resultado indica que, por término medio, VADER tiende a estimar más positivamente el mismo conjunto de reseñas que TextBlob. También muestra que, para ambos analizadores de sentimientos, es probable que tengamos más reseñas positivas que negativas; podemos profundizar en esto comprobando algunas visualizaciones.

Otra funcionalidad de PyCharm que podemos utilizar es el DataFrame Chart View. El botón de esta función se encuentra en la esquina superior izquierda.

Cuando hacemos clic en él, pasamos al editor de gráficos. A partir de aquí, podemos crear visualizaciones sin código directamente desde nuestro DataFrame.
Empecemos por la puntuación compuesta de VADER. Para empezar a crear este gráfico, vaya a Show Series Settings en la esquina superior derecha.

Elimine los valores predeterminados de X Axis y de Y Axis. Sustituya los valores de X Axis y de Y Axis por vader_compound
. Haga clic en la flecha situada junto al nombre de la variable en el campo Y Axis y seleccione count
.
Por último, seleccione Histogram en los iconos del gráfico, justo debajo de Series Settings. Probablemente tengamos una distribución bimodal para la puntuación compuesta de VADER, con un ligero pico en torno a -0,8 y otro mucho mayor en torno a 0,9. Estos picos seguramente representan la división de las reseñas negativas y positivas. También hay muchas más críticas positivas que negativas.

Repitamos el mismo ejercicio y creemos un histograma para ver la distribución de las puntuaciones de polaridad de TextBlob.
Por el contrario, TextBlob tiende a calificar la mayoría de las reseñas como neutras, con muy pocas reseñas extremadamente positivas o negativas. Para entender por qué tenemos una discrepancia en las puntuaciones que proporcionan estos dos analizadores de sentimientos, veamos una reseña que VADER calificó como muy positiva y otra que VADER calificó como muy negativa, pero que TextBlob calificó como neutra.

Obtendremos el índice de la primera revisión en la que VADER las calificó como positivas pero TextBlob las calificó como neutras:
sent_scores[(sent_scores["vader_compound"] >= 0.8) & (sent_scores["textblob_polarity"].between(-0.1, 0.1))].index[0]
42
A continuación, obtenemos el índice de la primera reseña en la que VADER las calificó como negativas pero TextBlob como neutras:
sent_scores[(sent_scores["vader_compound"] <= -0.8) & (sent_scores["textblob_polarity"].between(-0.1, 0.1))].index[0]
0
Recuperemos primero la reseña positiva:
sample_reviews[42]
"I love carpet sweepers for a fast clean up and a way to conserve energy. The Ewbank Multi-Sweep is a solid, well built appliance. However, if you have pets, you will find that it takes more time cleaning the sweeper than it does to actually sweep the room. The Ewbank does pick up pet hair most effectively but emptying it is a bit awkward. You need to take a rag to clean out both dirt trays and then you need a small tooth comb to pull the hair out of the brushes and the wheels. To do a proper cleaning takes quite a bit of time. My old Bissell is easier to clean when it comes to pet hair and it does a great job. If you do not have pets, I would recommend this product because it is definitely well made and for small cleanups, it would suffice. For those who complain about appliances being made of plastic, unfortunately, these days, that's the norm. It's not great and plastic definitely does not hold up but, sadly, product quality is no longer a priority in business."
Esta reseña parece mixta, pero en general tiene una tendencia positiva.
Veamos ahora la reseña negativa:
sample_reviews[0]
'The only redeeming feature of this Cuisinart 4-cup coffee maker is the sleek black and silver design. After that, it rapidly goes downhill. It is frustratingly difficult to pour water from the carafe into the chamber unless it's done extremely slow and with accurate positioning. Even then, water still tends to dribble out and create a mess. The lid, itself, is VERY poorly designed with it's molded, round "grip" to supposedly remove the lid from the carafe. The only way I can remove it is to insert a sharp pointed object into one of the front pouring holes and pry it off! I've also occasionally had a problem with the water not filtering down through the grounds, creating a coffee ground lake in the upper chamber and a mess below. I think the designer should go back to the drawing-board for this one.'
Esta reseña es inequívocamente negativa. Al comparar ambas, VADER parece más preciso, pero tiende a dar excesiva prioridad a los términos positivos en un texto.
Lo último que podemos considerar es la subjetividad frente a la objetividad de cada reseña. Lo haremos creando un histograma de la puntuación de subjetividad de TextBlob.

Curiosamente, existe una buena distribución de la subjetividad en las reseñas, siendo la mayoría de ellas una mezcla de opiniones subjetivas y objetivas. Unas pocas opiniones son también muy subjetivas (cercanas a 1) o muy objetivas (cercanas a 0).
Estas puntuaciones entre ellas nos confieren una buena forma de segmentar los datos. Si necesita saber las cosas objetivas que gustaron y no gustaron a los usuarios sobre los productos, puede fijarse en las reseñas con una puntuación de subjetividad baja y en las puntuaciones compuestas de VADER cercanas a 1 y -1, respectivamente.
Por el contrario, si quiere saber cuál es la reacción emocional de las personas ante los productos, podría escoger aquellas con una puntuación de subjetividad alta y puntuaciones compuestas de VADER altas y bajas.
Debe tener en cuenta que
Como ocurre con cualquier problema en el procesamiento del lenguaje natural, hay una serie de cosas que tener en cuenta cuando se realiza un análisis de sentimientos.
Una de las consideraciones más importantes es el idioma de los textos que intenta analizar. Muchos de los métodos basados en léxico solo funcionan para un número limitado de idiomas, por lo que si trabaja con idiomas no admitidos por estos léxicos, es posible que tenga que adoptar otro enfoque, como utilizar un LLM optimizado o entrenar sus propios modelos.
A medida que los textos aumentan en complejidad, también puede resultar difícil para los analizadores basados en léxicos y los modelos basados en bolsas de palabras detectar correctamente el sentimiento. El sarcasmo o los indicadores de contexto más sutiles pueden ser difíciles de detectar para los modelos más sencillos, y es posible que estos modelos no sean capaces de clasificar con precisión el sentimiento de esos textos. Los LLM pueden manejar textos más complejos, pero tendría que experimentar con diferentes modelos.
Por último, al realizar análisis de sentimientos, también surgen las mismas cuestiones que al abordar cualquier problema de aprendizaje automático. Sus modelos solo serán tan buenos como los datos de entrenamiento que utilice. Si no puede conseguir conjuntos de datos de entrenamiento y prueba de alta calidad, adecuados al ámbito de sus problemas, no podrá predecir correctamente el sentimiento de su público objetivo.
También debe asegurarse de que sus objetivos son apropiados para el problema de su empresa. Quizá parezca interesante crear un modelo para saber si sus productos hacen que sus clientes estén «tristes», «enfadados» o «indignados», pero si este no le ayuda a tomar una decisión sobre cómo mejorar sus productos, entonces no estará resolviendo su problema.
Conclusión
En este artículo del blog, nos adentramos en la fascinante área del análisis de sentimientos en Python y mostramos cómo este complejo campo se hace más accesible gracias a una serie de potentes paquetes.
Tratamos las aplicaciones potenciales del análisis de sentimientos, las distintas formas de evaluar el sentimiento y los principales métodos para extraer el sentimiento de un texto. También hemos visto algunas funciones útiles en PyCharm que hacen que trabajar con modelos e interpretar sus resultados sea más sencillo y rápido.
Aunque el campo del procesamiento del lenguaje natural se centra actualmente de forma intensiva en los grandes modelos lingüísticos, las técnicas más antiguas de utilizar analizadores basados en léxicos o modelos tradicionales de aprendizaje automático, como los clasificadores Naive Bayes, siguen teniendo su lugar en el análisis de sentimientos. Estas técnicas destacan cuando se analizan textos más sencillos, o cuando la velocidad, las predicciones o la facilidad de implementación son prioritarias. Los LLM son más adecuados para textos más complejos o matizados.
Ahora que ya conoce los conceptos básicos, puede aprender a realizar análisis de sentimientos con LLM en nuestro tutorial. La guía paso a paso le ayuda a descubrir cómo seleccionar el modelo adecuado para su tarea, utilizarlo para el análisis de sentimientos e incluso ajustarlo usted mismo.
Si desea seguir aprendiendo sobre el procesamiento del lenguaje natural o el aprendizaje automático en un sentido más amplio después de haber leído este artículo, aquí tiene algunos recursos:
- Aprenda a realizar análisis de sentimientos con modelos de lenguaje de gran tamaño
- Comience a estudiar aprendizaje automático con PyCharm
- Explore los métodos de aprendizaje automático en ingeniería de software
Empiece hoy mismo con el análisis de sentimientos en PyCharm
Si ya está listo para iniciar su propio proyecto de análisis de sentimientos, puede activar su suscripción gratuita de tres meses a PyCharm. Haga clic en el siguiente enlace e introduzca este código promocional: PCSA24. A continuación, recibirá un código de activación por correo electrónico.
Artículo original en inglés de: