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
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!