向量数据库如何助力Text2SQL处理高基数类别数据

627431f6eb6256e6e5e328815341442f.png

f5f7998b6c868f2e06b2a57d62217099.png

01.

导语

Agent工作流和 LLMs (大语言模型)的出现,让我们能够以自然语言交互的模式执行复杂的SQL查询,并彻底改变Text2SQL系统的运行方式。其典型代表是如何处理High-Cardinality Categorical Data (高基数类别数据)。

围绕这一问题,本文将以Waii和Zilliz Cloud(完全托管的Milvus向量数据库)组合为例,展示如何将向量数据库与 Agentic Text2SQL系统集成。

02.

为什么Text2SQL不适合查询高基数类别数据

Categorical data (类别数据)在数据库中无处不在,比如各种产品类别、客户细分或交易类型。其典型代表如,人的性别分为男和女,中国一共有34个省级行政区。

不难发现,以上类别数据,其去重后唯一值的数量(cardinality)是可控的。相应的,这些低基数列对于Text2SQL系统来说相对容易处理,因为自然语言查询和数据库值之间的差距很小。

但当我们遇到高基数类别数据(某一类别特征的取值数量巨大)时,问题就出现了。比如,超过60%的数据库大多长这样:包含数百万个唯一ID的产品目录,或包含数十万企业ID的金融数据库,甚至数据量超过上亿的身份识别库与电商IP地址库。

数据库需要对这些类别进行精确、严格的查找,但基于自然语言描述的查询通常是模糊和不精确的。比如,用户可能会问“最近什么剧比较火”或“最近哪个股票涨的比较好”。如何将这些模糊的描述转化为精准的数据库查询,Text2SQL根本无法做到。

03.

如何补足Text2SQL的短板

通常,Text2SQL 系统在做高基数类别数据的自然语言查询时会采用以下两种方法:

  • 数据预处理技术(Preprocessed Database Techniques):这种方法结合输入预处理并依赖于传统的数据库功能,如文本搜索和正则表达式。虽然它可以处理简单的匹配,但通常由于过于僵化而无法准确表示用户的想法,尤其是在复杂或精细化的查询中,我们的自然语言通常是非常多变的。

  • 基于LLM的翻译(LLM-Based Translation):在这种方法中,使用基于数据或少量示例训练的LLM来预测正确的类别值。虽然LLM在理解上下文和自然语言方面表现出色,但在处理高基数数据时经常产生错误的结果。这是因为LLM缺乏对完整(通常是私有的)数据集的了解,因此很难对那些不在训练数据中的如企业ID等信息进行查询。

对于高基数数据的处理,以上两种方法都有短板。

数据预处理技术过于僵化和字面化,无法有效处理自然语言查询的细微差别;而LLM虽然可以理解查询意图,但无法精准理解不在预训练数据中出现的特殊值。

04.

向量数据库如何解决高基数类别数据查询困境

向量数据库旨在存储和高效查询数据的高维向量表达。不难发现,向量数据库的查询并非基于关键词匹配,而是主要是使用embedding进行语义搜索。因此,查询高基数类别数据,正是向量数据库的擅长之处。

接下来,我们会展示如何利用向量数据库来做基于自然语言的高基数类别数据查询。

工作原理:

  • 创建embedding(Create Vector Embeddings):为高基数列中的每个唯一值创建embedding。该embedding通过将值映射到高维空间中的向量来捕获其语义含义。

  • 在向量数据库中索引(Index in a VectorDB):将这些embedding存储在像Milvus这样的向量数据库中,该数据库针对高维空间中的快速相似性搜索进行了优化。

  • 查询处理(Query Processing):当用户提交自然语言查询时,使用LLM理解意图并生成初步SQL查询。对于高基数列,LLM不是尝试生成特定值,而是生成所需值的描述或特征。

  • 向量搜索(Vector Search):使用此描述的embedding对向量数据库进行相似性搜索,检索相关的类别值。

  • 优化(Refinement):LLM可以根据用户查询的完整上下文过滤掉任何不相关的匹配项。

  • SQL生成(SQL Generation):通过使用优化的类别值列表构建相应的filter查询以及汇总来生成最终的SQL查询。

05.

在Text2SQL中使用向量搜索的好处

