TF-IDFとは|算出方法と分析の具体例

この記事では、テキスト分析において広く用いられる「TF-IDF」について、その意味や算出方法、TF-IDFを用いたテキスト分類の進め方について、具体例をもとに解説します。

TF-IDFとは何か

TF-IDF (Term Frequency-Inverse Document Frequency)」は、テキストデータの分析において、文章に含まれる単語の「重要度」を評価する手法です。文章中の単語が「どの程度情報を持っていそうか」(=その単語の重要度)を数値として指標化することで、これを特徴量とした機械学習の分析などを行うことが可能となります。

TF-IDFでは、「特定の文章に頻出する一方、他の文章にはあまり現れない単語は、その文章の内容をよく示しているはず」という考えに基づき、特定の文章にだけ頻繁に現れる単語に大きな値(重み)を与える一方、多くの文章に現れる単語には小さな値(重み)が与えられます

例えば、「バラ」と「アジサイ」の2つの花について説明している文章を分類する場合、「花びら」「色」「品種」といった単語はどちらのグループの文章にも登場すると想定される一方、「棘(トゲ)」「梅雨」といった単語は、それぞれ片方のグループにしか登場しない特徴的な単語であると想定されます。

TF-IDFでは、特徴的な単語に大きな重みが与えられることで、この情報に基づいて、新しい文章がどちらの花について説明したものかを分類することなどができるようになります。

TF-IDFの算出方法

TF-IDFは、「用語出現頻度」を意味する「TF (Term Frequency)」と、「逆文書頻度」を意味する「IDF (Inverse Document Frequency)」を掛け合わせることで算出されます。

TF-IDFTF-IDF = TF(用語出現頻度)× IDF(逆文書頻度)

TFとIDFの具体的な内容は、以下に示す通りです。この2つの指標の掛け合わせにより、ドキュメント(文章など)と単語のセットに対してそれぞれ異なるTF-IDFの値が算出され、データ分析が可能な「特徴ベクトル」に変換されます。

TF (Term Frequency)

TF (Term Frequency:用語出現頻度) は、単一のドキュメント(文章)内における特定の単語の出現頻度を表します。具体的には、以下の計算式によって算出されます。

TF (用語出現頻度)TF = ある文章における対象単語の出現回数/ある文章に含まれる全単語の総出現回数

例えば、バラについて説明する文章の中で、「花」という単語が5回、「棘(トゲ)」という単語が3回、「梅雨」という単語が0回出現し、全単語の総出現回数が50回だったとした場合、この文章における各単語のTFは以下となります。

棘(トゲ) 梅雨
TF 5/50=0.10 3/50=0.06 0/50=0

「花」のように、対象の文章中にその単語が多く含まれているほど、TFの値が大きくなり、その単語に大きな重みが与えられます。

IDF (Inverse Document Frequency)

IDF (Inverse Document Frequency:逆文書頻度) は、全ドキュメント(文章)中における特定の単語の出現頻度の「逆数」を表します。具体的には、以下の計算式によって算出されます。

IDF (逆文書頻度)IDF = log (全文章数/対象の単語が含まれる文章数) + 1

例えば、様々な花について説明した全30個の文章の中で、「花」という単語が25個の文章、「棘(トゲ)」という単語が5個の文章、「梅雨」という単語が3個の文章で出現した場合、全文章中における各単語のIDFは以下となります。

棘(トゲ) 梅雨
IDF log(30/25)+1≃1.08 log(30/5)+1≃1.78 log(30/3)+1= 2.00

ほとんどの文章に含まれる「花」に対して、一部の文章のみに含まれる「棘(トゲ)」や「梅雨」といったより珍しい単語ほど、IDFの値が大きくなり、その単語に大きな重みが与えられます。

なお、上記式において「+ 1」が付加されているのは、log(0)によって定義域エラーとなり、TF-IDFの値が算出できない事態を回避することを目的としたものです。

また、TFやTF-IDFが単一のドキュメント(文章)に対するものであるのに対して、IDFは全文章(対象の文章全体)に対するものである点に注意が必要です。

TF-IDFを用いたテキスト分類

TF-IDFを用いたテキスト分類の進め方の具体例を、バラ、アジサイ、ヒマワリの3種類の花について説明した文章に基づく分析をもとに見ていきます。対象のテキストには、これらの花に関するwikipediaによる説明文の一部を抜粋したものを使用します。実際に分析する文章は以下です。

