Documentation

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を無効にする

Learning to Rankは、ソートウィジェットでは機能しません。

LES Learning to Rankがデプロイされているが、(おそらくはソートウィジェットを使用するために)特定の検索ページで無効にする必要がある場合、

  1. 低レベル検索オプションウィジェットを検索ページに追加します。

  2. クリックしてウィジェットの設定画面を開きます

このページでは、低レベル検索オプションを設定します。

  1. [除外する貢献者]フィールドに、次のように入力します

    com.liferay.portal.search.learning.to.rank

これで、ページの検索バーに入力されたクエリに対し、Learning to Rankの再スコアリングプロセスがスキップされます。 その結果は並べ替え可能で、デフォルトの関連性アルゴリズムを使用して返されます。

前提条件

Learning to Rankを使用して、Elasticsearchに送信されたLiferayクエリを再スコアリングするには、いくつかの前提条件があります。

技術概要

通常の検索では、ユーザーはLiferay DXPの検索バーを介して検索エンジンにクエリを送信します。 返される結果の順序は、検索エンジンの 関連性スコアリングアルゴリズム によって決定されます。

ここで、Learning to Rankが介入し、そのプロセスが変わります。

  1. ユーザーが検索バーにクエリを入力します。

  2. LiferayはクエリをElasticsearchに送信し、検索エンジンの関連性アルゴリズムを使用して、通常どおり最初の1000件の結果を取得します。

  3. 上位1000件の結果は検索ヒットとして返されませんが、Elasticsearchはそれらの結果を使用して、 再スコアリング機能 を介して 再スコアリング を行います。

  4. 結果は、再スコアリングに使用するキーワードとトレーニング済みモデルを含む SLTRクエリ によって再スコアリングされます。

  5. トレーニング済みのモデルが結果を再ランク付けすると、Liferayの検索結果に新しい順序で返されます。

これは上に挙げたソート済みリストの中の小さな点にすぎませんが、このパラダイムでの作業の多くは、トレーニングされたモデルを作成して磨きをかけることです。 それは本セクションの範囲外ですが、Liferayのクエリで機械学習の魅力を調和させるために、すべての要素を適切に整えるのに役立つ情報を以下に示します。 以下は、 モデルのトレーニング を構成する内容の概要です。

モデルトレーニング

優れた判断リストと優れた機能セットがLearning to Rankアルゴリズムに供給されると、有用なトレーニング済みモデルが生成されます(これはパズルの機械学習の部分です)。 したがって、以下のものを組み立てる必要があります。

  • トレーニングモデルの作成に使用するLearning to Rankアルゴリズム。 このデモンストレーションでは、 RankLib を使用します。

  • 検索結果の等級付けされたリストを含む 判断リスト 。 アルゴリズムは、判断リストの順序に従ったモデルを生成します。

  • Learning to Rankアルゴリズムに渡すすべての 機能 を含む機能セット。判断リストと組み合わせて使用し、信頼できるモデルを作成します。 この例では、Liferayの機能セットの例を示します。

判断リスト は、等級付けされた検索結果のリストです。

機能 は、アルゴリズムが結果をよりスマートな方法でスコアリングできる関数を作成するために使用する変数です。 関連する機能を十分に、あるいは正しく与えなければ、モデルは結果を改善するのに十分な「賢さ」を持ちません。

始める前に、Liferayと通信するリモート Elasticsearch クラスターが必要です。 詳細は、 検索エンジンの互換性マトリックス を参照してください。

ちなみに

Suggestions を使用して、最も一般的なクエリを発見します(これはLearning to Rankモデルを作成するクエリを決定する一つの方法となりえます)。

ステップ1:ElasticsearchにLearning to Rankプラグインをインストールする

Learning to Rankプラグインのインストールについては、 Elasticsearch Learning to Rankプラグインのドキュメント を参照してください。

インストールするプラグインのバージョンに応じて、次のようなコマンドを実行します。

./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 Securityを使用している場合は、 追加の手順が必要になる場合があります。

ステップ2:モデルのトレーニングとアップロード

モデルのトレーニングに関する詳細な手順は、このガイドの範囲外です。 トレーニングには、適切なツールとモデルを推奨できるデータサイエンティストの介入が必要です。 自分に合ったものを使用してください。 そうすることで、選択したトレーニングツールで使用できる 判断リスト機能セット をコンパイルして、ほぼ確実に適切な検索結果を生成するモデルを生成できます。 モデルを作成したら、それをLearning to Rankプラグインにアップロードします。

ステップ3:モデルをLearning to Rankプラグインにアップロードする

POSTリクエストを使用してモデルをアップロードしますが、最初に_ltrインデックスと機能セットがLearning to Rankプラグインにアップロードされていることを確認する必要があります。 (LESモニタリングウィジェットから)Kibanaを使用して、これらのタスクを簡単にします。

  1. _ltrインデックスがまだない場合は、作成してください。

    PUT _ltr
    
  2. _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}}"
              }
            }
          }
        ]
      }
    }
    

    ここで使われている構文は必須ですので、注意してください。

  3. トレーニング済みモデルを機能セットに追加します。

    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でLearning to Rankを有効にします。

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