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

[Issue]:生成.parquet文件问题 #893

Closed
fucktx opened this issue Aug 12, 2024 · 9 comments
Closed

[Issue]:生成.parquet文件问题 #893

fucktx opened this issue Aug 12, 2024 · 9 comments
Labels
triage Default label assignment, indicates new issue needs reviewed by a maintainer

Comments

@fucktx
Copy link

fucktx commented Aug 12, 2024

Describe the issue

如题:假如我有1w条数据,我这次初始化1w条,下次新增了100条,我要把这批数据重新追加到之前的初始化数据里面做成增量形式。poutut/artifacts 目录目前是一样的路径,测试效果发现,200条会覆盖之前1w条的parquet文件中的内容,想请教下大家,有木有什么方式可以让数据做成增量的形式

Additional Information

  • GraphRAG Version: 0.22
  • Operating System: mac m1
  • Python Version: 3.10
  • Related Issues:
@fucktx fucktx added the triage Default label assignment, indicates new issue needs reviewed by a maintainer label Aug 12, 2024
@fucktx fucktx changed the title [Issue]: <title> 生成.parquet文件问题 [Issue]:生成.parquet文件问题 Aug 12, 2024
@shaoqing404
Copy link

设置cache 也跟踪不到文件内,要么就加新闻界,别动output

@fucktx
Copy link
Author

fucktx commented Aug 12, 2024

设置cache 也跟踪不到文件内,要么就加新闻界,别动output

那有个问题,增量怎么做,如果后面做成图的话,一个增量一个新文件,那维护起来都是麻烦,尤其新闻数据,天天有增量

@guangxiangdebizi
Copy link
Contributor

插个眼

@natoverse
Copy link
Collaborator

Please see #741

@natoverse natoverse closed this as not planned Won't fix, can't repro, duplicate, stale Aug 12, 2024
@yayaQAQ
Copy link

yayaQAQ commented Aug 13, 2024

设置cache 也跟踪不到文件内,要么就加新闻界,别动output

那有个问题,增量怎么做,如果后面做成图的话,一个增量一个新文件,那维护起来都是麻烦,尤其新闻数据,天天有增量

graphrag没有太好的增量方式,我目前是新增文件,我这边新增的文件主要是书籍,所以文件还比较合适,增加了之后,就删掉output里面的artifact文件夹,然后重新索引。如果想要删除,就先删了文件,再把parquet里面和这个关联的所有内容都删掉。

@fucktx
Copy link
Author

fucktx commented Aug 16, 2024

插个眼

我最近想到一个思路,就是数据通过neo4j这种图数据库来做merge增量

@fucktx
Copy link
Author

fucktx commented Aug 16, 2024

Please see #741
其实如果生成的.parquet文件的 时候,能不能多一种选择,比如有一个neo4j这种驱动,只要实现其中数据库链接,然后怎么save这些用户自己选择,比如我每次生成的时候都对库里面的数据重新进行merge,这样就可以比较好的解决这个问题,同时也会解决这些文件存储本地不能分布式去做检索的一系列问题

@guangxiangdebizi
Copy link
Contributor

插个眼

我最近想到一个思路,就是数据通过neo4j这种图数据库来做merge增量

我试过这个方法,就是我是在settings.yaml中graphml直接设置为True,然后使用gephi打开,再把节点和关系分别导出,然后再使用python代码连接neo4j的数据库后传入分两次传入,这个方法有几个问题:
1.人工操作的地方太多了,如果只是个人学习用处还好,但是操作人员多了以后人为的进行数据增量首先就是会慢蛮多的,因为要人为的进行数据调整和删减每个人的行为都是不一样的。
2.数据量太大的话会导致内容的逻辑关系混乱和大规模的节点重复,同时人为的删减和维护太累了速度也慢,打个比方我要新增一个新闻或者什么文档进入图谱,图谱中可能已经存在了类似的节点

例如:假设你正在构建一个关于“科技新闻”的知识图谱,现在你想新增一篇关于“苹果公司发布新款iPhone”的新闻到图谱中。这篇新闻涉及到的内容可能已经部分存在于图谱中,比如“苹果公司”和“iPhone”这些节点。
示例:
新增新闻:
你有一篇新的新闻文章,标题为:“苹果公司发布iPhone 15,带来全新摄像技术”。你打算将这篇新闻的相关信息添加到图谱中。
图谱中的现有节点:
在图谱中,你可能已经有了以下节点:
“苹果公司”节点
“iPhone”节点
“摄像技术”节点
重复和混乱的情况:
重复节点:如果你直接新增这个新闻内容,图谱中可能会生成一个新的“苹果公司”节点或“iPhone”节点,而实际上这些节点已经存在了。这样会导致图谱中出现多个“苹果公司”或“iPhone”节点,信息重复且关系混乱。
逻辑关系混乱:随着越来越多的类似节点(如多个“苹果公司”或“iPhone”节点)被添加,图谱中这些节点之间的关系可能变得不清晰,比如两个“苹果公司”节点分别连接了不同的新闻,但实际上它们应该指向同一个实体,这会导致逻辑上的混乱。
人为维护的困难:
手动删除重复节点:你需要花费大量时间去查找和删除这些重复的节点,同时还要确保删除的节点不会影响到其他相关的节点和关系。
新增节点的关联:每次新增一个节点,你还需要手动检查图谱中是否已经有相同或相似的节点,这个过程既耗时又容易出错。

就算进行人为的调整确保了节点不会重复且内容可以追加到节点的属性内容后面,那也难以保证内容是不是会重复:
假设你在一个知识图谱中有一个节点“苹果公司”,并且你手动调整了新增的内容,确保不会创建重复的节点,而是将新信息追加到现有节点的属性中。但即使这样,仍然存在内容重复的问题。例如:
场景:
你有一个知识图谱,图谱中已经有一个节点“苹果公司”,它的属性包含了以下信息:
公司名称: 苹果公司
创始人: 史蒂夫·乔布斯
成立时间: 1976年
产品: iPhone, iPad, MacBook

  • 新闻:
    • 苹果公司发布iPhone 13,带来全新摄像功能。
    • 苹果公司在环保技术上取得了突破性进展。

现在,你有一篇新的新闻,标题为:“苹果公司发布iPhone 15,带来全新摄像技术和环保材料。”你决定将这篇新闻的信息追加到“苹果公司”节点的“新闻”属性中。

手动调整后的情况:
你手动确认了节点不会重复,于是你将这条新新闻追加到了“新闻”属性中:

  • 新闻:
    • 苹果公司发布iPhone 13,带来全新摄像功能。
    • 苹果公司在环保技术上取得了突破性进展。
    • 苹果公司发布iPhone 15,带来全新摄像技术和环保材料。
      内容重复:
      成功地避免了节点的重复,但是“内容重复”的问题依然存在。
      或者可能我的这个方法有点问题,如果您有更好的建议或者想法也可以再讨论一下

@fucktx
Copy link
Author

fucktx commented Aug 19, 2024

插个眼

我最近想到一个思路,就是数据通过neo4j这种图数据库来做merge增量

我试过这个方法,就是我是在settings.yaml中graphml直接设置为True,然后使用gephi打开,再把节点和关系分别导出,然后再使用python代码连接neo4j的数据库后传入分两次传入,这个方法有几个问题: 1.人工操作的地方太多了,如果只是个人学习用处还好,但是操作人员多了以后人为的进行数据增量首先就是会慢蛮多的,因为要人为的进行数据调整和删减每个人的行为都是不一样的。 2.数据量太大的话会导致内容的逻辑关系混乱和大规模的节点重复,同时人为的删减和维护太累了速度也慢,打个比方我要新增一个新闻或者什么文档进入图谱,图谱中可能已经存在了类似的节点

例如:假设你正在构建一个关于“科技新闻”的知识图谱,现在你想新增一篇关于“苹果公司发布新款iPhone”的新闻到图谱中。这篇新闻涉及到的内容可能已经部分存在于图谱中,比如“苹果公司”和“iPhone”这些节点。 示例: 新增新闻: 你有一篇新的新闻文章,标题为:“苹果公司发布iPhone 15,带来全新摄像技术”。你打算将这篇新闻的相关信息添加到图谱中。 图谱中的现有节点: 在图谱中,你可能已经有了以下节点: “苹果公司”节点 “iPhone”节点 “摄像技术”节点 重复和混乱的情况: 重复节点:如果你直接新增这个新闻内容,图谱中可能会生成一个新的“苹果公司”节点或“iPhone”节点,而实际上这些节点已经存在了。这样会导致图谱中出现多个“苹果公司”或“iPhone”节点,信息重复且关系混乱。 逻辑关系混乱:随着越来越多的类似节点(如多个“苹果公司”或“iPhone”节点)被添加,图谱中这些节点之间的关系可能变得不清晰,比如两个“苹果公司”节点分别连接了不同的新闻,但实际上它们应该指向同一个实体,这会导致逻辑上的混乱。 人为维护的困难: 手动删除重复节点:你需要花费大量时间去查找和删除这些重复的节点,同时还要确保删除的节点不会影响到其他相关的节点和关系。 新增节点的关联:每次新增一个节点,你还需要手动检查图谱中是否已经有相同或相似的节点,这个过程既耗时又容易出错。

就算进行人为的调整确保了节点不会重复且内容可以追加到节点的属性内容后面,那也难以保证内容是不是会重复: 假设你在一个知识图谱中有一个节点“苹果公司”,并且你手动调整了新增的内容,确保不会创建重复的节点,而是将新信息追加到现有节点的属性中。但即使这样,仍然存在内容重复的问题。例如: 场景: 你有一个知识图谱,图谱中已经有一个节点“苹果公司”,它的属性包含了以下信息: 公司名称: 苹果公司 创始人: 史蒂夫·乔布斯 成立时间: 1976年 产品: iPhone, iPad, MacBook

  • 新闻:

    • 苹果公司发布iPhone 13,带来全新摄像功能。
    • 苹果公司在环保技术上取得了突破性进展。

现在,你有一篇新的新闻,标题为:“苹果公司发布iPhone 15,带来全新摄像技术和环保材料。”你决定将这篇新闻的信息追加到“苹果公司”节点的“新闻”属性中。

手动调整后的情况: 你手动确认了节点不会重复,于是你将这条新新闻追加到了“新闻”属性中:

  • 新闻:

    • 苹果公司发布iPhone 13,带来全新摄像功能。
    • 苹果公司在环保技术上取得了突破性进展。
    • 苹果公司发布iPhone 15,带来全新摄像技术和环保材料。
      内容重复:
      成功地避免了节点的重复,但是“内容重复”的问题依然存在。
      或者可能我的这个方法有点问题,如果您有更好的建议或者想法也可以再讨论一下

首先我对neo4j不是很了解,我就查了下它有merge 命令,就比如你举得这个例子中,比如之前数据有苹果公司->iphone13 ,新增数据 苹果公司->iphone15,每次merge的时候我没试过是不是只是找苹果公司,然后其他的比如iphone13,iphone15都会自动构建到苹果公司这个树下面。我之前试过一些数据,看最后的效果好像是这样的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
triage Default label assignment, indicates new issue needs reviewed by a maintainer
Projects
None yet
Development

No branches or pull requests

5 participants