重新认识Elasticsearch-一体化矢量搜索引擎

前言

2023 哪个网络词最热?我投“生成式人工智能”一票。过去一年大家都在拥抱大模型,所有的行业都在做自己的大模型。就像冬日里不来件美拉德色系的服饰就会跟不上时代一样。这不前段时间接入JES,用上好久为碰的RestHighLevelClient包。心血来潮再次访问Elasticsearch官网,发现风格又变了!很惊艳,不信你看

很久没有上Elasticsearch官网。以前的Elasticsearch是以全文搜索引擎为主打的。去年还在想RediSearch会不会撼动Elasticsearch的地位。现在来看它找到内卷焦虑的方子-换个战场去卷别人!所以我就很好奇看看他是如何卷的?决定一探究竟。那么今天就来看下生成式AI和Elasticsearch Relevance Engine(ESRE)最后学习下Elasticsearch作为向量数据如何使用。

一、什么是生成式AI

生成式 AI 是人工智能的一个分支,其核心是能够生成原创内容的计算机模型**。**通过利用大型语言模型、神经网络和机器学习的强大功能,生成式 AI 能够模仿人类创造力生成新颖的内容。这些模型使用大型数据集和深度学习算法进行训练,从而学习数据中存在的底层结构、关系和模式。根据用户的输入提示,生成新颖独特的输出结果,包括图像、视频、代码、音乐、设计、翻译、问题回答和文本。

流行的生成式AI有哪些

1.ChatGPT ChatGPT 是由 OpenAI 开发的一个大型语言模型,自 2022 年 11 月公开发布以来取得了巨大成功。它使用对话式聊天界面与用户互动,并对输出结果进行微调。它旨在理解文本提示,并生成类似于人的回复,而且它已展示出了参与对话交流、回答相关问题,甚至展现幽默感的能力。

据说,最初向用户免费提供的 ChatGPT-3 版本是根据互联网上超过 45 TB 的文本数据进行训练的。不久之后,Microsoft 将 GPT 的一个版本集成到了 Bing 搜索引擎中。OpenAI 的升级版、基于订阅的 ChatGPT-4 是于 2023 年 3 月推出的。

ChatGPT 采用最先进的转换器架构。GPT 是“Generative Pre-trained Transformer”(生成式预训练转换器)的缩写,转换器架构为自然语言处理 (NLP) 领域带来了革命性的变化。

2.DALL-E 同样来自 OpenAI 的 DALL-E 2 专注于生成图像。DALL-E 结合了 GAN 架构与变分自动编码器,可基于文本提示生成高度细腻和富有想象力的视觉结果。借助 DALL-E,用户可以描述自己心目中的图像和风格,模型就会生成它。与 MidJourney 和新晋加入的 Adobe Firefly 等竞争对手一样,DALL-E 和生成式 AI 正在彻底改变图像的创建和编辑方式。随着整个行业不断涌现的新兴能力,视频、动画和特效也将发生类似的转变。

3.Google Bard 最初是基于 Google LaMDA 系列大型语言模型的一个版本构建而成,后来升级到更先进的 PaLM 2,是 Google ChatGPT 的替代品。Bard 的功能与 ChatGPT 类似,可以编码、解决数学问题、回答问题、写作,以及提供 Google 搜索结果。

在电商行业的应用

电子商务和零售业领域中的 AI:生成式 AI 可以利用购物者的购买模式推荐新产品,并创建更顺畅的购物流程,从而帮助电子商务企业为购物者提供更具个性化的购买体验。对于零售商和电子商务企业来说,无论从更直观的浏览到使用聊天机器人支持的 AI 客户服务功能,以及 AI 常见问题解答板块,AI 都可以打造更好的用户体验。

金融服务领域中的 AI:生成式 AI 可用于市场趋势预测、市场模式研究、投资组合优化、欺诈保护、算法交易和个性化客户服务。模型还可以根据历史趋势生成合成数据,从而帮助进行风险分析和决策。

