首页 > 其他分享 >MariaDB 矢量版-专为人工智能设计

MariaDB 矢量版-专为人工智能设计

时间:2024-10-22 15:33:27浏览次数:1  
标签:人工智能 review 矢量 评论 embedding 搜索 MariaDB

image

    作为一名在关系型数据库系统领域拥有二十多年经验的解决方案架构师,我最近开始探索 MariaDB 的新矢量版,看看它能否解决我们面临的一些人工智能数据挑战。快速浏览一下似乎很有说服力,尤其是它如何将人工智能的魔力直接带入常规数据库设置中。不过,想通过一个简单的用例对它进行测试,看看它的实际表现如何。在本文中,将通过运行一个简单的用例,分享对 MariaDB 向量功能的实践经验和观察结果。具体来说,将把客户评论样本加载到 MariaDB 中,并执行快速相似性搜索以查找相关评论。

image

什么是 "矢量搜索”

语义文本搜索
图像搜索
音乐搜索
生成式人工智能--RAG,检索增强生成

image

环境设置

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 SentenceTransformer

model = 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)算法的改进版本。其搜索性能可与其他矢量搜索实现相媲美,在使用多个连接时,其可扩展性更胜一筹。
image
                                     单线程查询性能(向上和向右更好)


image

                                              多线程查询性能(向上和向右更好)


       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,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

image_thumb2_thumb_thumb_thumb_thumb[1]

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。

标签:人工智能,review,矢量,评论,embedding,搜索,MariaDB
From: https://www.cnblogs.com/wintersun/p/18492987

相关文章

  • Spring AI : Java写人工智能的应用框架
    SpringAI:为Java开发者提供高效集成大模型能力的框架当前Java调用大模型时,面临缺乏优质AI应用框架的挑战。Spring作为资深的Java应用框架提供者,通过推出SpringAI来解决这一问题。它借鉴了langchain的核心理念,并结合了Java面向对象编程的特点,为开发者提供了统一且可灵活替换......
  • 人工智能编程助手MarsCode注册和安装步骤
    人工智能编程助手MarsCode注册和安装步骤字节最近推出了人工智能编程助手MarsCode,功能非常强大。在IDEA中安装和使用MarsCode的步骤如下:一、注册MarsCode账号    注册地址:https://www.marscode.cn/events/s/iSMPHK8a/二、在Idea中安装插件    点击菜单“File”——......
  • 人工智能学习框架:构建与训练AI模型的基础工具
    人工智能学习框架:构建与训练AI模型的基础工具人工智能(AI)学习框架是构建和训练AI模型的基础工具,它们提供了一组预定义的算法、函数和工具,使得开发者能够更快速、更高效地构建AI应用。这些框架通常包括一系列的库、工具和接口,涵盖了机器学习、深度学习等多个领域。本文将详细......
  • 人工智能:塑造未来生活与工作的力量
           ......
  • 人工智能?在未来到底有怎样的发展和应用
    1,发展趋势:    模型持续优化升级:在计算机愈发成熟的阶段,人工智能也必然进行改进和优化,。一方面,研究人员会致力于提高模型的准确性,可靠性。例如,可以通过改进算法,增加训练数据的多样性和质量等方式,提升模型对复杂问题的处理能力。第二个方面,模型的规模可能会继续增大,以获......
  • 2024-10-21 学习人工智能的Day11
    1.基础1.1概念NumPy的全称是“NumericPython”,它是Python的第三方扩展包,主要用来计算、处理一维或多维数组在数组算术计算方面,NumPy提供了大量的数学函数NumPy的底层主要用C语言编写,因此它能够高速地执行数值计算NumPy还提供了多种数据结构,这些数据结构能够非......
  • 人工智能编程助手MarsCode注册和安装步骤
    字节跳动最近推出了人工智能编程助手MarsCode,功能非常强大。下面是安装和使用方法:一、注册MarsCode账号 注册地址:点击注册二、安装VSCode开发工具打开下载网站:https://code.visualstudio.com/点击“DownloadforWindows”按钮,如下图: 下载完毕后进行安装,然后点击按钮安装......
  • Hugging Face 与 Wiz Research 合作提高人工智能安全性
    本文首发于2024年5月我们很高兴地宣布,我们正在与Wiz合作,目标是提高我们平台和整个AI/ML生态系统的安全性。Wiz研究人员与HuggingFace就我们平台的安全性进行合作并分享了他们的发现。Wiz是一家云安全公司,帮助客户以安全的方式构建和维护软件。随着这项研究的发......
  • 人工智能 第六次课程
    回顾上次课所学内容简述ChatGPT的教学应用,(账号注册教案生成和课件制作整理文献和高效阅读论文修改和降重润色)使用生成式AI智能的基本技能掌握提示语设计提示语设计要点:1.目标明确2.简洁3.上下文相关性4.避免歧义5.迭代优化6.考虑多样性7.利用示例8.遵循道德和法律标......
  • 人工智能教育技术学10.21
    教案设计:人教版小学数学概率统计单元课程标题:探索生活中的概率与统计——让数据说话教学目标:知识与技能:使学生理解概率的基本概念,掌握简单事件的概率计算方法;学会收集、整理和分析数据,能够绘制基本的统计图表(如条形图、折线图、饼图)。过程与方法:通过小组合作学习,培养学生观察......