首页 > 其他分享 >ChatTuGraph:通过大模型“与图对话”

ChatTuGraph:通过大模型“与图对话”

时间:2024-03-27 11:56:23浏览次数:32  
标签:GQL 模型 微调 ChatTuGraph 对话 SQL TuGraph 语料

使用SQL(Structured Query Language)对数据库/数据仓库进行查询分析操作,几乎成了研发工程师和数据分析师的“家常便饭”,然而要写出高效、清晰、优雅的SQL脚本并非易事。随着大语言模型(LLM)技术的普及,借助大模型微调(Fine Tuning)等技术将自然语言自动翻译为SQL语句(NL2SQL/Text2SQL)便成了非常流行的解决方案,相关的工具框架(Chat2DBDB-GPT等)也是层出不穷。

同样的,在图数据库领域也存在相似的问题,甚至更为严峻。相比于SQL相对成熟的语法标准(SQL2023),图查询语言尚未形成成熟的统一标准,目前是多种查询语法并存的状态(GQLPGQCypherGremlinGSQL等),上手门槛高,因此更需要借助大语言模型的自然语言理解能力,降低图数据库查询语言的使用门槛。

1. 图表融合:SQL+GQL

TuGraph计算引擎TuGraph Analytics创新性地设计了SQL+GQL融合语法,以解决图表混合分析场景的业务诉求,将图上的分析计算能力有机地融合到传统的SQL数据处理链路内,实现了图引擎上一体化的图数据建模图数据集成图存储图交互式分析能力。

TuGraph Analytics的SQL+GQL融合语法典型形式为“SELECT-FROM-WITH-MATCH-RETURN”结构,通过GQL语法的“MATCH-RETURN”语法单元,为SQL处理提供数据子视图,方便传统数据分析师对数据的进一步处理。

图表融合处理代码示例

通过以上的语法设计,可以满足多样化的图表融合处理的诉求。点边数据源提供构图数据,Request数据源提供图计算触发的起点集合。

图表融合处理典型链路

不同的数据源处理模式的组合,形成了多种“流”与“图”的混合计算形态。而SQL+GQL的融合语法设计,可以很好地表达多样化的计算模式。

多样化的图表混合处理模式

2. 与图对话:ChatTuGraph

我们不否认SQL+GQL融合语法是一个创见性的语言设计,但这并不能解决“新型图查询语言的高上手门槛”这个通病,因此,借助于LLM微调实现专有的图查询语言模型,通过自然语言的方式与图数据交互,实现“与图对话(Chat-to-Graph/Chat-TuGraph)”。

我们初步构想了面向未来的图数据库智能化能力,至少具备以下产品形态:

  1. 智能交互分析:通过Agent发送图查询指令,同步获取图数据结果。
  2. 智能数据变更:通过Agent发送图变更指令,修改图数据,获取修改状态(成功与否、影响行数等)。
  3. 智能任务处理:通过Agent发送图处理任务指令,触发异步图计算任务,获取图任务运行状态。
  4. 智能运维管控:通过Agent发送管控指令,实时获取图数据库状态(流量、负载、慢查询等),操纵图数据库实例(启停、伸缩、切流等)。

基于AI的图数据库访问

以上设想是一个比较长远的规划,仰望星空后,我们还是要脚踏实地,回归当下,从最基本的“智能交互探索”开始,构建Text2GQL能力。

3. 模型微调:Text2GQL

以下对话场景,便是我们希望第一阶段达成的目标。

Me: 查询蚂蚁集团研发的通过TuGraph支持的产品列表。

ChatTuGraph: match(a:company where a.name = '蚂蚁集团')-[e:develop]->(b:product)<-[e2:support]-(c:software where c.name = 'TuGraph') return b.name

3.1 语料生成

众所周知,要实现模型微调,构建语料是第一步,也是最关键的一步,语料的质量和丰富度会直接决定微调模型的预测效果。但是前面提到,由于图查询语言标准的不够成熟,想要获取现有的GQL语料是一件很困难的事情。另外,SQL+GQL语法更是TuGraph的“独创”,业务语料的丰富度更低。这种情况下,我们只能“自力更生”想办法创造语料,于是就有了“语法制导的语料生成策略”

该策略的具体思想如下:

  • GQL抽象语法树(AST)展开后的基本形式就是表达式(Expr),常量(Literal)也是一种特殊的表达式。
  • 通过设计表达式实例生成器,批量生成并组合出大量的AST实例,得到GQL语句样本。
  • 特定的AST可以通过通用生成器产生对应的提示词模板,提示词模板随着AST实例化形成提示词文本。
  • 特殊的不适合通过生成器生成的提示词模板可以通过人工构造。
  • 初步生成的提示词文本可以借助LLM(如GPT-4)进一步泛化和翻译,生成多样的自然语言提示词文本。

语法制导的语料生成

3.2 模型训练

