Streaming式をLTR(Learning to Rank)の機能として使用する

トピック作成者:ks-solruserml-bot (2024/08/15 10:44 投稿)
4
CloseClose

(The bot translated the original post https://lists.apache.org/thread/8mbjx3b63m7q72fpb8qxgpfjllt48ork into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは Solr ユーザーの皆さん、

LTR(Learning to Rank)Solr機能は、Streaming 式をサポートしていますか?Streaming 式はベクトル数学をサポートしており、ドキュメントフィールドからベクトルを取得し、クエリパラメータから別のベクトルを取得してコサインやドット積を計算するSolr機能としてStream APIのベクトル数学を構成しようとしています。

例えば、以下のようなLTR機能定義をサポートしていますか?LTR Solr機能はStreaming APIリクエストの解析と、その標準的なSolr応答とは異なるユニークな応答をサポートしていますか?

{
  "name": "vector_sim_score",
  "class": "org.apache.solr.ltr.feature.SolrFeature",
  "params": {
    "q": "expr=dotProduct(search(collection_name,q=\"id:$uniq_id\",fl=\"doc_vector\",sort=\"from asc\", qt=\"/export\"), ${query_vector})"
  },
  "store": "v1_feature_store"
}
返信投稿者:ks-solruserml-bot (2024/08/15 10:45 投稿)

式を検証してみましたが、うまくいきません。ベクトル数学は値の配列を読み取ることをサポートしているので、以下のような式を試してみました。

dotProduct(array(search(v9, q="id:1", fl="numeric_field_dfd", sort="numeric_field_dfd asc", qt="/export")), array(2))

ここで numeric_field_dfd は単一値のダイナミックフィールドのダブルタイプです。配列に変換されることを期待して、最初にマルチバリュードダブルタイプを試しましたがうまくいかなかったため、単一値から始めました。

しかし、式の出力は例外になってしまいます。

画像が表示されていますが、値はnullではないことが確認できます。したがって、表現の構文に誤りがあるのでしょうか。何か提案はありますか?

返信投稿者:ks-solruserml-bot (2024/08/15 10:45 投稿)

こんにちは、

Apache Solr Learning To Rankにベクトル類似性機能を追加するための貢献に取り組んでいます。
現在、関連する関数クエリのLuceneへの貢献から始めており、もうすぐマージされる予定です。
その後、Solrの部分を進める予定です。

あなたが試していることはテストされておらず、動作する可能性もありますが、専用の設計がないため、かなり手間がかかり高価になるかもしれません。
ちなみに、メールリストには画像が表示されていません。

よろしくお願いします。

Alessandro Benedetti
ディレクター @ Sease Ltd.
Apache Lucene/Solr コミッター
Apache Solr PMC メンバー

返信投稿者:ks-solruserml-bot (2024/08/15 10:45 投稿)

配列関数はここで使用されている方法では動作しません。配列に関するドキュメントはこちらです:

https://solr.apache.org/guide/solr/latest/query-guide/vector-math.html#arrays

複数値フィールドを使用すると、次のような操作が可能です。ここで、test_fs は複数値の float フィールドです。select 関数は配列を自動的に評価するので、ストリーミングコンテキスト内で数学的な式で操作することができます。

select(search(jdata, fl=test_fs),
dotProduct(test_fs, test_fs) as p)

これにより、次のような結果が得られます:

{
  "result-set": {
    "docs": [
      {"p": 1.9350813535659377},
      {"p": 2.2449532856850816},
      {"p": 1.7212359783803421},
      {"p": 2.761290822044021}
    ]
  }
}

Joel Bernstein
http://joelsolr.blogspot.com/

返信投稿者:ks-solruserml-bot (2024/08/15 10:45 投稿)

select 関数のドキュメントはこちらで確認できます:

https://solr.apache.org/guide/solr/latest/query-guide/transform.html

Joel Bernstein
http://joelsolr.blogspot.com/

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?