Elasticsearch 开放式推理 API 为 Hugging Face 添加了原生分块支持

Elasticsearch 开放式推理 API 扩展了对 Hugging Face 模型的支持,并为 Hugging Face 用户带来了原生分块功能。

使用 Elasticsearch 开放式推理 API,您可以在 Elasticsearch 外部使用 Hugging Face 的 推理端点 执行推理。这使您可以使用 Hugging Face 的可扩展基础设施,包括在 GPU 和 AI 加速器上执行推理的能力。在 Elasticsearch 8.11 中,使用 Hugging Face 生成的嵌入的功能作为第一个开放式推理 API 集成引入,从那时起,我们一直在努力工作,并对其进行了更新,增加了更强大的功能,使您能够更轻松地获得更好的结果。

通过集成 semantic_text 字段,文档会被原生分块并与其嵌入一起存储。默认情况下,所有存储的嵌入都使用标量量化在 Elasticsearch 向量数据库中进行压缩。使用 retrievers 检索这些嵌入,可以在使用托管在 Hugging Face(或通过开放式推理 API 访问的任何其他服务)上的多个模型时启用搜索的可组合性,从而在一个文档中启用多种类型的嵌入。所有这些功能加起来可以节省开发人员的时间,因为他们不必编写自定义逻辑,并使他们能够更快地构建有趣的生成式 AI 应用!

消歧

这篇博文以两种不同的方式使用了“推理端点”一词

  1. Hugging Face 的 推理端点服务,以及
  2. Elasticsearch 的开放式推理 API 推理端点对象

Hugging Face 的推理端点服务提供运行 Hugging Face Transformers 模型的计算实例,而 Elasticsearch 推理端点对象存储 Elasticsearch 访问和使用 Hugging Face 推理端点服务的配置。

什么是 Elasticsearch 开放式推理 API?

开放式推理 API 是您在 Elasticsearch 中执行推理的网关。它允许您使用 Elasticsearch 外部的机器学习模型和服务,而无需编写任何杂乱的粘合代码。您只需提供 API 密钥并 创建推理端点对象。使用 Elasticsearch 开放式推理 API,您可以使用 completion 任务对大型语言模型执行推理,使用 text_embeddingsparse_embedding 任务生成密集或稀疏文本嵌入,或使用 rerank 任务对文档进行排序。

什么是 Hugging Face 推理端点服务?

Hugging Face 的 推理端点服务 允许您在云中部署和运行 Hugging Face Transformers 模型。查看 Hugging Face 的指南以创建您自己的端点 https://hugging-face.cn/docs/inference-endpoints/guides/create_endpoint

  • 确保将任务设置为与您要部署的模型和您将在 Elasticsearch 中映射的字段类型匹配。
  • 确保复制/记下端点 URL。
  • 创建一个用户访问令牌(也称为 API 密钥)以对您对端点的请求进行身份验证 https://hugging-face.cn/settings/tokens。为了提高安全性,请选择细粒度访问令牌,只向令牌授予所需的范围。
  • 确保安全地复制/记下 API 密钥(访问令牌)。

如何将 Hugging Face 推理端点与 Elasticsearch 开放式推理 API 配合使用

要将 Hugging Face 推理端点服务与开放式推理 API 配合使用,您需要遵循 3 个步骤

  1. 在 Hugging Face 中使用您要使用的模型创建一个推理端点服务
  2. 使用开放式推理 API 在 Elasticsearch 中创建一个推理端点对象,并提供您的 Hugging Face API 密钥
  3. 使用推理端点对象执行推理,或配置索引以使用语义文本自动嵌入您的文档。注意:您可以使用 cURL、任何其他 HTTP 客户端或 我们的其他客户端之一 执行这些相同的步骤。

步骤 1:在 Hugging Face 中创建一个推理端点服务

有关如何在 Hugging Face 中创建推理端点服务的更多信息,请参见 https://ui.endpoints.huggingface.co

步骤 2:在 Elasticsearch 中创建一个推理端点对象


