Python para PNL: Introducción a la biblioteca TextBlob

Este es el séptimo artículo de mi serie de artículos sobre Python para PNL. En mi artículo anterior, expliqué cómo realizar el modelado de tópicos usando Latent Dirichle...

Introducción

Este es el séptimo artículo de mi serie de artículos sobre Python para PNL. En mi Artículo anterior, expliqué cómo realizar el modelado de temas usando [Asignación de Dirichlet latente](https://en.wikipedia.org/wiki /Latent_Dirichlet_allocation) y [ Factorización de matriz no negativa] (https://en.wikipedia.org/wiki/Non-negative_matrix_factorization). Utilizamos la biblioteca Scikit-Learn para realizar el modelado de temas.

En este artículo, exploraremos TextBlob, que es otra biblioteca NLP extremadamente poderosa para Python. TextBlob se basa en NLTK y proporciona una interfaz fácil de usar para la biblioteca NLTK. Veremos cómo se puede usar TextBlob para realizar una variedad de tareas de NLP que van desde el etiquetado de partes del discurso hasta el análisis de sentimientos y la traducción de idiomas hasta la clasificación de texto.

Las instrucciones detalladas de descarga de la biblioteca se pueden encontrar en el enlace oficial. Le sugiero que instale la biblioteca TextBlob, así como el corpus de muestra.

Aquí está la esencia de las instrucciones vinculadas anteriormente, pero asegúrese de consultar la documentación oficial para obtener más instrucciones sobre la instalación si la necesita:

1
$ pip install -U textblob

Y para instalar el corpora:

1
$ python -m textblob.download_corpora

Veamos ahora las diferentes funcionalidades de la biblioteca TextBlob.

Tokenización

La tokenización se refiere a dividir un párrafo grande en oraciones o palabras. Por lo general, un token se refiere a una palabra en un documento de texto. La tokenización es bastante sencilla con TextBlob. Todo lo que tiene que hacer es importar el objeto TextBlob de la biblioteca textblob, pasarle el documento que desea tokenizar y luego usar los atributos sentences y words para obtener las oraciones y los atributos tokenizados. Veamos esto en acción:

El primer paso es importar el objeto TextBlob:

1
from textblob import TextBlob

A continuación, debe definir una cadena que contenga el texto del documento. Crearemos una cadena que contenga el primer párrafo del artículo de Wikipedia sobre inteligencia artificial.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
document = ("In computer science, artificial intelligence (AI), \
            sometimes called machine intelligence, is intelligence \
            demonstrated by machines, in contrast to the natural intelligence \
            displayed by humans and animals. Computer science defines AI \
            research as the study of \"intelligent agents\": any device that \
            perceives its environment and takes actions that maximize its\
            chance of successfully achieving its goals.[1] Colloquially,\
            the term \"artificial intelligence\" is used to describe machines\
            that mimic \"cognitive\" functions that humans associate with other\
            human minds, such as \"learning\" and \"problem solving\".[2]")

El siguiente paso es pasar este documento como parámetro a la clase TextBlob. El objeto devuelto se puede usar para tokenizar el documento en palabras y oraciones.

1
text_blob_object = TextBlob(document)

Ahora, para obtener las oraciones tokenizadas, podemos usar el atributo sentences:

1
2
3
4
document_sentence = text_blob_object.sentences

print(document_sentence)
print(len(document_sentence))

En la salida, verá las oraciones tokenizadas junto con el número de oraciones.

1
2
[Sentence("In computer science, artificial intelligence (AI),             sometimes called machine intelligence, is intelligence             demonstrated by machines, in contrast to the natural intelligence             displayed by humans and animals."), Sentence("Computer science defines AI             research as the study of "intelligent agents": any device that             perceives its environment and takes actions that maximize its            chance of successfully achieving its goals."), Sentence("[1] Colloquially,            the term "artificial intelligence" is used to describe machines            that mimic "cognitive" functions that humans associate with other            human minds, such as "learning" and "problem solving"."), Sentence("[2]")]
4

De manera similar, el atributo words devuelve las palabras tokenizadas en el documento.

1
2
3
4
document_words = text_blob_object.words

print(document_words)
print(len(document_words))

La salida se ve así:

1
2
['In', 'computer', 'science', 'artificial', 'intelligence', 'AI', 'sometimes', 'called', 'machine', 'intelligence', 'is', 'intelligence', 'demonstrated', 'by', 'machines', 'in', 'contrast', 'to', 'the', 'natural', 'intelligence', 'displayed', 'by', 'humans', 'and', 'animals', 'Computer', 'science', 'defines', 'AI', 'research', 'as', 'the', 'study', 'of', 'intelligent', 'agents', 'any', 'device', 'that', 'perceives', 'its', 'environment', 'and', 'takes', 'actions', 'that', 'maximize', 'its', 'chance', 'of', 'successfully', 'achieving', 'its', 'goals', '1', 'Colloquially', 'the', 'term', 'artificial', 'intelligence', 'is', 'used', 'to', 'describe', 'machines', 'that', 'mimic', 'cognitive', 'functions', 'that', 'humans', 'associate', 'with', 'other', 'human', 'minds', 'such', 'as', 'learning', 'and', 'problem', 'solving', '2']
84

Lematización

La lematización se refiere a reducir la palabra a su forma raíz tal como se encuentra en un diccionario.

Para realizar la lematización a través de TextBlob, debe usar el objeto Word de la biblioteca textblob, pasarle la palabra que desea lematizar y luego llamar al método lemmatize.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from textblob import Word

word1 = Word("apples")
print("apples:", word1.lemmatize())

word2 = Word("media")
print("media:", word2.lemmatize())

word3 = Word("greater")
print("greater:", word3.lemmatize("a"))

En el guión anterior, realizamos la lematización de las palabras "manzanas", "medios" y "mayor". En la salida, verá las palabras "manzana", (que es singular para la manzana), "medio" (que es singular para el medio) y "gran" (que es el grado positivo para la palabra mayor). Note que para la palabra mayor, pasamos "a" como parámetro al método lemmatize. Esto le dice específicamente al método que la palabra debe ser tratada como un adjetivo. Por defecto, las palabras son tratadas como sustantivos por el método lemmatize(). La lista completa de los componentes de las partes del discurso es la siguiente:

1
ADJ, ADJ_SAT, ADV, NOUN, VERB = 'a', 's', 'r', 'n', 'v'

Etiquetado de partes del habla (POS)

Al igual que las bibliotecas spaCy y NLTK, la biblioteca TextBlob también contiene funcionalidades para el etiquetado de POS.

Para encontrar etiquetas POS para las palabras en un documento, todo lo que tiene que hacer es usar el atributo tags como se muestra a continuación:

1
2
for word, pos in text_blob_object.tags:
    print(word + " => " + pos)

En el guión anterior, imprima las etiquetas para todas las palabras en el primer párrafo del artículo de Wikipedia sobre Inteligencia Artificial. La salida del script anterior se ve así:

``` In => IN computadora => NN ciencia => NN artificial => JJ inteligencia => NN AI => NNP a veces => RB llamado => VBD máquina => NN inteligencia => NN es => VBZ inteligencia => NN demostrada => VBN por => IN máquinas => NNS en => IN contraste => NN a => TO el => DT natural => JJ inteligencia => NN mostrado => VBN por => IN humanos => NNS y => CC animales => NNS Computadora => NNP ciencia => NN define => NNS AI => NNP investigación => NN como => IN el => DT estudio => NN de => IN inteligente => JJ agentes => NNS cualquiera => DT dispositivo => NN que => WDT percibe => VBZ su => PRP$ entorno => NN y => CC toma => VBZ acciones => NNS que => IN maximiza => VB su = > PRP$ chance => NN de => IN con éxito => RB logrando => VBG sus => PRP$ metas => NNS [ => RB 1 => CD ] => NNP Coloquialmente => NNP el => término DT => NN artificial => JJ inteligencia => NN es => VBZ usado => VBN para => PARA describir => máquinas VB => NNS que => EN imitar => JJ cognitivo => JJ funciones => NNS que => WDT humanos => NNS asociar => VBP con => IN otro => JJ humano => JJ mentes => NNS tales => JJ como => IN aprendizaje => VBG y => CC problema => NN resolución => NN [ => RB 2 => CD ] => NNS `\ \

Las etiquetas POS se han impreso en forma de abreviatura. Para ver la forma completa de cada abreviatura, consulte este enlace.

Convertir texto a singular y plural

TextBlob también le permite convertir texto en plural o singular usando los métodos pluralize y singularize, respectivamente. Mira el siguiente ejemplo:

1
2
3
text = ("Football is a good game. It has many health benefit")
text_blob_object = TextBlob(text)
print(text_blob_object.words.pluralize())

En la salida, verá el plural de todas las palabras:

1
['Footballs', 'iss', 'some', 'goods', 'games', 'Its', 'hass', 'manies', 'healths', 'benefits']

De manera similar, para singularizar palabras, puede usar el método singularize de la siguiente manera:

1
2
3
4
text = ("Footballs is a goods games. Its has many healths benefits")

text_blob_object = TextBlob(text)
print(text_blob_object.words.singularize())

La salida del script anterior se ve así:

1
['Football', 'is', 'a', 'good', 'game', 'It', 'ha', 'many', 'health', 'benefit']

Extracción de frases nominales {#extracción de frases nominales}

La extracción de frases nominales, como su nombre indica, se refiere a la extracción de frases que contienen sustantivos. Busquemos todas las frases nominales en el primer párrafo del artículo de Wikipedia sobre inteligencia artificial que usamos anteriormente.

Para encontrar frases nominales, simplemente tiene que usar los atributos noun_phrase en el objeto TextBlob. Mira el siguiente ejemplo:

1
2
3
text_blob_object = TextBlob(document)
for noun_phrase in text_blob_object.noun_phrases:
    print(noun_phrase)

La salida se ve así:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
computer science
artificial intelligence
ai
machine intelligence
natural intelligence
computer
science defines
ai
intelligent agents
colloquially
artificial intelligence
describe machines
human minds

Puedes ver todas las frases nominales en nuestro documento.

Obtención de recuentos de palabras y frases

En una sección anterior, usamos el método integrado len de Python para contar el número de oraciones, palabras y frases nominales devueltas por el objeto TextBlob. Podemos usar los métodos integrados de TextBlob para el mismo propósito.

Para encontrar la frecuencia de ocurrencia de una palabra en particular, tenemos que pasar el nombre de la palabra como índice a la lista word_counts del objeto TextBlob.

En el siguiente ejemplo, contaremos el número de instancias de la palabra "inteligencia" en el primer párrafo del artículo de Wikipedia sobre Inteligencia Artificial.

1
2
text_blob_object = TextBlob(document)
text_blob_object.word_counts['intelligence']

Otra forma es simplemente llamar al método contar en el atributo palabras y pasar el nombre de la palabra cuya frecuencia de aparición se encuentra como se muestra a continuación:

1
text_blob_object.words.count('intelligence')

Es importante mencionar que por defecto la búsqueda no distingue entre mayúsculas y minúsculas. Si desea que su búsqueda distinga entre mayúsculas y minúsculas, debe pasar True como valor para el parámetro case_Sensible, como se muestra a continuación:

1
text_blob_object.words.count('intelligence', case_sensitive=True)

Al igual que los recuentos de palabras, las frases nominales también se pueden contar de la misma manera. El siguiente ejemplo encuentra la frase "inteligencia artificial" en el párrafo.

1
2
text_blob_object = TextBlob(document)
text_blob_object.noun_phrases.count('artificial intelligence')

En la salida, verá 2.

Convertir a mayúsculas y minúsculas {#convertir a mayúsculas y minúsculas}

Los objetos TextBlob son muy similares a las cadenas. Puede convertirlos a mayúsculas o minúsculas, cambiar sus valores y concatenarlos también. En el siguiente script, convertimos el texto del objeto TextBlob a mayúsculas:

1
2
3
4
text = "I love to watch football, but I have never played it"
text_blob_object = TextBlob(text)

print(text_blob_object.upper())

En la salida, verás la cadena en mayúsculas:

1
I LOVE TO WATCH FOOTBALL, BUT I HAVE NEVER PLAYED IT

De manera similar, para convertir el texto a minúsculas, podemos usar el método lower() como se muestra a continuación:

1
2
3
4
text = "I LOVE TO WATCH FOOTBALL, BUT I HAVE NEVER PLAYED IT"
text_blob_object = TextBlob(text)

print(text_blob_object.lower())

Encontrar N-Gramos

Los N-gramas se refieren a n combinaciones de palabras en una oración. Por ejemplo, para una oración "Me encanta ver fútbol", unos 2 gramos serían (me encanta), (me encanta mirar) y (ver fútbol). Los N-Grams pueden desempeñar un papel crucial en la clasificación de textos.

En TextBlob, los N-gramas se pueden encontrar pasando el número de N-Gramos al método ngrams del objeto TextBlob. Mira el siguiente ejemplo:

1
2
3
4
text = "I love to watch football, but I have never played it"
text_blob_object = TextBlob(text)
for ngram in text_blob_object.ngrams(2):
    print(ngram)

La salida del script se ve así:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
['I', 'love']
['love', 'to']
['to', 'watch']
['watch', 'football']
['football', 'but']
['but', 'I']
['I', 'have']
['have', 'never']
['never', 'played']
['played', 'it']

Esto es especialmente útil cuando se entrenan modelos de lenguaje o se realiza cualquier tipo de predicción de texto.

Correcciones ortográficas

La corrección ortográfica es una de las funcionalidades únicas de la biblioteca TextBlob. Con el método correct del objeto TextBlob, puedes corregir todos los errores ortográficos en tu texto. Mira el siguiente ejemplo:

1
2
3
4
text = "I love to watchf footbal, but I have neter played it"
text_blob_object = TextBlob(text)

print(text_blob_object.correct())

En el guión anterior cometimos tres errores ortográficos: "watchf" en lugar de "watch", "footbal" en lugar de "football", "neter" en lugar de "never". En el resultado, verá que estos errores han sido corregidos por TextBlob, como se muestra a continuación:

1
I love to watch football, but I have never played it

Traducción de idiomas

Una de las capacidades más poderosas de la biblioteca TextBlob es traducir de un idioma a otro. En el backend, el traductor de idiomas TextBlob usa la API del traductor de Google

Para traducir de un idioma a otro, simplemente tienes que pasar el texto al objeto TextBlob y luego llamar al método translate en el objeto. El código de idioma para el idioma al que desea que se traduzca su texto se pasa como parámetro al método. Veamos un ejemplo:

1
2
text_blob_object_french = TextBlob(u'Salut comment allez-vous?')
print(text_blob_object_french.translate(to='en'))

En el script anterior, pasamos una oración en francés al objeto TextBlob. A continuación, llamamos al método translate en el objeto y pasamos el código de idioma en al parámetro to. El código de idioma en corresponde al idioma inglés. En el resultado, verá la traducción de la oración en francés como se muestra a continuación:

1
Hi, how are you?

Tomemos otro ejemplo en el que traduciremos del árabe al inglés:

1
2
text_blob_object_arabic = TextBlob(u'مرحبا كيف حالك؟')
print(text_blob_object_arabic.translate(to='en'))

Producción:

1
Hi, how are you?

Finalmente, usando el método detect_language, también puedes detectar el idioma de la oración. Mira el siguiente guión:

1
2
text_blob_object = TextBlob(u'Hola como estas?')
print(text_blob_object.detect_language())

En la salida, verá es, que significa el idioma español.

El código de idioma para todos los idiomas se puede encontrar en [este enlace]{rel=“https://cloud.google.com/translate/docs/translating-text#language-params"}.

Clasificación de texto {#clasificación de texto}

TextBlob también proporciona capacidades básicas de clasificación de texto. Sin embargo, no recomendaría TextBlob para la clasificación de texto debido a sus capacidades limitadas; sin embargo, si tiene datos realmente limitados y desea desarrollar rápidamente un modelo de clasificación de texto muy básico, entonces puede usar TextBlob. Para modelos avanzados, recomendaría bibliotecas de aprendizaje automático como Scikit-Learn o Tensorflow.

Veamos cómo podemos realizar la clasificación de texto con TextBlob. Lo primero que necesitamos es un conjunto de datos de entrenamiento y datos de prueba. El modelo de clasificación se entrenará en el conjunto de datos de entrenamiento y se evaluará en el conjunto de datos de prueba.

Supongamos que tenemos los siguientes datos de entrenamiento y prueba:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
train_data = [
    ('This is an excellent movie', 'pos'),
    ('The move was fantastic I like it', 'pos'),
    ('You should watch it, it is brilliant', 'pos'),
    ('Exceptionally good', 'pos'),
    ("Wonderfully directed and executed. I like it", 'pos'),
    ('It was very boring', 'neg'),
    ('I did not like the movie', 'neg'),
    ("The movie was horrible", 'neg'),
    ('I will not recommend', 'neg'),
    ('The acting is pathetic', 'neg')
]
test_data = [
    ('Its a fantastic series', 'pos'),
    ('Never watched such a brillent movie', 'pos'),
    ("horrible acting", 'neg'),
    ("It is a Wonderful movie", 'pos'),
    ('waste of money', 'neg'),
    ("pathetic picture", 'neg')
]

El conjunto de datos contiene algunas reseñas ficticias sobre películas. Puede ver que nuestros conjuntos de datos de entrenamiento y prueba consisten en listas de tuplas donde el primer elemento de la tupla es el texto o una oración, mientras que el segundo miembro de la tupla es la revisión o opinión correspondiente del texto.

Entrenaremos nuestro conjunto de datos en train_data y lo evaluaremos en test_data. Para ello, utilizaremos la clase NaiveBayesClassifier de la biblioteca textblob.classifiers. El siguiente script importa la biblioteca:

1
from textblob.classifiers import NaiveBayesClassifier

Para entrenar el modelo, simplemente tenemos que pasar los datos de entrenamiento al constructor de la clase NaiveBayesClassifier. La clase devolverá un objeto entrenado en el conjunto de datos y capaz de hacer predicciones en el conjunto de prueba.

1
classifier = NaiveBayesClassifier(train_data)

Primero hagamos una predicción en una sola oración. Para hacerlo, necesitamos llamar al método clasificar y pasarle la oración. Mira el siguiente ejemplo:

1
print(classifier.classify("It is very boring"))

Parece una crítica negativa. Cuando ejecute el script anterior, verá neg en la salida.

De manera similar, el siguiente script devolverá pos ya que la revisión es positiva.

1
print(classifier.classify("It's a fantastic series"))

También puedes hacer una predicción pasando nuestro clasificador al parámetro clasificador del objeto TextBlob. Luego debe llamar al método classify en el objeto TextBlob para ver la predicción.

1
2
sentence = TextBlob("It's a fantastic series.", classifier=classifier)
print(sentence.classify())

Finalmente, para encontrar la precisión de su algoritmo en el conjunto de prueba, llame al método accuracy en su clasificador y pásele los test_data que acabamos de crear. Mira el siguiente guión:

1
classifier.accuracy(test_data)

En la salida, verá 0,66, que es la precisión del algoritmo.

Para encontrar las características más importantes para la clasificación, se puede utilizar el método show_informative_features. El número de características más importantes para ver se pasa como parámetro.

1
classifier.show_informative_features(3)

La salida se ve así:

1
2
3
4
Most Informative Features
            contains(it) = False             neg : pos    =      2.2 : 1.0
            contains(is) = True              pos : neg    =      1.7 : 1.0
           contains(was) = True              neg : pos    =      1.7 : 1.0

En esta sección, tratamos de encontrar el sentimiento de la reseña de la película usando la clasificación de texto. En realidad, no es necesario realizar una clasificación de texto para encontrar el sentimiento de una oración en TextBlob. La biblioteca TextBlob viene con un analizador de sentimientos incorporado que veremos en la siguiente sección.

Análisis de sentimiento

En esta sección, analizaremos el sentimiento de las opiniones del público sobre diferentes alimentos comprados a través de Amazon. Usaremos el analizador de sentimientos TextBlob para hacerlo.

El conjunto de datos se puede descargar desde este enlace Kaggle.

Como primer paso, necesitamos importar el conjunto de datos. Solo importaremos los primeros 20 000 registros debido a limitaciones de memoria. Puede importar más registros si lo desea. El siguiente script importa el conjunto de datos:

1
2
3
4
5
6
import pandas as pd
import numpy as np

reviews_datasets = pd.read_csv(r'E:\Datasets\Reviews.csv')
reviews_datasets = reviews_datasets.head(20000)
reviews_datasets.dropna()

Para ver cómo se ve nuestro conjunto de datos, usaremos el método head del marco de datos pandas:

1
reviews_datasets.head()

La salida se ve así:

{.img-responsive}

En el resultado, puede ver que la reseña de texto sobre la comida está contenida en la columna Texto. La columna de puntaje contiene calificaciones del usuario para el producto en particular, siendo 1 la calificación más baja y 5 la calificación más alta.

Veamos la distribución de rating:

1
2
3
4
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.distplot(reviews_datasets['Score'])

{.img-responsive}

Puede ver que la mayoría de las calificaciones son muy positivas, es decir, 5. Tracemos el gráfico de barras de las calificaciones para ver mejor la cantidad de registros de cada calificación.

1
sns.countplot(x='Score', data=reviews_datasets)

{.img-responsive}

El resultado muestra que más de la mitad de las reseñas tienen calificaciones de 5 estrellas.

Seleccionemos aleatoriamente una reseña y encontremos su polaridad usando TextBlob. Echemos un vistazo a la revisión número 350.

1
reviews_datasets['Text'][350]

Producción:

1
'These chocolate covered espresso beans are wonderful!  The chocolate is very dark and rich and the "bean" inside is a very delightful blend of flavors with just enough caffine to really give it a zing.'

Parece que la crítica es positiva. Verifiquemos esto usando la biblioteca TextBlob. Para encontrar el sentimiento, tenemos que usar el atributo sentimiento del objeto TextBlog. El objeto sentimiento devuelve una tupla que contiene la polaridad y la subjetividad de la reseña.

El valor de la polaridad puede estar entre -1 y 1, donde las reseñas con polaridades negativas tienen opiniones negativas, mientras que las reseñas con polaridades positivas tienen opiniones positivas.

El valor de subjetividad puede estar entre 0 y 1. La subjetividad cuantifica la cantidad de opinión personal e información fáctica contenida en el texto. La mayor subjetividad significa que el texto contiene una opinión personal en lugar de información fáctica.

Encontremos el sentimiento de la revisión 350.

1
2
text_blob_object = TextBlob(reviews_datasets['Text'][350])
print(text_blob_object.sentiment)

La salida se ve así:

1
Sentiment(polarity=0.39666666666666667,subjectivity=0.6616666666666667)

El resultado muestra que la revisión es positiva con una alta subjetividad.

Agreguemos ahora una columna para la polaridad del sentimiento en nuestro conjunto de datos. Ejecute el siguiente script:

1
2
3
4
5
def find_pol(review):
    return TextBlob(review).sentiment.polarity

reviews_datasets['Sentiment_Polarity'] = reviews_datasets['Text'].apply(find_pol)
reviews_datasets.head()

Ahora veamos la distribución de polaridad en nuestro conjunto de datos. Ejecute el siguiente script:

1
sns.distplot(reviews_datasets['Sentiment_Polarity'])

La salida del script anterior se ve así:

{.img-responsive}

Es evidente a partir de la figura anterior que la mayoría de las revisiones son positivas y tienen una polaridad entre 0 y 0,5. Esto es natural ya que la mayoría de las revisiones en el conjunto de datos tienen calificaciones de 5 estrellas.

Tracemos ahora la polaridad promedio para cada calificación de puntaje.

1
sns.barplot(x='Score', y='Sentiment_Polarity', data=reviews_datasets)

Producción:

{.img-responsive}

El resultado muestra claramente que las reseñas con puntajes de calificación altos tienen polaridades positivas altas.

Veamos ahora algunas de las críticas más negativas, es decir, las críticas con un valor de polaridad de -1.

1
2
most_negative = reviews_datasets[reviews_datasets.Sentiment_Polarity == -1].Text.head()
print(most_negative)

La salida se ve así:

1
2
3
4
5
6
545     These chips are nasty.  I thought someone had ...
1083    All my fault. I thought this would be a carton...
1832    Pop Chips are basically a horribly over-priced...
2087    I do not consider Gingerbread, Spicy Eggnog, C...
2763    This popcorn has alot of hulls I order 4 bags ...
Name: Text, dtype: object

Imprimamos el valor de la revisión número 545.

1
reviews_datasets['Text'][545]

En la salida, verá la siguiente revisión:

1
'These chips are nasty.  I thought someone had spilled a drink in the bag, no the chips were just soaked with grease.  Nasty!!'

El resultado muestra claramente que la revisión es muy negativa.

Veamos ahora algunas de las críticas más positivas. Ejecute el siguiente script:

1
2
most_positive = reviews_datasets[reviews_datasets.Sentiment_Polarity == 1].Text.head()
print(most_positive)

La salida se ve así:

1
2
3
4
5
6
106     not what I was expecting in terms of the compa...
223     This is an excellent tea.  One of the best I h...
338     I like a lot of sesame oil and use it in salad...
796     My mother and father were the recipient of the...
1031    The Kelloggs Muselix are delicious and the del...
Name: Text, dtype: object

Veamos la reseña 106 en detalle:

1
reviews_datasets['Text'][106]

Producción:

1
"not what I was expecting in terms of the company's reputation for excellent home delivery products"

Puede ver que, aunque la revisión no fue muy positiva, se le asignó una polaridad de 1 debido a la presencia de palabras como “excelente” y “reputación”. Es importante saber que el analizador de opiniones no es 100 % a prueba de errores y podría predecir opiniones incorrectas en algunos casos, como el que acabamos de ver.

Veamos ahora la revisión número 223 que también ha sido marcada como positiva.

1
reviews_datasets['Text'][223]

La salida se ve así:

1
"This is an excellent tea.  One of the best I have ever had.  It is especially great when you prepare it with a samovar."

El resultado muestra claramente que la revisión es muy positiva.

Yendo más lejos: proyecto de extremo a extremo portátil

¿Tu naturaleza inquisitiva te hace querer ir más allá? Recomendamos consultar nuestro Proyecto guiado: ["Subtítulos de imágenes con CNN y Transformers con Keras"](https://wikihtp.com/courses/image-captioning-with-cnns-and -transformadores-con-keras/#cta){target="_blank”}.

En este proyecto guiado, aprenderá a crear un modelo de subtítulos de imágenes, que acepta una imagen como entrada y produce un subtítulo de texto como salida.

Aprenderás a:

  • Preprocesar texto
  • Vectorizar la entrada de texto fácilmente
  • Trabaje con la API tf.data y cree conjuntos de datos de alto rendimiento
  • Cree Transformers desde cero con TensorFlow/Keras y KerasNLP: la adición horizontal oficial a Keras para crear modelos NLP de última generación
  • Cree arquitecturas híbridas donde la salida de una red se codifica para otra

¿Cómo enmarcamos los subtítulos de las imágenes? La mayoría lo considera un ejemplo de aprendizaje profundo generativo, porque estamos enseñando a una red a generar descripciones. Sin embargo, me gusta verlo como una instancia de traducción automática neuronal: estamos traduciendo las características visuales de una imagen en palabras. A través de la traducción, estamos generando una nueva representación de esa imagen, en lugar de simplemente generar un nuevo significado. Verlo como traducción, y solo por generación de extensión, enfoca la tarea bajo una luz diferente y la hace un poco más intuitiva.

Enmarcar el problema como uno de traducción hace que sea más fácil averiguar qué arquitectura querremos usar. Los transformadores solo de codificador son excelentes para comprender el texto (análisis de opinión, clasificación, etc.) porque los codificadores codifican representaciones significativas. Los modelos de solo decodificador son excelentes para la generación (como GPT-3), ya que los decodificadores pueden inferir representaciones significativas en otra secuencia con el mismo significado. La traducción generalmente se realiza mediante una arquitectura de codificador-decodificador, donde los codificadores codifican una representación significativa de una oración (o imagen, en nuestro caso) y los decodificadores aprenden a convertir esta secuencia en otra representación significativa que es más interpretable para nosotros (como una oración).

Conclusión

La biblioteca TextBlob de Python es una de las bibliotecas de procesamiento de lenguaje natural más famosas y ampliamente utilizadas. Este artículo explica en detalle varias funcionalidades de la biblioteca TextBlob, como la tokenización, la derivación, el análisis de sentimientos, la clasificación de texto y la traducción de idiomas.

En el próximo artículo repasaré la biblioteca Pattern, que proporciona muchas funciones realmente útiles para determinar atributos sobre oraciones , así como herramientas para la recuperación de datos de redes sociales, Wikipedia y motores de búsqueda. queda.