生成式 AI 模型的局限性

1.**领域知识/准确性:**模型可能没有足够的与特定域相关的内部知识_。_这要源于训练模型的数据集。为了定制 LLM 生成的数据和内容,企业需要一种方法来向模型馈送专有数据,以便模型能够学会提供更相关、特定于业务的信息。LLM 是基于大量通用数据集训练的,这些数据集通常缺乏特定领域知识或可能过时。这可能导致不准确的响应,包括“幻觉”,其中模型自信地生成错误信息。

2.**隐私和安全:**数据隐私是企业如何通过网络和在组件之间使用和安全地传递专有数据的核心,即使在构建创新的搜索体验时也是如此。这引发了隐私和敏感数据保护问题,尤其是在处理个人或机密信息时。

3.**规模和成本:**由于数据量以及所需的计算能力和内存,使用大型语言模型可能会让许多企业望而却步。然而,想要构建自己的生成式 AI 应用(如聊天机器人)的企业需要将 LLM 与他们的私有数据结合起来。

4.**过时:**模型在收集训练数据的时候就已被冻结在过去的某一时间点上。因此,生成式 AI 模型所创建内容和数据只有在基于它们进行训练时才是最新的。整合公司数据是让 LLM 能够提供及时结果的内在需求。例如,如果用户向 LLM 查询“今天天气怎么样”,那么传统搜索引擎可能在几毫秒内返回结果,而 LLM 可能需要几秒钟或更长时间。

5.**幻觉:**当回答问题或进行交互式对话时,LLM 模型可能会编造一些听起来可信和令人信服的事实,但实际上是一些不符合事实的预测。这也是为什么需要将 LLM 与具有上下文、定制的知识相结合的另一个原因,这对于让模型在商业环境中发挥作用至关重要。

二、Elasticsearch Relevance Engine

是的ChatGPT 和 LLM 面临很多挑战。如专业领域数据的质量准确性,相关性数据缺乏过滤,维护和训练成本,安全性和性能,可解释性等。那接下来看下Elastic的ESRE是如何帮助他们解决问题的。

ESRE 提供了多项用于创建高度相关的 AI 搜索应用程序的新功能。ESRE 站在 Elastic 这个搜索领域的巨人肩膀之上,并基于两年多的 Machine Learning 研发成就构建而成。Elasticsearch Relevance Engine 将 AI 的最佳实践与 Elastic 的文本搜索进行了结合。ESRE 为开发人员提供了一整套成熟的检索算法,并能够与大型语言模型 (LLM) 集成。不仅如此,ESRE 还可通过已经得到 Elastic 社区信任的简单、统一的 API 访问,因此世界各地的开发人员都可以立即开始使用它来提升搜索相关性。

Elasticsearch Relevance Engine 的可配置功能可用于通过以下方式帮助提高相关性:

•应用包括 BM25f(这是混合搜索的关键组成部分)在内的高级相关性排序功能

•使用 Elastic 的矢量数据库创建、存储和搜索密集嵌入

•使用各种自然语言处理 (NLP) 任务和模型处理文本

•让开发人员在 Elastic 中管理和使用自己的转换器模型,以适应业务特定的上下文

•通过 API 与第三方转换器模型(如 OpenAI 的 GPT-3 和 4)集成,以根据客户在 Elasticsearch 部署中整合的数据存储,检索直观的内容摘要

•使用 Elastic 开箱即用型的 Learned Sparse Encoder 模型,无需训练或维护模型,就能实现 ML 支持的搜索,从而在各种域提供高度相关的语义搜索

•使用倒数排序融合 (RRF) 轻松组合稀疏和密集检索;倒数排序融合是一种混合排名方法,让开发人员能够自行优化 AI 搜索引擎,以符合他们独特的自然语言和关键字查询类型的组合

