Elasticsearch:向量数据库的真相

这篇具有很好参考价值的文章主要介绍了Elasticsearch:向量数据库的真相。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索

通过工作示例了解什么是向量数据库、它们如何实现 “相似性” 搜索以及它们可以在明显的 LLM 空间之外的哪些地方使用。除非你一直生活在岩石下,否则你可能听说过诸如生成式人工智能和大型语言模型(LLM)之类的术语。 除此之外,你很有可能听说过向量数据库,它为 LLMs 的查询提供上下文。 有没有想过它们是什么以及它们在明显的 LLM 领域之外有何用处? 好吧,请继续阅读以了解这项令人兴奋的新技术,构建您自己的向量数据库并思考如何在你的项目中利用它,包括但不限于 LLMs。

以值匹配为中心的搜索的局限性

首先,让我们看看到底缺少什么而引发了对不同类型数据库技术的需求。 这是与搜索数据有关。 当你在数据库中听到 “搜索” 这个词时,你可能会立即想到正常的以数值或关键字为中心的搜索,例如:

  • 相等:其中 customer_id = 123
  • 比较:年龄大于 25 岁
  • 通配符:客户名称以 “Mc” 开头,例如 “McDonald”

有时,这些以价值为中心的搜索也相互依存,例如

其中年龄 (age) > 25 且邮政编码 (zipcode) = ‘12345’

现代数据库技术在过去几十年中不断发展,提高了此类搜索的效率,我将其称为 “以值为中心的搜索”,其中评估特定值以在查询中进行过滤。 虽然它们在许多情况下都可以工作,可以说在几乎所有与业务相关的应用程序中,但请考虑如下:

给我找一个像丽莎 (Lisa) 一样的客户

请注意所使用的过滤器:它并没有询问姓名为 “Lisa” 的客户; 只是像她这样的人,即与 Lisa 相似的人。 相似是什么意思? 这是一个很难回答的问题。 这不是名字,因为类似的客户可能被命名为 Alice、Bob 或 Charlie。 难道是他们的年龄? 可能吧。 假设丽莎的年龄是 40 岁。40 岁的顾客最相似。 25 岁的客户相似度会降低,55 岁的客户也同样不相似。

让我们思考一下。 考虑这三位顾客各自的年龄。

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索
顾客及其年龄

如果我们画一个图表,将 Lisa 的余额放在中间,然后绘制其他的图表,它将如下图所示。 他们的年龄与 40 岁(丽莎的年龄)的距离显示了他们距离该目标有多远。 在本例中,我们表明 Bob 最相似,Charlie 最不相似,而 Alice 更相似一些。

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索

年龄只是客户的一方面。 在寻找 “像丽莎” 这样的人时,我们可能会想到更多的属性; 不只是一个。 其中一个属性可以是客户的净资产,如下所示,添加到原始表中:

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索
具有两个属性的客户:年龄和净资产

如果 Lisa 的净资产是10万,这些客户之间会有什么新的相似之处? 我们可以创建一个以年龄和净资产为两个轴的二维图表,如下图所示。

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索
二维客户年龄和净资产 (注意上面 Y 轴的单位是 “千”)

然而,由于后者以千为单位,而前者以两位数为单位,因此图表将不成比例。 为了获得相同的比例,我们需要将这些绝对值转换为一些相对值以进行比较。 年龄从 20 岁到 80 岁不等,即相差 60 岁。因此,Alice 与 Lisa 的年龄距离为 (40–20)/60 = 0.33。 同样,净资产的分布范围为 50 到 200,即 150。同样,Bob 的净资产距离为 (200–100)/150 = 0.67。

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索
顾客与 Lisa 的相对距离

我们发现 Bob 的档案不再与丽莎 “相似”。 为了找到复合距离,我们可以在二维图上计算它们之间的距离,例如:

Composite Distance = Square Root of (Square of (Age Distance) + Square of (Net Worth Distance))

使用该公式,我们计算与 Lisa 的复合距离。

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索
客户与 Lisa 的复合距离

我们可能会发现 Alice 距离 Lisa 的距离可能比 Bob 要近,而且和 Charlie 距离是最远。 只需添加一个维度即可显着改变相似性。 考虑添加另一个维度,例如 “孩子的数量”,使其成为 3 维图,这可能会进一步改变物体与丽莎的距离。 实际上,对象有数百个属性可供比较。 将所有这些都写在纸上是不可能的。 但希望你能了解多维空间中两点之间的距离。 距离越小,点越相似,0 表示在所有维度上完全相同。

