Contenu du cours
Introduction au NLP
Introduction au NLP
Implémentation de TF-IDF
Implémentation par Défaut
L'implémentation du modèle TF-IDF dans sklearn
est similaire à celle du modèle Bag of Words. Pour entraîner ce modèle sur un corpus, nous utilisons la classe TfidfVectorizer
en utilisant la méthode déjà familière .fit_transform()
.
Voyons un exemple :
from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Create a default TF-IDF model vectorizer = TfidfVectorizer() # Generate a TF-IDF matrix tfidf_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a DataFrame tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Comme vous pouvez le voir, à part l'utilisation d'une classe différente, le reste de l'implémentation est identique à celle du modèle Bag of Words. Par défaut, la matrice TF-IDF est calculée, comme décrit dans le chapitre précédent, avec une normalisation L2.
Personnalisation de TF-IDF
Encore une fois, similaire à CountVectorizer
, nous pouvons spécifier les paramètres min_df
et max_df
pour inclure uniquement les termes qui apparaissent dans au moins min_df
documents et au plus max_df
documents. Ceux-ci peuvent être spécifiés soit comme des nombres absolus de documents, soit comme une proportion du nombre total de documents.
Voici un exemple où nous incluons uniquement les termes qui apparaissent dans exactement 2 documents en définissant à la fois min_df
et max_df
à 2 :
from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Include terms which appear in exactly 2 documents vectorizer = TfidfVectorizer(min_df=2, max_df=2) tfidf_matrix = vectorizer.fit_transform(corpus) tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Pour spécifier les n-grammes à inclure dans notre matrice, nous pouvons utiliser le paramètre ngram_range
. Incluons uniquement les bigrams dans la matrice résultante :
from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Include only bigrams vectorizer = TfidfVectorizer(ngram_range=(2, 2)) tfidf_matrix = vectorizer.fit_transform(corpus) tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Ce sont les paramètres les plus couramment utilisés, cependant, si vous souhaitez en explorer davantage, vous pouvez consulter la documentation.
Swipe to start coding
Votre tâche consiste à afficher le vecteur pour le unigramme 'medical' dans un modèle TF-IDF avec des unigrams, bigrams et trigrams :
-
Importez la classe
TfidfVectorizer
pour créer un modèle TF-IDF. -
Instanciez la classe
TfidfVectorizer
en tant quetfidf_vectorizer
qui inclut à la fois unigrams, bigrams et trigrams. -
Utilisez la méthode appropriée de
tfidf_vectorizer
pour générer une matrice TF-IDF à partir de la colonne'Document'
dans lecorpus
. -
Convertissez
tfidf_matrix
en un tableau dense et créez unDataFrame
à partir de celui-ci, en définissant les caractéristiques uniques (termes) comme ses colonnes. Assignez cela à la variabletfidf_matrix_df
. -
Affichez le vecteur pour 'medical' sous forme de tableau, plutôt que comme une
Series
pandas.
Solution
Merci pour vos commentaires !
Implémentation de TF-IDF
Implémentation par Défaut
L'implémentation du modèle TF-IDF dans sklearn
est similaire à celle du modèle Bag of Words. Pour entraîner ce modèle sur un corpus, nous utilisons la classe TfidfVectorizer
en utilisant la méthode déjà familière .fit_transform()
.
Voyons un exemple :
from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Create a default TF-IDF model vectorizer = TfidfVectorizer() # Generate a TF-IDF matrix tfidf_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a DataFrame tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Comme vous pouvez le voir, à part l'utilisation d'une classe différente, le reste de l'implémentation est identique à celle du modèle Bag of Words. Par défaut, la matrice TF-IDF est calculée, comme décrit dans le chapitre précédent, avec une normalisation L2.
Personnalisation de TF-IDF
Encore une fois, similaire à CountVectorizer
, nous pouvons spécifier les paramètres min_df
et max_df
pour inclure uniquement les termes qui apparaissent dans au moins min_df
documents et au plus max_df
documents. Ceux-ci peuvent être spécifiés soit comme des nombres absolus de documents, soit comme une proportion du nombre total de documents.
Voici un exemple où nous incluons uniquement les termes qui apparaissent dans exactement 2 documents en définissant à la fois min_df
et max_df
à 2 :
from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Include terms which appear in exactly 2 documents vectorizer = TfidfVectorizer(min_df=2, max_df=2) tfidf_matrix = vectorizer.fit_transform(corpus) tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Pour spécifier les n-grammes à inclure dans notre matrice, nous pouvons utiliser le paramètre ngram_range
. Incluons uniquement les bigrams dans la matrice résultante :
from sklearn.feature_extraction.text import TfidfVectorizer 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.', ] # Include only bigrams vectorizer = TfidfVectorizer(ngram_range=(2, 2)) tfidf_matrix = vectorizer.fit_transform(corpus) tfidf_matrix_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(tfidf_matrix_df)
Ce sont les paramètres les plus couramment utilisés, cependant, si vous souhaitez en explorer davantage, vous pouvez consulter la documentation.
Swipe to start coding
Votre tâche consiste à afficher le vecteur pour le unigramme 'medical' dans un modèle TF-IDF avec des unigrams, bigrams et trigrams :
-
Importez la classe
TfidfVectorizer
pour créer un modèle TF-IDF. -
Instanciez la classe
TfidfVectorizer
en tant quetfidf_vectorizer
qui inclut à la fois unigrams, bigrams et trigrams. -
Utilisez la méthode appropriée de
tfidf_vectorizer
pour générer une matrice TF-IDF à partir de la colonne'Document'
dans lecorpus
. -
Convertissez
tfidf_matrix
en un tableau dense et créez unDataFrame
à partir de celui-ci, en définissant les caractéristiques uniques (termes) comme ses colonnes. Assignez cela à la variabletfidf_matrix_df
. -
Affichez le vecteur pour 'medical' sous forme de tableau, plutôt que comme une
Series
pandas.
Solution
Merci pour vos commentaires !