RAG 向量数据库:掌握 Elasticsearch 作为向量数据库的终极指南

在不断发展的数据管理环境中,Elasticsearch 已成为一个突出的参与者,通过其向量数据库引入了突破性的功能,为数据搜索和检索领域带来的变革性影响。

从本质上讲,Elasticsearch 的向量数据库是一种尖端解决方案,旨在利用向量嵌入的潜力实现高效且可扩展的搜索操作。

Elasticsearch Vector DB是一种先进的数据存储和检索技术,它结合了Elasticsearch的全文搜索功能和向量搜索的能力。通过将数据表示为向量,Elasticsearch Vector DB能够高效处理和查询复杂的非结构化数据,如文本、图像和音频。

每个向量嵌入之间的距离使 Elasticsearch 的向量数据库能够确定相似性,从而促进索引、距离指标和相似性搜索。这种向量化的方式使其特别适用于自然语言处理(NLP)、推荐系统和相似性搜索等应用场景,从而提供更快速和精确的搜索体验。

在本地机器上设置一个单节点的 Elasticsearch 集群,可以帮助你理解其基本配置和运行方式。

Pull the docker images. 拉取 docker 镜像。

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2``docker pull docker.elastic.co/kibana/kibana:8.12.2

启动 Elasticsearch 和 Kibana 容器。

docker network create elastic``   ``docker run -d --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -m 1GB -e "discovery.type=single-node" -e "ELASTIC_PASSWORD=passw0rd" docker.elastic.co/elasticsearch/elasticsearch:8.12.2``   ``docker run -d --name kibana --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.2

验证容器是否已启动并正在运行。

docker ps``   ``CONTAINER ID   IMAGE                                                  COMMAND                  CREATED             STATUS             PORTS                                            NAMES``e288f61740da   docker.elastic.co/kibana/kibana:8.12.2                 "/bin/tini -- /usr/l…"   About an hour ago   Up About an hour   0.0.0.0:5601->5601/tcp                           kibana``16e62f66f4e0   docker.elastic.co/elasticsearch/elasticsearch:8.12.2   "/bin/tini -- /usr/l…"   About an hour ago   Up About an hour   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch

现在,让我们创建“电影”索引。我们将使用 text-embedding-3-small 模型来生成标题字段的向量嵌入并将其存储为 title_embedding。此模型生成长度为 1536 的嵌入。因此,我们需要将title_embedding字段映射指定为 dense_vector,具有 1536 个维度。

PUT /movies``{`  `"mappings": {`    `"properties": {`      `"title": {`        `"type": "text"`      `},`      `"genre": {`        `"type": "keyword"`      `},`      `"release_year": {`        `"type": "integer"`      `},`      `"title_embedding": {`        `"type": "dense_vector",`        `"dims": 1536`      `}`    `}`  `}``}

让我们使用 Elasticsearch Python 客户端插入一些文档。Python 客户端需要“ssl_assert_fingerprint”才能连接到 Elasticsearch。让我们使用以下命令来获取它:

openssl s_client -connect localhost:9200 -servername localhost -showcerts </dev/null 2>/dev/null \        ``  | openssl x509 -fingerprint -sha256 -noout -in /dev/stdin``   ``sha256 Fingerprint=AA:BB:CC:3C:A4:99:12:A8:D6:41:B7:A6:52:ED:CA:2E:0E:64:E2:0E:A7:8F:AE:4C:57:0E:4B:A3:00:11:22:33

现在我们可以在电影索引中插入一些文档。

from elasticsearch import Elasticsearch``from openai import OpenAI``   ``es_client = Elasticsearch(`    `"https://localhost:9200",`    `ssl_assert_fingerprint='AA:BB:CC:3C:A4:99:12:A8:D6:41:B7:A6:52:ED:CA:2E:0E:64:E2:0E:A7:8F:AE:4C:57:0E:4B:A3:00:11:22:33',`    `basic_auth=("elastic", "passw0rd")``)``openai_client = OpenAI(api_key='<openAI-API-key>')``   ``movies = [`    `{"title": "Inception", "genre": "Sci-Fi", "release_year": 2010},`    `{"title": "The Shawshank Redemption", "genre": "Drama", "release_year": 1994},`    `{"title": "The Godfather", "genre": "Crime", "release_year": 1972},`    `{"title": "Pulp Fiction", "genre": "Crime", "release_year": 1994},`    `{"title": "Forrest Gump", "genre": "Drama", "release_year": 1994}``]``   ``# Indexing movies``for movie in movies:`    `movie['title_embedding'] = openai_client.embeddings.create(`        `input=[movie['title']], model='text-embedding-3-small'`    `).data[0].embedding`    `es_client.index(index="movies", document=movie)

