作为一名在关系型数据库系统领域拥有二十多年经验的解决方案架构师,我最近开始探索 MariaDB 的新矢量版,看看它能否解决我们面临的一些人工智能数据挑战。快速浏览一下似乎很有说服力,尤其是它如何将人工智能的魔力直接带入常规数据库设置中。不过,想通过一个简单的用例对它进行测试,看看它的实际表现如何。在本文中,将通过运行一个简单的用例,分享对 MariaDB 向量功能的实践经验和观察结果。具体来说,将把客户评论样本加载到 MariaDB 中,并执行快速相似性搜索以查找相关评论。
什么是 "矢量搜索”
语义文本搜索
图像搜索
音乐搜索
生成式人工智能--RAG,检索增强生成
环境设置
Python 3.10 或更高版本
Docker
实验从使用 MariaDB 的最新版本(11.6)(包含向量功能)设置 Docker 容器开始。
# Pull the latest release
docker pull quay.io/mariadb-foundation/mariadb-devel:11.6-vector-preview# Update password
docker run -d --name mariadb_vector -e MYSQL_ROOT_PASSWORD=<replace_password> quay.io/mariadb-foundation/mariadb-devel:11.6-vector-preview
现在,创建一个表格并载入客户评论样本,其中包括每条评论的情感评分和嵌入。为了生成文本嵌入,使用了 SentenceTransformer,它可以让你使用预先训练好的模型。具体来说,决定使用一个名为 paraphrase-MiniLM-L6-v2 的模型,它能将我们的客户评论映射到 384 维空间中。SentenceTransformer是一个强大的Python库,由UKP实验室开发并维护,旨在简化多语言文本和图像嵌入的创建过程。SentenceTransformer能够将句子或文本转换成固定长度的向量,这些向量可以在高维空间中进行比较,从而判断文本之间的语义相似性。例如,通过计算两个句子嵌入向量之间的余弦相似度,可以量化它们之间的语义接近程度。这一功能在文本匹配、信息检索等领域具有广泛应用。语义搜索通过理解搜索查询的内容来提高搜索的准确性,而不是仅仅依赖于词汇匹配。SentenceTransformer将语料库中的所有条目嵌入到向量空间中,在搜索时,查询也会被嵌入到相同的向量空间中,并从语料库中找到最接近的嵌入。这种基于嵌入的相似性搜索方法能够显著提高搜索结果的准确性和相关性。
import mysql.connector
import numpy as np
from sentence_transformers import SentenceTransformermodel = SentenceTransformer('paraphrase-MiniLM-L6-v2')
# 我已经创建了一个名为 vectordb 的数据库
connection = mysql.connector.connect(
host="localhost",
user="root",
password="<password>", # Replace me
database="vectordb"
)
cursor = connection.cursor()# 创建一个表来存储带有情感评分和嵌入的客户评论。
cursor.execute("""
CREATE TABLE IF NOT EXISTS customer_reviews (
id INT PRIMARY KEY AUTO_INCREMENT,
product_name INT,
customer_review TEXT,
customer_sentiment_score FLOAT,
customer_review_embedding BLOB,
INDEX vector_idx (customer_review_embedding) USING HNSW
) ENGINE=ColumnStore;
""")# 评论样本
reviews = [
(1, "This product exceeded my expectations. Highly recommended!", 0.9),
(1, "Decent quality, but pricey.", 0.6),
(2, "Terrible experience. The product does not work.", 0.1),
(2, "Average product, ok ok", 0.5),
(3, "Absolutely love it! Best purchase I have made this year.", 1.0)
]# 将样本评论载入矢量数据库
for product_id, review_text, sentiment_score in reviews:
embedding = model.encode(review_text)
cursor.execute(
"INSERT INTO customer_reviews (product_id, review_text, sentiment_score, review_embedding) VALUES (%s, %s, %s, %s)",
(product_id, review_text, sentiment_score, embedding.tobytes()))connection.commit()
connection.close()
现在,让我们利用 MariaDB 的矢量功能来查找类似的评论。这更像是在问 "What other customers said similar to this review?与此评论类似的其他客户评论有哪些?在下面的示例中,要找出与客户评论 “I am super satisfied我超级满意!”相似的前 2 条评论。为此,将使用最新版本中的一个矢量函数(VEC_Distance_Euclidean)
# 将目标客户的评论转化为矢量
target_review_embedding = model.encode("I am super satisfied!")# 使用 MariaDB 的 VEC_Distance_Euclidean 函数查找前 2 条类似评论
cursor.execute("""
SELECT review_text, sentiment_score, VEC_Distance_Euclidean(review_embedding, %s) AS similarity
FROM customer_reviews
ORDER BY similarity
LIMIT %s
""", (target_review_embedding.tobytes(), 2))similar_reviews = cursor.fetchall()
观察
它易于设置,我们可以将结构化数据(如产品 ID 和情感评分)、非结构化数据(评论文本)及其矢量表示合并到一个表中。它在使用向量操作的同时还能使用 SQL 语法的功能,这让已经熟悉关系数据库的团队更容易上手。以下是该版本支持的矢量函数的完整列表。HNSW 索引提高了目前尝试的较大数据集的相似性搜索查询性能。
性能对比
- MariaDB 矢量版 提交 23ecb6ec89a:MariaDB 服务器的本地矢量搜索功能
- pgvector commit bb424e96e7: PostgreSQL 的向量相似性搜索扩展
- Qdrant 1.5.1, client version 1.5.4: 矢量数据库(不包括二进制量化,因为二进制量化对所用数据集的召回率很低)
- RediSearch 2.6.13 commit f966d37: Redis 的查询和索引引擎
- Weaviate 3.16.0: 矢量数据库
MariaDB 矢量预览版实现了分层导航小词语(HNSW)算法的改进版本。其搜索性能可与其他矢量搜索实现相媲美,在使用多个连接时,其可扩展性更胜一筹。
单线程查询性能(向上和向右更好)
多线程查询性能(向上和向右更好)
MariaDB Vector的性能极具竞争力。在较小的数据集上,在给定的召回率下,MariaDB Vector的qps最高,RediSearch次之;在大型数据集上,MariaDB Vector紧随RediSearch之后。另一方面,MariaDB Vector建立索引的速度比RediSearch快。有趣的是,专门的单用途矢量数据库并没有快多少。它们的搜索速度比 MariaDB Vector 和 RediSearch 都要差。除了在 GIST 数据集上的 Qdrant,其他数据库的索引建立时间也没有提高。
结论
总的来说,印象深刻!MariaDB 矢量版将简化某些人工智能驱动的架构。它在传统数据库世界和不断发展的人工智能工具需求之间架起了一座桥梁。在接下来的几个月里,期待着看到这项技术如何成熟,以及社区如何在实际应用中采用它。
今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,信息安全,团队建设 有参考作用 , 您可能感兴趣的文章:
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。