Text2SQL 在金融行业的应用实践
一、Text2SQL介绍
简单来说,Text-to-SQL(常简写为Text2SQL)就是一项把人类日常使用的自然语言描述,转换成数据库能理解的SQL查询语句的技术。官方一点的定义是:将数据库领域下的自然语言问题,转化为能在关系型数据库中执行的结构化查询语言——所以它也被称作NL2SQL[1]。
它的典型任务形式非常直观:给定一张表格的信息,输入一段自然语言文本,模型输出对应的SQL语句。
举个简单的例子:用户想查询“平均工资高于整体平均工资的部门名称,以及该部门内的最低教师工资”。Text2SQL模型分析这句话后,生成下面这条SQL语句,再由后端执行模块去数据库里跑出结果——
输入:自然语言问题:“What are the name and lowest instructor salary of the departments with a verage salary greater than the overall a verage?”
输出:SQL语句:“SELECT min(salary), department name FROM instructor GROUP BY department name HA VING a vg(T1.salary) > (SELECT a vq(salary) FROM instructor);”
图1 Text-to-SQL例子[2]
实际上,Text2SQL的本质是将人类语言转化为计算机可理解的规范语义表示,它是语义分析领域的一个子任务。同样的思路还有TEXT2Bash、TEXT2Python、TEX2Ja va等自然语言生成代码的研究方向。
二、Text2SQL的发展历程
这项技术的根源,可以追溯到自然语言处理和数据库领域的早期结合。上世纪中后期,人们就尝试开发通过自然语言直接访问数据库的界面(NLIDB)。不过,当时的系统对自然语言问题的解析不依赖句子成分,每个特定知识领域的数据库都需要专属的语义语法,适应性很差,发展也极其缓慢。
转机出现在2015年——AI复苏和自然语言处理的创新,让人们重新把目光投向NLIDB。如何更自然、更自由地与数据库交互,成了新的研究热点[3]。
下面梳理一下近年来Text2SQL领域的发展脉络和主流方法[3&4]:
早期阶段(1980s-2000s)
模板-规则匹配方法(2000s-2010s)
基于机器学习的方法(2010s至今)
结合大型预训练模型(2020s至今)
总体来说,Text2SQL技术走过了从规则到机器学习、再到深度学习的演变之路。随着研究不断推进,它在自然语言处理和数据库查询领域的应用前景无疑会越来越广阔。
三、金融领域实践
在实际的金融机构场景中,我们采用了结合大型预训练模型的方案来构建Text2SQL应用服务。具体做法是:把自然语言问题和对应的SQL查询组合成一个文本序列,输入到语言模型中进行理解和语义解析,最终生成可执行的SQL语句。这种方法能够有效捕捉两者之间的语义关联。
图2 Text2SQL应用服务流程
不过,在真实落地过程中,通用的预训练语言模型仍有优化的空间。实践中主要暴露两个问题:
1)
输出幻觉
2)
答案稳定性
针对这些痛点,我们尝试了Prompt Engineering(提示工程)、Fine-tuning(模型微调)、RAG(检索增强生成)三种主流优化方式。
- :通过设计特定提示词或句子,引导模型生成更符合用户意图的输出。比如加入SQL规则、语法、数据库特点等提示信息,帮助模型更好地理解SQL结构。
Prompt Engineering
- :在预训练模型基础上,使用专门的数据集进行微调,以适应特定任务。对Text2SQL来说,就是用大量SQL语句组成的微调数据集,提升模型对SQL的理解和生成能力。
Fine-tuning
- :这是目前大模型获取外部知识、消除幻觉的主流技术。通过加强知识检索能力,为模型提供更有依据的事实信息,解决生成式AI在专业领域表现不佳的固有缺陷。
RAG(检索增强生成)
这三种思路的对比如下:
1. Prompt Engineering(提示工程)
不经过任何Prompt,直接拿LLM提问“去年各产品的市场规模”,结果往往不尽如人意——模型生成的SQL语法正确,但字段含义和口径不对,完全不能满足业务真实需求。
基于这个发现,我们尝试在Prompt中预先植入场景知识。参考了SPIDER榜单排名前5的Prompt设计,提供的信息包括:结构化指令、数据库中表信息、场景案例的Few-shot Examples,并对案例问题中的题目和表结构进行对齐(Schema Linking)。经过这样精心调整的结构化引导,模型的输出效果明显改善。
优化后的Prompt再次提问,生成的答案能够准确反映真实业务场景的数据特点和查询要求。
结论:经过Prompt优化,模型生成的答案完全满足应用需求。
2. Fine-tuning(模型微调)
当前主流的微调方法包括Adapter Tuning、LORA、Prefix-Tuning、Prompt Tuning、P-tuning v2等。自然语言处理领域通常采用“大规模预训练+特定任务微调”的范式。但随着预训练模型规模越来越大,这种范式也面临挑战:
- 重新训练所有参数成本太高。
- Adapter会引入额外推理延迟,Prefix-Tuning训练难度大、效果不稳定。
基于“模型是过参数化的,存在更低的内在维度”这一概念,研究人员提出了低秩自适应(LoRA)方法。它的核心思想是:假设模型在任务适配过程中权重的改变量是低秩的,通过优化密集层变化的秩分解矩阵,间接训练部分密集层,同时保持预训练权重不变。
图3 LoRA的实现
我们在Text2SQL任务中尝试了LoRA方案。选择金融领域的真实业务SQL数据集,经过清洗和标注后,对模型进行重新训练和参数调整,使模型深度理解金融数据库查询场景和专业领域知识,尤其强化了对常用金融统计函数和统计口径的学习。
经LoRA微调后的模型,生成的答案在真实业务场景中表现更出色,对SQL用法的理解也更深入。
3. RAG(检索增强生成)
RAG将检索式方法和生成式方法结合起来,目的是提高信息检索的准确性和生成文本的质量。它的基本流程是:先从已有数据源或知识库中检索相关信息,再把检索到的信息作为大模型生成答案的依据。
具体来说,先把文本分割成块,用编码模型嵌入成向量,放入索引。然后为用户查询构建提示,告诉模型根据搜索到的上下文来回答用户的问题[7]。
图4 RAG(检索增强)基础流程[8]
在Text2SQL的数据库问答模型中应用RAG架构,可以明显提高信息检索的准确性和效率,帮助生成更贴近用户需求的SQL代码。结合检索和生成的优势,模型提供了更全面的代码查找和文本处理能力,使生成的答案更符合场景实际。
四、实践效果
通过综合运用Prompt、模型微调和检索增强技术,我们在相似的拓展问题上进行了验证。最终效果如下:在测试的44个金融真实数据查询案例中,依据SPIDER数据集的分类标准对SQL类型进行划分,模型可完成80%以上的一般查询和关联查询问题,在保证逻辑准确的前提下,能够完成60%以上的复杂嵌套SQL问题。模型幻觉出现的频率降到了7%以下。
我们通过自研的智鸿-共享智能决策引擎,完成了整套Text2SQL大模型的构建、优化和部署工作。平台建立了从数据接入、模型微调、提示工程、模型计算到上线应用的全流程大模型服务与管理模块。基于金融行业真实数据库查询数据,我们对预训练模型进行了上述三种方式的优化,实现了大模型训练到服务的全生命周期管理。
五、Text2SQL技术未来在金融领域的应用
Text2SQL技术能帮助金融机构高效处理大量自然语言查询问题,将其转换成SQL查询,从而大幅提升数据查询和分析的效率。未来,它在金融领域中的应用场景将更加广阔:
- :数据分析部门可以更便捷地通过自然语言提出分析需求,系统自动转换成SQL,快速从海量数据中提取关键信息。
数据分析场景
- :自动处理账户余额查询、交易记录查询等常见需求,快速检索数据库,以易于理解的方式回答用户问题。
业务与客户服务数据支持
- :为公司管理者提供便捷、人性化的数据库智能问询服务,辅助战略决策。
决策支持
- :用户只需描述需要的报告内容,系统就能自动提取数据并生成相应报告和图表。
自动化报表生成
- :帮助风险管理和合规部门快速查询和分析相关数据,更好地管理内外部风险。
风险管理与合规性监管
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名