当前位置: 首页 > news >正文

在 Elasticsearch 中使用 LTR 参与检索

1. 为什么需要二阶段排序?

  • 首阶段:BM25 / Hybrid / 向量检索 —— 高召回、低成本
  • 二阶段:LTR 模型(XGBRanker/LambdaMART)—— 多特征、高精度

将 100~200 条首阶段候选再送入 LTR,可把点击率提升 10-30%(按行业经验)。

2. LTR 模型准备回顾

  1. Eland 配置 Feature Extractor → 导出训练集
  2. XGBoost 训练 rank:ndcg / rank:pairwise
  3. MLModel.import_ltr_model() 传入 ltr-model
  4. Inference 端点自动创建

模型 ID 下文统一写作 ltr-model

3. 方案 A:将 LTR 作为 rescorer

GET my-index/_search
{"query": {                      # 首阶段 BM25"multi_match": {"fields": ["title", "content"],"query":  "the quick brown fox"}},"rescore": {"learning_to_rank": {         # 二阶段 LTR"model_id": "ltr-model","params": {                 # 传递给模板 {{query_text}}"query_text": "the quick brown fox"}},"window_size": 100            # 必填:首阶段取前 100}
}
  • window_size ≥ from + size
  • _score 会被 LTR 预测分覆盖,返回结果按新分值排序。
  • params 与你在特征模板中定义的占位符一一对应。

4. 方案 B:将 LTR 作为 retriever(9.1+)

GET my-index/_search
{"retriever": {"rescorer": {"rescore": {                # 与方案 A 同"window_size": 100,"learning_to_rank": {"model_id": "ltr-model","params": { "query_text": "the quick brown fox" }}},"retrievers": [             # 这里定义首阶段“子检索器”{"standard": {"query": {            # 可换成 semantic / rrf 等"multi_match": {"fields": ["title", "content"],"query": "the quick brown fox"}}}}]}}
}
为什么需要 retriever 版本?
  • RRF稀疏/稠密向量 等新检索器组合时更加自然;
  • 能与 hybrid 查询声明统一;
  • 未来便于继续嵌套多级 rescoring。

5. 限制与注意事项

项目说明
window_size 必填LTR 分数与 BM25 不可比,需限制 rescoring 范围;建议 200 以内。
分页多页检索时保持 固定 window_size,只改变 from;否则页间结果可能抖动。
评分分布LTR 预测分通常 0-1,小于 BM25;如果未设置 rescore,可能被首阶段分数压制。

6. 实战建议

  1. 首阶段 K 值选型

    • 电商:k≈200 兼顾长尾
    • 内容 / 文档:k≈100 足够
  2. 特征调优

    • 点击率、转化率等行为特征要做分桶归一化
  3. 性能

    • 推理延迟 ≈ 0.4 ms / 文档 / 树深度 6
    • 可横向扩容 Inference node;或 CPU → GPU 推理
  4. 灰度发布

    • Search Template 参数化 model_id,AB proxy 按用户分流
    • 观察 nDCG / 点击率,确认提升再全量切换

总结

  • Rescorer 用法:最简单直接,在 8.12 即可使用;
  • Retriever 用法:9.1 新增,与 RRF/Hybrid 语法更统一;
  • 两者核心参数一致:model_idparamswindow_size

掌握以上 DSL,即可把离线训练好的 LTR 模型接入任何搜索服务,轻松实现 个性化、可学习的多特征排序。祝你的搜索相关性再上一个量级!

http://www.dtcms.com/a/312287.html

相关文章:

  • k8s+isulad 国产化技术栈云原生技术栈搭建3-master节点安装
  • 查找位置函数
  • 垃圾收集器G1ZGC详解
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 77-1(题目+回答)
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 76-1(题目+回答)
  • set和map使用
  • 技巧|SwanLab记录混淆矩阵攻略
  • express-jwt报错:Error: algorithms should be set
  • 【智能体cooragent】不同的单智能体调用的大模型的推理的输入与输出
  • 笔试——Day26
  • 【LLM】如何在Cursor中调用Dify工作流
  • Makefile 从入门到精通:自动化构建的艺术
  • 【Java基础知识 16】 数组详解
  • 微积分思想的严密性转变 | 极限、逼近与程序化
  • 计算机技术与软件专业技术资格(水平)考试简介
  • 【Pytorch✨】LSTM01 入门
  • 集成电路学习:什么是HAL硬件抽象层
  • 【设计模式】 3.设计模式基本原则
  • 对于考研数学的理解
  • 【攻防实战】记一次DOUBLETROUBLE攻防实战
  • build文件夹下面的主要配置文件
  • win10任务栏出问题了,原来是wincompressbar导致的
  • 扫雷游戏完整代码
  • RK3399 启动流程 --从复位到系统加载
  • Munge 安全认证和授权服务的工作原理,以及与 Slurm 的配合
  • 【python】转移本地安装的python包
  • vue3 新手学习入门
  • 【LeetCode 热题 100】(三)滑动窗口
  • 在线任意长度大整数计算器
  • 轻量级鼠标右键增强工具 MousePlus