Bolsa 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 de bolsa de palabras binario:
12345678910111213from 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())
from sklearn.feature_extraction.text import CountVectorizer
Esta línea importa la clase CountVectorizer de sklearn.
corpus = [
'Global climate change poses significant risks to global ecosystems.',
'Global warming and climate change demand urgent action.',
'Sustainable environmental practices support environmental conservation.',
]
Estas líneas definen una lista llamada corpus que contiene tres elementos de tipo cadena. Cada cadena es un documento de texto.
vectorizer = CountVectorizer(binary=True)
Esta línea crea una instancia de la clase CountVectorizer. El parámetro binary=True especifica que el modelo debe utilizar conteos binarios.
bow_matrix = vectorizer.fit_transform(corpus)
El método primero ajusta el modelo a los datos, aprendiendo el vocabulario del corpus, y luego transforma los documentos de texto en una matriz dispersa de conteos de tokens (matriz de bolsa de palabras).
print(bow_matrix.toarray())
Esta línea convierte la matriz dispersa bow_matrix en un arreglo denso (numpy.ndarray) utilizando el método .toarray() y lo imprime.
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().
Una matriz dispersa es una matriz en la que la mayoría de los elementos son cero. Se utiliza para representar y procesar datos de manera eficiente cuando hay un gran volumen de valores cero, ahorrando memoria y recursos computacionales al almacenar solo los elementos distintos de cero.
Para crear un modelo de bolsa de palabras basado en frecuencia, solo es necesario eliminar el parámetro binary=True, ya que su valor predeterminado es False:
1234567891011from 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())
Conversión de la matriz a un DataFrame
Puede ser muy conveniente convertir la matriz de bolsa de palabras resultante 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 utilizarse como las columnas del DataFrame:
12345678910111213from 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)
Con esta representación, ahora podemos acceder fácilmente no solo al vector de un documento en particular, sino también al vector de una palabra específica:
12345678910111213from 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}")
Dado que cada palabra única corresponde a una columna, acceder al vector de una palabra es tan sencillo como acceder a una columna en el DataFrame especificando la palabra (por ejemplo, 'global'). También utilizamos el atributo values para obtener un arreglo en lugar de un Series como resultado.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Bolsa 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 de bolsa de palabras binario:
12345678910111213from 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())
from sklearn.feature_extraction.text import CountVectorizer
Esta línea importa la clase CountVectorizer de sklearn.
corpus = [
'Global climate change poses significant risks to global ecosystems.',
'Global warming and climate change demand urgent action.',
'Sustainable environmental practices support environmental conservation.',
]
Estas líneas definen una lista llamada corpus que contiene tres elementos de tipo cadena. Cada cadena es un documento de texto.
vectorizer = CountVectorizer(binary=True)
Esta línea crea una instancia de la clase CountVectorizer. El parámetro binary=True especifica que el modelo debe utilizar conteos binarios.
bow_matrix = vectorizer.fit_transform(corpus)
El método primero ajusta el modelo a los datos, aprendiendo el vocabulario del corpus, y luego transforma los documentos de texto en una matriz dispersa de conteos de tokens (matriz de bolsa de palabras).
print(bow_matrix.toarray())
Esta línea convierte la matriz dispersa bow_matrix en un arreglo denso (numpy.ndarray) utilizando el método .toarray() y lo imprime.
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().
Una matriz dispersa es una matriz en la que la mayoría de los elementos son cero. Se utiliza para representar y procesar datos de manera eficiente cuando hay un gran volumen de valores cero, ahorrando memoria y recursos computacionales al almacenar solo los elementos distintos de cero.
Para crear un modelo de bolsa de palabras basado en frecuencia, solo es necesario eliminar el parámetro binary=True, ya que su valor predeterminado es False:
1234567891011from 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())
Conversión de la matriz a un DataFrame
Puede ser muy conveniente convertir la matriz de bolsa de palabras resultante 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 utilizarse como las columnas del DataFrame:
12345678910111213from 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)
Con esta representación, ahora podemos acceder fácilmente no solo al vector de un documento en particular, sino también al vector de una palabra específica:
12345678910111213from 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}")
Dado que cada palabra única corresponde a una columna, acceder al vector de una palabra es tan sencillo como acceder a una columna en el DataFrame especificando la palabra (por ejemplo, 'global'). También utilizamos el atributo values para obtener un arreglo en lugar de un Series como resultado.
¡Gracias por tus comentarios!