向量数据库如何助力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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker实践:部署Docker管理工具DockerUI

Docker实践&#xff1a;部署Docker管理工具DockerUI 前言一、DockerUI介绍1.1 DockerUI概述1.2 镜像说明 二、检查本地Docker环境三、拉取DockerUI镜像四、创建DockerUI容器五、访问DockerUI六、DockerUI的基本使用6.1 查询宿主机容器情况6.2 查询Docker镜像列表6.3 查看容器配…

【excel】VBA股票数据获取(搜狐股票)

文章目录 一、序二、excel 自动刷新股票数据三、付费获取 一、序 我其实不会 excel 的函数和 visual basic。因为都可以用matlab和python完成。 今天用了下VBA&#xff0c;还挺不错的。分享下。 上传写了个matlab获取股票数据的&#xff0c;是雅虎财经的。这次是搜狐股票的数…

解锁企业数据管理统一身份认证难题,EasyMR助力企业敏捷提效

在数字经济迅猛发展的当下&#xff0c;企业数据量正以令人惊叹的速度持续增长。据IDC研究显示&#xff0c;至2025年&#xff0c;全球数据总量预计将超175 ZB。数据的爆发式增长对企业而言&#xff0c;既是机遇&#xff0c;更是巨大挑战。 如今&#xff0c;大数据已然成为企业决…

IntelliJ IDEA Type Hierarchy Scope Pattern 学习指南

IntelliJ IDEA Type Hierarchy Scope Pattern 学习指南 什么是 Type Hierarchy&#xff1f; Type Hierarchy 是 IntelliJ IDEA 提供的一个工具&#xff0c;允许开发者查看某个类的继承关系及其实现的接口结构。它是理解类关系的重要工具&#xff0c;尤其在处理复杂的继承体系…

ukui-quick 计数器

作品简介 使用ukui-quick框架进行开发&#xff0c;实现了在任务栏中计数器的插件&#xff0c;方便用户的日常使用。 技术架构 用于实现一个具有点击计数功能的QML应用程序。这个架构将包括C后端和QML前端&#xff0c;通过Qt的信号和属性绑定机制进行交互。 实现过程 开发环…

Flutter:封装ActionSheet 操作菜单

演示效果图 action_sheet_util.dart import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:demo/common/index.dart;class ActionSheetUtil {/// 底部操作表/// [context] 上下文/// [title] 标题/// [items] 选项列表 …

【混合开发】CefSharp+Vue 解决Cookie问题

问题表现 使用Element-admin架构搭建Vue前端项目&#xff0c;在与CefSharp搭配时&#xff0c;出现无法使用cookie的问题。 无法将token存入cookiecookie无法被读取 如下图&#xff0c;Cookies下显示file://。 正常的Cookies显示&#xff0c;Cookies显示为http://域名&#x…

IIO(Industrial I/O)驱动介绍

文章目录 IIO&#xff08;Industrial I/O&#xff09;驱动是Linux内核中用于工业I/O设备的子系统&#xff0c;主要用于处理传感器数据采集和转换。以下是其关键点&#xff1a; 功能 数据采集&#xff1a;从传感器读取数据。数据处理&#xff1a;对原始数据进行滤波、校准等操作…

Flutter插件制作、本地/远程依赖及缓存机制深入剖析(原创-附源码)

Flutter插件在开发Flutter项目的过程中扮演着重要的角色&#xff0c;我们从 ​​​​​​https://pub.dev 上下载添加到项目中的第三方库都是以包或者插件的形式引入到代码中的&#xff0c;这些第三方工具极大的提高了开发效率。 深入的了解插件的制作、发布、工作原理和缓存机…

C#轻松实现条形码二维码生成及识别

一、前言 大家好&#xff01;我是付工。 今天给大家分享一下&#xff0c;如何基于C#来生成并识别条形码或者二维码。 二、ZXing.Net 实现二维码生成的库有很多&#xff0c;我们这里采用的是http://ZXing.Net。 ZXing是一个开放源码的&#xff0c;用Java实现的多种格式的一…

一些常见的Java面试题及其答案

Java基础 1. Java中的基本数据类型有哪些&#xff1f; 答案&#xff1a;Java中的基本数据类型包括整数类型&#xff08;byte、short、int、long&#xff09;、浮点类型&#xff08;float、double&#xff09;、字符类型&#xff08;char&#xff09;和布尔类型&#xff08;boo…

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统

基于深度学习YOLOv5神经网络水果蔬菜检测识别系统&#xff0c;其能识别的水果蔬菜有15种&#xff0c;# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…

用css和html制作太极图

目录 css相关参数介绍 边距 边框 伪元素选择器 太极图案例实现、 代码 效果 css相关参数介绍 边距 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}div{width: …

WPF、控件模板(ControlTemplate)和数据模板(DataTemplate)

前言 在 WPF 中&#xff0c;控件种类丰富且功能非常完善。一个显著的优点是 WPF 提供了强大的自定义能力和灵活的用户界面表现&#xff0c;能够满足各种复杂的应用需求。其中&#xff0c;ControlTemplate 和 DataTemplate 是两个非常重要的概念&#xff0c;分别用于自定义控件…

RAG实战_01代码生成_02智能检索

整理了RAG案例的Git代码 https://github.com/LGRY/RAG_Tutorial/tree/main 【注意事项】 01 代码生成系统源代码中使用的weaviate向量数据库&#xff0c;不支持window系统&#xff0c;建议换系统/换向量数据库02 智能检索系统 同样需要配置向量数据库&#xff0c;可以先安…

【Linux系统编程】—— 自动化构建工具Makefile指南

文章目录 背景基本使用推导过程适度扩展语法 背景 Makefile 是衡量开发者是否具备完成大型工程能力的一个重要标志。在一个工程中&#xff0c;源文件的数量可能极多&#xff0c;这些文件会按照类型、功能或模块分布在多个目录中。Makefile 通过定义一系列规则&#xff0c;指定…

【JavaWeb01】JavaWeb开发基础:HTML的深度解析与应用

文章目录 前言&#x1f30d;一.B/S 软件开发架构简述&#x1f30d;二.HTML 介绍❄️2.1 官方文档❄️2.2 网页的组成❄️2.3 HTML 是什么❄️2.4html基本结构 &#x1f30d;三.HTML标签1.html 的标签/元素-说明2. html 标签注意事项和细节3.font 字体标签4.标题标签5.超链接标签…

Android-目前最稳定和高效的UI适配方案

谈到适配&#xff0c;首先需要介绍几个基本单位&#xff1a; 1、密度无关像素&#xff08;dp&#xff09;&#xff1a; 含义&#xff1a;density-independent pixel&#xff0c;叫dp或dip&#xff0c;与终端上的实际物理像素点无关 单位&#xff1a;dp&#xff0c;可以保证在…

图片和短信验证码(头条项目-06)

1 图形验证码接口设计 将后端⽣成的图⽚验证码存储在redis数据库2号库。 结构&#xff1a; {img_uuid:0594} 1.1 创建验证码⼦应⽤ $ cd apps $ python ../../manage.py startapp verifications # 注册新应⽤ INSTALLED_APPS [django.contrib.admin,django.contrib.auth,…

java8 springboot 集成javaFx 实现一个客户端程序

1. 先创建一个springboot 程序(此步骤不做流程展示) 2. 更改springboot的版本依赖和导入所需依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.7</versio…