TF-IDF コサイン類似度 計算機|2 つのテキストの類似度を 0-1 で算出
2 つの文章を貼り付けると、TF-IDF (スムージング N=2) で重み付けした後のコサイン類似度を 0-1 で表示。総語彙数・共通語数・各ベクトルのノルムも 1 画面に並べ、大文字小文字の無視と sublinear TF の切替に対応する。各文書最大 20000 文字。
💡 このツールについて
検索エンジンの実装や記事の重複チェックをしていると、「この 2 つの文章は、単語の重なり方として本当に近いのか?」を手元で確かめたくなる場面がある。埋め込みモデルを使うほどではない、単語ベースの素朴な類似度をまず見たい — そんなときに使う計算機。
TF-IDF は「その文書での出現頻度 (TF)」と「珍しさ (IDF)」を掛け合わせて単語に重みを付ける、情報検索の古典的な手法。よく出る単語ほど効き、どちらの文書にも出る平凡な単語は割引かれる。本ツールは入力した 2 文を 2 つの文書とみなして語彙を組み立て、TF-IDF ベクトルを作ってコサイン類似度を 4 桁小数で算出する。
文書数が 2 しかないと素の IDF は共通語で 0 になり崩れるため、sklearn の既定と同じ平滑化 IDF = ln((N+1)/(df+1)) + 1 を採用している。これにより共通語には重み 1.0、片方だけの語には約 1.405 が割り当てられる。総語彙数・共通語数・ノルムも併記するので、数値がどう組み上がったかを追える。
🧐 よくある質問
コサイン類似度の値はどう読めばいい? 1 に近いほど 2 文のベクトルの向きが揃っており似ている (角度 0°)、0 は共通語がなく無関係 (角度 90°) を意味する。0.5 前後なら部分的に語彙が重なっている状態。
なぜ IDF に +1 の平滑化が入っているの? 文書が 2 つしかないと、両方に出る単語は素の IDF が 0 になり重みが消えてしまう。sklearn 既定の平滑化 (分子分母に +1、末尾に +1) を使うと、共通語にも 1.0 の重みが残り計算が崩れない。
sublinear TF をオンにすると何が変わる? 出現回数をそのまま使う代わりに 1 + ln(tf) に置き換え、同じ単語が何度も出る影響を抑える。長文で特定語が連発するケースで効く、sklearn の既定オプションと同じ挙動。
日本語や中国語はどう分割される? CJK (漢字・かな・ハングル) は 1 文字ずつをトークンとして扱う。英数字・アポストロフィ・ハイフン・アンダースコアの連なりは 1 単語。形態素解析は行わないため、語彙ベースの素朴な近さの目安として使う。
大文字小文字の正規化は何に効く? オンにすると ASCII の英字を小文字に揃えるため、"Cosine" と "cosine" が同じ語として数えられる。CJK には影響しない。固有名詞の大小を区別したいときはオフにする。
📚 TF-IDF とコサインの豆知識
TF-IDF は 1970 年代に提案されて以来、全文検索エンジンのスコアリングの基礎であり続けている。Elasticsearch や Lucene の既定スコアは TF-IDF を発展させた BM25 だが、考え方の土台は「頻度 × 珍しさ」で共通する。手元で素の TF-IDF コサインを確認しておくと、検索ランキングがなぜその順序になるかの直感が掴みやすい。
コサイン類似度がベクトルの長さを無視して向きだけを見るのは、文章の長短に左右されずに「語彙の方向」を比べたいから。長い文書と短い文書でも、使っている単語の構成が似ていれば高い値になる。本ツールはノルム A・B も表示するので、各文書の TF-IDF ベクトルの大きさ (語数と重みの集積) も合わせて確認できる。