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

1042 篇文章 599 订阅
319 篇文章 29 订阅

作者:来自 Elastic Max Hniebergall

借助 Elasticsearch 开放推理 API,你可以使用 Hugging Face 的推理端点(Inference Endpoints)在 Elasticsearch 之外执行推理。这样你就可以使用 Hugging Face 的可扩展基础架构,包括在 GPU 和 AI 加速器上执行推理的能力。使用 Hugging Face 生成的嵌入的能力是作为 Elasticsearch 8.11 中的第一个开放推理 API 集成引入的,从那时起,我们一直在努力工作,并使用更强大的功能对其进行了更新,让您可以事半功倍地获得更好的结果。

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

消除歧义

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

  1. Hugging Face 的推理端点服务(Inference Endpoints service),以及
  2. Elasticsearch 的开放推理 API 推理端点对象(inference endpoint objects)。

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

什么是 Elasticsearch 开放推理 API?

开放推理 API(open inference API)是你在 Elasticsearch 中执行推理的门户。它允许你在 Elasticsearch 之外使用机器学习模型和服务,而无需编写任何混乱的粘合代码。你需要做的就是提供 API 密钥并创建推理端点对象(create an Inference Endpoint object)。使用 Elasticsearch 开放推理 API,你可以使用 completion 任务对 LLM 执行推理,使用 text_embedding 或 sparse_embedding 任务生成密集或稀疏文本嵌入,或使用 rerank 任务对文档进行排名。

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

Hugging Face 的推理端点服务(Inference Endpoints service )允许你在云中部署和运行 Hugging Face Transformers 模型。查看 Hugging Face 的指南以创建你自己的端点 https://huggingface.co/docs/inference-endpoints/guides/create_endpoint

  • 确保将任务设置为与你正在部署的模型和你将在 Elasticsearch 中映射的字段类型相匹配。
  • 确保复制/记下端点 URL。
  • 创建用户访问令牌(也称为 API 密钥)以验证你对端点 https://huggingface.co/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 中创建端点时,我们还必须选择 sentence-embeddings 配置。

步骤 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 字段,我们可以提高导入速度,同时利用原生分块。为此,我们需要创建一个索引,其中包含一个文本字段(我们将在其中插入原始文档文本)以及一个将文本复制到的 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:使用 semantic text 执行语义搜索

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,
        }
    }
)

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

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

准备好亲自尝试了吗?开始免费试用
Elasticsearch 集成了 LangChain、Cohere 等工具。加入我们的高级语义搜索网络研讨会,构建您的下一个 GenAI 应用程序!

原文:Elasticsearch open inference API adds native chunking support for Hugging Face — Search Labs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值