过去一年,GraphRAG技术发展如火如荼,尤其是基于关键词、向量驱动的知识检索方法不胜枚举。然而通过子图召回的检索方式,对用户真实查询意图的定位仍缺乏足够的准确度。我们需要更直接的方式,将自然语言查询直接翻译为图查询语句,即Text2GQL。在文章《ChatTuGraph:通过大模型“与图对话”》中我曾阐述,由于图查询语言的标准普及仍在起步阶段,图查询微调语料的收集和获取仍是困难重重,为此我们提出了基于“语法制导的图查询语料生成”的方法,以自动化的方式合成图查询微调语料数据集。
 
来自中国科学技术大学的TuGraph社区开源贡献者庞红玉同学,在OSPP(开源之夏)项目中,基于Awesome-Text2GQL开源项目完成了Text2GQL微调语料自动生成框架的搭建与优化,并获得了“开源之夏2024最佳质量奖”。语料生成框架的代码当下已全部开源,欢迎业内同仁共建图查询语料数据集。
同时,TuGraph团队也基于DB-GPT-Hub项目构建了Text2GQL的整体微调链路与效果评估(准确率92%以上),并开放了微调数据集和微调模型,欢迎大家体验使用。
接下来,向大家介绍庞同学在Awesome-Text2GQL中完成的具体工作。
 

1. 引言

通过智能体Agent与DBMS交互完成数据查询和系统运维调优等工作是未来的技术趋势,其中重要的一环是Text2SQL/Text2GQL(GQL,Graph Query Language)类的任务。在面向图数据库的Text2GQL任务中,我们需要解决训练数据少、数据标注成本高的问题,由于图查询语言标准ISO GQL刚刚发布,行业内多种查询语法并存,标准语料数据匮乏的问题格外严峻。
 

2. Text2GQL

Text2GQL任务与Text2SQL任务类似,每条语料主要由两部分组成:
l Question:人类可阅读的自然语言,表明数据库操作人员的操作意图。
l Query:查询语句GQL (‌‌Graph Query Language)Query,图数据库可理解的查询语言。
 
不同于Text2SQL,在Text2GQL领域,由于图查询语言尚未统一,各类图查询语言的训练语料严重缺乏,当务之急是基于少量的人工标注语料,找到一种低成本的方法快速生成各类图查询语言对应的训练语料。

语法制导的语料生成策略

 
 
TuGraph在《ChatTuGraph:通过大模型“与图对话”》中创新性的提出了基于语法制导的语料生成策略,并在TuGraph-Analytics上进行了测试。这种策略将表达式模板(Query模板)与提示词模板(Question模板)作为输入,通过表达式实例(Query)生成器与提示词实例(Question)生成器,结合实际的schema批量生成出大量的表达式实例和对应的提示词实例。生成的提示词实例也可以借助LLM进一步泛化生成多样的自然语言提示词文本,来确保大模型能够识别同一个查询问题的多样化自然语言表达方式。
Awesome-Text2GQL项目基于这一策略在TuGraph-DB上构建了基于Cypher语言的语料生成,证明了TuGraph提出的这一策略可以快速的在不同图查询语言间迁移,同时在上述策略的基础上进行了进一步的升级,增加了表达式实例生成的随机性,并优化了提示词实例的可读性。
 

3. Awesome-Text2GQL

Awesome-Text2GQL旨在实现一个用于生成面向Text2GQL任务的大语言模型微调(Large Language Models Fine-tune)语料数据集的语料生成框架。Awesome-Text2GQL使用基于语法制导的语料生成策略构建了一条端到端的语料生成->语料泛化->语料测试->构造数据集->大语言模型微调->应用的端到端的语料生成-LLM微调-应用全链路。
 
本篇文章将为读者简要介绍Awesome-Text2GQL语料生成框架的整体架构,并将在后续推文中带领大家深入语料生成框架实现细节与使用方法,通过Awesome-Text2GQL+DB-GPT+TuGraph-DB实现与图数据库对话。
 

3.1 框架设计