•与 LangChain 等第三方工具集成,以帮助构建复杂的数据管道和生成式 AI 应用程序

三、Elasticsearch 向量库适合用在哪

Elasticsearch 支持的信息检索方法:

•词袋模型和 BM25 算法: 用于传统的文本检索。

•KNN(k-nearest neighbor k-近邻)和 ANN(近似最近邻)向量搜索: 用于基于相似度的向量检索。目前8.11版本中还是使用KNN检索。

Elasticsearch 如何缓解 LLM 问题:

•提供数据上下文并与 ChatGPT 或其他 LLM 集成: Elasticsearch 可以存储和管理大量数据,并提供丰富的上下文信息,帮助 LLM 理解查询意图,生成更准确的结果。

•支持自带模型(任何第三方模型): Elasticsearch 可以接入各种预训练语言模型,包括 ChatGPT 和其他 LLM,为用户提供更灵活的选择。

•内置 Elastic Learned Sparse Encoder 模型: 这个模型可以对文本进行高效的向量化表示,方便进行向量搜索和分析。

Elasticsearch 作为向量数据库的优势:

•高效的混合检索: Elasticsearch 可以同时进行文本检索和向量检索,满足多种应用场景。

•海量数据存储: Elasticsearch 可以存储和管理大量文本和向量数据,为 LLM 提供丰富的数据资源。

•高性能查询: Elasticsearch 的查询速度非常快,可以满足实时检索的需求。

Elasticsearch和LLM结合有三种方式:

**方式一:**Elasticsearch和LLM

使用 Elasticsearch 作为向量存储并与 LLM 集成

方法1

用户将问题数据和生成的嵌入向量一起导入 Elasticsearch。Elasticsearch 会存储和索引这些数据(用户问题的上下文),以便进行高效的检索。当用户提出问题时,用户可以使用 Elasticsearch 的近似最近邻 (KNN) 搜索功能,根据用户的查询在数据集中找到最相似的嵌入向量。这一步骤可以快速找到与用户问题相关的潜在答案。最后Elasticsearch 将搜索结果(包含相关数据的上下文信息)传递给 ChatGPT 或其他 LLM。LLM 会利用这些上下文信息,生成更加准确、流畅和自然的自然语言回答,并返回给用户。

方式二:Elasticsearch Relevance Engine 和LLM

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Elasticsearch Relevance Engine (ESRE) 使 BYOLLM 成为现实。此功能以前只能通过机器学习访问,现在已经可以轻松使用。 从 8.8 版开始,可以使用熟悉的搜索 API 将 LLM 模型摄取和查询到 Elasticsearch 中,就像任何其他数据一样。重要的是他使用RRF进行混合检索,将检索结果提高了一个水平,同事降低了复杂性和运营成本。

方式三:使用内置的稀疏编码模型

方法3

Elastic Learned Sparse Encoder 是 Elastic 开箱即用的语言模型,其性能优于 SPLADE(SParse Lexical AnD Expansion Model),而 SPLADE 本身就是最先进的模型。Elastic Learned Sparse Encoder 解决了词汇不匹配。就像其他搜索端点一样,可以通过text_expansion查询访问 Elastic Learned Sparse Encoder。Elastic Learned Sparse Encoder 使我们的用户只需点击一下即可开始最先进的生成式 AI 搜索并立即产生结果。Elastic Learned Sparse Encoder 也是 Elastic 的一项商业功能。

四、Elasticsearch 向量检索

ES作为向量数据库提供三种能力:1.存储嵌入 2.高效搜索相邻数据 3.将文本嵌入到向量表示。

首先将待检索的数据转换成向量存储。其表现形式为128维的float数组。之后将数组索引到ES的dense_vector类型的字段中。最后基于ANN或KNN进行检索。如下图

single platform

五、Elasticsearch vector search

我们来看一个ES中创建和查询向量数据的示例

第一步我们创建一个向量索引image-index

