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プラグインを取得するために必要な構成はこれですべてです。