Awesome-Text2GQL语料生成框架架构图

 
语料生成框架由基于Antlr4的语料生成模块(Corpus Generation Module based on Antlr4)和基于LLMs的语料泛化模块(Corpus Generalization Module based on LLMs)两部分组成:
语料生成模块TuGraph-DB中的查询语言的词法和语法基于Antlr4在.g4语法文件中进行描述,因此我们基于Antlr4生成语法文件对应的词法分析器和语法分析器,输入的Query模板在经过词法分析、语法分析后将得到AST,访问其中的节点进行语义分析,获取查询的模式后结合schema与实际数据集就可以对Query模板进行替换,生成丰富的Query实例和Question实例。
基于大语言模型的语料泛化模块通过借助大语言模型的能力,对现有的语料进一步泛化得到多样的自然语言样本Question实例,也可以借助大语言模型自身的翻译能力对输入的Query实例进行翻译生成对应的Qusetion实例。
Awesome-Text2GQL语料生成框架具有乘法增加能力,框架可生成语料数为:
 
n_template、n_schema、n_match_pattern分别为Query模板数量、schema数量和每个schema中能够匹配Query模板查询模式的实例数。k则指的是手动设定的语料泛化模块中对一个Query实例对应的Question实例的泛化倍数。
整体来看,语料生成框架包含Query实例生成(框架图中橙色星号1)、Question实例生成(框架图中橙色星号2)、Question实例泛化(框架图中橙色星号3)三大功能,并使用了多种方式来实现语料的Question生成和Question泛化两个功能来满足不同场景下的功能需求。
对于Question实例生成:
  • 在最初构造语料模板时
模板中缺少Query对应的Question,此时我们可以直接利用大语言模型的能力来快速生成对应的Question,再通过少量的人工清洗和标注来构造符合条件的语料模板(对应语料泛化模块的功能一)。
  • 在生成语料 Question时
设计了语料模板辅助大模型生成的方法,以提取Query的高层语义信息(对应语料泛化模块的功能四)。
  • 在处理预训练大语言模型没有学习过的语法的情况时
基于解析的翻译式Question生成方法也可以作为可行方案(对应语料生成模块的翻译器Translator)。
对于Question实例泛化:
  • 在泛化相对简单的Question实例时
直接泛化Question实例(对应语料泛化模块的功能二)。
  • 在泛化相对复杂的Question实例时
在泛化Question实例时将Query实例提供给大模型,确保大模型在泛化Question实例时不会损失关键信息(对应语料泛化模块的功能三)。
 

3.2 基于Antlr4的语料生成

基于Antlr4的语料生成模块

 
语料生成模块的主要功能有两个:
  • 实例化生成器(Instanstiator)
在解析Query得到抽象语法树(AST)后,通过对AST实例化来生成多样的Query。简单的AST分支如OPTIONAL、SKIP、LIMIT可以一个小概率扩展到生成的Query中,生成的Query必须语法正确,且必须是在当前数据库实例中可实际执行的。
  • 翻译器(Translator)
解析得到抽象语法树(AST)后,通过对AST进一步进行语义分析,逐项翻译生成相应的Question。
 

3.3 基于LLMs的语料泛化模块

基于LLMs的语料泛化模块

 
语料泛化模块在执行时分为五个步骤:
Step1设置本模块的执行任务并读取相应需要被处理的语料。
Step2根据给定的执行任务生成具体的提示词prompt。
Step3调用大模型的api获得执行后的结果,Awesome-Text2GQL目前已经支持。
Step4经过后处理对大模型产生的结果进行格式转换,如删除多余的空行、多余的编号、不需要的符号如加粗符**等等。
Step5输出成对的训练语料。
 
基于LLMs的语料泛化模块主要可用于实现以下四个功能:
  • 功能一:直接生成Question
简单的Query语句可以直接借助大语言模型的能力,获得相应的训练语料的Question部分。本功能也可以用于当有一批未标注的Query语句时,直接通过大模型对这些Query进行预标注,来辅助人工标注数据,这样仅需少量的人工清洗成本,而无需高昂的人工标注成本。
  • 功能二:直接泛化Question