PUT /image-index
{
  "mappings": {
    "properties": {
      "image-vector": {
        "type": "dense_vector",
        "dims": 3,
        "index": true,
        "similarity": "l2_norm"
      },
      "title-vector": {
        "type": "dense_vector",
        "dims": 5,
        "index": true,
        "similarity": "l2_norm"
      },
      "title": {
        "type": "text"
      },
      "file-type": {
        "type": "keyword"
      }
    }
  }
}

第二步向索引image-index中批量插入数据

POST /image-index/_bulk?refresh=true
{ "index": { "_id": "1" } }
{ "image-vector": [1, 5, -20], "title-vector": [12, 50, -10, 0, 1], "title": "moose family", "file-type": "jpg" }
{ "index": { "_id": "2" } }
{ "image-vector": [42, 8, -15], "title-vector": [25, 1, 4, -12, 2], "title": "alpine lake", "file-type": "png" }
{ "index": { "_id": "3" } }
{ "image-vector": [15, 11, 23], "title-vector": [1, 5, 25, 50, 20], "title": "full moon", "file-type": "jpg" }

最后通过KNN api检索数据

POST /image-index/_search
{
  "knn": {
    "field": "image-vector",
    "query_vector": [-5, 9, -12],
    "k": 10,
    "num_candidates": 100
  },
  "fields": [ "title", "file-type" ]
}

查询结果如下

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "max_score": 0.008547009,
    "hits": [
      {
        "_index": "image-index",
        "_id": "1",
        "_score": 0.008547009,
        "_source": {
          "image-vector": [
            1,
            5,
            -20
          ],
          "title-vector": [
            12,
            50,
            -10,
            0,
            1
          ],
          "title": "moose family",
          "file-type": "jpg"
        },
        "fields": {
          "file-type": [
            "jpg"
          ],
          "title": [
            "moose family"
          ]
        }
      },
      {
        "_index": "image-index",
        "_id": "3",
        "_score": 0.00061349693,
        "_source": {
          "image-vector": [
            15,
            11,
            23
          ],
          "title-vector": [
            1,
            5,
            25,
            50,
            20
          ],
          "title": "full moon",
          "file-type": "jpg"
        },
        "fields": {
          "file-type": [
            "jpg"
          ],
          "title": [
            "full moon"
          ]
        }
      },
      {
        "_index": "image-index",
        "_id": "2",
        "_score": 0.00045045046,
        "_source": {
          "image-vector": [
            42,
            8,
            -15
          ],
          "title-vector": [
            25,
            1,
            4,
            -12,
            2
          ],
          "title": "alpine lake",
          "file-type": "png"
        },
        "fields": {
          "file-type": [
            "png"
          ],
          "title": [
            "alpine lake"
          ]
        }
      }
    ]
  }
}

以上是作为向量数据库的实例。ES是可以作为AI查询。支持AI查询的客户端包括JavaScript,Python,Go,PHP,Ruby(没有java)。有兴趣的可以直接去github上去试跑( elasticsearch-labs )

六、总结

Elasticsearch确实卷。它的架构已经不是以前,为了实现更快的查询而迭代。2024年Elasticsearch提出了无服务架构的理念。将存储和计算完全分离开。无服务器架构标志着 Elasticsearch 的重大重组。它的构建是为了利用最新的云原生服务,以轻松的管理提供优化的产品体验。它不仅具备数据湖的存储能力,还拥有与 Elasticsearch 相媲美的快速搜索性能,同时通过无需人工干预的集群管理和扩展,实现了操作的简便性。

七、名词解释

RRF:RRF 是 Elasticsearch 中新推出的一种混合搜索技术,可以将来自不同搜索方法的结果进行融合和排序,以提供更全面、更准确的搜索结果。

ANN:ANN 代表人工神经网络 (Artificial Neural Networks)。人工神经网络是一种计算机科学和人工智能领域的算法模型,它模仿人类大脑的神经网络。

