E5 – 基于双向编码器表示的嵌入

编辑

基于双向编码器表示的嵌入(E5)是一个自然语言处理模型,它允许您使用密集向量表示来执行多语言语义搜索。此模型推荐用于非英语文档和查询。如果您想对英语文档执行语义搜索,请使用 ELSER 模型。

语义搜索 提供基于上下文含义和用户意图的搜索结果,而不是精确的关键词匹配。

E5 有两个版本:一个跨平台版本,可在任何硬件上运行;另一个版本针对 Intel® 芯片进行了优化。在 模型管理 > 已训练模型 页面上,您可以根据集群的硬件查看推荐部署的 E5 版本。但是,推荐使用 推理 API 将 E5 作为服务,这使得模型的下载和部署更加容易,您无需在不同版本之间进行选择。

请参阅 HuggingFace 上 multilingual-e5-smallmultilingual-e5-small-optimized 模型的模型卡片,以获取更多信息,包括许可信息。

要求

编辑

要使用 E5,您必须拥有用于语义搜索的 相应订阅 等级或已激活试用期。

建议为您的 E5 部署启用已训练模型自动缩放。请参阅 已训练模型自动缩放 以了解更多信息。

下载和部署 E5

编辑

下载和部署 E5 最简单且推荐的方法是使用 推理 API

  1. 在 Kibana 中,导航到 开发控制台
  2. 通过运行以下 API 请求,使用 elasticsearch 服务创建一个推理端点

    PUT _inference/text_embedding/my-e5-model
    {
      "service": "elasticsearch",
      "service_settings": {
        "num_allocations": 1,
        "num_threads": 1,
        "model_id": ".multilingual-e5-small"
      }
    }

    API 请求会自动启动模型下载,然后部署模型。

请参阅 elasticsearch 推理服务文档 以了解有关可用设置的更多信息。

创建 E5 推理端点后,即可将其用于语义搜索。在 Elastic Stack 中执行语义搜索最简单的方法是 遵循 semantic_text 工作流

下载和部署 E5 的替代方法
编辑

您还可以从 机器学习 > 已训练模型、从 搜索 > 索引 或通过在开发控制台中使用已训练模型 API 下载和部署 E5 模型。

在大多数情况下,首选版本是 针对 Intel 和 Linux 优化的 模型,建议下载并部署该版本。

使用“已训练模型”页面
使用“已训练模型”页面
编辑
  1. 在 Kibana 中,导航到 机器学习 > 已训练模型。E5 可以在已训练模型列表中找到。有两个版本可用:一个便携式版本,可在任何硬件上运行;另一个版本针对 Intel® 芯片进行了优化。您可以根据硬件配置查看推荐使用的模型。
  2. 单击 添加已训练模型 按钮。在打开的模式窗口中选择要使用的 E5 模型版本。根据您的硬件配置推荐的模型会高亮显示。单击 下载。您可以在 通知 页面上检查下载状态。

    Downloading E5

    或者,单击已训练模型列表中 操作 下的 下载模型 按钮。

  3. 下载完成后,单击 开始部署 按钮开始部署。
  4. 提供部署 ID,选择优先级,并设置每个分配的分配数量和线程数。

    Deploying E5
  5. 单击开始。
使用搜索索引 UI
使用搜索索引 UI
编辑

或者,您可以使用搜索索引 UI 将 E5 模型下载并部署到推理管道。

  1. 在 Kibana 中,导航到 搜索 > 索引
  2. 从列表中选择具有要使用 E5 的推理管道的索引。
  3. 导航到 管道 选项卡。
  4. 机器学习推理管道 下,单击 使用 E5 提升您的结果 部分中的 部署 按钮以开始下载 E5 模型。这可能需要几分钟时间,具体取决于您的网络。

    Deploying E5 in Elasticsearch
  5. 下载模型后,单击 启动单线程 按钮以使用基本配置启动模型,或选择 微调性能 选项以导航到 已训练模型 页面,您可以在该页面上配置模型部署。

    Start E5 in Elasticsearch

部署并启动 E5 模型后,即可在管道中使用它。

