nebula icon indicating copy to clipboard operation
nebula copied to clipboard

有没有计划自己训练模型来支持ngql语法

Open papandadj opened this issue 1 year ago • 18 comments

我看了下你们langchain的实现,感觉就是一个表通过cypher的prompt来实现,但是感觉在复杂环境下,比如很多节点和边,我用老gpt4(截止日期21年的)获取不到nebula的语法。你们有没有自己训练的模型来支持新的或者复杂的语法

papandadj avatar Jan 23 '24 07:01 papandadj

除了 naive 0-shot text2cypher,再就是在 LlamaIndex 上我们有引入 Graph RAG。

我们自己有 Chain of Exploration(是更先进的方式) ,我前阵子在 PyCon China Beijing 做过分享,还没有开源哈。

wey-gu avatar Jan 23 '24 08:01 wey-gu

Chain of Exploration有计划开源吗?

papandadj avatar Jan 23 '24 08:01 papandadj

有计划!

wey-gu avatar Jan 23 '24 08:01 wey-gu

大约时间点有没有🤣

papandadj avatar Jan 23 '24 08:01 papandadj

大佬,调用gpt4的方式生成ngql还是不可控的。 尤其在中文领域,希望大佬可以用中文做些测试,会发现很多问题。

ccp123456789 avatar Jan 26 '24 06:01 ccp123456789

我看了下你们langchain的实现,感觉就是一个表通过cypher的prompt来实现,但是感觉在复杂环境下,比如很多节点和边,我用老gpt4(截止日期21年的)获取不到nebula的语法。你们有没有自己训练的模型来支持新的或者复杂的语法

我感觉目前难的是,text2ngql的训练语料几乎没有。 想微调这样一个模型几乎不可能

ccp123456789 avatar Jan 29 '24 01:01 ccp123456789

感觉gpt还可以,但是私有模型简直灾难

papandadj avatar Jan 29 '24 01:01 papandadj

感觉gpt还可以,但是私有模型简直灾难

gpt做简单图结构的英文还可以。 但是做中文图谱几乎都是错的,关系会出现幻觉,实体识别错误,关系跳数错误

ccp123456789 avatar Jan 29 '24 08:01 ccp123456789

我这边通过给nebula写很多注释,包括节点、边、以及里面的字段注释。然后自动同步到gpt中,感觉效果可以。你也可以这样试下。私有模型如果写cypher语句也可以,但是私有模型让它转成nebula语法就感觉它一句话没听进去

papandadj avatar Jan 30 '24 05:01 papandadj

我这边通过给nebula写很多注释,包括节点、边、以及里面的字段注释。然后自动同步到gpt中,感觉效果可以。你也可以这样试下。私有模型如果写cypher语句也可以,但是私有模型让它转成nebula语法就感觉它一句话没听进去

但是你说的这些,依旧无法解决实体识别和实体链接的问题。 中文首先识别出实体,然后关键链接到图谱具体的实体

ccp123456789 avatar Jan 31 '24 01:01 ccp123456789

各位,抱歉回复晚了。

现在我们在企业版的 NebulaLLM 上做了很多相关的优化,效果好很多,给大家参考哈。

  • text2cypher 的 prompt 不应该耗费心智让它写出 nebula flavor 的 query,而是应该让它把所有力量集中在写查询本身,然后用代码去修正为 nebula flavor query
  • 用 pre-post processing 去处理 query,进一步降低幻觉(超出 schema、等其他场景)的产生
  • text2cypher 阶段采用比其他阶段更昂贵的模型(比如 qwen 72B)
  • 用 Chain of Exploration 做复杂任务,text2cypher 只是其子模块
  • schema 本身用词对质量影响很大(think of function calling 中函数的描述),我们引入了机制能在参考 schema 的时候参考 comment 但是最好是能把 schema 改写好,消弭误解,让它达意)

未来我们会一点点把一些成果开源出来哈

cc @ccp123456789 @papandadj

wey-gu avatar Jan 31 '24 01:01 wey-gu

第一个意思是不是这样可以理解,让大模型(qwen 72b)产生cypher语句,之后自己对cypher进行分析,然后改成nebula 语法?

Chain of Exploration 实现思路开源时记着踢下

papandadj avatar Jan 31 '24 05:01 papandadj

第一个意思是不是这样可以理解,让大模型(qwen 72b)产生cypher语句,之后自己对cypher进行分析,然后改成nebula 语法?

  • 不是哈,是让大模型写出通用 cypher,然后我们用代码改写为 nebulagraph-cypher 哈。
  • 我强调其他模型是,如果整个流程中有其他部分也用大模型,可以选便宜的,但是把 query gen 的部分用最贵的,不过时间上我测试过小到 GLM3-6B 的模型,也是 work 的。

wey-gu avatar Jan 31 '24 08:01 wey-gu

好的,是不是就这样

  1. 产生普通cypher: MATCH (p:person)-[e:directed]->(m:movie) WHERE m.name = 'The Godfather II'
  2. 通过代码分析,不是自然语言模型,转成这样:MATCH (p:person)-[e:directed]->(m:movie) WHERE m.movie.name == 'The Godfather II' 也就是直接用抽象树转

papandadj avatar Jan 31 '24 10:01 papandadj

👍 是的,但是不一定是 AST 做的。

wey-gu avatar Feb 01 '24 00:02 wey-gu

好的 大约明白了

papandadj avatar Feb 01 '24 01:02 papandadj

👍 是的,但是不一定是 AST 做的。 有考虑基于大模型做微调吗

ccp123456789 avatar Feb 06 '24 02:02 ccp123456789

👍 是的,但是不一定是 AST 做的。

有考虑基于大模型做微调吗

有的,未来会做的

wey-gu avatar Feb 06 '24 04:02 wey-gu