Vektorizace TF-IDF

Zpracování přirozeného jazyka (NLP) v Pythonu

Fouad Trad

Machine Learning Engineer

Od BoW k TF-IDF

  • BoW přiřazuje všem slovům stejnou váhu
  • TF-IDF to řeší – zohledňuje:
    • jak často se slovo vyskytuje v dokumentu
    • jak důležité slovo je napříč kolekcí

 

Obrázek zobrazující BoW reprezentaci dvou vět: „I love this NLP course" a „I enjoyed this project."

Zpracování přirozeného jazyka (NLP) v Pythonu

TF-IDF

Obrázek znázorňující, že TF-IDF je součinem TF a IDF.

Zpracování přirozeného jazyka (NLP) v Pythonu

TF-IDF

Obrázek znázorňující, že TF-IDF je součinem TF a IDF.

  • TF: Term Frequency (frekvence termínu)
    • Kolikrát se slovo vyskytuje v dokumentu
Zpracování přirozeného jazyka (NLP) v Pythonu

TF-IDF

Obrázek znázorňující, že TF-IDF je součinem TF a IDF.

  • TF: Term Frequency (frekvence termínu)
    • Kolikrát se slovo vyskytuje v dokumentu
  • IDF: Inverse Document Frequency (inverzní frekvence dokumentu)
    • Jak vzácné je slovo napříč všemi dokumenty

 

  • Slovo se vyskytuje jen v jednom dokumentu → vysoké skóre
  • Slovo se vyskytuje v každém dokumentu → nízké skóre
Zpracování přirozeného jazyka (NLP) v Pythonu

TF-IDF v kódu

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']
Zpracování přirozeného jazyka (NLP) v Pythonu

TF-IDF v kódu

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)>
Zpracování přirozeného jazyka (NLP) v Pythonu

Výstup 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']
Zpracování přirozeného jazyka (NLP) v Pythonu

Vizualizace skóre jako heatmapa

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("TF-IDF Scores Across Reviews") plt.xlabel("Terms") plt.ylabel("Documents") plt.show()

 

Heatmapa zobrazující TF-IDF reprezentaci datové sady.

Zpracování přirozeného jazyka (NLP) v Pythonu

Srovnání s BoW

 

Heatmapa zobrazující BoW reprezentaci datové sady.

 

Heatmapa zobrazující TF-IDF reprezentaci datové sady.

Zpracování přirozeného jazyka (NLP) v Pythonu

Let's practice!

Zpracování přirozeného jazyka (NLP) v Pythonu

Preparing Video For Download...