client.inference.put(
    task_type="text_embedding",
    inference_id="my_hf_endpoint",
    body={
        "service": "hugging_face",
        "service_settings": {"api_key": <HF_API_KEY>,
                             "url": "<URL_TO_HUGGING_FACE_ENDPOINT>"
                            },
    }
)

注意:task_type 设置为 text_embdding(密集向量嵌入),因为我们部署到 Hugging Face 推理端点服务的模型是密集文本嵌入模型(multilingual-e5-small)。我们还在 Hugging Face 中创建端点时必须选择句子嵌入配置。

步骤 3:使用推理端点对象执行推理以访问您的 Hugging Face 推理端点服务

dense_embedding = client.inference.inference(
     inference_id='my_hf_endpoint',
     input="this is the raw text of my document!"
     )

步骤 4:将您的数据集摄取到具有语义文本的索引中

通过使用 semantic_text 字段,我们可以提高摄取速度,同时利用原生分块。为此,我们需要创建一个包含文本字段(我们将在此处插入原始文档文本)以及语义文本字段的索引,我们将文本复制到该字段。当我们通过将其插入 text_field 中将数据摄取到此索引时,数据将自动复制到语义文本字段,并且文档将被原生分块,使我们能够轻松地执行语义搜索。

client.indices.create(
   index="hf-semantic-text-index",
   mappings={
        "properties": {
            "infer_field": {
                "type": "semantic_text",
                "inference_id": "my_hf_endpoint"
            },
            "text_field": {
              "type": "text",
              "copy_to": "infer_field"
            }
        }
    }
)
documents = load_my_dataset()
docs = []
for doc in documents:
  if len(docs) >= 100:
		helpers.bulk(client, docs)
		docs = []
	else:
		docs.append({
      "_index": "hf-semantic-text-index",
      "_source": {"text_field": doc['text']},
    })

步骤 5:使用语义文本执行语义搜索

query = "Is it really this easy to perform semantic search?"
semantic_search_results = client.search(
   index="hf-semantic-text-index",
   query={"semantic": {"field": "infer_field", "query": query}},
)

步骤 6:使用 Cohere 重新排序以获得更好的结果

使用 Elasticsearch 作为您的向量数据库的一个优势是我们不断扩展的支持创新第三方功能。例如,可以通过将使用 Hugging Face 模型创建的嵌入上的语义搜索与 Cohere 的重新排序功能相结合来改进您的热门结果。要使用 Cohere 重新排序,您需要一个 Cohere API 密钥。

client.inference.put(
    task_type="rerank",
    inference_id="my_cohere_rerank_endpoint",
    body={
       "service": "cohere",
       "service_settings": {
"api_key": <COHERE_API_KEY>,
            	"model_id": "rerank-english-v3.0"
       },
       "task_settings": {
           "top_n": 100,
           "return_documents": True
       }
    }
)
reranked_search_results = client.search(
    index="hf-semantic-text-index",
    retriever= {
        "text_similarity_reranker": {
          "retriever": {
              "standard": {
                "query": {
                  "semantic": {
                    "field": "infer_field",
                    "query": query
                  }
                }
              }
          },
          "field": "text_field",
          "inference_id": "my_cohere_rerank_endpoint",
          "inference_text": query,
          "rank_window_size": 100,
        }
    }
)

立即使用 Hugging Face 推理端点服务和 Elastic!

尝试此笔记本以开始使用我们的 Hugging Face 推理端点集成:使用 Hugging Face 和 Elasticsearch 通过 GPU 加速推理为数百万个文档建立索引

Elasticsearch 与行业领先的生成式 AI 工具和提供商具有原生集成。查看我们关于超越 RAG 基础知识的网络研讨会 Beyond RAG Basics,或构建可用于生产环境的应用程序 Elastic 向量数据库

要为您的用例构建最佳搜索解决方案,请开始 免费云试用 或在您的 本地机器 上试用 Elastic。

准备好构建最先进的搜索体验了吗?

充分先进的搜索并非一人之力所能及。Elasticsearch 由数据科学家、机器学习运维工程师、软件工程师以及许多其他对搜索充满热情的人士提供支持,他们与您一样热爱搜索。让我们携手合作,构建出能够为您提供所需结果的奇妙搜索体验。

亲自试一试