【Elasticsearch】inference ingest pipeline

 Elasticsearch 的 Ingest Pipeline 功能允许你在数据索引之前对其进行预处理。通过使用 Ingest Pipeline,你可以执行各种数据转换和富化操作,包括使用机器学习模型进行推理(inference)。这在处理词嵌入、情感分析、图像识别等场景中非常有用。

 

### 使用 Inference Ingest Pipeline

 

以下是一个详细的步骤,展示如何使用 Inference Ingest Pipeline 在 Elasticsearch 中加载和使用预训练的机器学习模型来进行推理。

 

### 步骤 1: 准备机器学习模型

 

首先,你需要准备一个预训练的机器学习模型,并将其部署到 Elasticsearch 的机器学习模块中。Elasticsearch 支持多种模型格式,包括 TensorFlow、PyTorch、ONNX 等。

 

#### 示例:上传 TensorFlow 模型

 

1. **下载或训练模型**:确保你有一个 TensorFlow 模型文件(例如,`.pb` 文件)。

2. **上传模型**:使用 Elasticsearch 的机器学习 API 将模型上传到 Elasticsearch。

 

```json

PUT _ml/trained_models/my_word_embedding_model

{

  "input": {

    "field_names": ["text"]

  },

  "inference_config": {

    "natural_language_inference": {

      "results_field": "inference_results"

    }

  },

  "model": {

    "definition": {

      "path": "path/to/your/model.pb"

    }

  }

}

```

 

### 步骤 2: 创建 Ingest Pipeline

 

创建一个 Ingest Pipeline,使用刚刚上传的模型进行推理。

 

```json

PUT _ingest/pipeline/word_embedding_pipeline

{

  "description": "Pipeline to add word embeddings using a trained model",

  "processors": [

    {

      "inference": {

        "model_id": "my_word_embedding_model",

        "target_field": "embedding"

      }

    }

  ]

}

```

 

### 步骤 3: 使用 Ingest Pipeline 索引数据

 

在索引数据时,指定使用创建的 Ingest Pipeline。

 

```json

POST word_embeddings/_doc?pipeline=word_embedding_pipeline

{

  "word": "example"

}

```

 

### 示例:完整流程

 

以下是一个完整的示例,展示如何从头开始创建和使用 Inference Ingest Pipeline。

 

#### 1. 上传模型

 

```json

PUT _ml/trained_models/my_word_embedding_model

{

  "input": {

    "field_names": ["text"]

  },

  "inference_config": {

    "natural_language_inference": {

      "results_field": "inference_results"

    }

  },

  "model": {

    "definition": {

      "path": "path/to/your/model.pb"

    }

  }

}

```

 

#### 2. 创建 Ingest Pipeline

 

```json

PUT _ingest/pipeline/word_embedding_pipeline

{

  "description": "Pipeline to add word embeddings using a trained model",

  "processors": [

    {

      "inference": {

      "model_id": "my_word_embedding_model",

      "target_field": "embedding"

    }

  ]

}

```

 

#### 3. 创建索引

 

```json

PUT word_embeddings

{

  "mappings": {

    "properties": {

      "word": {

        "type": "keyword"

      },

      "embedding": {

        "type": "dense_vector",

        "dims": 100 // 根据你的词嵌入模型的维度设置

      }

    }

  }

}

```

 

#### 4. 索引数据

 

```json

POST word_embeddings/_doc?pipeline=word_embedding_pipeline

{

  "word": "example"

}

```

 

### 验证结果

 

你可以通过查询索引来验证数据是否正确索引,并且词嵌入向量是否已添加。

 

```json

GET word_embeddings/_search

{

  "query": {

    "match": {

      "word": "example"

    }

  }

}

```

 

### 注意事项

 

1. **模型路径**:确保模型文件路径正确,并且 Elasticsearch 有权限访问该路径。

2. **模型格式**:Elasticsearch 支持多种模型格式,确保你使用的模型格式与 Elasticsearch 兼容。

3. **性能**:Inference Ingest Pipeline 可能会影响索引性能,特别是在处理大量数据时。考虑在生产环境中进行性能测试。

 

通过以上步骤,你可以在 Elasticsearch 中使用 Inference Ingest Pipeline 对数据进行预处理,从而实现词嵌入的自动计算和存储。希望这些示例和说明能帮助你更好地理解和使用 Elasticsearch 的 Inference Ingest Pipeline 功能。

当你执行以下查询时,Elasticsearch 会返回与 `word` 字段匹配 "example" 的所有文档及其相关信息。假设你已经按照前面的步骤创建了索引并插入了数据,查询结果将包含文档的 `_id`、`_source` 等字段。

 

### 查询示例

 

