「tf-idf」という単語を聞いたことはありますか?また、「tf-idf」と聞くと何を思い浮かべますか?
たしか、自然言語処理で使用するはず
自然言語処理でどうやって役に立つの?
という疑問をお持ちになった方もお見えだと思います。
今回はtf-idfについての解説と、その計算方法についても解説していきます。
難しそうなイメージを持たれている方も多いと思いますが、この文章を読んでいただくとそんなに難しいものではないことがわかると思います。
tf-idfとは?
tf-idfは、文書中に含まれる単語の重要度を評価する手法の一つです。tf-idfはその名の通りtfとidf、2つの指標を掛け合わせた値になります。
tf(Term Frequency)
tf(Term Frequency)は「単語の出現頻度」を表します。これは単語の出現回数をその文書内にある単語の数で割って算出します。
$$ tf(t,d) = \frac{ \scriptsize 文章d内で単語tの登場回数}{\scriptsize 文章d内の全単語数} $$
- 「文章内にたくさんでてくる」=「重要」(値が大きい)
- 「文書内にあまり出てこない」=「重要でない」(値が小さい)
という考えで算出されます。
idf(Inverse Document Frequency)
idf(Inverse Document Frequency)は「単語の出現のまれさ」「単語のレアさ加減」を示しています。「逆文書頻度」とも言います。
目的の単語が含まれる文章の数をすべての文章の数で割って、logをとることにより算出します。
$$ idf(t) = \log{\frac{\scriptsize 全文章数}{\scriptsize 単語tが含まれる文章数}} $$
- 「単語が含まれる文章が少ない」=「単語がレア」(値が大きい)
- 「単語が含まれる文章が多い」=「単語が一般的」(値が小さい)
という考えで算出されます。これにより、「a」や「this」などの一般的に使用されて重要であると考えにくい単語をフィルタリングすることが可能です。
tf-idf
ここまでに見てきたtfの値とidfの値をかけ合わせて算出します。
$$ tf\text{-}idf(t,d) = tf(t,d) \times idf(t) $$
ここまで見てきてわかるように、「文書内にたくさん出てくるが、レアな単語」が大きい値をとることになります。つまり、数値が大きいほど「重要」とみなされています。
tfだけを見ると「a」や「this」などの単語が重要ということになってしまいますが、tf-idfをとることで単語の重要度を測ることが可能です。
言語処理におけるtf-idfの位置づけ
tf-idfは複数文章が存在する際に、特定の単語の重要度を数値化できます。これによりtf-idfをベクトル化し、ほかの文章とコサイン類似度をとることにより文章の類似度を測ることが可能です。
この方法によりよく見かける「おすすめの文章」などのレコメンドや、類似文章の検索、検索エンジンでの結果ランキング付けなどを行うことを可能にしています。
実際にtf-idfを計算してみる
では、実際にtf-idfを計算してみましょう。今回は以下の3つの文章について考えてみましょう。
- 今日は肉まん日和のいい天気なので肉まんが食べたいです
- 明日もいい天気のようなのでアイスクリームが食べたいです
- 明後日は天気に関係なく肉まんがべたいです
単語に分解する
「tf」の解説で出てきましたが、tfの計算には単語数をカウントする必要があります。
日本語を単語に分解するには、「MeCab」というソフトが便利です。MeCabはこちらのページからダウンロード可能です。
MeCabに関しては、以下の記事でも取り扱っていますので、参考にしてください。
実際にMeCabを使用して単語に分割してみましょう。以下、一つ目の文章を実際に分割したところです。
厳密にはMeCabは文章を単語ではなく形態素へ分割しますが、今回はtf-idfの知識を得る回なので、わかりやすさを優先するために形態素を単語として扱っています。
結果、
- 今日は肉まん日和のいい天気なので肉まんが食べたいです(14単語)
- 明日もいい天気のようなのでアイスクリームが食べたいです(13単語)
- 明後日は天気に関係なく肉まんがべたいです(11単語)
となることがわかります。
tfを計算する
いくつかの単語のtfを実際に計算してみましょう。冒頭でも出てきましたが、求め方は「単語の出現回数」÷「文章の総単語数」でした。
- ①での「肉まん」:2回(出現) ÷ 14単語(総単語数) = 0.14
- ②での「アイスクリーム」:1回(出現) ÷ 13単語(総単語数) = 0.08
- ③での「いい」:1回(出現) ÷ 11単語(総単語数) = 0.10
となり、各tfの値が求まりました。
idfを計算する
次にidfを計算してみましょう。求め方はlog(「すべての文章の数」÷「単語が含まれている文章の数」)です。
- 「肉まん」:log(3文章 ÷ 2文章) = 0.41
- 「アイスクリーム」:log(3文章 ÷ 1文章) = 1.10
- 「いい」:log(3文章 ÷ 3文章) = 0.00
となり、各idfの値が求まりました。
tf-idfを計算する
tf-idfの計算は単純にtfとidfをかけるだけでした。
- 「肉まん」:0.14 × 0.41 = 0.06
- 「アイスクリーム」:0.08 × 1.10 = 0.09
- 「いい」:0.10 × 0.00 = 0.00
となり、tf-idfの値まで求めることができました。
結果を確認する
結果として、
- 「肉まん」: 0.06
- 「アイスクリーム」: 0.09
- 「いい」: 0.00
というtf-idfの値が出てきました。実際にはこの処理を文章内にある単語に対して行うことにより、その文章が持っている特徴を示すベクトルが求められます。
これをほかの文章とコサイン類似度をとったりすることにより類似文章のレコメンドを行ったりすることができるわけです。
今回の例でいうと、肉まんやアイスクリーム、特にアイスクリームに興味がありそうな人が見たがる文章がレコメンドされてきそうです。
なお、「いい」や「天気」が多く出てきて印象に残った感もありますが、「いい」の結果を見てもわかるように、同じスコアになる「天気」も同様、結局単語がたくさん出てきただけで天気がよかろうが悪かろうが肉まんなりアイスクリームを食べたがっているので、天気はあまり重要でないのですね。
そのほかの自然言語処理について
自然言語処理(NLP:Natural Language Processing)は、人間が日常的に使用している言語、いわゆる自然言語をコンピュータが理解し、処理するための技術です。この分野では、テキストデータを数値に変換する「ベクトル化」が重要なステップとなります。
その中でも、tf-idfは自然言語処理の基礎的な手法で、文書中の単語の重要度を評価するために使用されることはここまでで見てきました。tf-idfは、ニューラルネットワークベースの手法に比べて計算量が非常に少なく、GPUなどの計算資源なしにも学習や推論が可能なため、現在でも広く用いられています。
このほかにも、自然言語処理ではELMoなどのLSTM系モデルを経て、最近ではChatGPTで有名なTransformerなどに進化してきました。
Transformerに関しては、以下のページも参考にしてください。
データサイエンスを学習するならTech Teacherで!
『Tech Teacher』3つの魅力
魅力1. オーダーメイドのカリキュラム
『Tech Teacher』では、決められたカリキュラムがなくオーダーメイドでカリキュラムを組んでいます。「質問だけしたい」「相談相手が欲しい」等のご要望も実現できます。
魅力2. 担当教師によるマンツーマン指導
Tech Teacherでは、完全マンツーマン指導で目標達成までサポートします。
東京大学を始めとする難関大学の理系学生・院生・博士の教師がが1対1で、丁寧に指導しています。
そのため、理解できない箇所は何度も分かるまで説明を受けることができます。
魅力3. 3,960円/30分で必要な分だけ受講
Tech Teacherでは、授業を受けた分だけ後払いの「従量課金制」を採用しているので、必要な分だけ授業を受講することができます。また、初期費用は入会金22,000円のみです。一般的なプログラミングスクールとは異なり、多額な初期費用がかからないため、気軽に学習を始めることができます。
まとめ
・魅力1. 担当教師によるマンツーマン指導
・魅力2. オーダーメイドのカリキュラム
・魅力3. 3,960円/30分で必要な分だけ受講
質問のみのお問い合わせも受け付けております。
『Tech Teacher』3つの魅力
魅力1. オーダーメイドのカリキュラム
『Tech Teacher』では、決められたカリキュラムがなくオーダーメイドでカリキュラムを組んでいます。「質問だけしたい」「相談相手が欲しい」等のご要望も実現できます。
魅力2. 担当教師によるマンツーマン指導
Tech Teacherでは、完全マンツーマン指導で目標達成までサポートします。
東京大学を始めとする難関大学の理系学生・院生・博士の教師がが1対1で、丁寧に指導しています。
そのため、理解できない箇所は何度も分かるまで説明を受けることができます。
魅力3. 3,960円/30分で必要な分だけ受講
Tech Teacherでは、授業を受けた分だけ後払いの「従量課金制」を採用しているので、必要な分だけ授業を受講することができます。また、初期費用は入会金22,000円のみです。一般的なプログラミングスクールとは異なり、多額な初期費用がかからないため、気軽に学習を始めることができます。
まとめ
・魅力1. 担当教師によるマンツーマン指導
・魅力2. オーダーメイドのカリキュラム
・魅力3. 3,960円/30分で必要な分だけ受講
質問のみのお問い合わせも受け付けております。
まとめ
今回はtf-idfについてみてきました。名前だけ聞くとなんとなく難しいもののように感じますが、実際に計算してみると非常に簡単で、理解もしやすいものであったことがわかったと思います。