在泛化时,大语言模型直接对输入的Question进行泛化。
  • 功能三:根据Query泛化Question
根据输入的Query和Question进一步泛化得到相同语义的Question。此功能在功能二的基础上,在泛化Question时,可以通过补充Query的信息,帮助大模型进一步理解需要泛化的Question文本的含义,使得泛化的结果更贴近Query的操作执行意图。
  • 功能四:语料模板辅助大模型生成Question
根据输入成对的Query和Question语料组成的模板,理解相同句式的Query的含义,并生成Query对应的Question。此功能在功能一的基础上,通过给大模型提供相同句式的模板,来帮助大模型理解某类Query句子更高层次的语义含义,而不是仅仅依靠预训练基座模型以前学习过的图数据库查询的相关信息。
 

3.4 工作流程

整个语料生成框架可以通过排列组合来满足不同场景下的语料生成需求,这里介绍一个典型的应用Awesome-Text2GQL语料生成框架来生成语料的工作流程:
Step1输入多条语料模板,使用语料生成框架中的实例化生成器Instantiator来逐模板、逐Schema地生成符合模板匹配模式的多条Query。
Step2之后将上一步生成的Query通过语料模板辅助大模型生成Question的生成方式,来得到Query-Question语料对。
Step3对Query-Question语料对的自然语言部分进一步进行泛化,得到多样的语料。
Step4对上述生成的语料进行语法检查、生成Schema信息的自然语言表达、语料格式转换以及数据集划分,得到可直接用于大语言模型微调的数据集。

Awesome-Text2GQL语料生成工作流

 

4. 总结与展望

 
Text2GQL是构建图数据库AI Agent的第一步,既可以运用大模型技术来降低图数据库的学习和应用成本,也可以随着未来Graph RAG(Retrieval Augmented Generation,检索增强生成)技术的应用,缓解大模型推理的幻觉问题。在这里,我们也提出对Awesome-Text2GQL未来的改进方向:
  • 语料质量提升
图查询语言在表达相同查询意图时,查询语句往往具有多种写法,而查询引擎中针对不同写法的优化程度时不同的,两种表达相同语义的查询语句的实际性能可能会有很大的差距。如何使得生成的图查询语句更加适应查询引擎的能力是未来工作的一个方向。
  • 支持更多图查询语言语法
当前图查询语言百花齐放,而Awesome-Text2GQL作为开源的Text2GQL语料生成框架,未来也将支持更多的图查询语言,并进一步降低新的查询语言的迁移成本,为图数据库迈向AI时代打下坚实的基础。
 

Awesome-Text2GQL:图查询微调语料的自动生成框架的更多相关文章

  1. gradle下mybatis自动生成框架的使用

    自动生成框架的意义 主要为了解决人为添加mapper,模型等工作,减少错误,提交效率! 添加引用build.gradle configurations { mybatisGenerator } myb ...

  2. Go 语言,开源服务端代码自动生成 框架 - EasyGoServer

    EasyGoServer 作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblog ...

  3. 优于 swagger 的 java markdown 文档自动生成框架-01-入门使用

    设计初衷 节约时间 Java 文档一直是一个大问题. 很多项目不写文档,即使写文档,对于开发人员来说也是非常痛苦的. 不写文档的缺点自不用多少,手动写文档的缺点也显而易见: 非常浪费时间,而且会出错. ...

  4. swagger:API在线文档自动生成框架

    传统的API从开发测试开始我们经常借用类似Postman.fiddle等等去做接口测试等等工具:Swagger 为API的在线测试.在线文档提供了一个新的简便的解决方案: NET 使用Swagger ...

  5. android studio 插件开发(自动生成框架代码插件)

    android studio 插件开发 起因 去年公司开始上新项目,正好android在架构这方面的讨论也开始多了起来,于是mvp架构模型就进入我们技术选择方案里面,mvp有很多好处,但是有一个非常麻 ...

  6. 设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!

    忙,真忙 点赞再看,养成习惯,微信搜索『程序通事』,关注就完事了! 点击查看更多精彩的文章 这两个星期真是巨忙,年前有个项目因为各种莫名原因,一直拖到这个月才开始真正测试.然后上周又接到新需求,马不停 ...

  7. C# 自动生成代码API文档

    暂时没学会正规的转载style临时记录一下 NET中的规范标准注释(一) -- XML注释标签讲解 http://www.cnblogs.com/mq0036/p/3544264.html NET中的 ...

  8. 基于数据库的自动化生成工具,自动生成JavaBean、数据库文档、框架代码等(v5.8.8版)

    TableGo v5.8.8版震撼发布,此次版本更新如下:          1.新增两个扩展字段,用于生成自定义模板时使用.          2.自定义模板新增模板目录,可以选择不同分类目录下的模 ...

  9. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  10. 9.1.2 asp.net core 自动生成组合查询

    在做系统的时候,经常遇到前台录入一大堆的查询条件,然后点击查询提交后台,在Controller里面生成对应的查询SQL或者表达式,数据库执行再将结果返回客户端. 例如如下页面,输入三个条件,日志类型. ...

