什么是 Elasticsearch 相关性引擎 (ESRE)?

编辑

什么是 Elasticsearch 相关性引擎 (ESRE)?

编辑

软件开发人员越来越多地使用机器学习模型来提高呈现给用户的数据的相关性。对于使用自然语言界面的应用程序来说尤其如此,例如:搜索、问答、补全和聊天。

Elasticsearch 相关性引擎 (ESRE)是 Elastic 提供的一系列工具,它结合了机器学习模型、数据转换和存储(包括向量)以及数据搜索和检索。ESRE 还包括用于数据安全和与其他软件(包括各种数据源和大型语言模型 (LLM))集成的工具。

继续阅读以了解 ESRE 的组件,或直接跳转到 示例 以查看示例应用程序和实现。

机器学习模型

编辑

机器学习模型使您的应用程序能够理解自然语言数据,并在索引时和查询时丰富或转换该数据。

机器学习模型的用途包括

  • 生成向量嵌入
  • 从非结构化文本中提取信息,例如命名实体或问题的答案
  • 对文本进行分类,例如其语言或情感(正面或负面)

要执行这些操作,您必须部署一个或多个训练好的模型。

Elastic 提供了以下相关功能

  • 用于通用语义搜索的 Elastic 稀疏编码器训练模型,无需微调
  • 用于部署和管理第三方训练模型以进行向量搜索和自然语言处理的接口
  • 用于部署这些模型的云基础设施

Elastic 稀疏编码器模型

编辑

Elastic 稀疏编码器模型是由 Elastic 构建和训练的机器学习模型,它支持对英语数据进行通用语义搜索。

在索引时,Elastic 稀疏编码器模型会使用加权标记来捕获单词及其含义之间的关系,从而使用附加的文本扩展字段来丰富每个文档。在查询时,当使用文本扩展查询时,稀疏编码器模型会对用户的查询文本应用相同的转换。结果是语义搜索:相关性基于含义和意图,而不是对原始文档字段进行严格的关键字匹配。

Elastic 稀疏编码器模型是一种零样本域外机器学习模型,这意味着它不需要使用您自己的数据进行额外训练或微调。使用此 Elastic 模型开始语义搜索,而无需识别和管理其他模型。

部署模型,创建一个带有推理处理器的管道,并通过该管道摄取(或重新索引)您的数据。

文档

第三方模型管理

编辑

许多公共和私有的训练模型可用于丰富您的数据,每个模型都解决不同的问题。例如,Hugging Face 列出了数千个可用的模型。

要将第三方模型与 Elastic 一起使用,您必须导入和部署该模型,然后创建一个带有推理处理器的摄取管道以执行数据转换。

Elastic 提供了以下接口来管理您正在使用的训练模型

  • Kibana UI,位于 机器学习 > 模型管理 > 训练模型
  • Elasticsearch API,分组在 /_ml/trained_models/
  • 用 Python 实现的 Eland 语言客户端

文档:部署训练模型

Elastic Cloud ML 实例

编辑

Elastic Cloud 包括用于部署和运行训练模型的的基础设施。创建 Elastic Cloud 部署时,启用机器学习实例,并可选择启用自动缩放

文档:设置机器学习功能

数据存储

编辑

Elastic 提供了存储各种类型数据的能力,包括非结构化文本和密集向量(嵌入)。使用 Elastic 在机器学习模型转换之前和之后存储您的数据。

索引

编辑

Elastic 将数据作为文档(带有字段)存储在索引中,并支持多种字段类型,包括密集向量。映射是定义如何存储和索引文档及其包含的字段的过程。

使用索引和文档 API 或 Kibana 开发工具控制台手动管理数据。一些摄取工具(例如 Web 爬虫和连接器)会代表您管理索引和文档。

使用重新索引 API 重新索引已存储在 Elasticsearch 中的数据,例如,将数据通过机器学习摄取管道运行。

文档

向量字段类型

编辑

要存储用于向量搜索的密集向量,请使用密集向量字段类型。在查询时,使用 kNN 查询来检索此信息。

要存储用于文本扩展的稀疏向量(例如,使用Elastic 稀疏编码器模型时),请使用稀疏向量字段类型。在查询时,使用 文本扩展查询来检索此信息。

文档

数据转换

编辑

Elastic 提供了转换数据的工具,无论数据如何存储(在 Elastic 内部或外部)。

摄取管道是通用的转换工具,而推理处理器则支持在这些管道中使用机器学习模型。

在部署机器学习模型后,使用这些摄取工具在索引或重新索引文档时将 ML 转换应用于您的数据。提取文本、分类文档或创建嵌入并将这些数据存储在其他字段中。

摄取管道

编辑

摄取管道使您能够将传入的数据“管道化”通过一系列处理器,这些处理器会在存储之前转换数据。使用摄取管道来使用其他字段丰富文档,包括由机器学习模型生成的字段。使用推理处理器在您的管道中采用训练好的模型。

文档:摄取管道

推理处理器

编辑

推理处理器是一种管道任务,它使用已部署的训练模型在索引或重新索引期间转换传入的数据。

文档:推理处理器

搜索和检索

编辑

在使用机器学习模型使用其他字段或嵌入丰富文档后,从各种利用此附加数据的检索方法中进行选择。

使用 Elastic 通过密集向量 (kNN) 或稀疏向量(Elastic 稀疏编码器)进行语义搜索,并将这些结果与 BM25 文本搜索的结果结合起来,可以选择在其他 NLP 字段上进行提升。

