Awesome-Text2GQL:图查询微调语料的自动生成框架


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

接下来,向大家介绍庞同学在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时代打下坚实的基础。

相关推荐
中杯可乐多加冰2 天前
RAG 深度实践系列(三):RAG 技术演变与核心架构的深度剖析
人工智能·深度学习·大模型·llm·知识库·rag·graphrag
TGITCIC11 天前
LangGraph:让AI学会“回头是岸”的智能体架构
人工智能·rag·ai agent·图搜索·ai智能体·langgraph·graphrag
北京地铁1号线15 天前
1.3 元数据(Metadata)管理
知识图谱·元数据·graphrag
Elwin Wong17 天前
从 Louvain 到 Leiden:保证社区连通性的社区检测算法研究解读
算法·社区检测·graphrag·louvain·leiden
TGITCIC20 天前
讲透知识图谱Neo4j在构建Agent时到底怎么用(二)
人工智能·知识图谱·neo4j·ai agent·ai智能体·大模型落地·graphrag
TGITCIC22 天前
讲透知识图谱Neo4j在构建Agent时到底怎么用(一)
知识图谱·neo4j·ai agent·智能体·图搜索·ai智能体·graphrag
组合缺一24 天前
灵动如画 —— 初识 Solon Graph Fluent API 编排
java·solon·graph·flow·langgraph·liquor
Elwin Wong24 天前
GraphRAG简介
人工智能·大模型·llm·rag·graphrag
赋范大模型技术社区1 个月前
Agentic-GraphRAG 架构实践:较 GraphRAG 成本降低90%
agent·rag·graphrag
runfarther2 个月前
Windows下使用源码和Conda搭建GraphRAG指南
windows·conda·graphrag