KNN:代表 k 近邻。它是一种机器学习算法,用于在数据集中找到与给定查询最相似的 k 个点。KNN 算法可用于各种任务,包括分类、回归和聚类。

作者:京东保险 管顺利

来源:京东云开发者社区 转载请注明来源

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

静态网页设计实践(HTML+CSS)

一、前端程序员必会三大编程语言 (一)HTML(.html/.htm) 超文本标记语言(HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、Ja…

YOLOv8改进 | 二次创新篇 | 结合iRMB和EMA形成全新的iEMA机制(全网独家创新)

一、本文介绍 本文给大家带来的改进机制是二次创新的机制,二次创新是我们发表论文中关键的一环,为什么这么说,从去年的三月份开始对于图像领域的论文发表其实是变难的了,在那之前大家可能搭搭积木的情况下就可以简单的发表一篇论文,但是从去年开始单纯的搭积木其实发表论…

JWT的初级认识

文章目录 一.什么是JWT二.JWT能够做什么1.授权2.信息交换 三.为什么我们使用JWT传统的基于session的认证流程基于JWT认证1.认证流程2.jwt优势 四.JWT的结构是什么Header的组成4.2 Header4.3 Payload4.4 Signature签名目的 五.使用JWT5.1 引入JWT依赖5.2 生成token5.3 根据令牌和…

vue element-ui的table列表中展示缩略图片效果实例

这篇文章主要给大家介绍了关于vue element-ui的table列表中展示多张图片(可放大)效果的相关资料,文中通过代码示例介绍的非常详细,需要的朋友可以参考下 一、效果图 二、代码部分 1、原理 使用 <el-table-column> 和 <el-image> 组件来在表格中插入缩略图 2、te…

回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SO-LSTM蛇群算法优化…

py的循环语句(for和while)

前言&#xff1a;本章节和友友们探讨一下py的循环语句&#xff0c;主播觉得稍微有点难主要是太浑了&#xff0c;但是会尽量描述清楚&#xff0c;OK上车&#xff01;&#xff08;本章节有节目效果&#xff09; 目录 一.while循环的基本使用 1.1关于while循环 1.2举例 1.31-1…

TensorFlow相关组件的安装

安装Anaconda3 安装Anaconda3的时候可以安装在任意磁盘中&#xff0c;在勾选path的时候全部勾选即可。更换Anaconda3的下载源为清华大学源&#xff0c;在此期间不要打开Anaconda3&#xff0c;在cmd中依次输入以下即可&#xff1a; conda config --add channels https://mirro…

【JaveWeb教程】(17) MySQL数据库开发之 MySQL简介、安装、数据类型、SQL通用语法 详细代码示例讲解

目录 前言1. MySQL概述1.1 安装1.1.1 版本1.1.2 安装1.1.3 连接1.1.4 企业使用方式(了解) 1.2 数据模型1.3 SQL简介1.3.1 SQL通用语法1.3.2 分类 前言 在我们讲解SpringBootWeb基础知识(请求响应案例)的时候&#xff0c;我们讲到在web开发中&#xff0c;为了应用程序职责单一&…

搜索与图论第一期 DFS(深度优先搜索)

前言 DFS这部分难度不大&#xff0c;大家应该完全掌握&#xff01;&#xff01;&#xff01; 一、DFS的基本内容 内容&#xff1a; 深度优先遍历图的方法是&#xff0c;从图中某顶点v出发&#xff1a; &#xff08;1&#xff09;访问顶点v&#xff1b; &#xff08;2&#…

Element Plus 离线手册 下载

Element Plus (Vue3) 离线手册&#xff0c;解压就能用&#xff0c;双击运行&#xff0c;浏览器访问 http://localhost:7011 获取方式&#xff1a;原文关注微信公众号&#xff0c;回复消息&#xff1a;7011ELP Element Plus 离线手册 下载Vue3 Element Plus 离线手册 离线文档 …

【教学类-45-05】X-Y之间的三连加减题混合 (横向排列)(44格:11题“++ ”11题“--”11题“ +-”11题“ -+” )

作品展示&#xff1a; 背景需求&#xff1a; 把以下四款3连题 混在一起&#xff0c;每种题目随机抽取11题&#xff0c;一共44格 【教学类-45-02】X-Y之间的“三连减“题(a-b-c)-CSDN博客文章浏览阅读465次&#xff0c;点赞15次&#xff0c;收藏7次。【教学类-45-02】X-Y之间的…

【算法】最佳牛围栏(二分,前缀和,双指针)

题目 农夫约翰的农场由 N 块田地组成&#xff0c;每块地里都有一定数量的牛&#xff0c;其数量不会少于 1 头&#xff0c;也不会超过 2000 头。 约翰希望用围栏将一部分连续的田地围起来&#xff0c;并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。 围起区域内…

Apache ActiveMQ RCE CNVD-2023-69477 CVE-2023-46604

漏洞简介 Apache ActiveMQ官方发布新版本&#xff0c;修复了一个远程代码执行漏洞&#xff0c;攻击者可构造恶意请求通过Apache ActiveMQ的61616端口发送恶意数据导致远程代码执行&#xff0c;从而完全控制Apache ActiveMQ服务器。 影响版本 Apache ActiveMQ 5.18.0 before …

java基础之Java8新特性-Optional

目录 1.简介 2.Optional类常用方法 3.示例代码 4.示例代码仓库地址 1.简介 Java 8引入了一个重要的新特性&#xff0c;即Optional类。Optional类是为了解决空指针异常而设计的。 在Java中&#xff0c;当我们尝试访问一个空对象的属性或调用其方法时&#xff0c;很容易抛出…

【sklearn练习】模型评估

一、交叉验证 cross_val_score 的使用 1、不用交叉验证的情况&#xff1a; from __future__ import print_function from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifieriris…

centos7下升级nginx1.8.0版本到nginx1.25.3版本

1、指定目录下载安装包 wget http://nginx.org/download/nginx-1.25.3.tar.gz 2、重命名老版本nginx目录 cd /usr/local/ mv nginx nginx_1.8.0 3、解压更新版本的压缩包 tar -zxvf nginx-1.25.3.tar.gz 4、进入nginx安装包目录下执行如下命令检测系统环境 --with-stream: 添…

Citrix思杰虚拟桌面离场,国产云桌面是否应继续对接微软Windows AD域?

2023年&#xff0c;12月3日&#xff0c;Citrix&#xff08;思杰&#xff09;全面退出中国市场。Citrix进入中国市场时&#xff0c;定位是大客户、高价值企业&#xff0c;客户群集中在国企、大型制造业、外资、金融等中大型企业&#xff0c;例如华为、中国移动、平安银行、建设银…

【Python】编程练习的解密与实战(二)

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《Python | 编程解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1fa90;1. 初识Python …

【IC设计】ICer‘s 乾坤大挪移——FSM状态机

目录 理论解读写几段式状态机&#xff1f; 设计实战两种state的FSM&#xff08;异步复位&#xff09; 理论解读 写几段式状态机&#xff1f; 设计实战 两种state的FSM&#xff08;异步复位&#xff09; 实现下图所示的摩尔状态机&#xff0c;复位为异步复位。 代码实现&am…

【笔记】书生·浦语大模型实战营——第三课(基于 InternLM 和 LangChain 搭建你的知识库)

【参考&#xff1a;tutorial/langchain at main InternLM/tutorial】 【参考&#xff1a;(3)基于 InternLM 和 LangChain 搭建你的知识库_哔哩哔哩_bilibili-【OpenMMLab】】 笔记 基础作业 这里需要等好几分钟才行 bug&#xff1a; 碰到pandas相关报错就卸载重装 输出文字…