构建完语料后,参考OpenAI官方模型微调手册,可以轻松实现模型微调(当然,氪金是必不可少的……)。

这里我们基于模型gpt-3.5-turbo-1106进行微调,首先需要将语料按照如下格式进行处理:

{
    "messages": [
        {
            "role": "system",
            "content": "你是TuGraph计算引擎的DSL专家"
        },
        {
            "role": "user",
            "content": "查找与person点有关联的公司节点,并按规格分组返回。"
        },
        {
            "role": "assistant",
            "content": "match(a:person)-[e:belong]-(b:company) return b.scale group by b.scale"
        }
    ]
}

进入OpenAI模型微调页面,上传格式化后的语料文件(一般以.jsonl结尾),设置模型前缀,创建微调任务。

创建OpenAI模型微调任务

模型微调完成后,可以看到最终的模型ID,形如:ft:gpt-3.5-turbo-1106:personal:<Suffix>:<Id>

查看OpenAI微调模型ID

验证微调模型也很简单,调用OpenAI的Chat Completion API时传递微调的模型ID即可。

from openai import OpenAI

client = OpenAI()

completion = client.chat.completions.create(
    model="ft:gpt-3.5-turbo-1106:personal:geaflow:8z·····a",
    temperature=0,
    messages=[
        {
            "role": "user",
            "content": "查询蚂蚁集团研发的通过TuGraph支持的产品列表。"
        }
    ]
)
print(completion.choices[0].message.content)

3.3 本地部署

如果不想“斥资”使用OpenAI的微调服务的话,我们也提供了开源的基于CodeLlama-7b-hf微调后的Text2GQL模型CodeLlama-7b-GQL-hf给大家测试使用(模型量化后可以在Mac上本地运行,没有4090的小伙伴也不用怕了v)。

首先,下载HuggingFace上的模型文件到本地(记得先安装git-lfs),如/home/huggingface。同时为了方便大家快速部署本地大模型服务,我们提供了预先安装好CUDA的Docker镜像。

$ git lfs install
$ git clone https://huggingface.co/tugraph/CodeLlama-7b-GQL-hf /home/huggingface
$ docker pull tugraph/llam_infer_service:0.0.1

启动Docker容器,将模型文件目录挂载到容器目录/opt/huggingface,并开放8000模型服务端口。

$ docker run -it --name text2gql-server \
  -v /home/huggingface:/opt/huggingface \
  -p 8000:8000 \
  -d llama_inference_server:0.0.1

进入Docker容器,对模型文件进行转换,最终会看到转换后的模型文件ggml-model-f16.gguf

$ docker exec -it text2gql-server /bin/bash
> python3 /opt/llama_cpp/convert.py /opt/huggingface
> ...
> Wrote /opt/huggingface/ggml-model-f16.gguf

默认转换后的模型精度为F16,模型大小为13.0GB。正常情况下Mac本地内存无法支撑如此大的模型推理,需要对模型做精度裁剪(当然如果你有4090/在带GPU卡的ECS上运行,可以跳过该步骤……)。

> # q4_0即将原始模型量化为int4,模型大小压缩至3.5GB
> /opt/llama_cpp/quantize /opt/huggingface/ggml-model-f16.gguf /opt/huggingface/ggml-model-q40.gguf q4_0

不同规格的量化参数对应的模型规模如下:

量化模型规模参考

最后,启动模型推理服务,绑定0.0.0.0:8000地址,否则容器外无法访问该服务。如果对模型做过量化,记得更新-m参数的值。

> /opt/llama_cpp/server --host 0.0.0.0 --port 8000 -m /opt/huggingface/ggml-model-f16.gguf -c 4096

服务启动完成后,可以对本地模型服务做简单的对话测试。

$ curl http://127.0.0.1:8000/completion \
  -H "Content-Type: application/json" \
  -d '{"prompt": "查询蚂蚁集团研发的通过TuGraph支持的产品列表。","n_predict": 128}'

4. 平台接入:Console+LLM

TuGraph Analytics的Console平台提供了初步的大模型能力的集成和对话能力,大家可以下载最新的代码部署体验。

登录Console后,切换到“系统模式”,进入“系统管理-模型管理”注册模型服务模型类型可选择OPEN_AI或LOCAL,分别对应上述的OpenAI微调模型和本地部署模型。注册完成后,可以做简单的可用性测试。

大模型服务注册与测试

切换到“租户模式”,选择一个图查询任务,进入查询页面。点击“执行”按钮右侧的机器人图标,即可开启对话。对话回答的GQL语句可以点击复制按钮一键执行。

自然语言的图交互查询

5. 借图发声:Graph+AI