```json

GET word_embeddings/_search

{

  "query": {

    "match": {

      "word": "example"

    }

  }

}

```

 

### 返回结果示例

 

假设你已经索引了一些文档,查询结果可能如下所示:

 

```json

{

  "took": 1,

  "timed_out": false,

  "_shards": {

    "total": 1,

    "successful": 1,

    "skipped": 0,

    "failed": 0

  },

  "hits": {

    "total": {

      "value": 1,

      "relation": "eq"

    },

    "max_score": 0.2876821,

    "hits": [

      {

        "_index": "word_embeddings",

        "_type": "_doc",

        "_id": "1",

        "_score": 0.2876821,

        "_source": {

          "word": "example",

          "embedding": [0.1, 0.2, ..., 0.100]

        }

      }

    ]

  }

}

```

 

### 解释

 

- **`took`**: 查询花费的时间(毫秒)。

- **`timed_out`**: 查询是否超时。

- **`_shards`**: 分片信息,包括总分片数、成功分片数、跳过分片数和失败分片数。

- **`hits`**: 匹配的文档列表。

  - **`total`**: 匹配的文档总数。

  - **`max_score`**: 最高评分。

  - **`hits`**: 匹配的文档列表,每个文档包含以下字段:

    - **`_index`**: 文档所属的索引名称。

    - **`_type`**: 文档类型(在Elasticsearch 7.x及更高版本中,类型总是`_doc`)。

    - **`_id`**: 文档的唯一标识符。

    - **`_score`**: 文档的相关性评分。

    - **`_source`**: 文档的原始内容,包括所有字段及其值。

 

### 示例解释

 

假设你索引了一个文档,其中 `word` 字段为 "example",`embedding` 字段为 `[0.1, 0.2, ..., 0.100]`,查询结果将返回这个文档的信息。

 

- **`_index`**: 文档所属的索引名称,这里是 `word_embeddings`。

- **`_type`**: 文档类型,这里是 `_doc`。

- **`_id`**: 文档的唯一标识符,假设为 `1`。

- **`_score`**: 文档的相关性评分,这里是 `0.2876821`。

- **`_source`**: 文档的原始内容,包括 `word` 和 `embedding` 字段。

 

### 进一步操作

 

如果你需要进一步处理或过滤结果,可以在查询中添加更多的条件。例如,你可以使用 `size` 参数来限制返回的文档数量,或者使用 `sort` 参数来按特定字段排序。

 

```json

GET word_embeddings/_search

{

  "query": {

    "match": {

      "word": "example"

    }

  },

  "size": 10,

  "sort": [

    { "_score": { "order": "desc" } }

  ]

}

```

 

希望这些解释和示例能帮助你更好地理解和使用 Elasticsearch 的查询结果。

