Borsa di Parole
Comprendere il modello BoW
Il modello bag of words (BoW) rappresenta i documenti come vettori in cui ogni dimensione corrisponde a una parola unica. Ogni dimensione può rappresentare la presenza di una parola all'interno del documento (1 se presente, 0 se assente) oppure la sua frequenza (conteggio delle occorrenze della parola). Pertanto, i modelli BoW possono essere sia binari che basati sulla frequenza.
Vediamo come la stessa frase (documento) viene rappresentata da ciascun tipo:
Un modello binario rappresenta questo documento come il vettore [1, 1, 1], mentre il modello basato sulla frequenza lo rappresenta come [2, 1, 2], tenendo conto della frequenza delle parole.
Implementazione di BoW
L'implementazione del modello BoW è un processo semplice, soprattutto con l'aiuto della libreria sklearn (scikit-learn) e della sua classe CountVectorizer.
Ecco un'implementazione del modello bag of words 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())
Ogni riga della matrice corrisponde a un documento e ogni colonna a un token (parola). Per rappresentarla visivamente, questa matrice sparsa è stata convertita in un array 2D denso utilizzando il metodo .toarray().
Una matrice sparsa è una matrice in cui la maggior parte degli elementi è pari a zero. Viene utilizzata per rappresentare e processare in modo efficiente dati con un elevato volume di valori zero, risparmiando memoria e risorse computazionali memorizzando solo gli elementi diversi da zero.
Per creare un modello bag of words basato sulla frequenza, è sufficiente rimuovere il parametro binary=True poiché il valore predefinito è 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())
Conversione della matrice in un DataFrame
Può essere molto utile convertire la matrice bag of words risultante in un DataFrame di pandas. Inoltre, l'istanza di CountVectorizer offre il metodo get_feature_names_out(), che restituisce un array di parole uniche (nomi delle feature) utilizzate nel modello. Questi nomi delle feature possono quindi essere utilizzati come colonne 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 questa rappresentazione, è ora possibile accedere facilmente non solo al vettore di un determinato documento, ma anche al vettore di una parola specifica:
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}")
Poiché ogni parola unica corrisponde a una colonna, accedere a un vettore di parole è semplice come accedere a una colonna nel DataFrame specificando la parola (ad esempio, 'global'). Si utilizza anche l'attributo values per ottenere un array invece di una Series come risultato.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain the difference between binary and frequency-based BoW models in more detail?
How does the CountVectorizer handle punctuation and capitalization?
Can you show how to access the vector for a different word in the DataFrame?
Awesome!
Completion rate improved to 3.45
Borsa di Parole
Scorri per mostrare il menu
Comprendere il modello BoW
Il modello bag of words (BoW) rappresenta i documenti come vettori in cui ogni dimensione corrisponde a una parola unica. Ogni dimensione può rappresentare la presenza di una parola all'interno del documento (1 se presente, 0 se assente) oppure la sua frequenza (conteggio delle occorrenze della parola). Pertanto, i modelli BoW possono essere sia binari che basati sulla frequenza.
Vediamo come la stessa frase (documento) viene rappresentata da ciascun tipo:
Un modello binario rappresenta questo documento come il vettore [1, 1, 1], mentre il modello basato sulla frequenza lo rappresenta come [2, 1, 2], tenendo conto della frequenza delle parole.
Implementazione di BoW
L'implementazione del modello BoW è un processo semplice, soprattutto con l'aiuto della libreria sklearn (scikit-learn) e della sua classe CountVectorizer.
Ecco un'implementazione del modello bag of words 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())
Ogni riga della matrice corrisponde a un documento e ogni colonna a un token (parola). Per rappresentarla visivamente, questa matrice sparsa è stata convertita in un array 2D denso utilizzando il metodo .toarray().
Una matrice sparsa è una matrice in cui la maggior parte degli elementi è pari a zero. Viene utilizzata per rappresentare e processare in modo efficiente dati con un elevato volume di valori zero, risparmiando memoria e risorse computazionali memorizzando solo gli elementi diversi da zero.
Per creare un modello bag of words basato sulla frequenza, è sufficiente rimuovere il parametro binary=True poiché il valore predefinito è 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())
Conversione della matrice in un DataFrame
Può essere molto utile convertire la matrice bag of words risultante in un DataFrame di pandas. Inoltre, l'istanza di CountVectorizer offre il metodo get_feature_names_out(), che restituisce un array di parole uniche (nomi delle feature) utilizzate nel modello. Questi nomi delle feature possono quindi essere utilizzati come colonne 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 questa rappresentazione, è ora possibile accedere facilmente non solo al vettore di un determinato documento, ma anche al vettore di una parola specifica:
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}")
Poiché ogni parola unica corrisponde a una colonna, accedere a un vettore di parole è semplice come accedere a una colonna nel DataFrame specificando la parola (ad esempio, 'global'). Si utilizza anche l'attributo values per ottenere un array invece di una Series come risultato.
Grazie per i tuoi commenti!