Jaccard類似度ツール|単語・2-gram・3-gramで重複検出
2 つの文章を集合に変換し、共通要素を和集合で割った Jaccard係数 J = |A ∩ B| / |A ∪ B| と距離 1 − J を算出するツール。単語・2-gram・3-gram の 3 モードと大文字小文字の扱いをその場で切り替えられる。
💡 順序を無視した「重なり具合」を測る
文章の似ている度合いを測りたいとき、文字を 1 文字ずつ照合する編集距離では「語順を入れ替えただけのコピペ」を見逃しやすい。Jaccard係数は文章を要素の集合として扱い、順序を捨てて「どれだけ同じ要素を共有しているか」だけを見る。剽窃チェックや重複記事の洗い出し、検索インデックスの near-duplicate 判定で使われる指標で、完全一致・ほぼ一致の検出精度が高い反面、言い換えられた文章には反応しにくいという性質を持つ。
このツールは集合の作り方を 3 通り用意している。単語モードは空白と句読点で区切り、Unicode の文字種(ラテン文字・数字・漢字・ひらがな・カタカナ・ハングル)を要素にする。2-gram・3-gram は連続する 2 文字・3 文字を要素にするため、空白で区切れない CJK や短文でも安定して動く。同じ 2 文を 3 モードで切り替えれば、語レベルと文字レベルで重なり具合がどう変わるかを 1 画面で比較できる。
🧐 よくある質問
Jaccard係数とコサイン類似度はどう違いますか。 Jaccardは要素の有無だけを見る集合ベースの指標で、完全一致の検出に強く偽陽性が出にくい。コサイン類似度は出現頻度をベクトル化して向きを測るため、言い換えや頻度の偏りまで拾える。精度重視なら Jaccard、言い換え検出まで含めた網羅重視ならコサインという使い分けが一般的。
日本語の文章で単語モードの結果が 1 になりました。なぜですか。 単語モードは空白と句読点で区切るため、空白を持たない日本語は文全体が 1 要素になりやすい。CJK では 2-gram または 3-gram を選ぶと文字単位で集合が作られ、意味のある類似度が得られる。
Jaccard距離は何を表しますか。 距離は 1 − Jaccard係数で、2 文がどれだけ異なるかを 0〜1 で表す。係数が大きいほど似ており、距離が大きいほど離れている。両方が空集合のときは係数を 0 と定義している。
2-gram と 3-gram はどう選べばよいですか。 短文や 1〜2 単語の比較では 2-gram のほうが要素が増えて違いを拾いやすい。長文ではノイズが減る 3-gram が安定する。両方試して係数の動きを見るのが確実。
📚 Jaccard係数の出自
この指標はスイスの植物学者ポール・ジャカールが、2 つの地域に共通して分布する植物種の割合を測るために考案した「群集係数」に由来する。もともとは生態学で 2 地点の生物相がどれだけ似ているかを数える道具だった発想が、テキストを単語や n-gram の集合とみなすことでそのまま文章類似度に転用されている。要素が何であれ「共通分 ÷ 全体」という単純さが、ゲノム配列の比較から推薦システムのユーザー嗜好比較まで幅広く使われる理由になっている。