TF-IDF ベクトル化

Pythonで学ぶ自然言語処理(NLP)

Fouad Trad

Machine Learning Engineer

BoW から TF-IDF へ

  • BoW はすべての単語を同等に扱う
  • TF-IDF は次を示して補正する:
    • 単語が文書内に出る頻度
    • コーパス全体での重要度

 

2文「I love this NLP course」「I enjoyed this project.」の BoW 表現を示す画像。

Pythonで学ぶ自然言語処理(NLP)

TF-IDF

TF-IDF は TF と IDF の積であることを示す画像。

Pythonで学ぶ自然言語処理(NLP)

TF-IDF

TF-IDF は TF と IDF の積であることを示す画像。

  • TF: Term Frequency(語の出現頻度)
    • 単語が文書に現れる回数
Pythonで学ぶ自然言語処理(NLP)

TF-IDF

TF-IDF は TF と IDF の積であることを示す画像。

  • TF: Term Frequency(語の出現頻度)
    • 単語が文書に現れる回数
  • IDF: Inverse Document Frequency(逆文書頻度)
    • 全文書での希少さ

 

  • ある文書にのみ出る単語 → 高スコア
  • すべての文書に出る単語 → 低スコア
Pythonで学ぶ自然言語処理(NLP)

コードで見る TF-IDF

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']
Pythonで学ぶ自然言語処理(NLP)

コードで見る TF-IDF

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(cleaned_reviews)
print(tfidf_matrix)
<Compressed Sparse Row 形式のスパース行列 dtype 'float64'
    格納要素数 16、形状 (3, 9)>
Pythonで学ぶ自然言語処理(NLP)

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']
Pythonで学ぶ自然言語処理(NLP)

ヒートマップで可視化

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 スコア") plt.xlabel("用語") plt.ylabel("文書") plt.show()

 

データセットの TF-IDF 表現のヒートマップ。

Pythonで学ぶ自然言語処理(NLP)

BoW との比較

 

データセットの BoW 表現のヒートマップ。

 

データセットの TF-IDF 表現のヒートマップ。

Pythonで学ぶ自然言語処理(NLP)

Passons à la pratique !

Pythonで学ぶ自然言語処理(NLP)

Preparing Video For Download...