PUT _ingest/pipeline/word_embedding_pipeline
{
  "description": "Pipeline to add word embeddings using a trained model",
  "processors": [
    {
      "inference": {
      "model_id": "my_word_embedding_model",
      "target_field": "embedding"
    }
  ]
}这段是干嘛的?

这段代码用于在 Elasticsearch 中创建一个 Ingest Pipeline,该管道将在数据索引之前使用预训练的机器学习模型进行推理(inference),并将推理结果(词嵌入向量)添加到文档中。具体来说,这段代码做了以下几件事:

 

### 1. 创建 Ingest Pipeline

 

```json

PUT _ingest/pipeline/word_embedding_pipeline

{

  "description": "Pipeline to add word embeddings using a trained model",

  "processors": [

    {

      "inference": {

        "model_id": "my_word_embedding_model",

        "target_field": "embedding"

      }

    }

  ]

}

```

 

### 详细解释

 

- **`PUT _ingest/pipeline/word_embedding_pipeline`**:

  - 这是一个 HTTP PUT 请求,用于创建一个新的 Ingest Pipeline。`word_embedding_pipeline` 是管道的名称,你可以根据需要选择一个合适的名称。

 

- **`description`**:

  - 这是一个可选字段,用于描述管道的目的。在这里,描述为 "Pipeline to add word embeddings using a trained model",表示这个管道用于使用预训练模型添加词嵌入向量。

 

- **`processors`**:

  - 这是一个数组,包含一个或多个处理器(processors)。每个处理器定义了一个数据处理步骤。

 

- **`inference`**:

  - 这是一个处理器,用于执行机器学习模型的推理。它有两个主要参数:

    - **`model_id`**: 指定要使用的预训练模型的 ID。在这个例子中,模型 ID 是 `my_word_embedding_model`。

    - **`target_field`**: 指定将推理结果存储到文档中的哪个字段。在这个例子中,推理结果将存储在 `embedding` 字段中。

 

### 2. 使用 Ingest Pipeline 索引数据

 

一旦创建了 Ingest Pipeline,你可以在索引数据时指定使用该管道。这样,Elasticsearch 会在数据索引之前自动执行推理,并将结果添加到文档中。

 

```json

POST word_embeddings/_doc?pipeline=word_embedding_pipeline

{

  "word": "example"

}

```

 

### 示例流程

 

1. **上传模型**:

   - 首先,你需要将预训练的机器学习模型上传到 Elasticsearch。假设你已经上传了一个名为 `my_word_embedding_model` 的模型。

 

2. **创建 Ingest Pipeline**:

   - 使用上述代码创建一个 Ingest Pipeline,该管道将使用 `my_word_embedding_model` 模型进行推理,并将结果存储在 `embedding` 字段中。

 

3. **索引数据**:

   - 在索引数据时,指定使用创建的 Ingest Pipeline。Elasticsearch 将在数据索引之前执行推理,并将结果添加到文档中。

 

### 示例

 

假设你已经上传了一个名为 `my_word_embedding_model` 的模型,并创建了 `word_embedding_pipeline` 管道。以下是一个完整的示例:

 

#### 1. 上传模型

 

```json

PUT _ml/trained_models/my_word_embedding_model

{

  "input": {

    "field_names": ["text"]

  },

  "inference_config": {

    "natural_language_inference": {

      "results_field": "inference_results"

    }

  },

  "model": {

    "definition": {

      "path": "path/to/your/model.pb"

    }

  }

}

```

 

#### 2. 创建 Ingest Pipeline

 

```json

PUT _ingest/pipeline/word_embedding_pipeline

{

  "description": "Pipeline to add word embeddings using a trained model",

  "processors": [

    {

      "inference": {

        "model_id": "my_word_embedding_model",

        "target_field": "embedding"

      }

    }

  ]

}

```

 

#### 3. 创建索引

 

```json

PUT word_embeddings

{

  "mappings": {

    "properties": {

      "word": {

        "type": "keyword"

      },

      "embedding": {

        "type": "dense_vector",

        "dims": 100 // 根据你的词嵌入模型的维度设置

      }

    }

  }

}

```

 

#### 4. 索引数据

 

```json

POST word_embeddings/_doc?pipeline=word_embedding_pipeline

{

  "word": "example"

}

```

 

### 验证结果

 

你可以通过查询索引来验证数据是否正确索引,并且词嵌入向量是否已添加。

 

```json

GET word_embeddings/_search

{

  "query": {

    "match": {

      "word": "example"

    }

  }

}

```

 

### 返回结果示例

 

```json

{

  "took": 1,

  "timed_out": false,

  "_shards": {

    "total": 1,

    "successful": 1,

    "skipped": 0,

    "failed": 0

  },

  "hits": {

    "total": {

      "value": 1,

      "relation": "eq"

    },

    "max_score": 0.2876821,

    "hits": [

      {

        "_index": "word_embeddings",

        "_type": "_doc",

        "_id": "1",

        "_score": 0.2876821,

        "_source": {

          "word": "example",

          "embedding": [0.1, 0.2, ..., 0.100]

        }

      }

    ]

  }

}

```

 

通过以上步骤,你可以在 Elasticsearch 中使用 Ingest Pipeline 自动处理数据,将词嵌入向量添加到文档中。希望这些解释和示例能帮助你更好地理解和使用 Ingest Pipeline。如果有任何进一步的问题,请随时提问!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6772.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 .NET Core 6.0 Web API 上传单个和多个文件

示例代码: https://download.csdn.net/download/hefeng_aspnet/90138968 介绍 我们将在 IFormFile 接口和 .NET 提供的其他接口的帮助下,逐步讨论单个和多个文件上传。 .NET 提供了一个 IFormFile 接口,代表 HTTP 请求中传输的文件。 此外…

Ceisum无人机巡检直播视频投射

接上次的视频投影,Leader告诉我这个视频投影要用在两个地方,一个是我原先写的轨迹回放那里,另一个在无人机起飞后的地图回显,要实时播放无人机拍摄的视频,还要能转镜头,让我把这个也接一下。 我的天&#x…

Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?

文章目录 OSI七层模型有哪些?有哪些协议簇?TCP/IP协议簇中的TCP协议三次握手是怎样的?基于UDP的DHCP协议是什么情况?基于UDP的DNS协议是什么情况? OSI七层模型有哪些? 题目会考广播域 有哪些协议簇&#x…

媒体新闻发稿要求有哪些?什么类型的稿件更好通过?

为了保证推送信息的内容质量,大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中,不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些?就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…

Flutter_学习记录_导航和其他

Flutter 的导航页面跳转,是通过组件Navigator 和 组件MaterialPageRoute来实现的,Navigator提供了很多个方法,但是目前,我只记录我学习过程中接触到的方法: Navigator.push(), 跳转下一个页面Navigator.pop(), 返回上一…

mathematical-expression 实现 数学表达式解析 Java 篇(最新版本)

mathematical-expression (MAE) 切换至 中文文档 Community QQ group 访问链接进行交流信息的获取:https://diskmirror.lingyuzhao.top/DiskMirrorBackEnd/FsCrud/downLoad/18/Binary?fileNameArticle/Image/-56202138/1734319937274.jpg…

http的请求体各项解析

一、前言 做Java开发的人员都知道,其实我们很多时候不单单在写Java程序。做的各种各样的系统,不管是PC的 还是移动端的,还是为别的系统提供接口。其实都离不开http协议或者https 这些东西。Java作为编程语言,再做业务开发时&#…

Java 大视界 -- Java 大数据中的自然语言生成技术与实践(63)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

计算机网络三张表(ARP表、MAC表、路由表)总结

参考: 网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!_mac表、arp表、路由表-CSDN博客 网络中的三张表:ARP表、MAC表、路由表 首先要明确一件事,如果一个主机要发送数据,那么必…

Git Bash 配置 zsh

博客食用更佳 博客链接 安装 zsh 安装 Zsh 安装 Oh-my-zsh github仓库 sh -c "$(curl -fsSL https://install.ohmyz.sh/)"让 zsh 成为 git bash 默认终端 vi ~/.bashrc写入: if [ -t 1 ]; thenexec zsh fisource ~/.bashrc再重启即可。 更换主题 …

【问题】Chrome安装不受支持的扩展 解决方案

此扩展程序已停用,因为它已不再受支持 Chromium 建议您移除它。详细了解受支持的扩展程序 此扩展程序已停用,因为它已不再受支持 详情移除 解决 1. 解压扩展 2.打开manifest.json 3.修改版本 将 manifest_version 改为3及以上 {"manifest_ver…

在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘

在 Windows 系统上,如果你使用的是 WSL(Windows Subsystem for Linux)并安装了 Ubuntu,你可以将 Ubuntu 从 C 盘 迁移到 D 盘。迁移过程涉及导出当前的 Ubuntu 发行版,然后将其导入到 D 盘的目标目录。以下是详细的步骤…

qt QNetworkRequest详解

1、概述 QNetworkRequest是Qt网络模块中的一个核心类,专门用于处理网络请求。它封装了网络请求的所有关键信息,包括请求的URL、HTTP头部信息等,使得开发者能够方便地在Qt应用程序中执行网络操作,如文件下载、网页内容获取等。QNe…

Python!从0开始学爬虫:(一)HTTP协议 及 请求与响应

前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议&#xff…

后盾人JS -- Map与WeakMap类型在JavaScript中的使用

Map类型特点与创建方法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> &l…

python实现http文件服务器访问下载

//1.py import http.server import socketserver import os import threading import sys# 获取当前脚本所在的目录 DIRECTORY os.path.dirname(os.path.abspath(__file__))# 设置服务器的端口 PORT 8000# 自定义Handler&#xff0c;将根目录设置为脚本所在目录 class MyHTT…

[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统

一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础&#xff0c;它不仅为芯片本身提供稳定的电源&#xff0c;还通过多种电源管理功能优化功耗、延长电池寿命&#xff0c;并确保系统的可靠性和稳定性。 二、电源监控器 作用&#xff1a;保证STM32芯片工作在…

二叉树相关oj题 1. 检查两颗树是否相同。

二叉树相关oj题 检查两颗树是否相同。OJ链接 另一颗树的子树。OJ链接 if(rootnull)易漏掉 会导致空指针异常翻转二叉树。OJ链接

批量提取多个 Excel 文件内指定单元格的数据

这篇文章将介绍如何从多个相同格式的Excel文件中&#xff0c;批量提取指定单元格的数据&#xff0c;合并后保存到新的工作薄。 全程0代码&#xff0c;可视化操作。 提取前&#xff1a; 提取后&#xff1a; 准备数据 这里准备了3个测试数据 开始提取 打开的卢易表&#xff0…

【真机调试】前端开发:移动端特殊手机型号有问题,如何在电脑上进行调试?

目录 前言一、怎么设置成开发者模式&#xff1f;二、真机调试基本步骤&#xff1f; &#x1f680;写在最后 前言 edge浏览器 edge://inspect/#devices 谷歌浏览器&#xff08;开tizi&#xff09; chrome://inspect 一、怎么设置成开发者模式&#xff1f; Android 设备 打开设…