0

私の要件は、あいまいフレーズ検索で一致スコアを生成することです。例

1) 入力データ - こんにちは、サム、お元気ですか? ありがとう、スミス。

  • インデックス付きドキュメント - Sam Smith (ドキュメントは常に個人/組織名であり、入力データはフリーテキスト データになります)

上記の場合、私の入力データには Sam と Smith の両方が見つかりましたが、文脈上は両方とも別の人物です。入力データが「Hello Sam Smith」である場合、より高いスコアで関連するヒットを取得する必要があります (「Hello Sam John Smith」などについても OK スコアを期待しています)。

ここではプライマリ フィルタリングに Lucene を使用しており、後で入力データを使用して一致したドキュメントを後処理し、(レーベンシュタインを使用して) 一致スコアを定義します。ファジーでも機能するはずです。

的確なアプローチ、

1) Tri-Grams として文書を索引付けする

2) 入力したフリーテキストデータを Tri-Gram インデックスで検索

3)一致するすべてのドキュメントを収集します(これにはまだ多くのノイズデータがあります)

4) 一致したすべてのドキュメントを後処理し、入力フリー テキスト データ内の一致したすべてのトライグラム トークンの位置を定義し、可能な位置トークンとドキュメント全体の間のレーベンシュタイン スコアを計算します。

例 - こんにちは、サム、お元気ですか? ありがとう、スミス。

ここで、ドキュメントの一致は「Sam Smith」になります。次のように、インデックスの各トライグラムと、入力されたフリー テキスト データでのその位置の一致を調べたいと思います。

1) 入力データの 2 番目の位置の単語「Sam」と一致するトークン「sam」

2) 入力データの 8 番目の単語「Smith」と一致するトークン「smi」

後で、実際に一致したドキュメントでトークン 2、8 のレーベンシュタイン スコアを計算するロジックを記述します (位置 2 と 8 の間の近接性を考慮すると、スコアは非常に低くなります)。ただし、トークンの位置が 2,3 (または 2,4) の場合、良いスコアを与えたでしょう。

このアプローチに関する専門家からのフィードバック、またはより良い提案を希望します。ありがとうございます。

4

1 に答える 1

0

トークン化されたシーケンスを使用して、Lucene で同様のファジー フレーズ マッチングを行っています。トークン距離は、Levenshtein または JaroWinkler を使用して計算され、Smith-Waterman を使用して最適な配列アラインメントを見つけます。私がそのアプローチをあなたのケースに適応させるとしたら、問題は、アラインメント スコアリングに (直接) トークン スワップ (置き換えられたトークン置換) を支持する方法がないことです。私ができる唯一のことは、ソースに表示されるトークンの挿入コストを、そうでないトークンよりも低くすることです。

そのため、非ローカルな並べ替えの影響を受けにくいスコアリングを取得するための n-gram アプローチが気に入っています。文の類似性を表す標準的な n-gram メトリクスである BLEU、METEOR、および ROUGE と、順序の区別に対処するためのさまざまなアプローチをチェックすることをお勧めします。それらは、あなたの提案のように文字レベルの n-gram でも、私が行っているようなトークンレベルの n-gram でも使用できます。

于 2013-09-28T18:00:45.803 に答える