向量数据库增强的方法提供了几个优势:

  • 可扩展性(Scalability):它可以处理具有数百万个唯一值的类别,而不会显著降低性能。

  • 准确性(Accuracy):通过结合LLM的语义理解和向量数据库的精确召回,可以更准确地将用户意图翻译为特定的数据库值。

  • 灵活性(Flexibility):这种方法可以适应数据库的更新,而无需重新训练整个系统。

06.

选型与部署

落地中,我们可以考虑通过结合Waii和Zilliz Cloud,来进行实际部署。

6.1 Waii用于智能Text2SQL

Waii是世界上第一个基于 Agent 工作流构建的Text2SQL API。它结合了编译器技术和自动生成的知识图谱,以实现最准确的查询生成。

  • 自动检测(Automatic Detection):Waii自动识别这些高基数列,无需手动配置。

  • 智能生成(Smart Embedding Generation):它采用定制的工作流为不同类型的列构建和更新embedding,优化准确性和资源效率。

  • 自适应技术(Adaptive Techniques):Waii自动选择适合各种列类型的技术,确保最佳性能,而无需用户具备深厚的专业知识。

6.2 Zilliz Cloud用于向量语义搜索

Zilliz Cloud是支持高性能的向量数据库,它的扩展能力和低延迟精准召回的能力使其成为AI 应用开发中的最佳选择,与Waii相辅相成。

  • 可扩展性(Scalability):Zilliz Cloud可以轻松处理数十亿级的向量规模,使其成为高基数数据场景的理想选择。

  • 高性能查询(Lightning-Fast Queries):其优化的索引可以确保快速相似性搜索,保持低延迟。

  • 安全性和访问控制(Security and Access Control):Zilliz Cloud通过安全网络选项和加密协议提供企业级数据安全和隐私合规性。这确保了数据在传输和静态时的安全性。此外,Zilliz Cloud提供权限分明的身份控制和访问管理,包括基于角色的访问控制(RBAC)和OAuth 2.0,以实现安全的集中式单点登录(SSO)功能。

6.3 Waii和Zilliz Cloud的集成

  • 自动工作流(Seamless Workflow):Waii的自动预处理和Zilliz的强大向量存储相结合,可以创建一个在处理Text2SQL系统中高基数数据的流畅、端到端解决方案。

  • 生产级可用(Production-Ready):专为现实世界的大规模挑战设计,适用于各个场景的生产部署。

通过利用Waii的自动检测和Zilli的高效向量查询,可以建立在Text2SQL系统中处理高基数类别数据的强大解决方案,而无需手动开发代码进行元数据管理或embedding生成。

07.

实例

接下来,我们将展示如何部署一个监控全球数百万个新闻事件的查询平台。

数据库架构如下:

CREATE TABLE events (event_id INT PRIMARY KEY,event_name VARCHAR(255),event_date DATE,category VARCHAR(100),total_spent DECIMAL(10, 2)
);

event_name 是一个高基数类别列,包含数百万个唯一的描述性名称,如“Global AI Ethics Summit 2024”、“Sustainable Living Expo: Greening Our Future”或“5th Annual Quantum Computing Breakthrough Conference”。

分析师可能会问:“How much money was spent on AI events last month?”

以下是处理这个问题的不同方法:

方法一:传统的关键词匹配

在这种方法中,我们直接把用户提供的术语作为查询的搜索词。我们在这里使用不区分大小写的全文搜索。

SELECT SUM(total_spent) 
FROM events 
WHERE event_name ILIKE '%AI%'  AND event_date >=DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')AND event_date <DATE_TRUNC('month', CURRENT_DATE);

问题:这种方法错过了像“Machine Learning Symposium”或“Neural Network Workshop”这样与AI相关但不包含“AI”单词的事件,而且也可能错误地将“HAIR styling convention”这样含有“AI”字母的结果。

方法二:单独采用LLM

在这种方法中,LLM生成可能与搜索相关的多个术语,并据此构建filter查询。它通常会生成如下内容:

SELECT SUM(total_spent) 
FROM events 
WHERE (event_name ILIKE '%AI%'       OR event_name ILIKE '%Artificial Intelligence%'       OR event_name ILIKE '%Machine Learning%'       OR event_name ILIKE '%Neural Network%')AND event_date >= 
DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')AND event_date < 
DATE_TRUNC('month', CURRENT_DATE);

