Wektoryzacja TF-IDF

Przetwarzanie języka naturalnego (NLP) w Pythonie

Fouad Trad

Machine Learning Engineer

Od BoW do TF-IDF

  • BoW traktuje wszystkie słowa jako równie ważne
  • TF-IDF rozwiązuje ten problem, uwzględniając:
    • jak często słowo pojawia się w dokumencie
    • jak istotne jest to słowo w całym zbiorze

 

Obraz przedstawiający reprezentację BoW dwóch zdań: „I love this NLP course" i „I enjoyed this project."

Przetwarzanie języka naturalnego (NLP) w Pythonie

TF-IDF

Obraz pokazujący, że TF-IDF jest iloczynem TF i IDF.

Przetwarzanie języka naturalnego (NLP) w Pythonie

TF-IDF

Obraz pokazujący, że TF-IDF jest iloczynem TF i IDF.

  • TF: częstość terminu
    • Ile razy słowo pojawia się w dokumencie
Przetwarzanie języka naturalnego (NLP) w Pythonie

TF-IDF

Obraz pokazujący, że TF-IDF jest iloczynem TF i IDF.

  • TF: częstość terminu
    • Ile razy słowo pojawia się w dokumencie
  • IDF: odwrotna częstość dokumentowa
    • Jak rzadkie jest słowo w całym zbiorze

 

  • Słowo pojawia się w jednym dokumencie, nie w innych → wysoki wynik
  • Słowo pojawia się w każdym dokumencie → niski wynik
Przetwarzanie języka naturalnego (NLP) w Pythonie

TF-IDF w kodzie

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']
Przetwarzanie języka naturalnego (NLP) w Pythonie

TF-IDF w kodzie

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)>
Przetwarzanie języka naturalnego (NLP) w Pythonie

Wynik 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']
Przetwarzanie języka naturalnego (NLP) w Pythonie

Wizualizacja wyników jako mapa ciepła

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()

 

Mapa ciepła reprezentacji TF-IDF zbioru danych.

Przetwarzanie języka naturalnego (NLP) w Pythonie

Porównanie z BoW

 

Mapa ciepła reprezentacji BoW zbioru danych.

 

Mapa ciepła reprezentacji TF-IDF zbioru danych.

Przetwarzanie języka naturalnego (NLP) w Pythonie

Czas na ćwiczenia!

Przetwarzanie języka naturalnego (NLP) w Pythonie

Preparing Video For Download...