随机推荐

  1. ToDesk再度出手,加快云电脑高性能发展,剑指千亿级市场

    根据中国信通院发布的<云计算白皮书(2023年)>(以下简称白皮书)显示,云计算引发了软件开发部署模式的创新,成为承载各类应用的关键基础设施,为大数据.物联网.人工智能等新兴领域的发展提供 ...

  2. ROS入门21讲(5)

    九.服务数据的定义与使用 1.服务模型 2.自定义服务数据 Person.srv string name uint8 sex uint8 age uint8 unknown = 0 uint8 mal ...

  3. 解密prompt系列41. GraphRAG真的是Silver Bullet?

    这一章我们介绍GraphRAG范式,算着时间也是该到图谱了,NLP每一轮新模型出来后,往往都是先研究微调,然后各种预训练方案,接着琢磨数据,各种主动学习半监督,弱监督,无监督,再之后就到图谱和对抗学习 ...

  4. DRF请求的生命周期

    作为一个工作3年左右的码农,在各种框架的摸爬滚打中,我也接触了不少前端后端的技术栈,其中DRF算是我后端日常工作中的用得最多的框架.今天就简单聊聊DRF请求的生命周期.由于篇幅原因,我在此篇文章中只是 ...

  5. C#使用Socket实现分布式事件总线,不依赖第三方MQ

    使用 Socket 实现的分布式事件总线,支持 CQRS,不依赖第三方 MQ. CodeWF.EventBus.Socket 是一个轻量级的.基于 Socket 的分布式事件总线系统,旨在简化分布式架 ...

  6. Nuxt.js 应用中的 imports:context 事件钩子详解

    title: Nuxt.js 应用中的 imports:context 事件钩子详解 date: 2024/10/29 updated: 2024/10/29 author: cmdragon exc ...

  7. Next.js 深度教程:服务端渲染、静态生成到增量静态再生 | 2024最新版

    优化字体和图像 书接上回,我们学习了如何设计Next.js应用程序,让我们继续优化主页和添加自定义字体.图像. 在网站设计中,字体扮演着关键角色,然而,若需获取并加载字体文件,项目中引入自定义字体可能 ...

  8. mysql弱密码爆破

    mySQL弱密码  靶场:/vulhub/mysql/CVE-2012-2122  启动: docker-compose up -d 扫描端口 nmap -Sv -Pn -T4 靶机ip  看到在33 ...

  9. EVE-NG全面教程带下载资源以及链接-原创

    有关于EVE-NG的教程和资源 https://forum.eve-ng.cn/forum.php 1. 经验丰富的专业同行较多 2. 官方论坛,权威可靠 3. 有免费且可靠的镜像可以下载 并且简单好 ...

  10. 如何使用Flask编写一个网站

    使用Flask编写一个网站是一个相对简单且有趣的过程.Flask是一个用Python编写的轻量级Web应用框架.它易于上手,同时也非常强大,适合构建从简单的博客到复杂的Web应用的各种项目.以下是一个 ...