TF-IDFとは
TF-IDFとは、文書内での単語の出現頻度と、全文書における単語の希少性を掛け合わせて、その単語がその文書にとってどれだけ重要かを数値化する手法
読み: ティーエフアイディーエフ
かんたんに言うと
「この文書にたくさん出てくるけど、他の文書にはあまり出てこない単語」を見つける計算式。どこにでも出る「の」「は」「です」はスコアが低く、特定の文書にだけ出る専門用語はスコアが高くなる。文書の特徴を数値で表現する古典的な手法。
TFとIDFの計算
TF(Term Frequency)は文書内での単語の出現回数を文書の総単語数で割った値。「機械学習」が1,000語の文書に5回出現すれば TF = 5/1000 = 0.005。IDF(Inverse Document Frequency)は全文書数を、その単語を含む文書数で割った値の対数。10,000件中10件にしか出ない単語なら IDF = log(10000/10) = 3.0。TF-IDF = TF × IDF で、その文書におけるその単語の重要度が算出される。
BM25との関係
TF-IDFは単純だが弱点がある。長い文書ほどTFが大きくなるため、文書の長さによるバイアスがかかる。BM25はこの問題を補正したTF-IDFの改良版。文書の長さを平均と比較して正規化し、TFの上限にも飽和関数を適用する。Elasticsearchのデフォルトスコアリングは2015年からBM25に切り替わった。TF-IDFを理解していればBM25の仕組みも理解できる。
AI時代のTF-IDF
ベクトル検索やBERTが登場した現在でも、TF-IDFは使われている。キーワード抽出、文書のクラスタリング、スパムフィルタリングなど、軽量で高速な処理が求められる場面ではTF-IDFが合理的。ベクトル検索はGPUとメモリを消費するが、TF-IDFはCPUだけで動く。全ての処理にディープラーニングを使う必要はない。問題の複雑さに応じて技術を選ぶべき。
導入時の判断基準
テキスト分類やキーワード抽出の初期実装にはTF-IDFで十分なことが多い。scikit-learnのTfidfVectorizerで数行のコードで実装できる。精度が足りなければBERTやSentence Transformersに移行する。TF-IDFで80%の精度が出るなら、残り20%のためにGPUを導入するかは費用対効果で判断する。
TF-IDFとBM25の比較
| 比較項目 | BM25 | TF-IDF |
|---|---|---|
| ドキュメント長補正の有無 | 文書長の極端な増大による適合評価の飽和とバイアスを防ぎ評価を正規化する補正機能を導入 | 単に出現頻度と逆文書頻度の積であるため文書長が過小過大な場合などでペナルティが機能しない |
| スコア計算数理モデル | 現代のElasticsearchなど検索システムで実用的に高く実証されてきた強力なコミュニティ実績 | 古典的でシンプルすぎる数理計算モデルのため現代の高度な関連度順位検索要件には不向き |
| 実証コミュニティ実績 | BM25が提供する標準的な機能・インターフェース | TF-IDFが得意とする高度な対応機能やインターフェース |
TF-IDFの単純な出現率計算の限界を補正するために生まれたのがBM25です。基礎的な出現率のみに頼る素朴な検索ならTF-IDF、文書長の偏りを補正した現代的で実用的な関連度検索を行うならBM25が適しています。
当社の見解
当社はAI長期記憶システムを自社開発・運用している。開発のきっかけは、AIと経営戦略の壁打ちで出した結論がセッション切れで消えたことで絶望を感じた。1日かけて議論してきたことを振り返り、では事業計画書に落とし込むように指示を出したところ、「そのような記録はありません」と言われたことで、強烈な危機感を覚えこれは何としても解決しなければならない問題だと感じた。記憶がないAIは毎朝記憶喪失になる新入社員と同じだ。記憶があるAIは、前提条件を理解した上で本題に入れる。短いプロンプトで済むようになり、「前に言ったように実行して」と曖昧で短いプロンプトでも業務を遂行してくれる。同じことを繰り返し伝える回数も減り、開発業務でも同じミスを繰り返しにくくなり、人間の手戻りが減り、ストレスも減る。AIで本当に業務の質を上げるならば、記憶はマストである。
