大语言模型实战

我们将仿照SQLCoder的方式,使用面向代码生成应用的大型语言模型进行微调,以实现SQL生成任务,选取的代码生成底座为DeepSeek Coder。

DeepSeek Coder涵盖了一系列从头开始训练的代码语言模型,这些模型分别在英语和中文中以87%的代码和13%的自然语言进行训练。每个模型都在涉及80多种编程语言的2万亿个Token数据上进行预训练,提供了多个不同大小的代码模型,从10亿到330亿版本不等。这些模型首先在存储库级别的代码语料库上进行预训练,使用1.6万个Token的窗口大小和额外的代码填充任务,形成基础模型(DeepSeek-Coder-Base)。随后,通过使用20亿个Token的指令数据对基础模型进行微调,得到了经过指令调整的模型,即DeepSeek-Coder-Instruct。此外,DeepSeek Coder是开源的,可供研究和商业用途免费使用,为广大开发者和研究人员提供了强大的代码语言模型资源。

 

1. 项目介绍


本项目是基于DeepSeek Coder完成SQL生成的微调任务。利用DeepSeek Coder模型从开源数据中进行数据构造,并进行模型微调。代码见GitHub中的SQLGenProj项目,项目主要结构如下。

·data:存放数据及数据处理的文件夹。

■dev.jsonl:验证集数据。

■train.jsonl:训练数据。

■dusql_process.py:用于针对开源数据进行数据处理,生成训练集及验证集数据。

·finetune:模型训练的文件夹。

■train_deepseek.py:使用DeepSeek Coder模型训练的函数。

·predict:推理所需的代码文件夹。

■predict.py:利用已训练的模型进行生成的方法。

本项目从数据预处理、模型微调和模型预测几个部分入手,带领大家一起完成SQL生成的微调任务。

 

 

2. 数据预处理


以前文介绍的DuSQL数据为例,进行基于DeepSeek Coder的SQL生成模型训练。首先需要对DuSQL数据进行转换,构建SQL建表语句,作为大型语言模型输入的关键信息。原始DuSQL的数据库信息样例如下:

 

其中,column_names为表格中的表字段信息,column_types为表字段的数据类型,db_id为数据库名称,foreign_keys为外键,primary_keys为主键,table_names为表格名称。

数据处理代码见dusql_process.py文件,具体流程如下。

步骤1:获取开源DuSQL数据。

步骤2:遍历获取DuSQL数据,获取db_id等字段,构建建表语句相关的Schema内容。

步骤3:遍历获取DuSQL数据,获取用户问题及相应的SQL语句,构建训练集、验证集并保存。

对于上述Schema,可以参考以下代码样例进行数据规范化:

 

经过上述转换后,要得到各数据库对应的建表语句,可以使用如下代码:

 

参考上述代码,我们可以得到如下建表语句:

 

 

结合上述建表语句,对DuSQL训练数据进行转换,得到模型训练所需的数据,转换代码如下:

 

 

最终得到如下大型语言模型训练所需的数据,相关样例如下:

 


3 模型微调


针对DeepSeek Coder模型微调,采用finetune文件夹中的train_deepseek.py进行模型训练,主要包含模型训练参数设置函数和模型训练函数,涉及以下步骤。

步骤1:设置模型训练参数。

步骤2:实例化分词器和DeepSeek Coder模型。

步骤3:加载模型训练所需要的训练数据和测试数据。

步骤4:加载模型训练所需的trainer。

步骤5:进行训练,并按需保存模型和分词器。

相关代码如下:

 

 


4. 模型预测


针对已微调后的DeepSeek Coder模型,可以使用相应的模型加载方法,针对问题和参考段落进行答案生成。

步骤1:加载模型与分词器。

步骤2:获取用户问题及建表语句。

步骤3:生成相应结果并返回。

相关代码如下: