Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Bolsa de Palabras | Modelos Básicos de Texto
Introducción al PLN

bookBolsa de Palabras

Comprensión del modelo BoW

El modelo bolsa de palabras (BoW) representa los documentos como vectores donde cada dimensión corresponde a una palabra única. Cada dimensión puede representar la presencia de una palabra en el documento (1 si está presente, 0 si está ausente) o su frecuencia (conteo de palabras). Por lo tanto, los modelos BoW pueden ser binarios o basados en frecuencia.

A continuación, se muestra cómo la misma oración (documento) es representada por cada tipo:

Un modelo binario representa este documento como el vector [1, 1, 1], mientras que el modelo basado en frecuencia lo representa como [2, 1, 2], teniendo en cuenta la frecuencia de las palabras.

Implementación de BoW

La implementación del modelo BoW es un proceso sencillo, especialmente con la ayuda de la biblioteca sklearn (scikit-learn) y su clase CountVectorizer.

A continuación se muestra una implementación del modelo bolsa de palabras binario:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
copy

Cada fila de la matriz corresponde a un documento y cada columna a un token (palabra). Para representarla visualmente, convertimos esta matriz dispersa en un arreglo 2D denso utilizando el método .toarray().

Note
Estudiar más

Una matriz dispersa es una matriz en la que la mayoría de los elementos son cero. Se utiliza para representar y procesar de manera eficiente datos con un alto volumen de valores cero, ahorrando memoria y recursos computacionales al almacenar únicamente los elementos distintos de cero.

Para crear un modelo de bolsa de palabras basado en frecuencia, simplemente se debe eliminar el parámetro binary=True, ya que su valor predeterminado es False:

1234567891011
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
copy

Conversión de la matriz a un DataFrame

Resulta bastante conveniente convertir la matriz de bolsa de palabras obtenida en un DataFrame de pandas. Además, la instancia de CountVectorizer ofrece el método get_feature_names_out(), que recupera un arreglo de palabras únicas (nombres de características) utilizadas en el modelo. Estos nombres de características pueden emplearse como columnas del DataFrame:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
copy

Con esta representación, ahora es posible acceder fácilmente no solo al vector de un documento en particular, sino también al vector de una palabra específica:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
copy

Dado que cada palabra única corresponde a una columna, acceder a un vector de palabras es tan sencillo como acceder a una columna en el DataFrame especificando la palabra (por ejemplo, 'global'). También se utiliza el atributo values para obtener un arreglo en lugar de una Series como resultado.

question-icon

Dada una matriz BoW, ¿qué representan los diferentes componentes de esta matriz?

Rows:
Columns:

A particular element of the matrix:

Click or drag`n`drop items and fill in the blanks

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 3.45

bookBolsa de Palabras

Desliza para mostrar el menú

Comprensión del modelo BoW

El modelo bolsa de palabras (BoW) representa los documentos como vectores donde cada dimensión corresponde a una palabra única. Cada dimensión puede representar la presencia de una palabra en el documento (1 si está presente, 0 si está ausente) o su frecuencia (conteo de palabras). Por lo tanto, los modelos BoW pueden ser binarios o basados en frecuencia.

A continuación, se muestra cómo la misma oración (documento) es representada por cada tipo:

Un modelo binario representa este documento como el vector [1, 1, 1], mientras que el modelo basado en frecuencia lo representa como [2, 1, 2], teniendo en cuenta la frecuencia de las palabras.

Implementación de BoW

La implementación del modelo BoW es un proceso sencillo, especialmente con la ayuda de la biblioteca sklearn (scikit-learn) y su clase CountVectorizer.

A continuación se muestra una implementación del modelo bolsa de palabras binario:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
copy

Cada fila de la matriz corresponde a un documento y cada columna a un token (palabra). Para representarla visualmente, convertimos esta matriz dispersa en un arreglo 2D denso utilizando el método .toarray().

Note
Estudiar más

Una matriz dispersa es una matriz en la que la mayoría de los elementos son cero. Se utiliza para representar y procesar de manera eficiente datos con un alto volumen de valores cero, ahorrando memoria y recursos computacionales al almacenar únicamente los elementos distintos de cero.

Para crear un modelo de bolsa de palabras basado en frecuencia, simplemente se debe eliminar el parámetro binary=True, ya que su valor predeterminado es False:

1234567891011
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
copy

Conversión de la matriz a un DataFrame

Resulta bastante conveniente convertir la matriz de bolsa de palabras obtenida en un DataFrame de pandas. Además, la instancia de CountVectorizer ofrece el método get_feature_names_out(), que recupera un arreglo de palabras únicas (nombres de características) utilizadas en el modelo. Estos nombres de características pueden emplearse como columnas del DataFrame:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
copy

Con esta representación, ahora es posible acceder fácilmente no solo al vector de un documento en particular, sino también al vector de una palabra específica:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
copy

Dado que cada palabra única corresponde a una columna, acceder a un vector de palabras es tan sencillo como acceder a una columna en el DataFrame especificando la palabra (por ejemplo, 'global'). También se utiliza el atributo values para obtener un arreglo en lugar de una Series como resultado.

question-icon

Dada una matriz BoW, ¿qué representan los diferentes componentes de esta matriz?

Rows:
Columns:

A particular element of the matrix:

Click or drag`n`drop items and fill in the blanks

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3
some-alt