国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

0基礎(chǔ)搞AI-NL2SQL數(shù)據(jù)集處理腳本(用于LLM-fine-tune)

這篇具有很好參考價(jià)值的文章主要介紹了0基礎(chǔ)搞AI-NL2SQL數(shù)據(jù)集處理腳本(用于LLM-fine-tune)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

????????消失了好久好久,這次換了一家公司,然后又在忙于秋招,因此很久沒(méi)有更新,最近事情也告一段落,因此終于有空回來(lái)水博客,今天給大家?guī)?lái)最近的工作,NL2SQL數(shù)據(jù)集,我們的工作是利用代碼生成大模型(類似CodeFuse系列,CodeLlama系列)進(jìn)行fine-tune,通過(guò)用戶query和query涉及的數(shù)據(jù)庫(kù)表的Schema作為輸入,使用fine-tune后的LLM進(jìn)行推理來(lái)得到最后的生成SQL,當(dāng)然為了工作的方便,所以我們?cè)噲D將所有的開(kāi)源數(shù)據(jù)集進(jìn)行整合,因此在此處的NL2SQL數(shù)據(jù)集中,提供了經(jīng)過(guò)模型翻譯的Wiki_SQL數(shù)據(jù)集,Cspider數(shù)據(jù)集,Du_SQL數(shù)據(jù)集,如果有大佬有追一科技的數(shù)據(jù)集請(qǐng)告訴我,需要一些幫助,接下來(lái)首先給出NL2SQL數(shù)據(jù)集的處理腳本:

1、數(shù)據(jù)集生成(耗時(shí)13h,把8w條WikiSQL翻譯了)

Data_deal_Script.py

"""
codeer:Jinzhangli
function:數(shù)據(jù)集處理和構(gòu)建
relation:2035877994@qq.com
time:2023/11/21 15:23
"""
import json,re

class Cspider_Data_make:
    def Cspider_Schema_load_deal(self):
        Schema={}
        All_DB=self.Cspider_Data_load("Data/Cspider/tables.json")
        for i in range(len(All_DB)):
            DB={}
            column_names=All_DB[i]["column_names"]
            table_names=All_DB[i]['table_names']
            for j in range(len(table_names)):
                DB["_".join(re.split(" ",table_names[j]))]=[column_names[k][1] for k in range(len(column_names)) if column_names[k][0]==j]
            Schema[All_DB[i]["db_id"]]=DB
        return Schema

    def Cspider_Data_load(self,file_path:str):
        dict_data=json.loads(open(file_path,"r",encoding="utf-8").read())
        return dict_data

    def Cspider_Schema_pipe(self,db_name:str,Table_list:list):
        All_Schema=self.Cspider_Schema_load_deal()
        result=[]
        Table_list=[i for i in Table_list if i not in ["("]]
        for i in range(len(Table_list)):
            result.append(All_Schema[db_name][Table_list[i]])
        return result

    def Table_get(self,SQL_token:list)->list:
        Table_list=[SQL_token[i] for i in range(len(SQL_token)) if SQL_token[i-1] in ["from","join"]]
        return Table_list

    def Dict_deal(self,one_dict:dict)->dict:
        query=one_dict["question"]
        SQL=one_dict["query"]
        db_name=one_dict["db_id"]
        return {"query":query,"SQL":SQL,"table_name":"","column_name":"","db_name":db_name}

    def Cspider_Datas_Get(self,Cspider_data):
        Result=[]
        for i in range(len(Cspider_data)):
            if i not in [3097,3153]:
                print("=========正在處理第"+str(i)+",總共有"+str(len(Cspider_data))+"個(gè)=========")
                one_dict = self.Dict_deal(Cspider_data[i])
                Table_list = list(set(self.Table_get(Cspider_data[i]["query_toks"])))
                result = self.Cspider_Schema_pipe(one_dict["db_name"], Table_list)
                one_dict["table_name"] = Table_list
                one_dict["column_name"] = result
                Result.append(one_dict)
        return Result

    def Csipder_main(self):
        Cspider_train_data = self.Cspider_Data_load("Data/Cspider/train.json")
        Cspider_dev_data=self.Cspider_Data_load("Data/Cspider/dev.json")
        Cspider_Result=self.Cspider_Datas_Get(Cspider_train_data)+self.Cspider_Datas_Get(Cspider_dev_data)
        return Cspider_Result

