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 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())
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 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
:
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
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
:
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 es posible 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 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.
¡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
Awesome!
Completion rate improved to 3.45
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 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())
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 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
:
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
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
:
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 es posible 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 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.
¡Gracias por tus comentarios!