当前位置:   article > 正文

LLM在中文Text2SQL任务上的实践

LLM在中文Text2SQL任务上的实践

一. 前言

1.1 什么是Text2SQL:

Text2SQL是将自然语言文本(Text)转换成结构化查询语言SQL的过程,属于自然语言处理-语义分析(Semantic Parsing)领域的子任务。通过该技术,可以简化查询创建过程,一般适用于简单的选择查询和复杂的查询操作,如级联查询等等。

1.2 Text2SQL的主要特征:

自然语言转换: 轻松将文本转换为结构化的SQL查询语句,方便不熟悉SQL的人员进行应用。
友好的交互方式: 落地时可以通过语音交互或者文本输入完成查询操作。

1.3 Text2SQL示例:

假设有以下数据表, 如: table_name=product_item_table:
在这里插入图片描述
用户输入: query = 查询近七日点击率大于0.1并且商品销量大于1000的商品名称。
返回结果: SELECT item_name FROM product_item_table WHERE item_ctr_7_days > 0.1 AND item_sales_cnt > 1000;
在这里插入图片描述

二. 相关技术

2.1 发展历史:

在这里插入图片描述

2.2 数据集:

在这里插入图片描述

2.3 参考数据格式:

在这里插入图片描述
在这里插入图片描述

2.4 快速入门:

(2023-International Conference on Very Large Data Bases,VLDB,CCF-A)A survey on deep learning approaches for text-to-SQL
(2022-IEEE Transactions on Knowledge and Data Engineering,TKDE,CCF-A) A Survey on Text-to-SQL Parsing: Concepts, Methods, and Future Directions
(2022-International Conference on Computational Linguistics,COLOING,CCF-B) Recent Advances in Text-to-SQL: A Survey of What We Have and What We Expect
(2022-arXiv)Deep Learning Driven Natural Languages Text to SQL Query Conversion: A Survey

2.5 State of the art:

在这里插入图片描述

三. 建模方法

3.1 任务拆解:

我们可以将Text2SQL任务拆解为2个大的部分,第一是利用LLM对用户的输入进行语义理解,然后结合数据库中表的结构信息,抽取出相关的字段信息。第二是利用抽取的字段信息生成结构化的SQL语句。对于SQL语句的执行,这部分的工作交给了应用层的服务。

3.2 底座模型选择:

Llama
2023年2月,Meta AI提出开源大模型Llama,有7b、13b、33b、65b共4种规模。
2023年7月,Meta AI提出第二代Llama系列开源大模型Llama 2,和Llama 1相比,训练数据多40%,上下文长度翻倍,模型有7b、13b、34b、70b共4种规格,但是34b没有开源。
ChatGLM
2023年3月,清华大学提出了开源的双语大模型ChatGLM,基于GLM框架,参数规格为6b。
2023年6月,清华大学提出了ChatGLM的第二代版本ChatGLM 2,规范为6b,具有更强的性能、更长的上下文、更高效的推理和更开放的许可。
Alpaca
2023年3月,斯坦福大学提出基于Llama 7b模型微调的开源大模型Alpaca,有7b共1种规格,训练更简单和便宜。
Vicuna
2023年3月,UC伯克利大学联合CMU、斯坦福大学提出的开源大模型Vicuna,有7b、13b共2种规格。
WizardLM
2023年4月,北京大学和微软提出进化指令大模型WizardLM,有7b、13b、30b共3种规格,2023年6月,提出了数学领域的大模型WizardMath,2023年8月提出了代码领域的大模型WizardCoder。
Falcon
2023年6月, 阿联酋提出了大模型Falcon,这是一种仅在网络数据集上训练的开源大模型,具有 1b、7b、40b和180b四个参数规范。值得注意的是,其中Falcon 40B的性能超过了LLaMA 65B。
BaiChuan
2023年9月,百川智能发布了百川2大模型,支持7b和13b两种规格。
Qwen
2023年4月,阿里云发布的大模型,支持7b和18b规格。
InternLM
2023年8月,上海AI实验室发布的大模型,支持7B和14B规格。

3.3 信息抽取:

这里的信息抽取是根据用户的输入信息,抽取相关表的字段信息和对应的参数值。首先需要设置对应的prompt。
在这里插入图片描述
对于信息抽取的任务,我们可以简单的抽取相关的数据信息,在设置prompt信息时,可以简单地设计为如下格式:
在这里插入图片描述

3.4 SQL语句生成:

通过第一步抽取到的schema信息和用户的输入,可以构建SQL生成的prompt,可以参考如下格式:
在这里插入图片描述
至此,LLM已经可以根据用户的描述生成对应的SQL语句了。

四. 微调优化

如果你采用上述的流程进行Text2SQL推理,流程上是可以跑通的,但是体验不怎么好,你可能会遇到下列问题:
1.回复的内容不是纯SQL语言,可能包含对生成内容的解释和说明。
解决方法: 优化对应的prompt结构,示例中仅给出了简单的instruction指令部分和每个子任务的输入和输出的结构,可以在此基础上进一步优化。
2. 子任务的拆解,便于LLM学习到因果关系。
示例中的子任务拆解,还可以进一步优化,并且优化后的效果在我们的对比实验上要更好,因为该操作可以让LLM更容易学习到具体的推理逻辑。
3.大模型幻觉问题。如: 查找近七日点击率大于5%的商品名称。
对于的数据的处理,可以适当地做下归一化处理,如将5%处理成0.05,就可以避免上述问题。
4.SFT优化,设计prompt时增加few-shot exsamples会比较zero-shot好。
5.LLM的fine-turning,条件允许,可以利用自己的数据集进行微调,以适配更复杂的业务场景,在上述的示例中,LLM能支持简单的SQL查询和简单的级联查询操作。对于复杂的SQL查询场景,需要对prompt进行更详细的设计和有监督训练。
6. LLM数据安全问题,一般数据库的数据会涉及到安全性问题,用本地化模块部署比GPT好。

五. 实验结果

这里直接上图(这里仅展示了2个case),测试的结果还是相对可以的。
在这里插入图片描述
在这里插入图片描述
这里的测试case2的输出结果是正确的,可以参考2张图一起看。从上述结果可以看出,LLM是支持简单的查询和级联查询。

六. 留言

文章中只是给出了Text2SQL业务的整体建模的方法,需要进行工业落地,还是有大量的工程问题要解决的,博主在此任务上,为众多创业公司提供了技术支持,在对应的业务场景下进行业务落地,有相关的业务合作可以联系作者哦。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/408099
推荐阅读
相关标签
  

闽ICP备14008679号