自然语言to SQL的评估

一、怎么进行一个自然语言to SQL评估?

1.DB——准备可用的数据表

2.准备问题集,自然语言|正确的预期SQL

3.模型执行完成的SQL

4.Table.json——一个存储表格数据或者数据库表结构信息的 JSON 文件。当前是存储的表结构信息的,存储数据库表的元数据,例如表名、列名、列类型、主键、外键等信息。


二、获取Spider数据集,以及评估代码

https://yale-lily.github.io/spider 

个人理解:如有错误请指出

baselines\ :包含不同基线模型的代码和文档。
- nl2code\ :可能是一个将自然语言转换为代码的基线模型目录。
- seq2seq_attention_copy\ :包含序列到序列注意力复制模型的代码和脚本。
- sqlnet\ :包含 Modified SQLNet 基线模型的代码和文档。
- typesql\ :包含 Modified TypeSQL 基线模型的代码和文档。
evaluation_examples\ :包含评估示例文件。
preprocess\ :包含数据预处理的脚本和文档。
evaluation.py :用于评估模型的 Python 脚本。
process_sql.py :用于处理 SQL 查询的 Python 脚本。


三、以上调试成功后,执行命令结果

python evaluation.py --gold [gold file] --pred [predicted file] --etype [evaluation type] --db [database dir] --table [table file]

arguments:
  [gold file]        gold.sql file where each line is `a gold SQL \t db_id`
  [predicted file]   predicted sql file where each line is a predicted SQL
  [evaluation type]  "match" for exact set matching score, "exec" for execution score, and "all" for both
  [database dir]     directory which contains sub-directories where each SQLite3 database is stored
  [table file]       table.json file which includes foreign key info of each database
 

[gold file] 提供了正确的 SQL 答案和对应的数据库标识,而 [predicted file] 包含了模型生成的 SQL 预测结果,二者共同用于模型评估。

[evaluation type]:这是对不同评估方式的分类。

  • -match(精确集合匹配得分):当使用 “match” 评估类型时,主要关注的是被评估对象与给定集合在元素上的精确匹配程度。例如在文本处理中,判断一段文本中的词汇集合是否与标准词汇集合完全一致,根据匹配的程度来计算得分。
  • -exec(执行得分):“exec” 评估类型侧重于对某个操作、程序或任务执行结果的评估。比如在代码执行场景下,根据代码执行是否成功、执行结果是否符合预期等方面来计算得分。
  • -all(两者兼具):选择 “all” 意味着同时考虑精确集合匹配得分和执行得分,综合这两个方面来对对象进行评估。
[table file] 指的是一个名为 table.json 的文件,该文件包含了每个数据库的外键信息。

四、结果分析

各难度样本数量

count 行展示不同难度级别样本数量,easy250 个,medium440 个,hard174 个,extra170 个,总计 1034 个。评估指标

exact match(完全匹配准确率)

衡量预测 SQL 与标准 SQL 完全一致的比例。各难度级别分别为easy0.852medium0.720hard0.718extra0.388 ,整体为 0.697 。数值越高,完全匹配情况越好,extra难度下表现较差,说明复杂场景完全匹配难。

partial matching(部分匹配相关指标 )

  • 准确率(Accuracy):判断预测 SQL 中特定子句(如select where等 )正确的比例。如select子句在easy难度准确率 0.996 hard难度 1.000 ,反映不同难度下子句预测正确性。
  • 召回率(Recall):关注标准 SQL 中特定子句被正确预测出的比例。如where子句在medium难度召回率 0.854 ,体现对标准子句的捕捉能力。
  • F1 值(F1):综合准确率和召回率的指标。如group(no Having)子句在all难度下 F1 0.996 ,越高说明子句预测综合表现越好。
### 自然语言SQL的技术实现 自然语言SQL的任务可以通过多种方法和技术栈完成。以下是几种常见的技术路径及其具体实现方式: #### 工具支持 一些现有的工具和框架可以帮助开发者快速构建NL-to-SQL的应用程序。例如,Seq2SQL 和 Spider 是两个广泛使用的基准测试平台和解决方案[^1]。 - **Seq2SQL**: 这是一个基于序列到序列(seq2seq)模型的系统,它通过学习将自然语言映射到SQL查询的方式工作。 - **Spider**: 提供了一个复杂的跨领域数据集用于评估不同系统的性能,并且其本身也包含了部分预训练模型。 #### 编码实践 对于希望自行开发此功能的人来说,可以采用深度学习的方法来解决这个问题。下面提供了一种可能的Python代码示例,展示如何利用简单的神经网络架构来进行初步尝试: ```python import torch from transformers import BertTokenizer, BertForSequenceClassification def load_model(): tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=7) # 假设有7类不同的SQL操作 return tokenizer, model tokenizer, model = load_model() def generate_sql(natural_language_query): inputs = tokenizer(natural_language_query, return_tensors="pt", truncation=True, padding=True) outputs = model(**inputs) predicted_class_id = int(torch.argmax(outputs.logits)) sql_templates = [ "SELECT * FROM table_name WHERE column_name = value;", "INSERT INTO table_name (column_list) VALUES (value_list);", "UPDATE table_name SET column1 = value1 [, column2 = value2 ...] [WHERE condition];", "DELETE FROM table_name [WHERE condition];", "CREATE TABLE table_name (column_definitions);", "ALTER TABLE table_name ADD COLUMN new_column data_type;", "DROP TABLE table_name;" ] generated_sql = sql_templates[predicted_class_id].replace("table_name", "example_table").replace("column_name", "example_column") return generated_sql natural_language_input = "Find all records where the age is greater than 30." sql_output = generate_sql(natural_language_input) print(sql_output) ``` 以上代码片段仅作为概念验证用途,在实际应用中还需要考虑更多的细节如上下文理解、语法树解析等复杂因素[^1]。 #### 数据准备与训练过程概述 为了使模型能够更好地理解和生成有效的SQL语句,通常需要大量的标注数据进行监督学习。这些数据应包含配对形式的自然语言描述与其对应的正确SQL表达式。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值