截至此时,借助于大模型微调技术,实现自然语言转图查询,仅仅是一个开端。未来我们相信“图与AI”还有更多的结合场景值得去探索和尝试。

  • 首先,当前的模型微调训练语料仍不够完备,真实测试中还是会出现推理幻觉和不准确的问题。进一步丰富训练语料以及在GQL标准不完善的情况下,构建模型的有效性验证方案是亟待解决的问题。
  • 其次,面向GQL查询分析场景的微调只解决了图上自然语言交互式分析的问题,对SQL+GQL融合语言中的数据变更、任务提交能力并未覆盖。当然这部分能力也需要TuGraph引擎能力不断迭代改进以获得支持,才能最大化地丰富自然语言操纵图数据库的场景。
  • 再次,面向图数据库的智能化运维管控也是一个很值得研究的方向。在以LLM为基础,Agent大行其道的环境下,借助AI能力释放基础软件的运维压力,也符合ESG的战略宗旨。
  • 另外,借助于图计算技术,为大模型推理提供更准确的知识库,消除模型幻觉,也是当下AI工程技术RAG研究的热门方向。
  • 最后,利用AIGC技术,为图应用场景生成更丰富的解决方案,提供高质量的内容输出,将技术红利带入到行业,对图计算技术的普及也大有裨益。

最后的最后,诚邀大家参与本周六(3.30)TuGraph的社区Meetup,大家喝喝茶、吹吹风,一起聊一聊图计算与AI技术。

活动详情:https://mp.weixin.qq.com/s/LaeGge_oExLce23cxUme3g

标签:GQL,模型,微调,ChatTuGraph,对话,SQL,TuGraph,语料
From: https://www.cnblogs.com/fanzhidongyzby/p/18098628/ChatTuGraph

相关文章

  • 手把手带你用RT-DETR模型部署训练自己的数据集
    本文主要介绍如何部署、训练RT-DETR模型,将从两种方式进行介绍:一种是RTDETR自带的项目文件,另一种是ultralytics仓库下将训练的模型改为rtdetr的基本模型。1.配置环境1.1新建虚拟环境我们可以在电脑上新建一个虚拟环境condacreate-nRT-DETRpython=3.10激活环境condaac......
  • 一个可一键生成短视频的AI大模型,亲测可用
    大家好,我是Java陈序员。自从OpenAI发布Sora文本生成视频模型后,文本生成视频的AI技术引起了无数圈内圈外人士的关注和实验。今天,给大家介绍一个大模型,可一键生成短视频。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项......
  • 解决三维模型的模型调色的主要技术方法
    解决三维模型的模型调色的主要技术方法 三维模型的模型调色是指对三维模型的表面进行着色和贴图,使其更加真实和生动。在数字媒体、游戏开发和影视制作等领域,模型调色是十分重要的环节。下面将介绍三维模型模型调色的主要技术方法。 材质贴图材质贴图是一种将纹理图像应用......
  • 决策树模型(2)特征选择
    特征选择特征选择问题特征选择顾名思义就是对特征进行选择性截取,剔除掉冗余特征。这样能够减少决策树的复杂度。比如在上面两图中,左图通过年龄来对样本进行分类,而右图通过工作对特征进行分类,二者究竟孰好孰坏,这是需要进行比较的。一个非常直接的想法就是仅用选择的特征去训练......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • Python中Keras微调Google Gemma:定制化指令增强大型语言模型LLM
    全文链接:https://tecdat.cn/?p=35476原文出处:拓端数据部落公众号像谷歌、Meta和Twitter这样的大公司正大力推动其大型语言模型(LLM)的开源。最近,谷歌DeepMind团队推出了Gemma——一个由与创建谷歌Gemini模型相同的研究和技术构建的轻量级、开源LLM系列。本文,我们将帮助客户了解Ge......
  • 机器学习之决策树现成的模型使用
    目录须知DecisionTreeClassifiersklearn.tree.plot_treecost_complexity_pruning_path(X_train, y_train)CART分类树算法基尼指数 分类树的构建思想对于离散的数据对于连续值剪枝策略剪枝是什么剪枝的分类预剪枝后剪枝后剪枝策略体现之威斯康辛州乳腺癌数据......
  • 聊聊多模态大模型处理的思考
    转载请注明出处:https://www.cnblogs.com/zhiyong-ITNote多模态:文本、音频、视频、图像等多形态的展现形式。目前部门内业务要求领域大模型需要是多模态——支持音频/文本。从个人思考的角度来审视下,审视下多模态大模型的实现方式。首先就要区分输入与输出,即输入的模态与输出......
  • 安全模型
           ......
  • 网页设计必备技能:如何用CSS盒子模型打造完美布局?
    在网络设计的世界里,盒子模型是构建网页布局的基石,只有理解了盒子模型,我们才能更好的进行网页布局。HTML中的每一个元素都可以看成是一个盒子,拥有盒子一样的外形和平面空间,它不可见、不直观,但无处不在,所以初学者很容易在这上面出问题。今天就让我们来深入了解一下盒子模型。一......