バラ:

バラ属の成形は、低木(灌木)、または木本性のつる植物で、葉や茎に棘を持つものが多い。葉は1回奇数羽状複葉。花は5枚の花びらと多数の雄蘂を持つ(ただし、園芸種では大部分が八重咲きである)。北半球の温帯域に広く自生しているが、チベット周辺、中国雲南省からミャンマーにかけてが主産地で、ここから中近東、ヨーロッパへ、また極東から北アメリカへと伝播した。南半球にはバラは自生しない。
アジサイ:
日本で原種ガクアジサイから改良した園芸品種で、ガクアジサイに近い落葉低木。6月から7月にかけて開花し、白、青、紫または赤色の萼(がく)が大きく発達した装飾花をもつ。ガクアジサイではこれが花序の周辺部を縁取るように並び、園芸では「額咲き」と呼ばれる。ガクアジサイから変化し、花序が球形ですべて装飾花となったアジサイは、「手まり咲き」と呼ばれる。栽培は、梅雨期に主に挿し木によって繁殖させている。
ヒマワリ:
花は黄色で、種は食用となる。日廻りや日回りと表記されることもあり、また、コウジツキ・ヒュウガアオイ、ヒグルマ(日車)、ヒグルマソウ(日車草)、ヒマワリソウ(日回り草)、サンフラワー(英: Sunflower)、ソレイユ(仏: Soleil:太陽花)、ニチリンソウ(日輪草)とも呼ばれる。種実を食用や油糧とするため、あるいは花を花卉(かき)として観賞するために広く栽培される。また、ヒマワリは夏の季語でもある。

また、これらの説明文に加えて、以下の2つのフレーズを考えます。この2つのフレーズは、検索エンジンに対して入力された検索クエリに当たります。

検索クエリ1: 日本が原産の梅雨に咲く花
検索クエリ2: 種が食用になる夏に咲く花

これら3つの説明文と2つの検索クエリについてTF-IDFを算出し、それぞれの説明文と検索クエリの間のTF-IDFに基づく類似度を計算することで、検索クエリに対して最も類似度が高い(=検索意図に合致した)花の種類を選択することが、この分析のゴールです。

Bag of Wrodsの作成

TF-IDFを算出するための前処理として、3つの説明文と2つの検索クエリに関するBag of Wrodsを作成します。

Bag of Wrodsの作成には、大きく分けて以下のステップを踏みます。

Bag of Wrods作成のステップ①データのクレンジング
②文章の単語分割(形態素解析)
③単語の抽出と除去
①データのクレンジング

このステップでは、対象となる文章に対して、空白、改行、感嘆符、各種の記号といった重要ではない要素の除去や、半角と全角の違いような「表記ゆれ」の統一などを行います。

上記の説明文と検索クエリに対してデータクレンジングを実施した結果は以下のようになります。なお以下では、文章を文に分割した上で、各文を行に展開しています。

TF-IDF_クレンジング
②文章の単語分割(形態素解析)

クレンジング済みの文章に対して、文章を単語に分割したり、単語の品詞やその基本形を取得する処理を行います。このような処理を日本語の文章に対して行う処理を形態素解析と呼びます。

形態素解析を行った結果は以下のようになります。ここで、「text」は分割された元の単語、「lemma」はその単語の原型、「pos」は単語の品詞、「is_stop」はその単語がストップワード(後述)であるか否か、を表します。

TF-IDF_形態素解析
③単語の抽出と除去

形態素解析によって分割された各単語に対して、文章の意味において重要である可能性の高い品詞の抽出と、それ以外の品詞の除去などを行います。

また、「する」「ある」「こと」「とき」など、文書中に非常に多く登場する一方で、意味においての重要性は低い単語である「ストップワード」についても、この段階で除去します。

ここまでのステップを経て、3つの説明文と2つの検索クエリから、以下の112個の単語が抽出されました。