class wikiSQL_Data_make:
    def wiki_load(self,file_path):
        file_str=open(file_path,"r",encoding="utf-8").readlines()
        Dict_Data=[eval(file_str[i]) for i in range(len(file_str))]
        return Dict_Data

    def wiki_deal(self,data_path,table_path):
        Dict_data=self.wiki_load(data_path)
        Table_data=self.wiki_load(table_path)
        Wiki_Result,Index=[],0
        Table_dict={Table_data[i]["id"]:[Table_data[i]["header"],Table_data[i]['caption']]
                    for i in range(len(Table_data)) if "caption" in Table_data[i].keys()}
        for i in range(len(Dict_data)):
            table_id=Dict_data[i]["table_id"]
            all_table=Table_dict.keys()
            if table_id in all_table:
                #print("正在處理第" + str(Index) + ",總共有" + str(len(Dict_data)) + "個(gè)")
                Index+=1
                query=Dict_data[i]["question"]
                table_name="_".join(re.split(" ",Table_dict[Dict_data[i]["table_id"]][1]))
                SQL=Dict_data[i]["sql"]
                column_name=Table_dict[Dict_data[i]["table_id"]][0]
                for j in range(len(column_name)):
                    column=[]
                    if "/" in column_name[j] and "(" not in column_name[j]:
                        column_name[j]=re.split("/",column_name[j])[0]
                    elif "(" in column_name[j]:
                        for k in column_name[j]:
                            if k!="(":
                                column.append(k)
                            else:
                                column_name[j]=re.split(" ","".join(column))
                                if column_name[j][-1]=="":
                                    column_name[j]="_".join(column_name[j][0:-1])
                                else:
                                    column_name[j] = "_".join(column_name[j])
                                break
                    elif " " in column_name[j]:
                        column_name[j]="_".join(re.split(" ",column_name[j]))
                    elif type(column_name[j])==list:
                        column_name[j]=column_name[j][0]
                SQL=self.SQL_make(SQL,column_name,table_name)
                one_dict={"query": query, "SQL": SQL, "table_name": table_name, "column_name":column_name, "db_name": ""}
                Wiki_Result.append(one_dict)
        return Wiki_Result

    def SQL_make(self,SQL_token,column_name,table_name):
        agg_Action, conds_Acction= ['', 'MAX', 'MIN', 'COUNT', 'SUM', 'AVG'],['=', '>', '<', 'OP']
        SQL="SELECT "+agg_Action[SQL_token["agg"]]+" ( "+column_name[SQL_token["sel"]]+" ) "+"FROM "+table_name
        if len(SQL_token["conds"])==1:
            if type(SQL_token["conds"][0][2])!=str:
                SQL_token["conds"][0][2]=str(SQL_token["conds"][0][2])
            SQL_token["conds"][0][1]=conds_Acction[SQL_token["conds"][0][1]]
            SQL_token["conds"][0][0]=column_name[SQL_token["conds"][0][0]]
            SQL+=" WHERE "+" ".join(SQL_token["conds"][0])
        else:
            conds_list=SQL_token["conds"]
            for i in range(len(conds_list)):
                if type(conds_list[i][2])!=str:
                    conds_list[i][2]=str(conds_list[i][2])
                conds_list[i][0]=column_name[conds_list[i][0]]
                conds_list[i][1]=conds_Acction[conds_list[i][1]]
            for i in range(len(conds_list)):
                if i==len(conds_list)-1:
                    SQL+="and "+" ".join(conds_list[i])
                elif i==0:
                    SQL+="WHERE "+" ".join(conds_list[i])+" "
                else:
                    SQL+="and "+" ".join(conds_list[i])+" "
        return SQL

    def wiki_main(self):
        Wiki_Result=self.wiki_deal("Data/WikiSQL/train.json","Data/WikiSQL/train_tables.json")
        return Wiki_Result