在开发控制台中使用已训练模型 API
在开发控制台中使用已训练模型 API
编辑
  1. 在 Kibana 中,导航到 开发控制台
  2. 通过运行以下 API 调用来创建 E5 模型配置

    PUT _ml/trained_models/.multilingual-e5-small
    {
      "input": {
    	"field_names": ["text_field"]
      }
    }

    如果尚未下载模型,则 API 调用会自动启动模型下载。

  3. 使用 启动已训练模型部署 API 和部署 ID 部署模型

    POST _ml/trained_models/.multilingual-e5-small/deployment/_start?deployment_id=for_search

在隔离环境中部署 E5 模型

编辑

如果要在隔离环境中安装 E5,则有以下选项:* 将模型工件放入所有主节点候选节点上的 config 目录内的目录中(对于 multilingual-e5-smallmultilingual-e5-small-linux-x86-64)* 使用 HuggingFace 安装模型(仅限于 multilingual-e5-small 模型)。

模型工件文件
编辑

对于 multilingual-e5-small 模型,系统中需要以下文件

https://ml-models.elastic.co/multilingual-e5-small.metadata.json
https://ml-models.elastic.co/multilingual-e5-small.pt
https://ml-models.elastic.co/multilingual-e5-small.vocab.json

对于优化版本,系统中需要以下文件

https://ml-models.elastic.co/multilingual-e5-small_linux-x86_64.metadata.json
https://ml-models.elastic.co/multilingual-e5-small_linux-x86_64.pt
https://ml-models.elastic.co/multilingual-e5-small_linux-x86_64.vocab.json
使用基于文件的访问
编辑

对于基于文件的访问,请按照以下步骤操作

  1. 下载 模型工件文件
  2. 将文件放入 Elasticsearch 部署的 config 目录内的 models 子目录中。
  3. 通过将以下行添加到 config/elasticsearch.yml 文件中,将 Elasticsearch 部署指向模型目录

    xpack.ml.model_repository: file://${path.home}/config/models/`
  4. 在所有主节点候选节点上重复步骤 2 和步骤 3。
  5. 重启 主节点候选节点,一次一个。
  6. 导航到 Kibana 中的 已训练模型 页面,E5 可以在已训练模型列表中找到。
  7. 单击 添加已训练模型 按钮,选择您在步骤 1 中下载并想要部署的 E5 模型版本,然后单击 下载。所选模型将从您在步骤 2 中放置的模型目录下载。
  8. 下载完成后,单击 开始部署 按钮开始部署。
  9. 提供部署 ID,选择优先级,并设置每个分配的分配数量和线程数。
  10. 单击 启动
使用 HuggingFace 代码库
编辑

您可以通过将 eland_import_hub_model 脚本指向模型的本地文件,在受限或封闭网络中安装 multilingual-e5-small 模型。

对于离线安装,首先需要在本地克隆模型,系统中需要安装 Git 和 Git 大型文件存储

  1. 使用模型 URL 从 Hugging Face 克隆 E5 模型。

    git clone https://hugging-face.cn/elastic/multilingual-e5-small

    该命令会在 multilingual-e5-small 目录中生成模型的本地副本。

  2. 使用 eland_import_hub_model 脚本并将 --hub-model-id 设置为克隆模型的目录以安装它

    eland_import_hub_model \
          --url 'XXXX' \
          --hub-model-id /PATH/TO/MODEL \
          --task-type text_embedding \
          --es-username elastic --es-password XXX \
          --es-model-id multilingual-e5-small

    如果您使用 Docker 镜像运行 eland_import_hub_model,则必须绑定挂载模型目录,以便容器可以读取文件。

    docker run --mount type=bind,source=/PATH/TO/MODELS,destination=/models,readonly -it --rm docker.elastic.co/eland/eland \
        eland_import_hub_model \
          --url 'XXXX' \
          --hub-model-id /models/multilingual-e5-small \
          --task-type text_embedding \
          --es-username elastic --es-password XXX \
          --es-model-id multilingual-e5-small

    上传到 Elasticsearch 后,模型将具有由 --es-model-id 指定的 ID。如果未设置,则模型 ID 来自 --hub-model-id;空格和路径分隔符将转换为双下划线 __

免责声明

编辑

客户可以添加第三方已训练模型以在 Elastic 中进行管理。Elastic 不拥有这些模型。虽然 Elastic 将根据文档支持与这些模型的集成性能,但您理解并同意 Elastic 对第三方模型或它们可能使用的底层训练数据没有控制权或责任。

根据定义,此 e5 模型与我们的其他 Elastic 软件一起托管、集成和使用,受我们的标准保修范围。