‘SUNFLOWER’, ‘Soleil’, ‘かき’, ‘がく’, ‘つる’, ‘もつ’, ‘アジサイ’, ‘アメリカ’, ‘ガクアジサイ’, ‘コウジツキ’, ‘サンフラワー’, ‘ソレイユ’, ‘チベット’, ‘ニチリンソウ’, ‘バラ’, ‘ヒグルマソウ’, ‘ヒマワリ’, ‘ヒマワリソウ’, ‘ヒュウガアオイヒグルマ’, ‘ミャンマー’, ‘ヨーロッパ’, ‘並ぶ’, ‘中国’, ‘中近東’, ‘主産地’, ‘仏’, ‘伝播’, ‘低木’, ‘八重’, ‘北’, ‘北半球’, ‘南半球’, ‘原産’, ‘原種’, ‘周辺’, ‘周辺部’, ‘呼ぶ’, ‘咲き’, ‘咲く’, ‘品種’, ‘回’, ‘回り’, ‘回る’, ‘園芸’, ‘域’, ‘変化’, ‘夏’, ‘多い’, ‘多数’, ‘大きい’, ‘大部分’, ‘太陽’, ‘奇数’, ‘季語’, ‘属’, ‘広い’, ‘廻り’, ‘性’, ‘成形’, ‘手まり’, ‘持つ’, ‘挿し木’, ‘改良’, ‘日’, ‘日本’, ‘日車’, ‘日輪草’, ‘月’, ‘期’, ‘木本’, ‘枚’, ‘栽培’, ‘梅雨’, ‘棘’, ‘植物’, ‘極東’, ‘油糧’, ‘温帯’, ‘灌木’, ‘球形’, ‘発達’, ‘白’, ‘種’, ‘種実’, ‘縁取る’, ‘繁殖’, ‘羽状’, ‘自生’, ‘花’, ‘花びら’, ‘花卉’, ‘花序’, ‘英’, ‘茎’, ‘草’, ‘萼’, ‘落葉’, ‘葉’, ‘蘂’, ‘表記’, ‘装飾’, ‘複葉’, ‘観賞’, ‘赤色’, ‘近い’, ‘開花’, ‘雄’, ‘雲南省’, ‘青紫’, ‘額’, ‘食用’, ‘黄色’

TF-IDFの算出

作成されたBag of Wrodsをもとに、TF-IDFを算出します。結果は、3つの説明文と2つの検索クエリに対して、112個の各単語が持つTF-IDFの値が計算された、5×112のマトリクスとなります。

「title」列が2つの検索クエリと3つの説明文を表し、「SUNFLOWER」以降の列名が抽出された各単語を表しています。対象の文章に登場しない単語は、TF-IDFの値がゼロとなっていることが分かります。

クエリに対する類似度の計算

算出されたTF-IDFをもとに、2つの検索クエリと3つの説明文の類似度を計算することで、検索クエリと最も類似度が高い(=検索意図に合致した)花の種類を選択します。

ここでの類似度の計算には、「コサイン類似度関数」を使用します。コサイン類似度は、テキスト分類においてドキュメント間の類似度を測定するために広く用いられる手法です。2つの特徴ベクトル(XY)のコサイン類似度は以下によって求められます。

コサイン類似度 (cosine similarity)コサイン類似度(X, Y) = XY  /  Xのユークリッド距離・Yのユークリッド距離

コサイン類似度の計算結果は以下となります。

検索クエリ バラ アジサイ ヒマワリ
日本が原産の梅雨に咲く花 0.02 0.13 0.05
種が食用になる夏に咲く花 0.06 0.04 0.27

 

アジサイを意図した1つ目の検索クエリに対しては、アジサイのコサイン類似度が最も高くなっています。また、ヒマワリを意図した2つ目の検索クエリに対しては、ヒマワリのコサイン類似度が最も高くなっています。

TF-IDFをもとに各種類の花の説明文を特徴ベクトルに変換したことで、検索クエリと適切にマッチングできたことが確認できます。

ここまで、テキスト分析において広く用いられる「TF-IDF」について、その意味や算出方法、TF-IDFを用いたテキスト分類の進め方について解説しました。

当記事に関連するトピックについての詳細は、以下のページをご覧ください。

また、機械学習に関する全ての記事は以下のページからご覧いただけます。

参考文献:
◦Foster Provost, Tom Fawcett (2014) 『戦略的データサイエンス入門―ビジネスに活かすコンセプトとテクニック』O’Reilly Japan
◦Andreas C. Muller、Sarah Guido (2017)『Pythonではじめる機械学習―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎』O’Reilly Japan
◦本橋智光・橋本秀太郎 (2024)『改定新版 前処理大全-SQL/Pandas/Polars実践テクニック-』技術評論社
◦scikit-learn “User Guide – 7.2. Feature extraction” https://scikit-learn.org/stable/modules/feature_extraction.html (2026年4月21日最終閲覧)

関連記事