class DuSQL_Data_make:
    def DuSQL_load(self,file_path):
        DuSQL_data=json.loads(open(file_path,"r",encoding="utf-8").read())
        return DuSQL_data

    def Schema_deal(self,DuSQL_schema:list[dict]):
        Schema_dict={}
        for i in range(len(DuSQL_schema)):
            table_names=DuSQL_schema[i]["table_names"]
            column_names=DuSQL_schema[i]["column_names"]
            Schema_dict[DuSQL_schema[i]["db_id"]]={table_names[j]:[column_names[k][1] for k in range(len(column_names)) if column_names[k][0]==j] for j in range(len(table_names))}
        return Schema_dict

    def TableGetFromSQL(self,SQL):
        SQL_List=re.split(" ",SQL)
        Table=list(set([SQL_List[i] for i in range(len(SQL_List)) if i!=0 and SQL_List[i-1] in ["from","join"]]))
        return Table

    def Query_SQL_Schema(self,DUSQL_data:list[dict],DuSQL_Schema):
        Result=[]
        for i in range(len(DUSQL_data)):
            print("=========正在處理第" + str(i) + ",總共有" + str(len(DUSQL_data)) + "個(gè)=========")
            SQL=DUSQL_data[i]["sql_query"]
            query=DUSQL_data[i]["question"]
            db_name=DUSQL_data[i]["db_id"]
            table=self.TableGetFromSQL(SQL)[0]
            column=DuSQL_Schema[db_name][table]
            Result.append({"query":query,"SQL":SQL,"table_name":table,"column_name":column,"db_name":db_name})
        return Result

    def DuSQL_main(self):
        DuSQL_data=self.DuSQL_load("Data/DuSQL/sample-data.json")
        DUSQL_Schema=self.DuSQL_load("Data/DuSQL/db-schema.json")
        DUSQL_Schema=self.Schema_deal(DUSQL_Schema)
        DuSQL_Result=self.Query_SQL_Schema(DuSQL_data,DUSQL_Schema)
        return DuSQL_Result

用于翻譯的數(shù)據(jù)接口,這里用了通義千問(wèn)14B

OutAPI.py

"""
codeer:Jinzhangli
function:接入外部API服務(wù)
relation:2035877994@qq.com
time:2023/11/30 15:49
"""
import requests,json
def Qwen14BChat(text,history):
    url="http://172.16.158.247:9899/Qwen14B"
    data=json.dumps({"prompt":text,"history":history})
    response=requests.post(url=url,data=data)
    response=eval(response.text)
    return response

接下來(lái)是主控腳本,Tune_main.py

"""
codeer:Jinzhangli
function:主控文件
relation:2035877994@qq.com
time:2023/11/30 18:05
"""
import json
from Data_Deal_Script import *
from OutAPI import *
def LearningDataJson_build():
    wikiSQL_Data = wikiSQL_Data_make()
    print("開(kāi)始處理WIKI_SQL")
    WIKI_SQL = wikiSQL_Data.wiki_main()
    #英文數(shù)據(jù)集翻譯
    for i in range(len(WIKI_SQL)):
        print("====翻譯第"+str(i)+"個(gè)句子====")
        WIKI_SQL[i]["query"] = Qwen14BChat("請(qǐng)幫我將以下文本翻譯為中文,只輸出結(jié)果,不要任何解釋\n"+WIKI_SQL[i]["query"],[])["response"]
        print(WIKI_SQL[i]["query"])
    Cspider_Data = Cspider_Data_make()
    Dusql_Data = DuSQL_Data_make()
    print("開(kāi)始處理DU_SQL")
    DU_SQL = Dusql_Data.DuSQL_main()
    print("開(kāi)始處理Cspider")
    Cspider = Cspider_Data.Csipder_main()
    Result=DU_SQL+Cspider+WIKI_SQL
    with open("result.json", "w", encoding="utf-8") as json_file:
        json.dump(Result,json_file,ensure_ascii=False)
