Skip to content

Latest commit

 

History

History
236 lines (183 loc) · 9.92 KB

README.zh.md

File metadata and controls

236 lines (183 loc) · 9.92 KB

DB-GPT-GQL:利用LLMs实现Text-to-GQL

Baseline

  • 更新日期: 2024/08/26
Language Dataset Model Method Similarity Grammar
base 0.769 0.703
Cypher (tugraph-db) TuGraph-DB Cypher数据集 CodeLlama-7B-Instruct lora 0.928 0.946
base 0.493 0.002
GQL(tugraph-analytics) TuGraph-Analytics GQL数据集 CodeLlama-7B-Instruct lora 0.935 0.984

Contents

一、简介

DB-GPT-GQL是一个面向图数据库查询语言的,利用LLMs实现Text-to-GQL翻译的模块。主要包含模型微调、Text-to-GQL预测,预测结果评估等步骤。关系型数据库领域的Text-to-SQL翻译任务发展至如今已经拥有了大量的数据集以及多维度的翻译结果评估流程。不同于已经逐渐成熟的Text-to-SQL翻译任务,Text-to-GQL翻译任务由于图查询语言缺乏统一规范、目标成为国际标准的ISOGQL尚未真正落地等原因,使得建立属于各类图查询语言的完整语料数据集和建立Text-to-GQL翻译结果评估机制成为了两个颇具挑战性的任务。

DB-GPT-GQL不仅支持了基于多个大模型的微调、预测流程,在翻译结果评估方面也提供了两种评估方式,第一种是基于翻译结果与标准答案之间近似程度的文本相似度评估,这一评估方式适用于任何图查询语言,第二种则是基于不同图查询语言的语法解析器对翻译结果进行语法解析的语法正确性评估,目前已支持tugraph-db与tugraph-analytics两个数据库的图查询语言。

未来DB-GPT-GQL将会实现基于翻译结果的执行计划正确性评估(不需要实际数据),以及更进一步的执行正确性评估(需要实际数据),并参考Text-to-SQL领域的spider数据集中的方法实现对数据集中查询语言复杂程度的分级。

二、Text-to-GQL微调

我们基于大语言模型的SFT来提升Text-to-GQL的效果。

2.1、数据集

本项目样例数据集为Cypher(tugraph-db),其中包含tugraph-db提供的,可在tugraph-db上可执行的185条语料,存放在/dbgpt_hub_gql/data/tugraph-db-example文件夹中,当前可使用的数据集如下:

请将下载并解压完成后的数据集放置在/dbgpt_hub_gql/data/目录下使用。

2.2、基座模型

DB-GPT-GQL目前已经支持的base模型有:

  • CodeLlama
  • Baichuan2
  • LLaMa/LLaMa2
  • Falcon
  • Qwen
  • XVERSE
  • ChatGLM2
  • ChatGLM3
  • internlm
  • Falcon
  • sqlcoder-7b(mistral)
  • sqlcoder2-15b(starcoder)

模型可以基于quantization_bit为4的量化微调(QLoRA)所需的最低硬件资源,可以参考如下:

模型参数 GPU RAM CPU RAM DISK
7b 6GB 3.6GB 36.4GB
13b 13.4GB 5.9GB 60.2GB

其中相关参数均设置的为最小,batch_size为1,max_length为512。根据经验,如果计算资源足够,为了效果更好,建议相关长度值设置为1024或者2048。

三、使用方法

本章将以仓库中自带的/dbgpt_hub_gql/data/tugraph-db-example文件夹中共计185条语料以及CodeLlama-7B-Instruct(需要额外下载)为样例,展示DB-GPT-GQL的完整功能。

3.1、环境准备

克隆项目并创建 conda 环境,

git clone https://github.com/eosphoros-ai/DB-GPT-Hub.git
cd DB-GPT-Hub
conda create -n dbgpt_hub_gql python=3.10 
conda activate dbgpt_hub_gql

进入DB-GPT-GQL项目目录,并使用poetry安装依赖

cd src/dbgpt-hub-gql
pip install -e .

3.2、模型准备