问题:虽然这种方法召回了更多与AI相关的事件,但它仍然局限于预定义的术语列表,可能会错过其他更新颖的AI相关的事件,依然无法实现精准召回。

08.

向量数据库+LLM方法

下图描述了整体流程。左侧是对事件表(events table)进行的预处理,右侧显示了生成查询的流程。

131033f64a92c588afe89681309f8bb2.png

查询生成流程:

  • Waii解释查询并重写描述:“与人工智能、机器学习、神经网络和其他AI技术相关的事件。”

  • 此描述用于查询Zilliz Cloud,返回基于语义相似性的相关事件ID列表。

  • Waii优化此列表,过滤掉可能被错误召回的非AI事件。

  • Waii使用Agent工作流将这些事件ID纳入最终的SQL查询:

SELECT SUM(total_spent) 
FROM events 
WHERE event_id IN (1234, 5678, 9101, 1121, 3141, 5161, 7181, 9202, 1222, 3242) 
AND event_date >= 
DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month') 
AND event_date < 
DATE_TRUNC('month', CURRENT_DATE);

这种方法可以准确识别与AI相关的事件,即使它们使用的是专业术语或并不包含明显的AI关键词,比如找到像“3rd Symposium on Generative Adversarial Networks”或“Workshop on Ethical Considerations in Reinforcement Learning”,而其他方法可能会错过。

通过利用向量相似性搜索,我们可以更准确地解释用户的意图,并将其与我们数据库中的高基数事件名称匹配,提供更全面和准确的结果。

09.

结论

随着数据量的持续增长和用户对直观数据交互的期望增加,在Text2SQL系统中处理高基数类别数据将变得更加普遍。通过利用Zilliz Cloud与Waii的结合,可以创建更强大、可扩展和准确的系统。

本文作者:

陈将(Zilliz 生态和 AI 平台负责人)

Gunther Hagleitner(CEO and co-founder of Waii)

推荐阅读

6d4eee7b8a45d2f2b5d24f39a6d78143.png

8d6bb58372b346b0d30a2aac07e48be4.png

0234cfff8fb0721f3728b375c245c307.png

a7dda4d85f0ffbee516d09907f1fb9a5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qBittorent访问webui时提示unauthorized解决方法

现象描述 QNAP使用Container Station运行容器&#xff0c;使用Docker封装qBittorrent时&#xff0c;访问IP:PORT的方式后无法访问到webui&#xff0c;而是提示unauthorized&#xff0c;如图&#xff1a; 原因分析 此时通常是由于设备IP与qBittorrent的ip地址不在同一个网段导致…

工程水印相机结合图纸,真实现场时间地点,如何使用水印相机,超简单方法只教一次!

在工程管理领域&#xff0c;精准记录现场信息至关重要。水印相机拍照功能&#xff0c;为工程人员提供了强大的现场信息记录工具&#xff0c;助力工程管理和统计工程量&#xff0c;更可以将图片分享到电脑、分享给同事&#xff0c;协同工作。 一、打开图纸 打开手机版CAD快速看图…

GO语言实现KMP算法

前言 本文结合朱战立教授编著的《数据结构—使用c语言&#xff08;第五版&#xff09;》&#xff08;以下简称为《数据结构&#xff08;第五版&#xff09;朱站立》&#xff09;中4.4.2章节内容编写&#xff0c;KMP的相关概念可参考此书4.4.2章节内容。原文中代码是C语言&…

LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105_中等_C++)(二叉树;递归)

LeetCode 热题 100_从前序与中序遍历序列构造二叉树&#xff08;47_105&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;递归&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;递归…

文档智能:OCR+Rocketqa+layoutxlm <Rocketqa>

此次梳理Rocketqa&#xff0c;个人认为该篇文件讲述的是段落搜索的改进点&#xff0c;关于其框架&#xff1a;粗检索 重排序----&#xff08;dual-encoder architecture&#xff09;&#xff0c;讲诉不多&#xff0c;那是另外的文章&#xff1b; 之前根据文档智能功能&#x…

ubuntu官方软件包网站 字体设置

在https://ubuntu.pkgs.org/22.04/ubuntu-universe-amd64/xl2tpd_1.3.16-1_amd64.deb.html搜索找到需要的软件后&#xff0c;点击&#xff0c;下滑&#xff0c; 即可在Links和Download找到相关链接&#xff0c;下载即可&#xff0c; 但是找不到ros的安装包&#xff0c; 字体设…

