Learning to Rank
Liferay Enterprise Search(LES)サブスクライバー
Elasticsearchのような検索エンジンには、一般的な検索目的に適した、適切に調整された関連性アルゴリズムがあります。
LES Learning to Rankは、機械学習を利用して検索結果のランキングを向上させます。 データサイエンティストの専門知識と機械学習を組み合わせて、検索クエリに適用されるよりスマートなスコアリング関数を生成します。
LES Learning to Rankには、Liferay Enterprise Searchのサブスクリプションが必要です。 Elasticsearch Learning to Rank プラグイン は Elastic によって作成されたものではなく、Liferay でサポートされているすべての Elasticsearch バージョン用のプラグインが事前に構築されているわけではないことを理解することが重要です。 詳細については、 LES 互換性マトリックスを参照してください。
検索ページでのLearning to Rankを無効にする
ランク付けの学習は、 ソート ウィジェットでは機能しません。
LES Learning to Rankがデプロイされているが、(おそらくはソートウィジェットを使用するために)特定の検索ページで無効にする必要がある場合、
-
検索ページに 低レベル検索オプション ウィジェットを追加します。
-
クリックしてウィジェットの設定画面を開きます
このページでは、低レベル検索オプションを設定します。
-
[除外する貢献者]フィールドに、次のように入力します
com.liferay.portal.search.learning.to.rank
これで、ページの検索バーに入力されたクエリに対し、Learning to Rankの再スコアリングプロセスがスキップされます。 その結果は並べ替え可能で、デフォルトの関連性アルゴリズムを使用して返されます。
前提条件
Learning to Rankを使用して、Elasticsearchに送信されたLiferayクエリを再スコアリングするには、いくつかの前提条件があります。
-
Learning to Rank には Liferay Enterprise Search (LES) サブスクリプションが必要です。 サブスクリプションを取得したら、 Liferay Enterprise Search Learning to Rank LPKG ファイルをダウンロードし、 インストールします。
注Liferay DXP 7.4より、Liferay Enterprise Search (LES)アプリケーションは、すべてのLiferay DXPバンドルとDockerコンテナに含まれています。 詳細については、 LES のアクティブ化 を参照してください。
-
データがインデックス化されているリモートのElasticsearchサーバー。
-
Elasticsearch にインストールされた Elasticsearch Learning to Rank プラグインの対応するバージョン。
-
トレーニング済みモデル が Learning to Rank プラグインにアップロードされました。
技術概要
通常の検索では、ユーザーは Liferay DXP の 検索バーを介して検索エンジンにクエリを送信します。 返される結果の順序は、検索エンジンの 関連性スコアリング アルゴリズムによって決まります。
ここで、Learning to Rankが介入し、そのプロセスが変わります。
-
ユーザーが検索バーにクエリを入力します。
-
LiferayはクエリをElasticsearchに送信し、検索エンジンの関連性アルゴリズムを使用して、通常どおり最初の1000件の結果を取得します。
-
上位 1000 件の結果は検索ヒットとして返されませんが、Elasticsearch によって 再スコアリング に 再スコアリング機能を介して使用されます。
-
結果は SLTR クエリによって再スコアリングされます。これには、再スコアリングに使用するキーワードとトレーニング済みモデルが含まれます。
-
トレーニングされたモデルが結果を再ランク付けすると、Liferay の 検索結果 に新しい順序で返されます。
これは上に挙げたソート済みリストの中の小さな点にすぎませんが、このパラダイムでの作業の多くは、トレーニングされたモデルを作成して磨きをかけることです。 それは本セクションの範囲外ですが、Liferayのクエリで機械学習の魅力を調和させるために、すべての要素を適切に整えるのに役立つ情報を以下に示します。 以下は、モデルのトレーニングを構成する内容の概要です。
モデルトレーニング
優れた判断リストと優れた機能セットがLearning to Rankアルゴリズムに供給されると、有用なトレーニング済みモデルが生成されます(これはパズルの機械学習の部分です)。 したがって、以下のものを組み立てる必要があります。
-
トレーニングモデルの作成に使用するLearning to Rankアルゴリズム。 このデモでは RankLibを使用します。
-
検索結果の等級付けされたリストを含む判断リスト。 アルゴリズムは、判断リストの順序に従ったモデルを生成します。
-
Learning to Rankアルゴリズムに渡すすべての機能を含む機能セット。判断リストと組み合わせて使用し、信頼できるモデルを作成します。 この例では、Liferayの機能セットの例を示します。
判定リスト は、評価された検索結果のリストです。
特徴 は、よりスマートな方法で結果をスコア付けできる関数を作成するためにアルゴリズムが使用する変数です。 十分な—または正しい—関連する機能を指定しないと、モデルは改善された結果を提供できるほど「スマート」になりません。
始める前に、Liferay と通信するリモート Elasticsearch クラスターが必要です。 詳細については、 検索エンジン互換性マトリックスを参照してください。
提案 を使用して、最も一般的なクエリを見つけます (これは、Learning to Rank モデルを作成するクエリを決定する 1 つの方法です)。
ステップ1:ElasticsearchにLearning to Rankプラグインをインストールする
Learning to Rank プラグインのインストール方法については、 Elasticsearch Learning to Rank プラグインのドキュメント を参照してください。
Liferay DXP 7.2 を Elasticsearch 7.14+ で実行している場合、プラグインをインストールする前に、Liferay インストールに一致する JDK バージョン でコンパイルする必要があります 。 必要な手順と追加の背景情報については、 この記事 を参照してください。
インストールするプラグインのバージョンに応じて、次のようなコマンドを実行します。
./bin/elasticsearch-plugin install https://github.com/o19s/elasticsearch-learning-to-rank/releases/download/v1.5.7-es7.13.4/ltr-plugin-v1.5.7-es7.13.4.zip
Elasticsearch クラスターで X-Pack セキュリティを使用している場合は、 追加の手順が必要になる場合があります。
ステップ2:モデルのトレーニングとアップロード
モデルのトレーニングに関する詳細な手順は、このガイドの範囲外です。 トレーニングには、適切なツールとモデルを推奨できるデータサイエンティストの介入が必要です。 自分に合ったものを使用してください。 そうすることで、選択したトレーニング ツールで使用して適切な検索結果を生成するモデルを生成できる 判断リスト と 機能セット がほぼ確実にコンパイルされることになります。 モデルを作成したら、それをLearning to Rankプラグインにアップロードします。
ステップ3:モデルをLearning to Rankプラグインにアップロードする
POST リクエストを使用してモデルをアップロードしますが、最初に _ltr インデックスと機能セットが Learning to Rank プラグインにアップロードされていることを確認してください。 これらのタスクを簡単にするには、Kibana ( LES モニタリング ウィジェット経由) を使用します。
-
_ltrインデックスがまだない場合は、作成してください。PUT _ltr -
_ltrインデックスに機能セットを追加します。 この例では、セットはliferayと呼ばれています。POST _ltr/_featureset/liferay { "featureset": { "name": "liferay", "features": [ { "name": "title", "params": [ "keywords" ], "template": { "match": { "title_en_US": "{{keywords}}" } } }, { "name": "content", "params": [ "keywords" ], "template": { "match": { "content_en_US": "{{keywords}}" } } }, { "name": "asset tags", "params": [ "keywords" ], "template": { "match": { "assetTagNames": "{{keywords}}" } } } ] } }ここで使われている構文は必須ですので、注意してください。
-
トレーニング済みモデルを機能セットに追加します。
POST _ltr/_featureset/liferay/_createmodel { "model": { "name": "linearregression", "model": { "type": "model/ranklib", "definition": """ ## Linear Regression ## Lambda = 1.0E-10 0:-0.717621803830712 1:-0.717621803830712 2:-2.235841905601106 3:19.546816765721594 """ } } }
Liferay 自体では実行すべきことはあまりないので、これは高レベルの手順セットです。 必要なものについて詳しくは、 Learning to Rank プラグインのドキュメントを参照してください。
判定リストを作り直してください。
ステップ4:Learning to Rankを有効にする
[コントロールパネル] → [設定] → [システム設定] →[検索機能] → [Learning to Rank]からLearning to Rankを有効にします。 単純なオン/オフ構成と、検索クエリに適用するためにトレーニング済みのモデルの名前を入力する必要があるテキストフィールドがあります。
前のステップでモデルの名前はlinearregressionだったので、それを入力します。

トレーニング済みモデル、機能セット、Liferayからの検索クエリを使用してElasticsearch Learning to Rankプラグインを取得するために必要な構成はこれですべてです。