Elastic Rerank
Elastic Stack Serverless
Elastic Rerank 是 Elastic 训练的先进的跨编码器重排序模型,它可以帮助您通过一些简单的 API 调用来提高搜索相关性。Elastic Rerank 是 Elastic 的第一个语义重排序模型,并且可以在支持的 Elastic 部署中使用 Elasticsearch Inference API 开箱即用。
使用 Elastic Rerank 来改进现有的搜索应用程序,包括
- 传统 BM25 评分
- 混合语义搜索
- 检索增强生成 (RAG)
该模型可以通过基于对查询和文档的更深入语义理解来重新排序结果,从而显着提高搜索结果的质量。
在重新排序 BM25 结果时,它在各种检索任务的基准测试中提供了平均 40% 的排名质量提升——与比它大 11 倍的模型的性能相匹配。
此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。
自 2024 年 11 月 25 日起,Elastic Rerank 在 Elasticsearch Serverless 项目中可用。
Elastic Rerank 在 Elastic Stack 版本 8.17+ 中可用
要使用 Elastic Rerank,您必须具有适当的订阅级别或激活试用期。
一个 4GB 的 ML 节点
重要提示将 Elastic Rerank 模型与 ELSER(或其他托管模型)结合部署至少需要一个 8GB 的 ML 节点。当前试用 ML 节点的最大大小为 4GB(默认为 1GB)。
要下载和部署 Elastic Rerank,请使用 创建推理 API 来创建一个 Elasticsearch 服务 rerank
端点。
请参考此 Python notebook 以获取使用 Elastic Rerank 的端到端示例。
- 在 Kibana 中,导航到开发者控制台。
- 通过运行以下命令,使用 Elastic Rerank 服务创建一个推理端点
PUT _inference/rerank/my-rerank-model
{
"service": "elasticsearch",
"service_settings": {
"adaptive_allocations": {
"enabled": true,
"min_number_of_allocations": 1,
"max_number_of_allocations": 10
},
"num_threads": 1,
"model_id": ".rerank-v1"
}
}
API 请求会自动下载和部署模型。此示例使用通过自适应分配的自动缩放。
使用 Kibana 控制台时,您可能会在响应中看到 502 错误网关错误。此错误通常只反映超时,而模型在后台下载。您可以在机器学习 UI 中查看下载进度。如果使用 Python 客户端,您可以将 timeout
参数设置为更高的值。
创建 Elastic Rerank 推理端点后,它就可以与 text_similarity_reranker
检索器一起使用了。
如果您想在受限或封闭的网络中部署 Elastic Rerank 模型,您有两个选择
- 使用模型构件创建您自己的 HTTP/HTTPS 端点
- 将模型构件放入所有符合主节点条件的节点上的 config 目录中的一个目录中。
对于跨平台版本,您需要在系统中提供以下文件
https://ml-models.elastic.co/rerank-v1.metadata.json
https://ml-models.elastic.co/rerank-v1.pt
https://ml-models.elastic.co/rerank-v1.vocab.json
信息:如果您使用现有的 HTTP 服务器,请注意模型下载器仅支持无密码 HTTP 服务器。
您可以使用任何 HTTP 服务来部署该模型。此示例使用官方 Nginx Docker 镜像来设置新的 HTTP 下载服务。
下载模型构件文件。
将文件放入您选择的子目录中。
运行以下命令
export ELASTIC_ML_MODELS="/path/to/models" docker run --rm -d -p 8080:80 --name ml-models -v ${ELASTIC_ML_MODELS}:/usr/share/nginx/html nginx
不要忘记将
/path/to/models
更改为模型构件文件所在的子目录的路径。这些命令启动一个本地 Docker 镜像,其中包含一个带有包含模型文件的子目录的 Nginx 服务器。由于必须下载和构建 Docker 镜像,因此第一次启动可能需要更长的时间。后续运行启动速度更快。
通过在浏览器中访问以下 URL 来验证 Nginx 是否正常运行
http://{IP_ADDRESS_OR_HOSTNAME}:8080/rerank-v1.metadata.json
如果 Nginx 运行正常,您将看到模型的元数据文件的内容。
通过将以下行添加到
config/elasticsearch.yml
文件中,将您的 Elasticsearch 部署指向 HTTP 服务器上的模型构件xpack.ml.model_repository: http://{IP_ADDRESS_OR_HOSTNAME}:8080
如果您使用自己的 HTTP 或 HTTPS 服务器,请相应地更改地址。指定协议(“http://”或“https://”)很重要。确保所有符合主节点条件的节点都可以访问您指定的服务器。
在所有符合主节点条件的节点上重复步骤 5。
重启 符合主节点条件的节点,一次一个。
按照这些步骤创建一个推理端点来部署模型。
HTTP 服务器仅用于下载模型。下载完成后,您可以停止并删除该服务。您可以通过运行以下命令来停止本示例中使用的 Docker 镜像
docker stop ml-models
对于基于文件的访问,请按照以下步骤操作
下载模型构件文件。
将文件放入 Elasticsearch 部署的
config
目录中的models
子目录中。通过将以下行添加到
config/elasticsearch.yml
文件中,将您的 Elasticsearch 部署指向模型目录xpack.ml.model_repository: file://${path.home}/config/models/
在所有符合主节点条件的节点上重复步骤 2 和步骤 3。
重启 符合主节点条件的节点,一次一个。
按照这些步骤创建一个推理端点来部署模型。
仅限英语
最大上下文窗口为 512 个 token
当使用
semantic_text
字段类型时,文本被分成块。默认情况下,每个块包含 250 个单词(大约 400 个 token)。增加块大小时要小心 - 如果您的查询和块文本的组合长度超过 512 个 token,则模型将无法访问完整的内容。当组合输入超过 512 个 token 限制时,将使用平衡截断策略。如果查询和输入文本都长于 255 个 token,则都会被截断,否则截断最长的那个。
重要的是要注意,如果您将重排到深度 n
,那么您需要为每个查询运行 n
次推理。这将包括文档文本,因此将比查询嵌入的推理昂贵得多。硬件可以扩展以并行运行这些推理,但我们建议对 CPU 推理进行浅层重排:不超过前 30 个结果。您可能会发现,对于高查询率和低查询延迟要求,预览版的成本过高。我们计划解决 GA 的性能问题。
- 专为英语内容打造
- 相对较小:184M 参数(86M 主干 + 98M 嵌入层)
- 与十亿参数重排模型的性能相匹配
- 直接构建到 Elasticsearch 中 - 无需外部服务或依赖项
Elastic Rerank 基于 DeBERTa v3 语言模型架构构建。
该模型采用了几个关键的架构特征,使其特别适用于重排
解耦注意力机制使模型能够
- 分别处理单词内容和位置
- 了解查询和文档文本之间更细微的关系
- 更好地理解单词位置和关系在语义上的重要性
ELECTRA 风格的预训练使用
- 一种类似于 GAN 的 token 预测方法
- 同时训练 token 生成和检测
- 与传统的掩码语言建模相比,提高了参数效率
以下是 Elastic Rerank 模型训练过程的概述
初始相关性提取
- 微调预训练的 DeBERTa [CLS] token 表示
- 使用 GeLU 激活和 dropout 层
- 保留重要的预训练知识,同时适应重排任务
通过蒸馏训练
- 使用双编码器和交叉编码器模型的集成作为教师。
- 双编码器提供细致的负样本评估。
- 交叉编码器有助于区分正样本和负样本。
- 结合两种模型类型的优势。
训练数据包括:
- 开放域问答数据集
- 自然文档对(如文章标题和摘要)
- 180,000个具有不同相关性的合成查询-段落对
- 总共约300万个查询
数据准备过程包括:
- 基本清洗和模糊去重
- 用于不同主题的多阶段提示(仅在训练数据的合成部分上)
- 多样化的查询类型
- 关键词搜索
- 精确短语匹配
- 短的和长的自然语言问题
该模型使用高级采样策略以确保高质量的排名。
- 使用多种检索方法从每个查询的前128个文档中采样。
- 每个查询使用五个负样本 - 多于典型方法。
- 应用由文档分数塑造的概率分布进行采样。
- 深度采样的好处:
- 提高模型在不同检索深度上的鲁棒性。
- 增强分数校准。
- 提供更好的文档多样性处理。
训练过程包含几个关键优化:
使用交叉熵损失函数来
- 将相关性建模为概率分布
- 学习所有文档分数之间的关系
- 通过最大似然估计拟合分数
沿着优化轨迹实施参数平均。
- 无需传统的学习率调度,并提高最终模型质量。
Elastic Rerank 在各种检索任务中显示出搜索质量的显着提升。
- 在对 BM25 结果进行重排序时,排名质量平均提高 40%。
- 1.84亿参数模型匹配 20 亿参数替代方案的性能。
- 使用 BEIR 基准测试套件在 21 个不同的数据集上进行评估。
- Natural Questions: 提高 90%。
- MS MARCO: 提高 85%。
- Climate-FEVER: 提高 80%。
- FiQA-2018: 提高 76%。
有关详细的基准测试信息,包括完整的数据集结果和方法,请参阅Elastic Rerank博客介绍。
文档:
博客:
Python 笔记本: