Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
papandadj opened this issue Jan 23, 2024 · 18 comments
Open

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

papandadj opened this issue Jan 23, 2024 · 18 comments
Labels
type/enhancement Type: make the code neat or more efficient

Comments

@papandadj
Copy link

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

@papandadj papandadj added the type/enhancement Type: make the code neat or more efficient label Jan 23, 2024
@wey-gu
Copy link
Contributor

wey-gu commented Jan 23, 2024

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

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

@papandadj
Copy link
Author

Chain of Exploration有计划开源吗?

@wey-gu
Copy link
Contributor

wey-gu commented Jan 23, 2024

有计划!

@papandadj
Copy link
Author

大约时间点有没有🤣

@ccp123456789
Copy link

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

@ccp123456789
Copy link

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

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

@papandadj
Copy link
Author

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

@ccp123456789
Copy link

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

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

@papandadj
Copy link
Author

papandadj commented Jan 30, 2024

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

@ccp123456789
Copy link

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

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

@wey-gu
Copy link
Contributor

wey-gu commented Jan 31, 2024

各位,抱歉回复晚了。

现在我们在企业版的 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

@papandadj
Copy link
Author

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

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

@wey-gu
Copy link
Contributor

wey-gu commented Jan 31, 2024

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

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

@papandadj
Copy link
Author

好的,是不是就这样

  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'
    也就是直接用抽象树转

@wey-gu
Copy link
Contributor

wey-gu commented Feb 1, 2024

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

@papandadj
Copy link
Author

好的 大约明白了

@ccp123456789
Copy link

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

@wey-gu
Copy link
Contributor

wey-gu commented Feb 6, 2024

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

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

有的,未来会做的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type/enhancement Type: make the code neat or more efficient
Projects
None yet
Development

No branches or pull requests

3 participants