Vectorisation TF-IDF

Natural Language Processing (NLP) en Python

Fouad Trad

Machine Learning Engineer

De BoW à TF-IDF

  • BoW considère tous les mots comme également importants
  • TF-IDF corrige cela en indiquant :
    • la fréquence d'un mot dans un document
    • la pertinence de ce mot dans l'ensemble

 

Image montrant la représentation BoW de deux phrases : « I love this NLP course » et « I enjoyed this project. ».

Natural Language Processing (NLP) en Python

TF-IDF

Image montrant que TF-IDF est le produit de TF et IDF.

Natural Language Processing (NLP) en Python

TF-IDF

Image montrant que TF-IDF est le produit de TF et IDF.

  • TF : Term Frequency
    • Nombre d'occurrences d'un mot dans un document
Natural Language Processing (NLP) en Python

TF-IDF

Image montrant que TF-IDF est le produit de TF et IDF.

  • TF : Term Frequency
    • Nombre d'occurrences d'un mot dans un document
  • IDF : Inverse Document Frequency
    • Rareté de ce mot dans tous les documents

 

  • Mot présent dans un seul document, absent des autres → score élevé
  • Mot présent dans tous les documents → score faible
Natural Language Processing (NLP) en Python

TF-IDF avec du code

reviews = [
    "I loved the movie. It was amazing!",
    "The movie was okay.",
    "I hated the movie. It was boring."
]

cleaned_reviews = [preprocess(review) for review in reviews] print(cleaned_reviews)
['i loved the movie it was amazing', 
 'the movie was okay', 
 'i hated the movie it was boring']
Natural Language Processing (NLP) en Python

TF-IDF avec du code

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(cleaned_reviews)
print(tfidf_matrix)
<Compressed Sparse Row sparse matrix of dtype 'float64'
    with 16 stored elements and shape (3, 9)>
Natural Language Processing (NLP) en Python

Sortie TF-IDF

print(tfidf_matrix.toarray())
[[0.52523431 0.         0.         0.39945423 0.52523431 0.31021184   0.         0.31021184 0.31021184]
 [0.         0.         0.         0.         0.         0.41285857   0.69903033 0.41285857 0.41285857]
 [0.         0.52523431 0.52523431 0.39945423 0.         0.31021184   0.         0.31021184 0.31021184]]
vectorizer.get_feature_names_out()
['amazing' 'boring' 'hated' 'it' 'loved' 'movie' 'okay' 'the' 'was']
Natural Language Processing (NLP) en Python

Visualiser les scores en carte thermique

import pandas as pd

df_tfidf = pd.DataFrame(

tfidf_matrix.toarray(),
columns=vectorizer.get_feature_names_out() )
import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(df_tfidf, annot=True)
plt.title("Scores TF-IDF par critique") plt.xlabel("Termes") plt.ylabel("Documents") plt.show()

 

Carte thermique de la représentation TF-IDF de l'ensemble de données.

Natural Language Processing (NLP) en Python

Comparer avec BoW

 

Carte thermique de la représentation BoW de l'ensemble de données.

 

Carte thermique de la représentation TF-IDF de l'ensemble de données.

Natural Language Processing (NLP) en Python

Passons à la pratique !

Natural Language Processing (NLP) en Python

Preparing Video For Download...