上图为本示例的知识图谱构建全流程图。该流程可一次性的完成对任意输入文本的人物、关系以及事件知识的构建。但是这个流程相对比较复杂,一般并不需要一次性写出如此复杂的流程。可以将不同知识的抽取拆解到不同流程中,每次只完成一种知识信息的抽取。下面笔者将拆解并详细介绍每种知识抽取的流程。在此之前,需要提前铺垫一下,当使用相同的提示调用阿里的大语言模型接口时,其返回结果会与通过其Web界面访问时,返回的结果略有不同。所以可以看到在后续的结果解析时与文章前文的结果举例并不完全一致。
人物及头衔抽取
文件输入
选取环境准备阶段已上传到文件系统中的文件“刘彻片段.txt”
全文读取
以文本方式对输入文件进行全文读取
大语言模型提示
选择准备阶段写好的人物及头衔抽取提示模板,并将全文读取的输出字段与模板中的content变量映射,构成最终提交给大语言模型的提示。
阿里大语言模型
选中模型访问账号,选取使用”qwen-plus”模型,不同的模型回答问题的结果会有不同。
值抽取
模型接口返回的结果并非一个纯json结构的数据,其头部和尾部都副缀了些文本内容。通过值抽取算子按照给定的正则表达式抽取结果中的json数据。
Json扁平化
将Json结构数据转换为结构化格式。图中左侧为大模型返回的结果,该结果是手工粘到界面中,供右侧进行规则配置参考使用的。Json扁平化配置中为每一个输入的json数据都做了一个缺省的命名,为其命名为”o”。图中可以看到,json数据的“人物”对象是一个数组,如果需要展平该结构中的数据,需要为其起个别名,即图中“o.人物”命名为了“da”。我们还可以看到,图中的“头衔”字段也是数组,由于我们并不需要枚举每个头衔,故我们不需要再加一层结构映射了。如需增加映射层次,可点击图中右上角的“+”按钮添加映射层次。如图所示,我们只是将姓名和头衔两个字段重新映射为了name和titles两个字段,并以字符串的方式输出。由于头衔字段是一个json结构的数组,包含有“[”、“]”等自符,我们希望将其头衔的值输出为”头衔1,头衔2…”这种格式。故在该算子后又衔接了“值剪切”和“文本替换”两个算子。
值剪切
删除titles字符串首位的字符,即删除json数组的”[”和“]”两个字符
文本替换
替换“titles”中的“"”、”\n\b”字符,将这些字符替换为“空”字符
MySQL写出
将数据写出到kb_person表。
MySQL连接器
当同一个流程中有多个算子会用到同一个数据源时,可以使用数据库连接器优化资源使用。在本例中我们可以看到,MySQL连接器后续连接MySQL写出和MySQL表清空两个算子,表示这两个算子复用同一个数据库连接,这样可减少对数据库的连接压力。缺省情况下,每个算子都会单独建立一个与数据库的连接。可使用连接器算子优化对数据库的连接资源占用。
MySQL表清空
清空kb_person表中的数据。在进行流程调试时,我们往往会在表中插入一些脏数据。最好的模式就是,每次插入数据前,先清空表中的脏数据再插入数据。然后再观察表中的数据是否达到了处理的质量要求。流程图中MySQL表清空与MySQL写出算子间的虚线表示,MySQL写出算子必须等MySQL表清空算子执行完成后才能写出数据。确保写出数据时,表是干净的。
结果查看
上图为kb_person表中的数据,我们可以看到文本中的人物与头衔被准确的抽取出来了。
人物关系抽取
由上图可以看出,其处理流程与“人物及头衔抽取”基本相同,只有少量算子的配置存在差别,下面我们将只列出配置差别比较大的算子。
Json扁平化
将Json结构数据转换为结构化格式。如图所示,将json对象中的字段映射为结构化表格。
MySQL写出
将数据写出到kb_relation表。
结果查看
人物相关事件抽取
由上图可以看出,其处理流程与“人物及头衔抽取”基本相同,只有少量算子的配置存在差别,下面我们将只列出配置差别比较大的算子。
Json扁平化
将Json结构数据转换为结构化格式。其转换逻辑与“人物及头衔抽取”中的Json扁平化一致,只是数据存在差异。其配置如图。
MySQL写出
将数据写出到kb_event表。
结果查看
结语
由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。