专栏名称: CloudMan
云计算深度实践者;定期发布《每天5分钟玩转OpenStack》教程;让 OpenStack 不再难学!
目录
相关文章推荐
51好读  ›  专栏  ›  CloudMan

网文校对系统 - 存储实体和关系

CloudMan  · 公众号  · 科技自媒体 互联网安全  · 2025-03-26 05:27

主要观点总结

本文主要讨论了知识图谱的存储方案和技术实现。作者首先介绍了遇到的存储问题,并探讨了两种实体存储方案:向量数据库和NoSQL数据库。经过与R1的讨论,作者决定使用MongoDB存储实体数据,使用图数据库Neo4j存储关系数据。文章还介绍了实体数据模型的设计,包括记录历史数据和更新状态的机制。此外,文章还涉及了Neo4j存储关系数据模型以及编码实现的细节。最后,作者提到了将完整代码上传到Github,并介绍了下一节的计划。

关键观点总结

关键观点1: 知识图谱的存储方案选择

作者面临存储问题,探讨了向量数据库和NoSQL数据库两种实体存储方案。最终决定使用MongoDB和Neo4j分别存储实体数据和关系数据。

关键观点2: 实体数据模型设计

实体数据模型需记录历史数据和更新状态。作者提到了canonical_state和version_chain的概念,用于存储最新状态和状态更新的历史。

关键观点3: 关系数据模型及编码实现

Neo4j用于存储关系数据,数据模型包括两个实体和它们之间的关系。作者还介绍了编码实现的细节,包括与R1讨论模块的输出、整合、优化和debug。

关键观点4: 代码上传及知识图谱搭建

作者将完整代码上传到Github,并介绍了运行程序搭建知识图谱的过程。目前1-51章的数据已经存放到知识图谱中,下一节将讨论校对模块。


正文

请到「今天看啥」查看全文


上一节我们已经用大模型从文本中识别提取出实体和关系,接下来要考虑存储的问题。

R1最初给我们的方案是向量化存储。

但后来讨论到实体的动态属性特性时又提到可以使用NoSQL数据库,如MongoDB。

也就是说实体存储现在至少有两种方案:向量数据库和NoSQL数据库。

具体怎么权衡,听听R1怎么说。

这个解释我觉得非常到位。特别是最后这张表,针对不同数据类型采用不同的存储方案。

经过进一步探索,我决定用MongoDB存储实体数据,用图数据库Neo4j存储关系数据。

虽然这两个数据库以前都没接触过,但现在有了AI,要用起来应该问题不大。

MongDB存储实体

存储的关键是对实体建模。实体的数据模型除了要保存最新的信息,也需要记录历史数据。比如主角一路打怪升级,不同时期的修为都需要记录。

在与R1多轮讨论后,最终得到了如下数据模型:

canonical_state 是最新的状态,version_chain 里是状态更新的历史。

当往MongoDB中存储实体数据时,需要考虑不同的情况:

  1. 实体不存在。
    这个简单,创建实体,初始化canonical_state和version_chain
  2. 实体已经存在。
    需要更新canonical_state,并将当前状态加入到version_chain

代码实现方面主要靠R1输出,里面用了大量MongoDB的语法,看不懂没关系,只要知道大致意思就可以了。

Neo4j存储关系

关系的数据模型比较简单,就是两个实体(节点)和它们之间的关系(边)。

编码实现

前面基本上已经把知识图谱的技术方案讨论清楚了,接下来可以开发了。

先让R1生成项目目录结构,然后再分模块开发。

对于具体的代码,与R1讨论模块的时候基本上都有输出,我们需要整合在一起。当然,必要的优化和debug是少不了的。

整个过程走下来,开发这部分工作量占了50%。主要是因为对MongoDB和Neo4j不熟,需要边学边debug比较花时间。但难度不大,基本上都是体力活儿。真正有价值的还是前面讨论技术方案的部分。只要方案定了,编码实现怎么都能搞定。

完整代码已经上传到Github。
https://github.com/cloudman6/novelpad

下面CloudMan就带着大家过一下代码,并运行程序搭建知识图谱。

1-51章已经存放到知识图谱中了,下一节我们讨论校对模块。







请到「今天看啥」查看全文