Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Borsa di Parole | Modelli di Testo di Base
Introduzione alla NLP

bookBorsa 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:

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

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().

Note
Approfondimento

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:

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

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:

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 questa rappresentazione, è ora possibile accedere facilmente non solo al vettore di un determinato documento, ma anche al vettore di una parola specifica:

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

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.

question-icon

Data una matrice BoW, cosa rappresentano i diversi componenti di questa matrice?

Rows:
Columns:

A particular element of the matrix:

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

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 3

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 3.45

bookBorsa 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:

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

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().

Note
Approfondimento

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:

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

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:

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 questa rappresentazione, è ora possibile accedere facilmente non solo al vettore di un determinato documento, ma anche al vettore di una parola specifica:

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

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.

question-icon

Data una matrice BoW, cosa rappresentano i diversi componenti di questa matrice?

Rows:
Columns:

A particular element of the matrix:

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

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 3
some-alt