通过相同的 API 端点执行任何这些检索方法:_search

文本 (BM25 + NLP)

编辑

使用全文查询搜索由机器学习模型丰富的文档。

Elasticsearch 提供了一种特定于领域的语言 (DSL) 来描述全文搜索查询。使用此查询 DSL 来设计全文查询,以定位文档的各种字段。

根据您的用例,使用您通过自然语言处理添加的其他字段来提高结果的相关性。

使用带有 query 请求正文参数的 _search API,以使用 Elasticsearch 的查询 DSL 指定搜索查询。例如,match 查询是执行全文搜索的标准查询,包括模糊匹配的选项。

文档

使用文本扩展的稀疏向量搜索(稀疏编码器)

编辑

使用稀疏向量查询对由Elastic 稀疏编码器模型丰富的文档执行语义搜索。

在索引时,Elastic 稀疏编码器模型使用扩展的加权标记通过文本扩展来丰富每个文档,以捕获单词及其含义之间的关系。在查询时,稀疏向量查询使用稀疏编码器模型对用户的查询文本应用相同的转换。结果是语义搜索:相关性基于含义和意图,而不是对原始文档字段进行严格的关键字匹配。

使用带有 queryquery.sparse_vector 请求正文参数的 _search API,以使用稀疏编码器模型查询稀疏向量字段。

文档

向量 (kNN)

编辑

使用 k 最近邻 (kNN) 搜索来检索包含索引向量的文档,例如通过推理处理器添加的文档。

这种类型的搜索会查找与查询向量最接近的 k 个向量,通过相似性度量来衡量。您将收到与查询在含义上最接近的前 n 个文档,并按其与查询的接近程度排序。

使用带有 knn 请求正文参数的 _search API 来指定要运行的 kNN 查询。

文档

混合 (RRF)

编辑

Elasticsearch 允许您在单个搜索请求中组合上述任何检索方法。

倒数排序融合(RRF)是一种将多个具有不同相关性指标的结果集组合成单个结果集的方法。RRF无需调整,并且不同的相关性指标不必彼此相关即可获得高质量的结果。

使用带有 retriever 请求体参数、rrf 检索器以及 standardknn 检索器的任意组合的 _search API。您可以使用多个 standardknn 检索器以及一个 rrf 检索器来指定多个查询。

(作为RRF的替代方案,可以使用带有 queryknn 请求体参数(不带 retrievers)的 _search API 来组合向量和文本搜索。使用 boost 参数来管理每种查询类型的权重。这被称为线性组合。)

文档

安全性和数据隐私

编辑

无论是实施内部知识库还是与外部 LLM 服务集成,您都可能担心私有应用程序数据的隐私和访问权限。

使用 Elastic 的安全功能来管理哪些人员和系统可以访问。

使用基于角色的访问控制,或依赖文档或字段级安全性来实现更精细的控制。

基于角色的访问控制 (RBAC)

编辑

基于角色的访问控制使您可以通过向角色分配权限并将角色分配给用户或组来授权用户。

您可以使用内置角色,或使用 _security API 定义自己的角色。

文档

文档和字段级安全性

编辑

文档级安全性限制用户具有读取访问权限的文档,而字段级安全性限制用户具有读取访问权限的字段。特别是,这些解决方案限制了可以从基于文档的读取 API 访问哪些文档或字段。

使用 Elasticsearch _security API 实现文档和字段级安全性。

文档

应用程序开发工具

编辑

Elastic 还提供了各种用于通用应用程序开发和集成的工具。

从各种来源摄取数据,使用您喜欢的编程语言构建搜索体验,避免查询注入攻击,以及发送和查看与用户行为相关的分析。

还可以使用这些工具与第三方服务集成,包括 LangChain 和 OpenAI 或其他大型语言模型 (LLM)。

摄取工具

编辑

使用 Elastic 摄取工具来索引和同步来自各种来源的数据,包括应用程序、数据库、网页和内容服务。

文档

或者使用 Elasticsearch 的索引和文档 API 实现您自己的集成。

文档

语言客户端

编辑

语言客户端以库的形式提供各种编程语言的 Elasticsearch API。

将相关的库添加到您的应用程序中,以使用您喜欢的编程语言构建自定义集成。

文档:Elasticsearch 客户端

搜索 UI

编辑

Elastic Search UI 为 React 应用程序提供状态管理和组件。使用 Search UI 可以快速原型化搜索体验或构建生产质量的 UI。

Search UI 依赖于各种“连接器”库来与 Elasticsearch 和其他搜索引擎进行交互。使用 Elasticsearch 连接器可最大限度地兼容 Elasticsearch 查询,包括语义搜索和向量搜索。

文档

行为分析

编辑

行为分析是一个用于分析用户行为的通用分析平台。将事件数据(例如搜索查询和点击)发送到 Elasticsearch。

使用默认仪表板来分析这些事件,或创建您自己的可视化效果。使用此分析来提高您的搜索相关性和其他应用程序功能。

文档:行为分析

搜索应用程序

编辑

搜索应用程序是一个 Elasticsearch 端点,对应于一个或多个索引,并将查询限制为预定义的模板。

将搜索应用程序与不受信任的客户端(如 Web 应用程序)一起使用,在这种情况下,您可能会受到查询注入攻击或其他滥用。

文档:搜索应用程序