web-dev-qa-db-ja.com

機械学習はどのように検索エンジンの設計に組み込まれていますか?

私は現在、Apache Luceneに基づく小さな社内検索エンジンを構築しています。その目的は単純です-一部のキーワードに基づいて、社内で書かれたいくつかの記事を提案します。私はかなり標準的なTF-IDFスコアリングをベースメトリックとして使用しており、その上に独自のスコアリングメカニズムを構築しています。ランキングがめちゃくちゃになっていると思われるいくつかのコーナーケースを除いて、これらはすべてうまく機能しているようです。

したがって、私がやろうとしているのは、検索結果ページに関連性の高い/関連性のない小さなリンクを追加して、ユーザーが最初にその結果を含める必要があるかどうかの認識に応じて、それらの1つをクリックできるようにすることです。

私の考え

  1. これらの関連/非関連をラベルとして扱い、トレーニングデータを作成します。
  2. このデータを使用して、分類子(SVMなど)をトレーニングします
  3. このモデルを検索エンジンに組み込みます。つまり、すべての新しい結果は分類子を通過し、関連性があるかどうかのラベルが割り当てられます。

このアプローチは私には直感的に思えますが、実際に機能するかどうかはわかりません。 2つの具体的な質問があります。

  1. どのような機能を抽出する必要がありますか?
  2. 機械学習コンポーネントを検索エンジンに統合するより良い方法はありますか?私の最終的な目標は、ビジネスロジックとユーザーフィードバックの両方に基づいてランキング関数を「学習」することです。
15
Legend

(1)すべての機能を抽出する必要がありますか?

まず、ドキュメントを分類していないことを理解してください。 (ドキュメント、クエリ)ペアを分類しているので、ペアの一致度を表す特徴を抽出する必要があります。

ランク付けの学習 の標準的なアプローチは、さまざまな検索エンジンのセットアップ(tf-idf、BM-25など)に対してクエリを実行し、類似性スコアでモデルをトレーニングすることですが、小さなドメイン固有のSEの場合、次のような機能を使用できます。

  • 各用語について、その用語がクエリとドキュメントの両方に出現するかどうかを示すブール値。または、ブール値ではなく、ドキュメントで実際に発生するクエリ用語のtf-idfの重み。
  • Jaccard やTanimotoなどのさまざまな重複メトリック。

(2)機械学習コンポーネントを検索エンジンに統合するより良い方法はありますか?私の最終的な目標は、ビジネスロジックとユーザーフィードバックの両方に基づいてランキング関数を「学習」することです。

これは非常に広い質問であり、答えはどれだけの努力をしたいかに依存します。頭に浮かぶ最初の改善は、分類器からのバイナリ関連性判断ではなく、その実際の決定関数を使用する必要があることです。フィルタリングだけでなく、実際にランキングを行うことができます。 SVMの場合、決定関数は超平面までの符号付き距離です。優れた機械学習パッケージには、その値を取得するためのインターフェースがあります。

それを超えて、ペアワイズとリストワイズの学習を調べてランク付けします。あなたが提案しているのは、いわゆるポイントワイズアプローチです。 IIRC、ペアワイズは実際にははるかによく機能します。その理由は、ペアワイズランキングを使用すると、クリック数がはるかに少なくなるためです。ユーザーにドキュメントを関連/非関連としてラベル付けさせるのではなく、「関連」ボタンのみを付与します。次に、トリプル(document1、document2、クエリ)のバイナリ分類子を学習します。これは、document1がdocument2よりもクエリにより関連があるか、またはその逆かを示します。ユーザーが、たとえば、ランキングのドキュメント4を関連性があるとラベル付けすると、6つのサンプルが得られます。

  • document4> document3
  • document4> document2
  • document4> document1
  • document1 <document4
  • document2 <document4
  • document3 <document4

ネガを無料で入手できます。

(これらはすべて単なる提案です。私はこれのいずれも試していません。たまたま、人々がランク付けの学習を調査した研究グループで働いたことがあります。私はリーディンググループのために誰か他の人の論文のプレゼンテーションを1回行いました。 スライド が役立ちます。)

15
Fred Foo