子ドキュメントでのLTR
(The bot translated the original post https://lists.apache.org/thread/63v5dm8pnx5gowk3r7qvh06b7zobbnn1 into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
こんにちは、
LTR(学習によるランキング)で子ドキュメントのフィールドに対して特徴スコアを取得する方法はありますか?
複数の子ドキュメントが存在する可能性があることに注意してください。
子ドキュメントに対するクエリを使用した具体的な特徴の例が提供されると助かります。
ありがとうございます、
Roopa
こんにちは Roopa、
もう少し詳しく説明していただけますか?
子ドキュメントもドキュメントですので、クエリを実行し、ランク付けし、再ランク付けすることができます。
あなたが何をしようとしているのか教えてください。
ブロック結合関連のクエリパーサを使用していますか?
学習によるランキングと組み合わせたいのですか?
どのようにですか?
教えていただければお手伝いします!
よろしくお願いします。
Alessandro Benedetti
Apache Lucene/Solr コミッター
ディレクター, R&D ソフトウェアエンジニア, 検索コンサルタント
www.sease.io
こんにちは、Alessandro、
返答ありがとうございます。
私はSolr 6.6を使用しています。
基本的に、親ドキュメントと各親に対する複数の子ドキュメントがあります。
私は特徴量を作成し、親の属性(これは簡単です)および子の属性(これが例を探している部分)について特徴スコアを取得しようとしています。
その後、これらの特徴量(親と子の両方)を使用してLTRモデルに基づいてドキュメントを再ランク付けします。
親子構造とクエリの構築(ここでは子トランスフォーマーを使用しているのがわかります)およびサンプルの特徴量、現在のサンプル特徴スコアの出力を添付します。
<doc>
<str name="id">abc-1</str>
<str name="unique_id_s">feature-1281835650</str>
<str name="type">parent-docs</str>
<str name="title_s">Parent title1 text1</str>
<str name="summary_s">Parent summary1 text2</str>
<doc>
<str name="id">child-doc-12345</str>
<str name="unique_id_s">feature-1281835650</str>
<str name="type">child-docs</str>
<str name="child_doc_resource_id_s">9735</str>
<str name="child_doc_resource_desc_s">A sample child doc desc</str>
<date name="child_doc_dt">2021-09-01T00:00:00Z</date>
<arr name="child_doc_product_s_mult">
<str>productA</str>
<str>productB</str>
<str>productC</str>
</arr>
</doc>
<doc>
<str name="id">child-doc-56788</str>
<str name="unique_id_s">feature-1281835650</str>
<str name="type">child-docs</str>
<str name="child_doc_resource_id_s">3426</str>
<str name="child_doc_resource_desc_s">A sample child doc desc - 2</str>
<date name="child_doc_dt">2021-09-02T00:00:00Z</date>
<arr name="child_doc_product_s_mult">
<str>productD</str>
<str>productE</str>
<str>productF</str>
</arr>
</doc>
</doc>
クエリの構築:
親ドキュメント属性(タイトル、要約)の検索に基づいてドキュメントを取得します。
対応する子ドキュメントをレスポンスに取得し、対象の製品でフィルタリングし、表示目的のために1つに制限します。
モデルに基づいて再ランク付けし、親の属性と子の属性の両方について特徴スコアを取得します。
https://localhost:8983/testhandler?q=trying to test&rows=100&start=0&q.op=AND&timeAllowed=20000&fl=id,score,title_s,summary_s,[features store=testFeatureStore],[explain]&fl=childDocuments&fl=[child parentFilter='type:parent-docs' childFilter='((type:(child-docs)) AND ({!terms f=child_doc_product_s_mult}productA,productD))' limit=1]&sort=score desc&fq=(type:(parent-docs))&defType=edismax&df=title_qf_default&q.alt=:&pf=title_qf_default^2.0 title_qf_synonym^2.0&qf=title_qf_default^2.0 summary_qf_default^1.0&sow=false&lowercaseOperators=false&tie=0.0&rq={!ltr model=testModel reRankDocs=100 efi.uq=$q}
ここで、uq(ユーザークエリ)と一致するtitle_sの特徴量を作成しようとしています。これは親の属性については正常に動作します。
サンプルの特徴量:
{
"name": "feature_title_match",
"class": "org.apache.solr.ltr.feature.SolrFeature",
"params": {
"q": "{!dismax qf=title_qf_default}${uq:none}"
},
"store": "testFeatureStore"
}
同様に、uq(ユーザークエリ)と一致するchild_doc_resource_desc_sの特徴量および子ドキュメントの属性に関するいくつかの特徴量を作成する必要があります。
現在、親の属性については期待通りにスコアを取得しています。
しかし、子ドキュメントの属性に関する特徴量を記述し、それらの特徴スコアを取得する方法を探しています:
現在のサンプル出力:
<str name="[features]">originalScore=61.886406,feature_title_match=8.004536,feature_summary_match=3.340,feature_title_synonym_expansion=15.471601</str>
同様に、ユーザークエリとchild_doc_resource_desc_s属性が一致する特徴量: feature_child_doc_resource_descを構築し、その特徴スコアを取得したいと考えています:
このような出力が必要ですか?それとも子ごとのドキュメントごとに特徴スコアが表示されるのか、よくわかりませんが:
<str name="[features]">originalScore=61.886406,feature_title_match=8.004536,feature_summary_match=3.340,feature_title_synonym_expansion=15.471601,feature_child_doc_resource_desc=value1</str>
ありがとうございます!
Roopa
こんにちは、Roopa、
今の説明でより明確になりました、ありがとうございます。
親の特徴ベクトルを計算する際に、子から特徴を抽出するサポートはないと思います。
しかし、これは興味深い機能です。
私はそのような機能を設計して実装することをぜひ行いたいです。
もしご自身でそれを行いたい場合は、現在サポートされている特徴の実装
(/solr/contrib/ltr/src/java/org/apache/solr/ltr/feature)を参考にすることをお勧めします。
よろしくお願いします
Alessandro Benedetti
Apache Lucene/Solr コミッター
ディレクター, R&D ソフトウェアエンジニア, 検索コンサルタント
www.sease.io
こんにちは、Alessandro、
ご回答とこの件に関するご興味に感謝します。
今後のSolrリリースでこれが導入される可能性についてご存知ですか?
ありがとうございます。
Roopa
こんにちは、Roopa、
私の知る限りでは、現在この機能に取り組んでいる人はいないですし、これがコミッターの優先事項のリストにも載っていません。
まず最初のステップとして、SOLRのJiraに「改善」Jira課題を作成することです(https://issues.apache.org/jira/browse/SOLR-15407)。
その後、次の3つのオプションがあります:
1) 自分でそれを行い、コミュニティに貢献する
2) コミッターが興味を持ち、自分の時間でその課題に取り組むのを待つ
3) 会社やソフトウェアエンジニア、コミッターを雇ってその仕事を依頼し、コミュニティや自社のプラグインとして貢献する
よろしくお願いします
Alessandro Benedetti
Apache Lucene/Solr コミッター
ディレクター, R&D ソフトウェアエンジニア, 検索コンサルタント
www.sease.io
トピックへ返信するには、ログインが必要です。