mcpField
A
algo-nlp-similarity

algo-nlp-similarity

github.com/asgard-ai-platformデータ・データベース24348 回インストール21 週間前に更新
リポジトリ

algo-nlp-similarity について

テキストを比較する語彙的・意味的手法の選択と適用を支援するスキルです。ペア比較からコーパス検索まで扱い、検証や大規模化の指針も示します。

主な機能

  1. 01JaccardとTF-IDFによる語彙的類似度
  2. 02文埋め込みによる意味的類似度
  3. 03FAISSやAnnoyによる近傍検索
  4. 04しきい値調整の指針
  5. 05人の判断に基づく結果検証

活用シーン

  1. 01重複または類似文書の検索
  2. 02クエリとFAQ回答やナレッジベース項目の照合
  3. 03盗用やコンテンツ再利用の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/asgard-ai-platform/skills --skill algo-nlp-similarity

インストール後、Claude Code で/algo-nlp-similarityを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

examples/
sample_scenario.md
references/
ann-search.md
model-benchmarks.md

詳細

テキスト類似度

概要

テキスト類似度は、2つのテキストが意味または表層形式においてどれほど近いかを測定します。語彙的手法(Jaccard、TF-IDF によるコサイン類似度)は単語の重なりを比較します。意味的手法(文の埋め込み)は、異なる単語が使われていても意味を捉えます。どちらを選ぶかは、完全一致が必要か、意味の一致が必要かによって決まります。

使用するタイミング

使用条件:

  • コレクション内で類似または重複するドキュメントを見つける
  • クエリを FAQ の回答やナレッジベースの項目と照合する
  • 剽窃やコンテンツの再利用を検出する

使用しない場合:

  • トピック単位でグループ化する場合(トピックモデリング/LDA を使用)
  • テキストからエンティティを抽出する場合(NER を使用)

アルゴリズム

IRON LAW: Lexical Similarity ≠ Semantic Similarity
"The car is fast" and "The automobile is speedy" have LOW lexical
similarity (different words) but HIGH semantic similarity (same meaning).
"Bank of the river" and "Bank account" have HIGH lexical similarity
but LOW semantic similarity. Choose the method that matches your
definition of "similar."
フェーズ 1:入力の検証

必要な類似度の種類(語彙的または意味的)、テキストの前処理要件、規模(ペア単位、全ペア、クエリとコーパスの照合)を判断します。 ゲート: テキストの前処理が完了し、手法が選択されています。

フェーズ 2:コアアルゴリズム

語彙的手法:

  • Jaccard:単語集合に対する |A∩B| / |A∪B|
  • TF-IDF ベクトルによるコサイン類似度:cos(θ) = (A·B) / (|A|×|B|)

意味的手法:

  • 文の埋め込み:sentence-transformers(all-MiniLM-L6-v2)でテキストをエンコードする
  • 埋め込みベクトルに対するコサイン類似度
  • 大規模な場合:近似最近傍探索に FAISS または Annoy を使用する
フェーズ 3:検証

抜き取りで確認します。類似度の高いペアは実際に類似しており、類似度の低いペアは実際に異なることを確認します。しきい値の調整も確認します。 ゲート: 類似度スコアがサンプルペアに対する人間の判断と一致しています。

フェーズ 4:出力

類似度スコアまたは最近傍を返します。

出力形式

{
  "similarities": [{"text_a": "doc1", "text_b": "doc5", "score": 0.92, "method": "semantic_cosine"}],
  "metadata": {"method": "sentence-transformers", "model": "all-MiniLM-L6-v2", "pairs_computed": 500}
}

例

入出力の例

入力: テキスト A:「パスワードをリセットする方法」、テキスト B:「ログイン認証情報を忘れました」 期待値: 語彙的手法(Jaccard)≈ 0.07(単語の重なりはほとんどありません)。意味的手法 ≈ 0.82(意図は同じです)。

エッジケース
入力期待値理由
同一のテキストスコア = 1.0完全一致
空のテキスト未定義または 0適切に処理する
異なる言語語彙的手法 = 0、意味的手法はモデルによる多言語モデルは言語をまたいだ照合が可能

注意点

  • しきい値はユースケースによって異なります:重複排除では類似度 0.8 が「重複」を意味しても、レコメンデーションでは「ある程度関連している」を意味する場合があります。ラベル付きの例を使ってしきい値を調整してください。
  • テキストの長さの影響:TF-IDF によるコサイン類似度はドキュメントの長さに敏感です。非常に短いテキストではベクトルが疎になり、類似度の信頼性が低下します。短いテキストには埋め込みを使用してください。
  • 埋め込みモデルの選択:モデルによって得意分野が異なります。all-MiniLM-L6-v2 は高速ですが、より大きなモデルより精度が低くなります。性能要件に合ったモデルを選んでください。
  • 計算量のスケーリング:N 個のドキュメントに対する全ペアの類似度計算は O(N²) です。大規模なコーパスでは、近似手法(局所性鋭敏型ハッシュ、FAISS)を使用してください。
  • ドメイン適応:汎用の埋め込みモデルでは、特定の分野(法律、医療)における類似性を捉えられない場合があります。最良の結果を得るには、分野固有のデータでファインチューニングしてください。

参考資料

  • 埋め込みモデルの比較とベンチマークについては、references/model-benchmarks.md を参照してください
  • 大規模な近似最近傍探索については、references/ann-search.md を参照してください

コメント