比方说,我们想搜索与标题《教父》非常匹配的电影。我们可以使用 K-最近邻 (KNN) 算法来搜索相关文档。我们将限制搜索,仅显示 1 个最接近的匹配结果。

首先,我们需要获取单词 Godfather 的向量表示:

vector_value = openai_client.embeddings.create(`        `input=["Godfather"], model='text-embedding-3-small'`    `).data[0].embedding

现在我们可以搜索电影索引,获取与片名《教父》非常匹配的电影。在我们的例子中,它应该将电影文档与标题《教父》匹配。

query_string = {`    `"field": "title_embedding",`    `"query_vector": vector_value,`    `"k": 1,`    `"num_candidates": 100``}``   ``results = es_client.search(index="movies", knn=query_string, source_includes=["title", "genre", "release_year"])``   ``print(results['hits']['hits'])

结果如下:

[{`    `"_index": "movies",`    `"_id": "XvDTV44BCOE-aWDhxeQK",`    `"_score": 0.8956262,`    `"_source":`    `{`        `"title": "The Godfather",`        `"genre": "Crime",`        `"release_year": 1972`    `}``}]

Elasticsearch 作为向量数据库具有重要的价值和意义,同时展现出广阔的未来趋势。

首先,它在处理相似性搜索方面表现出色。通过将文本、图像和音频等数据向量化,Elasticsearch 能够高效地进行相似性匹配和查询,这在自然语言处理(NLP)、推荐系统和图像识别等领域尤为重要。

此外,向量数据库结合了传统全文搜索和现代向量搜索的优点,提供了更精准和快速的搜索体验,提升了用户的满意度和业务的竞争力。

Elasticsearch 的扩展性和分布式架构使其能够处理大规模数据,支持实时数据处理和分析。这对于需要处理大量非结构化数据的应用场景,如社交媒体分析和用户行为分析,具有重要意义。其开放源代码和活跃的社区支持也为开发者提供了丰富的资源和工具,加速了技术的普及和创新。

未来,随着AI和机器学习技术的不断发展,向量数据库的需求将持续增长。Elasticsearch 将继续在这一领域发挥关键作用,提供更加智能和高效的数据管理解决方案。特别是在个性化推荐、语义搜索和自动化客户服务等方面,Elasticsearch 的应用前景非常广阔。通过不断优化和创新,Elasticsearch 作为向量数据库将进一步推动数据驱动的业务转型和技术进步。

参考资料:

  1. https://360digitmg.com/blog/elasticsearch-vector-database

  2. https://medium.com/bigdata-blog/how-to-use-elasticsearch-as-vector-database-5f1768f7d46a

零基础如何学习大模型 AI

领取方式在文末

为什么要学习大模型?

学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程,可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术,从而提升自己在数据处理、分析和决策制定方面的能力。此外,大模型技术在多个行业中的应用日益增加,掌握这一技术将有助于提高就业竞争力,并为未来的创新创业提供坚实的基础。

大模型实际应用案例分享

①智能客服:某科技公司员工在学习了大模型课程后,成功开发了一套基于自然语言处理的大模型智能客服系统。该系统不仅提高了客户服务效率,还显著降低了人工成本。
②医疗影像分析:一位医学研究人员通过学习大模型课程,掌握了深度学习技术在医疗影像分析中的应用。他开发的算法能够准确识别肿瘤等病变,为医生提供了有力的诊断辅助。
③金融风险管理:一位金融分析师利用大模型课程中学到的知识,开发了一套信用评分模型。该模型帮助银行更准确地评估贷款申请者的信用风险,降低了不良贷款率。
④智能推荐系统:一位电商平台的工程师在学习大模型课程后,优化了平台的商品推荐算法。新算法提高了用户满意度和购买转化率,为公司带来了显著的增长。

这些案例表明,学习大模型课程不仅能够提升个人技能,还能为企业带来实际效益,推动行业创新发展。

学习资料领取

如果你对大模型感兴趣,可以看看我整合并且整理成了一份AI大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述

如果二维码失效,可以点击下方链接,一样的哦
【CSDN大礼包】最新AI大模型资源包,这里全都有!无偿分享!!!

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值