2、基于Swift框架的加載LoRA微調(diào)

接下來(lái)是LLM微調(diào)腳本(基于Swift框架)

首先安裝阿里巴巴Swift框架

git clone https://github.com/modelscope/swift.git
cd swift
pip install -e .

然后進(jìn)入Clone下來(lái)的Swift文件夾

cd ../swift/examples/pytorch/llm

使用llm下自帶的腳本,也可以自己寫(xiě),我比較懶直接os.system()來(lái)修改

import os
command="""
CUDA_VISIBLE_DEVICES=0 \
python llm_sft.py \
    --model_type qwen-14b \
    --model_cache_dir /home/gpu-user1/JinzhangLi/Qwen-14B \
    --sft_type lora \
    --template_type default-generation \
    --dtype bf16 \
    --output_dir output \
    --dataset dureader-robust-zh \
    --train_dataset_sample -1 \
    --num_train_epochs 1 \
    --max_length 2048 \
    --quantization_bit 4 \
    --bnb_4bit_comp_dtype bf16 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --lora_dropout_p 0. \
    --lora_target_modules ALL \
    --gradient_checkpointing true \
    --batch_size 1 \
    --weight_decay 0. \
    --learning_rate 1e-4 \
    --gradient_accumulation_steps 16 \
    --max_grad_norm 0.5 \
    --warmup_ratio 0.03 \
    --eval_steps 100 \
    --save_steps 100 \
    --save_total_limit 2 \
    --logging_steps 10 \
    --use_flash_attn false \
    --push_to_hub false \
    --hub_model_id qwen-14b-qlora \
    --hub_private_repo true \
    --hub_token 'your-sdk-token' """
os.system(command)
3、數(shù)據(jù)集樣式和鏈接(根據(jù)自己使用的框架微調(diào),不出意外,后面數(shù)據(jù)集還會(huì)變大)

最后給出搞定后的NL2SQL數(shù)據(jù)集(當(dāng)然數(shù)據(jù)集還得調(diào)整,只是將數(shù)據(jù)格式整理如下)

{    
    "query": "創(chuàng)刊時(shí)間不早于1989年10月10日的期刊,按出版刊數(shù)降序排列給出期刊的名稱以及語(yǔ)言", 
    "SQL": "select 名稱 , 語(yǔ)言 from 期刊 where 創(chuàng)刊時(shí)間 >= '1989-10-10' order by 出版刊數(shù) desc", 
    "table_name": "期刊",
     "column_name": ["詞條id", "名稱", "語(yǔ)言", "類別", "主辦單位", "創(chuàng)刊時(shí)間", "國(guó)家", "出版刊數(shù)"],
     "db_name": "期刊"
}

如想獲取數(shù)據(jù),請(qǐng)?jiān)L問(wèn)我們?cè)趍odelscope的開(kāi)源地址

Text2SQL-英文-150K · 數(shù)據(jù)集 (modelscope.cn)

