Personalizzazione del Bag of Words
Il modello Bag of Words, in particolare la sua implementazione tramite la classe CountVectorizer, offre diversi parametri di personalizzazione. Questo consente di adattarlo alle esigenze specifiche di vari compiti di analisi del testo, migliorando significativamente l'efficacia del modello.
Frequenza Minima e Massima del Documento
Il parametro min_df definisce il numero minimo di documenti in cui un termine deve apparire per essere incluso nel vocabolario, sia come numero assoluto che come proporzione. Aiuta a escludere termini rari, spesso meno informativi.
Analogamente, max_df determina la frequenza massima che un termine può avere tra i documenti per rimanere nel vocabolario, anch'essa specificabile come numero assoluto o proporzione. Filtra i termini troppo comuni che non contribuiscono a distinguere tra i documenti.
123456789101112131415from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ "The quick brown fox jumps over the lazy dog.", "Quick brown foxes leap over lazy dogs in summer.", "The quick brown fox is often seen jumping over lazy dogs.", "In summer, the lazy dog plays while the quick brown fox rests.", "A quick brown fox is quicker than the laziest dog." ] # Exclude words which appear in more than 3 documents vectorizer = CountVectorizer(max_df=3) bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
Impostando max_df=3 si escludono le parole che compaiono in più di 3 documenti. Nel nostro corpus, queste includono parole come "quick" e "brown". Poiché compaiono in tutti o quasi tutti i documenti, non aiutano realmente a distinguere tra i documenti. In alternativa, si potrebbe impostare max_df=0.6, poiché il 60% di 5 documenti corrisponde a 3 documenti.
Intervallo N-gram
Il parametro ngram_range consente di definire l'intervallo delle dimensioni degli n-gram da includere nel vocabolario.
Un n-gram è una sequenza contigua di n elementi da un dato campione di testo. Questi elementi sono tipicamente parole (nel nostro caso), sillabe o lettere.
Per impostazione predefinita, CountVectorizer considera solo unigrammi (singole parole). Tuttavia, includere bigrammi (coppie di parole), trigrammi (terzine di parole) o n-grammi di dimensioni maggiori può arricchire il modello catturando più contesto e informazioni semantiche, migliorando potenzialmente le prestazioni.
Questo si ottiene passando una tupla (min_n, max_n) al parametro ngram_range, dove min_n rappresenta la dimensione minima di n-grammi da includere e max_n rappresenta la dimensione massima.
Ora concentriamoci esclusivamente sui trigrammi che compaiono in due o più documenti all'interno del nostro corpus:
123456789101112131415from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ "The quick brown fox jumps over the lazy dog.", "Quick brown foxes leap over lazy dogs in summer.", "The quick brown fox is often seen jumping over lazy dogs.", "In summer, the lazy dog plays while the quick brown fox rests.", "A quick brown fox is quicker than the laziest dog." ] # Include trigrams which appear in 2 or more documents vectorizer = CountVectorizer(min_df=2, ngram_range=(3, 3)) bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
Questi sono i parametri più comunemente utilizzati; tuttavia, nel caso si desideri esplorarne altri, è possibile consultare la documentazione.
1. Cosa controlla il parametro min_df in CountVectorizer?
2. Qual è lo scopo del parametro ngram_range in CountVectorizer?
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
Personalizzazione del Bag of Words
Scorri per mostrare il menu
Il modello Bag of Words, in particolare la sua implementazione tramite la classe CountVectorizer, offre diversi parametri di personalizzazione. Questo consente di adattarlo alle esigenze specifiche di vari compiti di analisi del testo, migliorando significativamente l'efficacia del modello.
Frequenza Minima e Massima del Documento
Il parametro min_df definisce il numero minimo di documenti in cui un termine deve apparire per essere incluso nel vocabolario, sia come numero assoluto che come proporzione. Aiuta a escludere termini rari, spesso meno informativi.
Analogamente, max_df determina la frequenza massima che un termine può avere tra i documenti per rimanere nel vocabolario, anch'essa specificabile come numero assoluto o proporzione. Filtra i termini troppo comuni che non contribuiscono a distinguere tra i documenti.
123456789101112131415from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ "The quick brown fox jumps over the lazy dog.", "Quick brown foxes leap over lazy dogs in summer.", "The quick brown fox is often seen jumping over lazy dogs.", "In summer, the lazy dog plays while the quick brown fox rests.", "A quick brown fox is quicker than the laziest dog." ] # Exclude words which appear in more than 3 documents vectorizer = CountVectorizer(max_df=3) bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
Impostando max_df=3 si escludono le parole che compaiono in più di 3 documenti. Nel nostro corpus, queste includono parole come "quick" e "brown". Poiché compaiono in tutti o quasi tutti i documenti, non aiutano realmente a distinguere tra i documenti. In alternativa, si potrebbe impostare max_df=0.6, poiché il 60% di 5 documenti corrisponde a 3 documenti.
Intervallo N-gram
Il parametro ngram_range consente di definire l'intervallo delle dimensioni degli n-gram da includere nel vocabolario.
Un n-gram è una sequenza contigua di n elementi da un dato campione di testo. Questi elementi sono tipicamente parole (nel nostro caso), sillabe o lettere.
Per impostazione predefinita, CountVectorizer considera solo unigrammi (singole parole). Tuttavia, includere bigrammi (coppie di parole), trigrammi (terzine di parole) o n-grammi di dimensioni maggiori può arricchire il modello catturando più contesto e informazioni semantiche, migliorando potenzialmente le prestazioni.
Questo si ottiene passando una tupla (min_n, max_n) al parametro ngram_range, dove min_n rappresenta la dimensione minima di n-grammi da includere e max_n rappresenta la dimensione massima.
Ora concentriamoci esclusivamente sui trigrammi che compaiono in due o più documenti all'interno del nostro corpus:
123456789101112131415from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ "The quick brown fox jumps over the lazy dog.", "Quick brown foxes leap over lazy dogs in summer.", "The quick brown fox is often seen jumping over lazy dogs.", "In summer, the lazy dog plays while the quick brown fox rests.", "A quick brown fox is quicker than the laziest dog." ] # Include trigrams which appear in 2 or more documents vectorizer = CountVectorizer(min_df=2, ngram_range=(3, 3)) bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
Questi sono i parametri più comunemente utilizzati; tuttavia, nel caso si desideri esplorarne altri, è possibile consultare la documentazione.
1. Cosa controlla il parametro min_df in CountVectorizer?
2. Qual è lo scopo del parametro ngram_range in CountVectorizer?
Grazie per i tuoi commenti!