搭建知识谱图的流程如下:
-
文本内容分块
-
实体识别和关系提取
-
存储实体和关系
文本内容分块
第一步很好理解,就是将小说已发布内容切分成若干个文本块。为了保留上下文信息,可以考虑文本块之间保留一些重叠的部分。
R1推荐使用LangChain的RecursiveCharacterTextSplitter并给出了参考代码。
分块的长度为1000,重叠部分200。
调用split_with_context方法,传入文本内容text,返回分块列表chunks。
实体识别和关系提取
这步是从分块中提取关键信息,信息的质量决定了网文校对的准确性,相当关键。
实体识别
咱们先讨论实体识别。
网络小说每一章都会各种角色、物品、地点、事件,这些都是实体。每个实体都有各自不同的属性。
所以接下来的问题是:提取实体的哪些信息,以及如何提取?
R1建议如下:
这里我总结一下:
-
R1列出了不同类型的实体需要识别的各种纬度的属性。
-
给出了识别各类实体的参考代码。
不知道大家发现没有,这种方法有个非常大的缺陷:我们必须事先把识别某类信息的所有情况都列出来。
比如在识别地点时,我们得指定关键字。
这扩展性就太差了。我哪儿列举得出来所有的关键字啊?
后来R1又给了个改进方案,用自然语言处理(NLP)的开源库spaCy来识别实体。
但感觉还是有不少需要硬编码的地方,而且也比较复杂。
我突然想到,现在大模型对语义理解能力已经这么强了,是不是可以直接让它来识别实体呢?于是我把想法告诉R1,听听它的建议。
R1肯定了这个的想法,并给出了实体识别的提示词。
这个方案靠谱多了
我们不需要指定有哪些类型的实体,也不需要指定各类实体有哪些属性,全凭大模型基于对小说的理解自行判断。
实体的类型是动态的,属性也是动态的,扩展性直接拉满。
关系提取
有了实体识别的经验,关系提取依葫芦画瓢,让大模型自己决定。
好,到这里,我们的思路已经很清晰了。先分块,然后分别用大模型识别实体和提取关系。
这时,我又冒出个想法:能不能把识别实体和提取关系这两步合并成一步?
R1肯定了这个想法,并给出了新的提示词。这也是我们最终采用的方案。
一点感慨
这一节 CloudMan 巴拉巴拉说了这么多,无非是想让大家体会一下与AI交互的过程。
把AI当作行业专家和顾问,它能帮助我们快速进入一个新领域。
AI给出的建议,先接收,但别忙着接受。
倒不是说这些建议是错的,但很有可能不是最佳的,或者对提问的那个人来说不是最佳的。
因为AI毕竟不能100%了解我们的需求和背景。比如提问的人目前是什么技术水平?有多少预算?对系统的性能有哪些要求?说实话,即便是我们自己一开始也很难说清楚自己到底要什么。好多东西都是在讨论的过程中逐步清晰起来的。
所以对于AI提出的方案,先认真研究,结合自己的理解看有没有可以改进的地方,然后再拿去跟AI讨论。
就像前面提出用大模型识别实体,以及把实体和关系合并处理的想法,都是这样产生的。
整个项目AI贡献了80%,CloudMan只贡献了20%,但我绝不会低估自己的价值。因为整个过程是我在引导和把控,是我在拍板采用哪条建议。
目前CloudMan使用AI的心态是:
AI是工具。
人,才是最后做决定的那个
当然,哪天AGI甚至强人工智能出现了,必要时咱再改变心态呗。
公众号Cloudman6