点的属性被捕获为向量。 在上面的例子中,向量的维度将是 [Age,Net Worth]; 所以我们将按如下方式表示这些值。

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索

代表 Lisa 的向量是 [40,100000]。 点之间的距离通常表示为欧几里德距离,如下面二维空间的函数 d() 所示。 资料来源:维基百科。

Elasticsearch:向量数据库的真相,Elasticsearch,AI,Elastic,数据库,搜索引擎,serverless,elasticsearch,大数据,全文检索

运用 Elasticsearch 作为向量数据并计算距离

在上面,我们通过一个详细的例子描述了如何把数据转换为向量,并计算向量直接的距离。事实上,如果我们通过手动的方式来计算,就显得非常麻烦。Elasticsearch 作为全球下载量最多的向量数据库,我们可以很方便地利用它来帮我们进行计算向量之间的相似性。下面,我们来通过 Elasticsearch 来实现向量之间的相似性。

首先,我们为向量的索引定义一个 mapping:

PUT my-index
{
  "mappings": {
    "properties": {
      "my_vector": {
        "type": "dense_vector",
        "dims": 2,
        "similarity": "l2_norm"
      },
      "name" : {
        "type" : "keyword"
      }
    }
  }
}

请注意,在上面,我们定义了一个叫做 dense_vector 的数据类型。这个就是我们的向量数据类型。它的维度为 2。我们可以详细参考 Elastic 官方文档来了解这个数据类型。my_vector 的相似性,我们使用 l2_norm 来定义 similarity,它表明是欧几里得距离。请详细参阅文档。

我们通过如下的命令来写入数据到 Elasticsearch:

POST my-index/_bulk?refresh=true
{ "index" : { "_id" : "1" } }
{ "name" : "Alice", "my_vector": [20,100000] }
{ "index" : { "_id" : "2" } }
{ "name" : "Bob", "my_vector": [40,200000] }
{ "index" : {"_id" : "3" } }
{ "name" : "Charlie", "my_vector": [80,50000] }

我们可以通过如下的命令来查看写入的数据:

GET my_index/_search?filter_path=**.hits

上面的命令返回的响应为:

  "hits": {
    "hits": [
      {
        "_index": "my_index",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "Alice",
          "my_vector": [
            20,
            100000
          ]
        }
      },
      {
        "_index": "my_index",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "Bob",
          "my_vector": [
            40,
            200000
          ]
        }
      },
      {
        "_index": "my_index",
        "_id": "3",
        "_score": 1,
        "_source": {
          "name": "Charlie",
          "my_vector": [
            80,
            50000
          ]
        }
      }
    ]
  }
}

我们可以通过 Elasticsearch 来计算我们搜索对象 Lisa 的距离。搜索的结果将返回在我们的向量数据库中最近的向量。它们是按照距离的大小进行排序的。在上面的向量中,我们想找到一个最相近的 Lisa,而它的向量为 [40, 100000]。我们可以通过如下的方法来搜索我们的向量:

接下来,我们使用 Elasticsearch 的 knn search 端点来进行搜索:

POST my-index/_search?filter_path=**.hits
{
  "knn": {
    "field": "my_vector",
    "query_vector": [40, 100000],
    "k": 10,
    "num_candidates": 100
  }
}

上面的搜索结果是:

{
  "hits": {
    "hits": [
      {
        "_index": "my-index",
        "_id": "1",
        "_score": 0.0024937657,
        "_source": {
          "name": "Alice",
          "my_vector": [
            20,
            100000
          ]
        }
      },
      {
        "_index": "my-index",
        "_id": "3",
        "_score": 3.9999976e-10,
        "_source": {
          "name": "Charlie",
          "my_vector": [
            80,
            50000
          ]
        }
      },
      {
        "_index": "my-index",
        "_id": "2",
        "_score": 1e-10,
        "_source": {
          "name": "Bob",
          "my_vector": [
            40,
            200000
          ]
        }
      }
    ]
  }

如上所示,我们看到的结果是 Alice 排名是第一的,而紧随其后的是 Charlie。而我们之前认为的 Bob 是排在最后的一个。Bob 的距离是最远的,这个和之前的推送方法有一定的误差,比如相对计算的方法不同。

更多有关 Elasticsearch 向量搜索的内容,请详细阅读文章 “AI”。文章来源地址https://www.toymoban.com/news/detail-759531.html

到了这里,关于Elasticsearch:向量数据库的真相的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 《向量数据库指南》——AI原生向量数据库Milvus Cloud 2.3新功能

    《向量数据库指南》——AI原生向量数据库Milvus Cloud 2.3新功能

    支持用户通过 upsert 接口更新或插入数据。已知限制,自增 id 不支持 upsert;upsert 是内部实现是 delete + insert所以性能上会有一定损耗,如果明确知道是写入数据的场景请继续使用 insert。 支持用户通过输入参数指定 search 的 distance 进行查询,返回所有与目标向量距离位于某一

    2024年02月09日
    浏览(13)
  • Elasticsearch:语义搜索、知识图和向量数据库概述

    Elasticsearch:语义搜索、知识图和向量数据库概述

    结合对你自己的私有数据执行语义搜索的概述 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术。 这种方法基于这样的想法:搜索引擎不仅应该匹配查询中的,还应该尝试理解用户搜索的意图以及所使用的单

    2024年02月16日
    浏览(16)
  • 向量数据库——AI时代的基座

    向量数据库——AI时代的基座

    向量数据库 在构建基于大语言模型的行业 智能应用 中扮演着重要角色。大模型虽然能回答一般性问题,但在垂直领域服务中,其知识深度、准确度和时效性有限。为了解决这一问题,企业可以利用向量数据库结合大模型和自有知识资产,构建垂直领域的智能服务。 向量数据

    2024年02月05日
    浏览(16)
  • AI大模型崛起,向量数据库登场

    引言 AI大模型的兴起 2.1 深度学习与大模型 2.2 大模型的挑战 向量数据库的概念与应用 3.1 向量表示与相似度计算 3.2 向量数据库的优势与应用场景 大模型与向量数据库的结合 4.1 向量数据库在大模型中的作用 4.2 大模型与向量数据库的相互促进 技术进展与未来展望 5.1 近期技

    2024年02月15日
    浏览(13)
  • 向量数据库,能让AI再次起飞吗?

    向量数据库,能让AI再次起飞吗?

    9月7-8日,深圳国际会展中心18号馆 来了,来了,腾讯面向产业互联网领域规格最高、规模最大、覆盖最广的年度科技盛会 -——- 腾讯全球数字生态大会 。 9 月 7 日,我们将 聚焦产业未来发展新趋势 ,针对云计算、大数据、人工智能、安全、 SaaS 等核心数字化工具做关键进

    2024年02月09日
    浏览(8)
  • 10个最流行的向量数据库【AI】

    10个最流行的向量数据库【AI】

    矢量数据库是一种将数据存储为高维向量的数据库,高维向量是特征或属性的数学表示。 每个向量都有一定数量的维度,范围从几十到几千不等,具体取决于数据的复杂性和粒度。 推荐:用 NSDT场景设计器 快速搭建3D场景。 矢量数据库(Vector Database)和矢量开发库(Vector

    2024年02月03日
    浏览(9)
  • centos 安装AI 向量数据库 chroma

    1 官网地址:https://docs.trychroma.com/getting-started 有两种方式:1,通过pip install ; 2 运行docker。 本教程通过pip install 方式: 通过以下方式解决: 写一个python测试程序 chromatest.py pip3 chromatest.py 运行报错: ImportError: zstd C API versions mismatch; Python bindings were not compiled/linked against expect

    2024年02月09日
    浏览(15)
  • Spring AI - 使用向量数据库实现检索式AI对话

    Spring AI - 使用向量数据库实现检索式AI对话

     Spring AI 并不仅限于针对大语言模型对话API进行了统一封装,它还可以通过简单的方式实现LangChain的一些功能。本篇将带领读者实现一个简单的检索式AI对话接口。  在一些场景下,我们想让AI根据我们提供的数据进行回复。因为对话有最大Token的限制,因此很多场景下我们

    2024年04月14日
    浏览(45)
  • ModaHub魔搭社区:腾讯云定义AI Native向量数据库

    ModaHub魔搭社区:腾讯云定义AI Native向量数据库

    大模型时代的到来,拥抱大模型成为企业的刚需。 向量数据库通过把数据向量化然后进行存储和查询,可以极大地提升效率和降低成本。它能解决大模型预训练成本高、没有“长期记忆”、知识更新不足、提示词工程复杂等问题,突破大模型在时间和空间上的限制,加速大模

    2024年02月12日
    浏览(16)
  • AI大模型低成本快速定制秘诀:RAG和向量数据库

    AI大模型低成本快速定制秘诀:RAG和向量数据库

      当今人工智能领域,最受关注的毋庸置疑是大模型。然而,高昂的训练成本、漫长的训练时间等都成为了制约大多数企业入局大模型的关键瓶颈。   这种背景下,向量数据库凭借其独特的优势,成为解决低成本快速定制大模型问题的关键所在。   向量数据库是一种

    2024年02月05日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包