Course
Tutorial de análisis de sentimiento NLTK para principiantes
En la era digital actual, el análisis y la minería de textos se han convertido en partes esenciales de diversas industrias. El análisis de textos se refiere al proceso de analizar y extraer información significativa de datos de texto no estructurados. Uno de los subcampos más importantes del análisis de textos es el análisis de sentimientos, que consiste en determinar el tono emocional del texto.
El análisis de sentimientos tiene numerosas aplicaciones prácticas, desde la supervisión de marcas hasta el análisis de las opiniones de los clientes. Python es un popular lenguaje de programación utilizado para el análisis y la minería de textos, y la biblioteca Natural Language Toolkit (NLTK) es una de las más utilizadas para el procesamiento del lenguaje natural en Python.
Este tutorial proporcionará una guía paso a paso para realizar análisis de sentimientos utilizando la biblioteca NLTK en Python. Al final de este tutorial, usted tendrá una sólida comprensión de cómo realizar análisis de sentimiento utilizando NLTK en Python, junto con un ejemplo completo que puede utilizar como punto de partida para sus propios proyectos. Así que, ¡empecemos!
Biblioteca NLTK (Natural Language Toolkit)
Natural Language Toolkit (NLTK) es una popular biblioteca de código abierto para el procesamiento del lenguaje natural (PLN) en Python. Ofrece una interfaz fácil de usar para una amplia gama de tareas, como tokenización, stemming, lematización, análisis sintáctico y análisis de sentimiento.
NLTK es ampliamente utilizado por investigadores, desarrolladores y científicos de datos de todo el mundo para desarrollar aplicaciones de PLN y analizar datos de texto.
Una de las principales ventajas de utilizar NLTK es su amplia colección de corpus, que incluye datos de texto de diversas fuentes, como libros, artículos de noticias y plataformas de redes sociales. Estos corpus constituyen una rica fuente de datos para entrenar y probar modelos de PNL.
¿Qué es el análisis de sentimiento?
El análisis de sentimiento es una técnica utilizada para determinar el tono emocional o sentimiento expresado en un texto. Consiste en analizar las palabras y frases utilizadas en el texto para identificar el sentimiento subyacente, ya sea positivo, negativo o neutro.
El análisis de sentimientos tiene una amplia gama de aplicaciones, como la monitorización de redes sociales, el análisis de opiniones de clientes y la investigación de mercados.
Uno de los principales retos del análisis de sentimientos es la complejidad inherente al lenguaje humano. Los datos textuales suelen contener sarcasmo, ironía y otras formas de lenguaje figurado que pueden resultar difíciles de interpretar con los métodos tradicionales.
Sin embargo, los recientes avances en el procesamiento del lenguaje natural (PLN ) y el aprendizaje automático han hecho posible realizar análisis de sentimientos en grandes volúmenes de datos de texto con un alto grado de precisión.
Tres metodologías para el análisis de sentimientos
Existen varias formas de realizar análisis de sentimientos a partir de datos de texto, con distintos grados de complejidad y precisión. Los métodos más comunes incluyen un enfoque basado en el léxico, un enfoque basado en el aprendizaje automático (ML) y un enfoque de aprendizaje profundo basado en transformadores preentrenados. Veamos cada uno de ellos con más detalle:
Análisis basado en el léxico
Este tipo de análisis, como el analizador de sentimientos NLTK Vader, consiste en utilizar un conjunto de reglas y heurísticas predefinidas para determinar el sentimiento de un texto. Estas reglas suelen basarse en características léxicas y sintácticas del texto, como la presencia de palabras y frases positivas o negativas.
Aunque el análisis basado en léxicos puede ser relativamente sencillo de aplicar e interpretar, puede no ser tan preciso como los enfoques basados en ML o en transformaciones, especialmente cuando se trata de datos de texto complejos o ambiguos.
Aprendizaje automático (ML)
Este enfoque consiste en entrenar un modelo para identificar el sentimiento de un texto a partir de un conjunto de datos de entrenamiento etiquetados. Estos modelos pueden entrenarse utilizando una amplia gama de algoritmos de ML, incluidos árboles de decisión, máquinas de vectores de soporte (SVM) y redes neuronales.
Los enfoques basados en ML pueden ser más precisos que el análisis basado en reglas, especialmente cuando se trata de datos de texto complejos, pero requieren una mayor cantidad de datos de entrenamiento etiquetados y pueden ser más costosos desde el punto de vista informático.
Aprendizaje profundo basado en transformadores preentrenados
Un enfoque basado en el aprendizaje profundo, como se ha visto con BERT y GPT-4, implica el uso de modelos preformados entrenados en cantidades masivas de datos de texto. Estos modelos utilizan redes neuronales complejas para codificar el contexto y el significado del texto, lo que les permite alcanzar una precisión de vanguardia en una amplia gama de tareas de PNL, incluido el análisis de sentimientos. Sin embargo, estos modelos requieren importantes recursos informáticos y pueden no ser prácticos para todos los casos de uso.
- El análisis basado en léxicos es un enfoque sencillo del análisis de sentimientos, pero puede no ser tan preciso como otros métodos más complejos.
- Los enfoques basados en el aprendizaje automático pueden ser más precisos, pero requieren datos de entrenamiento etiquetados y pueden ser más costosos desde el punto de vista informático.
- Los enfoques de aprendizaje profundo basados en transformadores preentrenados pueden lograr una precisión de vanguardia, pero requieren importantes recursos computacionales y pueden no ser prácticos para todos los casos de uso.
La elección del enfoque dependerá de las necesidades y limitaciones específicas del proyecto en cuestión.
Instalación de NLTK y configuración del entorno Python
Para utilizar la biblioteca NLTK, debe disponer de un entorno Python en su ordenador. La forma más sencilla de instalar Python es descargar e instalar la distribución Anaconda. Esta distribución incluye el entorno base de Python 3 y otros extras, como Jupyter Notebook. Tampoco es necesario instalar la biblioteca NLTK, ya que viene preinstalada con NLTK y muchas otras bibliotecas útiles.
Si decide instalar Python sin ninguna distribución, puede descargar e instalar Python directamente desde python.org. En este caso, tendrás que instalar NLTK una vez que tu entorno Python esté listo.
Para instalar la biblioteca NLTK, abra el terminal de comandos y escriba:
pip install nltk
Vale la pena señalar que NLTK también requiere que se descarguen algunos datos adicionales antes de que se pueda utilizar con eficacia. Estos datos incluyen modelos preentrenados, corpus y otros recursos que NLTK utiliza para realizar diversas tareas de PNL. Para descargar estos datos, ejecute el siguiente comando en el terminal o en su script Python:
import nltk
nltk.download('all')
Tratamiento previo del texto
El preprocesamiento del texto es un paso crucial en la realización de análisis de sentimiento, ya que ayuda a limpiar y normalizar los datos de texto, facilitando su análisis. El paso de preprocesamiento implica una serie de técnicas que ayudan a transformar los datos de texto sin procesar en una forma que pueda utilizarse para el análisis. Algunas técnicas habituales de preprocesamiento de textos son la tokenización, la eliminación de palabras vacías, la separación de palabras y la lematización.
Tokenización
La tokenización es un paso del preprocesamiento de texto en el análisis de sentimientos que consiste en dividir el texto en palabras individuales o tokens. Se trata de un paso esencial en el análisis de datos de texto, ya que ayuda a separar las palabras individuales del texto en bruto, lo que facilita su análisis y comprensión. La tokenización se realiza normalmente utilizando la función integrada `word_tokenize` de NLTK, que puede dividir el texto en palabras individuales y signos de puntuación.
Palabras clave
La eliminación de las palabras vacías es un paso crucial del preprocesamiento de texto en el análisis de sentimiento que implica la eliminación de palabras comunes e irrelevantes que probablemente no transmitan mucho sentimiento. Las stop words son palabras muy comunes en una lengua y que no tienen mucho significado, como "y", "el", "de" y "ello". Estas palabras pueden causar ruido y sesgar el análisis si no se eliminan.
Al eliminar las palabras vacías, es más probable que las palabras restantes del texto indiquen el sentimiento expresado. Esto puede ayudar a mejorar la precisión del análisis de sentimientos. NLTK proporciona una lista integrada de palabras vacías para varios idiomas, que puede utilizarse para filtrar estas palabras de los datos de texto.
Tallo y lematización
El stemming y la lematización son técnicas utilizadas para reducir las palabras a su raíz. El tallado consiste en eliminar los sufijos de las palabras, como "ing" o "ed", para reducirlas a su forma básica. Por ejemplo, la palabra "saltar" se derivaría a "jump".
En cambio, la lematización consiste en reducir las palabras a su forma básica en función de su parte de la oración. Por ejemplo, la palabra "jumped" se lematizaría a "jump", pero la palabra "jumping" se lematizaría a "jumping", ya que es un participio presente.
Para obtener más información sobre el stemming y la lematización, consulte nuestro tutorial sobre stemming y lematización en Python.
Modelo de bolsa de palabras (BoW)
El modelo de bolsa de palabras es una técnica utilizada en el procesamiento del lenguaje natural (PLN) para representar datos de texto como un conjunto de características numéricas. En este modelo, cada documento o fragmento de texto se representa como una "bolsa" de palabras, en la que cada palabra del texto está representada por una característica o dimensión independiente en el vector resultante. El valor de cada característica viene determinado por el número de veces que aparece la palabra correspondiente en el texto.
El modelo de bolsa de palabras es útil en PNL porque nos permite analizar datos de texto mediante algoritmos de aprendizaje automático, que suelen requerir entradas numéricas. Al representar los datos de texto como características numéricas, podemos entrenar modelos de aprendizaje automático para clasificar texto o analizar sentimientos.
El ejemplo de la siguiente sección utilizará el modelo NLTK Vader para el análisis de sentimientos en el conjunto de datos de clientes de Amazon. En este ejemplo concreto, no necesitamos realizar este paso porque la API Vader de NLTK acepta texto como entrada en lugar de vectores numéricos, pero si estuvieras construyendo un modelo de aprendizaje automático supervisado para predecir el sentimiento (suponiendo que tienes datos etiquetados), tendrías que transformar el texto procesado en un modelo de bolsa de palabras antes de entrenar el modelo de aprendizaje automático.
Ejemplo de análisis de sentimiento de extremo a extremo en Python
Para realizar un análisis de sentimientos con NLTK en Python, primero hay que preprocesar los datos de texto mediante técnicas como la tokenización, la eliminación de palabras vacías y la lematización. Una vez preprocesado el texto, lo pasaremos al analizador de sentimiento Vader para que analice el sentimiento del texto (positivo o negativo).
Paso 1 - Importar bibliotecas y cargar el conjunto de datos
En primer lugar, importaremos las bibliotecas necesarias para el análisis de texto y el análisis de sentimientos, como pandas
para el tratamiento de datos, nltk
para el procesamiento del lenguaje natural y SentimentIntensityAnalyzer
para el análisis de sentimientos.
A continuación, descargaremos todo el corpus NLTK (una colección de datos lingüísticos) utilizando nltk.download()
.
Una vez configurado el entorno, cargaremos un conjunto de datos de reseñas de Amazon utilizando pd.read_csv()
. Esto creará un objeto DataFrame en Python que podemos utilizar para analizar los datos. Mostraremos el contenido del DataFrame utilizando df
.
# import libraries
import pandas as pd
import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
# download nltk corpus (first time only)
import nltk
nltk.download('all')
# Load the amazon review dataset
df = pd.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/amazon.csv')
df
Paso 2 - Tratamiento previo del texto
Vamos a crear una función preprocess_text
en la que primero tokenizamos los documentos utilizando la función word_tokenize
de NLTK, después eliminamos las palabras escalonadas utilizando el módulo stepwords
de NLTK y, por último, lematizamos filtered_tokens
utilizando WordNetLemmatizer
de NLTK.
# create preprocess_text function
def preprocess_text(text):
# Tokenize the text
tokens = word_tokenize(text.lower())
# Remove stop words
filtered_tokens = [token for token in tokens if token not in stopwords.words('english')]
# Lemmatize the tokens
lemmatizer = WordNetLemmatizer()
lemmatized_tokens = [lemmatizer.lemmatize(token) for token in filtered_tokens]
# Join the tokens back into a string
processed_text = ' '.join(lemmatized_tokens)
return processed_text
# apply the function df
df['reviewText'] = df['reviewText'].apply(preprocess_text)
df
Observe los cambios en la columna "texto de revisión" como resultado de la función preprocess_text
que aplicamos en el paso anterior.
Paso 3 - Analizador de sentimiento NLTK
En primer lugar, inicializaremos un objeto Sentiment Intensity Analyzer de la biblioteca nltk.sentiment.vader
.
A continuación, definiremos una función llamada get_sentiment
que toma una cadena de texto como entrada. La función llama al método polarity_scores
del objeto analizador para obtener un diccionario de puntuaciones de sentimiento para el texto, que incluye una puntuación para el sentimiento positivo, negativo y neutro.
A continuación, la función comprobará si la puntuación positiva es mayor que 0 y devuelve una puntuación de sentimiento de 1 en caso afirmativo y de 0 en caso contrario. Esto significa que cualquier texto con una puntuación positiva se clasificará como de sentimiento positivo, y cualquier texto con una puntuación no positiva se clasificará como de sentimiento negativo.
Por último, aplicaremos la función get_sentiment
a la columna reviewText
del DataFrame df utilizando el método apply. Esto crea una nueva columna llamada sentimiento en el DataFrame, que almacena la puntuación de sentimiento de cada opinión. A continuación, mostraremos el DataFrame actualizado utilizando df
.
# initialize NLTK sentiment analyzer
analyzer = SentimentIntensityAnalyzer()
# create get_sentiment function
def get_sentiment(text):
scores = analyzer.polarity_scores(text)
sentiment = 1 if scores['pos'] > 0 else 0
return sentiment
# apply get_sentiment function
df['sentiment'] = df['reviewText'].apply(get_sentiment)
df
El analizador de sentimientos NLTK devuelve una puntuación entre -1 y +1. Hemos utilizado un umbral de corte de 0 en la función get_sentiment
anterior. Cualquier valor superior a 0 se clasifica como 1 (es decir, positivo). Como disponemos de etiquetas reales, podemos evaluar el rendimiento de este método construyendo una matriz de confusión.
from sklearn.metrics import confusion_matrix
print(confusion_matrix(df['Positive'], df['sentiment']))
Salida:
[[ 1131 3636]
[ 576 14657]]
También podemos consultar el informe de clasificación:
from sklearn.metrics import classification_report
print(classification_report(df['Positive'], df['sentiment']))
Como puede ver, la precisión global de este modelo de análisis de sentimientos basado en reglas es del 79%. Dado que se trata de datos etiquetados, también puede intentar construir un modelo ML para evaluar si un enfoque basado en ML dará como resultado una mayor precisión.
Consulta el cuaderno completo en el espacio de trabajo Datacamp.
Conclusión
NLTK es una biblioteca potente y flexible para realizar análisis de sentimientos y otras tareas de procesamiento del lenguaje natural en Python. Mediante NLTK, podemos preprocesar datos de texto, convertirlos en un modelo de bolsa de palabras y realizar un análisis de sentimientos con el analizador de sentimientos de Vader.
A través de este tutorial, hemos explorado los fundamentos del análisis de sentimiento NLTK, incluyendo el preprocesamiento de datos de texto, la creación de un modelo de bolsa de palabras, y la realización de análisis de sentimiento utilizando NLTK Vader. También hemos analizado las ventajas y limitaciones del análisis de sentimientos NLTK, y hemos ofrecido sugerencias para futuras lecturas y exploraciones.
En general, NLTK es una herramienta potente y muy utilizada para realizar análisis de sentimientos y otras tareas de procesamiento del lenguaje natural en Python. Si dominas las técnicas y herramientas presentadas en este tutorial, podrás obtener información valiosa sobre el sentimiento de los datos de texto y utilizarla para tomar decisiones basadas en datos en una amplia gama de aplicaciones.
Si desea aprender a aplicar la PNL a datos del mundo real, como charlas TED, artículos y críticas de películas, utilizando bibliotecas y marcos de trabajo de Python, como NLTK, scikit-learn, spaCy y SpeechRecognition, consulte los recursos siguientes:
- Introducción al procesamiento del lenguaje natural en Python
- Procesamiento del lenguaje natural en Python
Proporciona una base sólida para procesar y analizar datos de texto utilizando Python. Tanto si es nuevo en la PNL como si desea ampliar sus conocimientos, este curso le proporcionará las herramientas y los conocimientos necesarios para convertir datos no estructurados en información valiosa.
Cursos de Python
Course
Python intermedio
Course
Introducción al procesamiento del lenguaje natural en Python
blog
Todo lo que sabemos sobre GPT-5
Josep Ferrer
10 min
blog
Los 16 mejores marcos y bibliotecas de IA: Guía para principiantes
blog
¿Qué es la tokenización?
tutorial
Primeros pasos con Claude 3 y la API de Claude 3
tutorial
Guía introductoria para perfeccionar los LLM
Josep Ferrer
12 min
tutorial