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


15

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

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

私のアイデア

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

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

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

4
私は一度このようなことをしましたが、ユーザーはそれを嫌っていたので、それをオフにしました。問題はユーザーの行動でした。ユーザーは、用語を変更して検索結果の弱点に適応し、その後、それらの用語を再利用し続けます。システムは、アイテムのランキングの調整に応答し、それらのお気に入りの用語は異なる結果を生成し始めました。これはユーザーを怒らせた。学習とは賢いという意味ではありません;)
Reactgular

ここでelasticsearchとangularjsを使用して実装です-また、あなたが必要との説明が含まれている- machinelearningblogs.com/2016/12/12/...
のVivek Kalyanarangan

回答:


15

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

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

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

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

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

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

さらに、ペアワイズおよびリストワイズのランク付け学習を検討してください。あなたが提案しているのは、いわゆる点ごとのアプローチです。IIRC、ペアワイズは実際にはずっと良く機能します。その理由は、ペアワイズランキングでは、クリック数がはるかに少なくなるためです。ユーザーにドキュメントを関連/無関係としてラベル付けさせるのではなく、「関連」ボタンのみを与えます。次に、トリプル(ドキュメント1、ドキュメント2、クエリ)のバイナリ分類子を学習します。これは、ドキュメント1がドキュメント2よりもクエリに関連しているかどうかを示します。たとえば、ユーザーがランキングのドキュメント4に関連性があるとラベル付けすると、次の6つのサンプルから学習できます。

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

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

(これらはすべて単なる提案であり、これを試したことはありません。たまたま、ランク付けの学習を調査する研究グループで働いたことがあります。スライドが役立つ場合があります。)


+1ありがとう。あなたが私を助けたのはこれが二度目です!これを消化するのに数時間かかります。:)
伝説

4
それは素晴らしい答えです。ちょっとした微調整を提案したいと思います。UXの観点からは、「関連性のある」ボタンよりも「関連性のない」ボタンを使用することで、ユーザーに結果を記録させる可能性が高くなります。探しているものが見つかったら、だれが結果を得るために固執しますか?彼らが望んでいるものを見つけられなかったとき、彼らは「不平を言う機会」のように見えるボタンを押す可能性がはるかに高くなります。
ラチェット

4
tl; dr 1つの入力のみを使用する場合は、それを「無関係」にします。人々はイライラしているときにクリックする可能性が高くなります。
ラシェ

「リストワイズ」アプローチとは何でしょうか?また、無料で3つまたは6つの例を意味しましたか?(最後の3は最初の3の単なる繰り返しのようですか?)
最大
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.