Contenu du cours
Introduction au NLP
Introduction au NLP
Personnalisation du Sac de Mots
Le modèle Bag of Words, en particulier son implémentation à travers la classe CountVectorizer
, offre plusieurs paramètres de personnalisation. Cela permet de l'adapter aux besoins spécifiques de diverses tâches d'analyse de texte, améliorant ainsi considérablement l'efficacité du modèle.
Fréquence Minimale et Maximale des Documents
Le paramètre min_df
définit le nombre minimum de documents dans lesquels un terme doit apparaître pour être inclus dans le vocabulaire, soit comme un nombre absolu soit comme une proportion. Il aide à exclure les termes rares, qui sont souvent moins informatifs.
De même, max_df
détermine la fréquence maximale qu'un terme peut avoir à travers les documents pour rester dans le vocabulaire, également spécifiable comme un nombre absolu ou une proportion. Il filtre les termes trop communs qui ne contribuent pas à distinguer les documents.
Voyons un exemple :
from 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)
Définir max_df=3
exclut les mots qui apparaissent dans plus de 3 documents. Dans notre corpus, cela inclut des mots comme "quick" et "brown". Étant donné qu'ils apparaissent dans tous ou presque tous les documents, ils n'aident pas vraiment à différencier les documents. Alternativement, nous pourrions définir max_df=0.6
, car 60% de 5 documents correspondent à 3 documents.
Plage de N-grammes
Le paramètre ngram_range
vous permet de définir la plage de tailles de n-grammes à inclure dans le vocabulaire.
Par défaut, CountVectorizer
ne considère que les unigrammes (mots simples). Cependant, inclure des bigrammes (paires de mots), des trigrammes (triplets de mots) ou des n-grammes plus grands peut enrichir le modèle en capturant plus de contexte et d'informations sémantiques, améliorant potentiellement les performances.
Cela est réalisé en passant un tuple (min_n, max_n)
au paramètre ngram_range
, où min_n
représente la taille minimale de n-gramme à inclure, et max_n
représente la taille maximale.
Concentrons-nous maintenant exclusivement sur les trigrammes qui apparaissent dans deux documents ou plus au sein de notre corpus :
from 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)
Ce sont les paramètres les plus couramment utilisés, cependant, si vous souhaitez en explorer davantage, vous pouvez consulter la documentation.
Merci pour vos commentaires !