使用 WPF 和 C# 绘制覆盖网格的 3D 表面

此示例展示了如何使用 C# 代码和 XAML 绘制覆盖有网格的 3D 表面。示例使用 WPF 和 C# 将纹理应用于三角形展示了如何将纹理应用于三角形。此示例只是使用该技术将包含大网格的位图应用于表面。 在类级别&#xff0c;程序使用以下代码来定义将点的 X 和 Z 坐标映射到 0.0 - 1.…

[Do374]Ansible一键搭建sftp实现用户批量增删

[Do374]Ansible一键搭建sftp实现用户批量增删 1. 前言2. 思路3. sftp搭建及用户批量新增3.1 配置文件内容3.2 执行测试3.3 登录测试3.4 确认sftp服务器配置文件 4. 测试删除用户 1. 前言 最近准备搞一下RHCA LV V,外加2.9之后的ansible有较大变化于是练习下Do374的课程内容. 工…

【IDEA 2024】学习笔记--文件选项卡

在我们项目的开发过程中&#xff0c;由于项目涉及的类过多&#xff0c;以至于我们会打开很多的窗口。使用IDEA默认的配置&#xff0c;个人觉得十分不便。 目录 一、设置多个文件选项卡按照文件字母顺序排列 二、设置多个文件选项卡分行显示 一、设置多个文件选项卡按照文件字…

Docker save load 镜像 tag 为 <none>

一、场景分析 我从 docker hub 上拉了这么一个镜像。 docker pull tomcat:8.5-jre8-alpine 我用 docker save 命令想把它导出成 tar 文件以便拷贝到内网机器上使用。 docker save -o tomcat-8.5-jre8-alpine.tar.gz 镜像ID 当我把这个镜像传到别的机器&#xff0c;并用 dock…

O2O同城系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…

走出实验室的人形机器人,将复刻ChatGPT之路?

1月7日&#xff0c;在2025年CES电子展现场&#xff0c;黄仁勋不仅展示了他全新的皮衣和采用Blackwell架构的RTX 50系列显卡&#xff0c;更进一步展现了他对于机器人技术领域&#xff0c;特别是人形机器人和通用机器人技术的笃信。黄仁勋认为机器人即将迎来ChatGPT般的突破&…

EF Core执行原生SQL语句

目录 EFCore执行非查询原生SQL语句 为什么要写原生SQL语句 执行非查询SQL语句 有SQL注入漏洞 ExecuteSqlInterpolatedAsync 其他方法 执行实体相关查询原生SQL语句 FromSqlInterpolated 局限性 执行任意原生SQL查询语句 什么时候用ADO.NET 执行任意SQL Dapper 总…

Java中网络编程的学习

目录 网络编程概述 网络模型 网络通信三要素: IP 端口号 通信协议 IP地址&#xff08;Internet Protocol Address&#xff09; 端口号 网络通信协议 TCP 三次握手 四次挥手 UDP TCP编程 客户端Socket的工作过程包含以下四个基本的步骤&#xff1a; 服务器程序…

HarmonyOS NEXT开发进阶(七):页面跳转

文章目录 一、前言二、页面跳转三、页面返回四、页面返回前增加确认对话框4.1 系统的默认询问框4.2 自定义询问框 五、拓展阅读 一、前言 APP开发过程中&#xff0c;多页面跳转场景十分常见&#xff0c;例如&#xff0c;登录 -> 首页 -> 个人中心。在鸿蒙开发中&#xf…

【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、计算机基础概念 1.1、什么是计算机 1.2、什么是编程 1.3、编程语言有哪些 2、Python 背景知识 2.…

学习threejs,使用FlyControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.FlyControls 相机控制…

隐私计算,构建安全的未来数据空间

大数据产业创新服务媒体 ——聚焦数据 改变商业 在医疗领域&#xff0c;不同医院之间需要共享患者数据&#xff0c;以提供更全面准确的诊断和治疗方案。 传统的数据处理方式通常是数据经过转换隐藏重要数据后再进行分析&#xff0c;虽然可以保护数据隐私&#xff0c;但在数据源…

Java 面试中的高频算法题详解

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…