在不断发展的数据管理环境中,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 作为向量数据库将进一步推动数据驱动的业务转型和技术进步。
参考资料:
https://360digitmg.com/blog/elasticsearch-vector-database
https://medium.com/bigdata-blog/how-to-use-elasticsearch-as-vector-database-5f1768f7d46a
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享]👈
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。