创建并进入codellama模型存放目录

mkdir codellama
cd ./codellama

codellama文件夹下创建download.py文件并将如下内容复制进入python文件中

from modelscope import snapshot_download

model_dir = snapshot_download("AI-ModelScope/CodeLlama-7b-Instruct-hf")

安装python依赖并下载模型

pip install modelscope
python3 download.py

下载完成后,将模型文件软链接到codellama目录下

ln -s /root/.cache/modelscope/hub/AI-ModelScope/CodeLlama-7b-Instruct-hf ./

3.3、模型微调

开始语料微调前需要手动将训练数据集在./dbgpt_hub_gql/data/dataset_info.json中注册,./dbgpt_hub_gql/data/tugraph-db-example文件夹中的训练数据集已经注册在其中,格式如下

"tugraph_db_example_train": {
    "file_name": "./tugraph-db-example/train.json",
    "columns": {
      "prompt": "instruction",
      "query": "input",
      "response": "output",
      "history": "history"
    }
  }

dbgpt_hub_gql/scripts/train_sft.sh中设置数据集,模型,以及微调结果输出路径,当前默认值适配./dbgpt_hub_gql/data/tugraph-db-example中的训练数据集以及CodeLlama-7B-Instruct模型,使用LoRA方法微调

dataset="tugraph_db_example_train"
model_name_or_path=${model_name_or_path-"codellama/CodeLlama-7b-Instruct-hf"}
output_dir="dbgpt_hub_gql/output/adapter/CodeLlama-7b-gql-lora"

运行微调脚本,开始微调

sh dbgpt_hub_gql/scripts/train_sft.sh

3.4、模型预测

./dbgpt_hub_gql/scripts/predict_sft.sh中设置需要预测的数据集,模型,模型微调结果路径以及预测结果路径,当前默认值适配./dbgpt_hub_gql/data/tugraph-db-example中的开发数据集以及LoRA方法微调后的CodeLlama-7B-Instruct模型

CUDA_VISIBLE_DEVICES=0,1  python dbgpt_hub_gql/predict/predict.py \
    --model_name_or_path codellama/CodeLlama-7b-Instruct-hf \
    --template llama2 \
    --finetuning_type lora \
    --predicted_input_filename dbgpt_hub_gql/data/tugraph-db-example/dev.json \
    --checkpoint_dir dbgpt_hub_gql/output/adapter/CodeLlama-7b-gql-lora \
    --predicted_out_filename dbgpt_hub_gql/output/pred/tugraph_db_example_dev.txt >> ${pred_log}

运行预测脚本,获取预测结果

sh dbgpt_hub_gql/scripts/predict_sft.sh

3.5、模型评估

目前版本支持两种预测结果评估方法,第一种是基于Jaro–Winkler distance的文本相似度评估,第二种是基于.g4语法文件或图数据库现有语法解析器的语法正确性评估。

3.5.1、文本相似度评估

文本相似度评估直接统计预测结果与标准结果的Jaro–Winkler distance

python dbgpt_hub_gql/eval/evaluation.py  --input ./dbgpt_hub_gql/output/pred/tugraph_db_example_dev.txt --gold ./dbgpt_hub_gql/data/tugraph-db-example/gold_dev.txt --etype similarity

3.5.2、语法正确性评估

tugraph-db-example是符合tugraph-db的LCypher语法规则的语料数据集,语法正确性评估使用ANTLR4工具,基于./dbgpt_hub_gql/eval/evaluator/impl/tugraph-db/Lcypher.g4文件生成了语法解析器,用于评估模型预测结果的语法正确性。

python dbgpt_hub_gql/eval/evaluation.py  --input ./dbgpt_hub_gql/output/pred/tugraph_db_example_dev.txt --gold ./dbgpt_hub_gql/data/tugraph-db-example/gold_dev.txt --etype grammar --impl tugraph-db

3.6、模型权重合并

如果你需要将训练的基础模型和微调的Peft模块的权重合并,导出一个完整的模型。则运行如下模型导出脚本:

sh dbgpt_hub_gql/scripts/export_merge.sh