Text2SQL-中文-180K · 數(shù)據(jù)集 (modelscope.cn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-847531.html

到了這里,關(guān)于0基礎(chǔ)搞AI-NL2SQL數(shù)據(jù)集處理腳本(用于LLM-fine-tune)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【REST2SQL】05 GO 操作 達(dá)夢(mèng) 數(shù)據(jù)庫(kù)

    【REST2SQL】05 GO 操作 達(dá)夢(mèng) 數(shù)據(jù)庫(kù)

    【REST2SQL】01RDB關(guān)系型數(shù)據(jù)庫(kù)REST初設(shè)計(jì) 【REST2SQL】02 GO連接Oracle數(shù)據(jù)庫(kù) 【REST2SQL】03 GO讀取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版實(shí)現(xiàn) 信創(chuàng)要求用國(guó)產(chǎn)數(shù)據(jù)庫(kù),剛好有項(xiàng)目用的達(dá)夢(mèng),研究一下go如何操作達(dá)夢(mèng)數(shù)據(jù)庫(kù) 登錄 達(dá)夢(mèng) 官網(wǎng),有DM8開(kāi)發(fā)版可以下載,我下載的是X86,Win

    2024年02月01日
    瀏覽(19)
  • 【REST2SQL】07 GO 操作 Mysql 數(shù)據(jù)庫(kù)

    【REST2SQL】07 GO 操作 Mysql 數(shù)據(jù)庫(kù)

    【REST2SQL】01RDB關(guān)系型數(shù)據(jù)庫(kù)REST初設(shè)計(jì) 【REST2SQL】02 GO連接Oracle數(shù)據(jù)庫(kù) 【REST2SQL】03 GO讀取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版實(shí)現(xiàn) 【REST2SQL】05 GO 操作 達(dá)夢(mèng) 數(shù)據(jù)庫(kù) 【REST2SQL】06 GO 跨包接口重構(gòu)代碼 MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB 公司開(kāi)發(fā),屬于 Oracle旗

    2024年01月22日
    瀏覽(20)
  • TEXT2SQL-頂峰:Vanna部署及介紹

    TEXT2SQL-頂峰:Vanna部署及介紹

    Vanna 是一款采用 MIT 許可的開(kāi)源 Python RAG (檢索增強(qiáng)生成)框架,用于生成 SQL 語(yǔ)句和相關(guān)功能。 如何使用 Vanna Vanna 的使用分為兩個(gè)簡(jiǎn)單步驟 - 在你的數(shù)據(jù)上訓(xùn)練一個(gè) RAG \\\"模型\\\",然后提出問(wèn)題,該問(wèn)題將返回可設(shè)置為自動(dòng)在你的數(shù)據(jù)庫(kù)上運(yùn)行的 SQL 查詢。 1. 在你的數(shù)據(jù)上訓(xùn)練一

    2024年02月22日
    瀏覽(19)
  • LLM在text2sql上的應(yīng)用

    目前,大模型的一個(gè)熱門應(yīng)用方向text2sql它可以幫助用戶快速生成想要查詢的SQL語(yǔ)句。那對(duì)于用戶來(lái)說(shuō),大部分簡(jiǎn)單的sql都是正確的,但對(duì)于一些復(fù)雜邏輯來(lái)說(shuō),需要用戶在產(chǎn)出SQL的基礎(chǔ)上進(jìn)行簡(jiǎn)單修改,Text2SQL應(yīng)用主要還是幫助用戶去解決開(kāi)發(fā)時(shí)間,減少開(kāi)發(fā)成本。 Text to

    2024年02月08日
    瀏覽(22)
  • selenium系列--測(cè)試腳本--將Excel文件用于測(cè)試(unittest數(shù)據(jù)驅(qū)動(dòng)實(shí)戰(zhàn))

    selenium系列--測(cè)試腳本--將Excel文件用于測(cè)試(unittest數(shù)據(jù)驅(qū)動(dòng)實(shí)戰(zhàn))

    我們只需要寫(xiě)一個(gè)函數(shù)方法進(jìn)行調(diào)用即可,讀取Excel文件,將值進(jìn)行返回便于下一個(gè)接口使用。 import xlrd class Excel_Login: def excel_login(self): file_name = xlrd.open_workbook(r’F:111.xlsx’) sh1 = file_name.sheet_by_index(0) rows = sh1.nrows datalist = [] for i in range(1, rows): datalist.append(sh1.row_values(i)) retu

    2024年04月11日
    瀏覽(31)
  • 大模型LLM在 Text2SQL 上的應(yīng)用實(shí)踐

    大模型LLM在 Text2SQL 上的應(yīng)用實(shí)踐

    一、前言 目前,大模型的一個(gè)熱門應(yīng)用方向Text2SQL,它可以幫助用戶快速生成想要查詢的SQL語(yǔ)句,再結(jié)合可視化技術(shù)可以降低使用數(shù)據(jù)的門檻,更便捷的支持決策。本文將從以下四個(gè)方面介紹LLM在Text2SQL應(yīng)用上的基礎(chǔ)實(shí)踐。 · Text2SQL概述 · LangChain基礎(chǔ)知識(shí) · 基于SQLDatabaseCha

    2024年01月16日
    瀏覽(23)
  • 最強(qiáng)開(kāi)源Text2SQL大模型本地部署的解決方案

    ??大家好,我是herosunly。985院校碩士畢業(yè),現(xiàn)擔(dān)任算法研究員一職,熱衷于機(jī)器學(xué)習(xí)算法研究與應(yīng)用。曾獲得阿里云天池比賽第一名,CCF比賽第二名,科大訊飛比賽第三名。擁有多項(xiàng)發(fā)明專利。對(duì)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)擁有自己獨(dú)到的見(jiàn)解。曾經(jīng)輔導(dǎo)過(guò)若干個(gè)非計(jì)算機(jī)專業(yè)的

    2024年02月08日
    瀏覽(22)
  • Archery系統(tǒng)調(diào)用my2sql讀取binlog的功能優(yōu)化

    Archery系統(tǒng)集成了my2sql工具,可以通過(guò)此功能分析MysQL的binlog,方便SQL回滾,還可以協(xié)助異常分析,定位問(wèn)題。 優(yōu)化點(diǎn) 解析后沒(méi)有SQL語(yǔ)句返回,可能的原因是解析過(guò)程中遇到了錯(cuò)誤,而系統(tǒng)沒(méi)有捕獲錯(cuò)誤,更沒(méi)有將錯(cuò)誤異常返回給操作者。 此處的優(yōu)化,就是解決這一信息黑洞

    2024年01月20日
    瀏覽(17)
  • 大模型 LLM RAG在 Text2SQL 上的應(yīng)用實(shí)踐

    大模型 LLM RAG在 Text2SQL 上的應(yīng)用實(shí)踐

    1. 前言 在上篇文章中「LLM Agent在Text2SQL應(yīng)用上的實(shí)踐」介紹了基于AI Agent來(lái)優(yōu)化LLM的Text2SQL轉(zhuǎn)換效果的實(shí)踐,除此之外我們還可以使用RAG(Retrieval-Augmented Generation)來(lái)優(yōu)化大模型應(yīng)用的效果。 本文將從以下4個(gè)方面探討通過(guò)RAG來(lái)優(yōu)化LLM的Text2SQL轉(zhuǎn)換效果。 1. RAG概述 2. 基于LangC

    2024年02月02日
    瀏覽(23)
  • 【REST2SQL】08 日志重構(gòu)增加輸出到文件log.txt

    【REST2SQL】08 日志重構(gòu)增加輸出到文件log.txt

    【REST2SQL】01RDB關(guān)系型數(shù)據(jù)庫(kù)REST初設(shè)計(jì) 【REST2SQL】02 GO連接Oracle數(shù)據(jù)庫(kù) 【REST2SQL】03 GO讀取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版實(shí)現(xiàn) 【REST2SQL】05 GO 操作 達(dá)夢(mèng) 數(shù)據(jù)庫(kù) 【REST2SQL】06 GO 跨包接口重構(gòu)代碼 【REST2SQL】07 GO 操作 Mysql 數(shù)據(jù)庫(kù) 原來(lái)的日志只輸出到控制臺(tái),關(guān)閉控制臺(tái)

    2024年02月01日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包