Redis 向量数据库,机器学习的高效存储解决方案。
微信搜索关注《AI科技论谈》
在机器学习和人工智能领域,高维向量数据的高效存储与检索是非常重要的。然而,传统数据库在处理此类复杂数据结构时,往往会出现性能瓶颈,导致查询效率低下。
Redis 作为一款流行的开源内存数据存储系统,已然成为构建高性能向量数据库的得力方案,该数据库能够很好地处理大规模机器学习应用。
什么是向量数据库?
在机器学习的背景下,向量是数字数组,用于表示高维空间中的数据点。这些向量通常用于将各种类型的数据(如文本、图像和音频)编码为可供机器学习算法处理的数值表示形式。向量数据库是一种专门设计用于高效存储、索引和查询这些高维向量的数据库。
为何选择 Redis 作为向量数据库?
Redis 具有诸多明显优势,是构建向量数据库的理想之选:
-
内存存储:数据存储于内存,读写速度极快,适合低延迟的实时数据处理应用。
-
原生向量支持:添加 RedisVec 模块后,支持原生向量数据类型,可高效存储和查询高维向量。
-
性能与可扩展性:每秒可处理数百万操作,能应对高要求的机器学习工作负载,支持数据分片和复制,可扩容量、增容错。
-
强大生态:有多种编程语言的客户端,便于与现有应用集成,且提供多种数据持久化选项,保障数据持久。
将数据录入 Redis 向量数据库
在执行向量搜索或查询之前,需要先将数据摄入 Redis 向量数据库。RedisVec 模块为我们提供了一种简便的方法,用于创建向量字段并添加向量。
以下是使用 Python 和 Redis-py 客户端库进行数据摄入的示例代码:
import redis
import numpy as np
# 连接到 Redis
r = redis.Redis()
# 创建一个向量字段
r.execute_command('FT.CREATE', 'vectors', 'VECTOR', 'VECTOR', 'FLAT', 'DIM', 300, 'TYPE', 'FLOAT32')
# 加载向量数据(例如从文件或机器学习模型中)
vectors = load_vectors()
# 将向量添加到字段中
for i, vec in enumerate(vectors):
r.execute_command('FT.ADD', 'vectors', f'doc{i}', 'VECTOR', *vec)
在这个示例中,我们首先创建一个名为“vectors”的 Redis 向量字段,其中包含 300 维的 float32 向量。然后,从某个源(例如文件或机器学习模型)加载向量数据,并使用“FT.ADD”命令将每个向量添加到字段中。每个向量都被分配一个唯一的文档 ID(“doc0”、“doc1”等)。
Redis 中的向量相似性搜索操作
向量数据库的核心用例之一是执行相似性搜索,也称为最近邻查询。Redis 凭借 RedisVec 模块提供的高效算法,能够依据多种距离度量方式(如欧几里得距离、余弦相似度或内积)找出与给定查询向量最为相似的向量。
以下是使用 Python 在 Redis 中执行向量相似性搜索的示例:
import numpy as np
# 加载查询向量(例如从用户输入或机器学习模型中)
query_vector = load_query_vector()
# 搜索查询向量的最近邻
results = r.execute_command('FT.NEARESTNEIGHBORS', 'vectors', 'VECTOR', *query_vector, 'K', 10)
# 处理搜索结果
for doc_id, score in results:
print(f'Document {doc_id.decode()} has a similarity score of {score}')
在这个示例中,首先加载一个查询向量(例如从用户输入或机器学习模型中)。然后,我们使用“FT.NEARESTNEIGHBORS”命令在“vectors”字段中搜索查询向量的 10 个最近邻。该命令返回一个元组列表,其中每个元组包含匹配向量的文档 ID 和相似度得分(基于所选的距离度量)。
Redis 向量数据库的查询操作
除了向量相似性搜索外,Redis 还提供了强大的查询功能,用于从向量数据库中过滤和检索数据。你可以将向量查询与其他 Redis 数据结构和命令结合使用,构建满足应用程序需求的复杂查询。
以下是使用 Python 查询 Redis 向量数据库的示例:
# 搜索具有特定标签且在一定相似度范围内的向量
tag ='music'
min_score = 0.7
max_score = 1.0
query_vector = load_query_vector()
results = r.execute_command('FT.NEARESTNEIGHBORS', 'vectors', 'VECTOR', *query_vector, 'SCORER', 'COSINE', 'FILTER', f'@tag:{{{tag}}}', 'MIN_SCORE', min_score, 'MAX_SCORE', max_score)
# 处理查询结果
for doc_id, score in results:
print(f'Document {doc_id.decode()} has a similarity score of {score}')
在这个示例中,我们搜索具有特定标签(“music”)且与查询向量的余弦相似度得分在 0.7 到 1.0 之间的向量。使用“FT.NEARESTNEIGHBORS”命令并附加参数来指定评分度量(“SCORER”)、过滤条件(“FILTER”)和相似度得分范围(“MIN_SCORE”和“MAX_SCORE”)。
高性能向量数据库的理想之选
Redis 凭借其内存架构、丰富的数据结构,以及 RedisVec 模块对原生向量数据类型的支持,已成长为构建高性能向量数据库的强大工具。同时,Redis 具有易于集成的特性,还拥有丰富的生态系统和活跃的社区,这使它成为构建基于向量的现代机器学习应用程序的上佳之选。无论是从性能、功能性,还是从开发和维护的便利性来看,Redis 都展现出了其独特的优势,为开发人员在处理向量数据方面提供了高效且可靠的解决方案,为开发高性能的机器学习应用程序奠定了坚实的基础。
推荐书单
《Llama大模型实践指南》
本书共包括7章,涵盖了从基础理论到实际应用的全方位内容。第1章深入探讨了大模型的基础理论。第2章和第3章专注于Llama 2大模型的部署和微调,提供了一系列实用的代码示例、案例分析和最佳实践。第4章介绍了多轮对话难题,这是许多大模型开发者和研究人员面临的一大挑战。第5章探讨了如何基于Llama 2定制行业大模型,以满足特定业务需求。第6章介绍了如何利用Llama 2和LangChain构建高效的文档问答模型。第7章展示了多语言大模型的技术细节和应用场景。本书既适合刚入门的学生和研究人员阅读,也适合有多年研究经验的专家和工程师阅读。通过阅读本书,读者不仅能掌握Llama 2大模型的核心概念和技术,还能学会如何将这些知识应用于实际问题,从而在这一快速发展的领域中取得优势。
5折购买链接:https://item.jd.com/13994485.html
精彩回顾
AI编程助手Cline发布3.1版本,剑指取代Cursor和Windsurf