目录

一、前言

二、项目涉及的技术与理论概述

三、实现效果展示

四、总结

注:整个项目可作为本科阶段的课程设计或毕业设计,建议收藏。

一、前言

  “文化自信是一个国家、一个民族发展中更基本、更深沉、更持久的力量。”,中国古诗词文化是中华优秀传统文化的一部分,是中华民族文化遗产中的瑰宝,也是国人语言文字学习和人文教育的丰富资源库,如何守住以及更好地传承这份灿烂的诗词文化、如何通过诗词文化增强我们的文化自信,是我们这个时代需要回答的问题。
  随着AIGC(Artificial Intelligence Generated Content,AIGC)时代的到来,传统搜索引擎的弊端愈加凸显,而基于知识图谱的问答系统的出现,为解决这些弊端提供了新的途径。在古诗词领域,传统搜索引擎给用户返回的结果不够精确,信息十分有限,且浪费了用户寻找答案的时间,本文就此提出并实现了基于知识图谱的古诗词问答系统。
  本文立足古诗词文化与计算机科学文化结合,实现了古今文化交融,焕发出诗词文化的奇光异彩,并且为古诗词爱好者、广大中小学生在学习诗词文化时提供了一定的学习途径和帮助。

二、项目涉及的技术与理论概述

1. 使用的工具与技术说明

  开发整个项目所涉及的工具、技术比较繁多和复杂。
  首先,在使用的工具层面,主要包括以下几种工具:JetBrains PyCharm(Professional Edition)、Neo4j、Anaconda、MySql、Lable-studio(数据标注平台)、AutoDL(模型训练平台)、ChatGPT(或国内的各种大模型:文心一言、通义千问、智谱AI等)。
  其次,在使用的技术层面,除了需要掌握问答系统的原理和构建方法外,还需要掌握以下各项技术。其中,系统交互基于Web前后端开发技术,包括综合运用HTML、CSS、JavaScript、Axios、Echarts、MySql以及Bootstrap前端框架和Flask后端框架;系统知识库的搭建基于知识图谱技术体系,包括数据获取模块所使用的Python网络爬虫技术,而知识的存储基于Neo4j图形数据库,并且需要掌握Cypher查询语言;系统自然语言处理(Natural Language Processing,NLP)部分主要涉及Jieba分词技术、模型数据获取、数据标注、FastText和BERT模型训练等技术。

2. 知识图谱

  知识图谱(Knowledge Graph,KG)以结构化的形式描述现实世界中的实体及其关系,将互联网信息表达为接近人类认知世界的形式,提供了一种更好地组织、管理和理解互联网海量信息的能力,一般认为,知识图谱于2012年5月17日由谷歌正式提出并成功应用于搜索引擎中。知识图谱是一种大型语义网络,以其强大的语义处理能力和开放组织能力,为互联网时代知识的组织和应用奠定了基础。知识图谱作为人工智能的关键技术之一,已被广泛应用于智能搜索、智能问答、人机交互对话系统。
  知识图谱是很多技术相互影响和继承发展的结果,有着来自Web、AI和NLP等多方面的技术基因,所以知识图谱技术是一个系统性工程,有着一套成熟的构建技术体系,其构建技术体系如下图所示。
知识图谱构建技术

  知识图谱构建技术解决的核心问题是“知识从哪儿来?”,当确定了知识图谱的模式后,知识图谱构建技术就会源源不断地将数据转换成知识,如同人类一样不断地学习和汲取知识,知识图谱的存储常常考虑使用图数据库存储,图数据库是一种可视化NoSQL型数据库,支持数据的增删改查等操作,常见的图数据库有Neo4j、OrientDB、JanusGraph等。下图给出了一个简单的古诗词领域的知识图谱,在Neo4j中以子图形式体现。
古诗词知识图谱

3. 基于知识图谱的问答系统

  基于知识图谱的问答系统KGQA(Knowledge Graph Question Answering,KGQA)是一种能够准确、高效地回答问题并能以自然语言输入问题的方法,在许多领域得到了应用,知识图谱问答系统给定一个自然语言问句,让计算机基于已构建的知识图谱进行问句的语义理解、知识的自动检索,然后对知识图谱进行路径推理,找出问题的候选答案,最后对候选结果进行排序,给出最终的答案。
  KGQA的应用示例如下图所示,在问句中,计算机需要像人脑一样理解“世界最高峰是什么峰?”。在这句话中,需要先找出“世界”,“高峰”等关键信息,并理解这些关键信息之间的逻辑关系。之后在知识图谱中找出“世界”范围内“高峰”的相似概念“高山”,“山峰”等,并通过相似概念找到“珠穆朗玛峰”“喜马拉雅山脉”等多个实体,以及这些实体的属性“海拔”等信息,并对“海拔”高度进行比较,最终确定答案为“海拔8848米”的“珠穆朗玛峰”。

KGQA应用示例
  近年来,知识图谱作为AI重要研究领域,对知识的表示更为直观,有助于问答系统更加智能化。值得注意的是,KGQA的构建是一个复杂的工程,其模块包括KG构建模块、问题解析模块、知识检索模块、答案生成模块等,而每一个模块内部还有很多任务需要完成,后续将对其一一讲解。

4. 意图识别与分类模型

  本文实现的问答系统,在问句意图识别和分类处理中,主要使用的是FastText模型,FastText是在2016年由Facebook提出的一种比较迅速的词向量和文本分类方法,模型的结构类似于CBOW(连续词袋模型),在学术上没有太多创新点,好处是模型简单,训练速度非常快。
  相对于传统的word2vec计算方法,FastText是一种更快速和更新的计算word embedding的方法,其优点主要有以下几个方面:
  (1)FastText在保持高精度的情况下加快了训练速度和测试速度。
  (2)FastText对word embedding 的训练更加精确。
  (3)FastText采用两个重要的算法:N-gram、Hierarchical Softmax。
  (4)Gram算法:相对于word2vec中采用的CBOW架构,FastText采用的是N-gram架构,其组成主要分为输入层、隐藏层和输出层。
  在后续的章节,将从理论和实践两个层面详细地对该模型流水线进行介绍和实现。

5. 命名实体识别模型

  命名实体识别(Named Entity Recognition,NER)是一项基本的信息提取任务,在自然语言处理中应用,其目的是从特定文本中识别出含有特定意义的实体,例如在古诗词领域,需要识别出作者名字、作品标题、作者合称等命名实体。
  预训练语言模型是指在大规模数据集上进行无监督预训练的语言模型,其中BERT(Bidirectional Encoder Representations from Transformers,BERT)是一种基于Transformer架构的预训练语言模型,能够在NER任务上比传统的NER方法更加准确、高效地提取出命名实体。
  2018年,以Devlin为首的谷歌团队提出BERT模型,采用掩码语言模型以及下一句预测技术进行预训练,是一种真正深度集成双向编码特性的语言模型,能够解决一词多义的问题。在命名实体识别任务中使用预训练后的模型,能够大大提高识别的速度和效果,从而为答案生成模块中Cypher语句槽值的正确填充提供了基础。
  BERT实际上是一种替代了word embedding 的新型文字编码方案,是一种计算文字在不同文本中的语境而“动态编码”的最优方法。其架构是一个多层的双向注意力结构的encoder部分,它输入的编码向量(长度512)是3个嵌入特征的单位,其输入如下图所示。
BERT的输入
  (1)词嵌入(Token Embeddings):根据每个字符在“字表”中的位置赋予一个特定的embedding值。
  (2)分割嵌入(Segment Embeddings):用于区分两个句子,例如B是否是A的下文(对话场景、问答场景等)。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1。
  (3)位置嵌入(Position Embeddings):将单词的位置信息编码成特征向量,是向模型中引入单词位置关系至关重要的一环。
  BERT实际上由多个encoder block叠加而成,通过使用“注意力”模型的多个层次来获得文本的特征提取,BERT在训练过程中将自己的训练任务和可替换的微调任务(Fine-Tuning)分离。Fine-Tuning的目的是根据具体任务的需求替换不同的后端接口,即在已经训练好的语言模型的基础上,加入少量任务专门的属性,例如,对于分类问题在语言模型基础上加一层softmax网络,然后在新的语料上重新训练来进行fine-tune,除了最后一层,所有的参数都没有变化,如下图所示。
微调
  古诗词领域的命名实体识别是一个中文NLP任务,所以本次训练使用的是预训练模型bert-base-chinese(科学上网)模型,这个模型的体量比较大,有大约1亿个参数,整个任务的训练过程如下所述:
  (1)从数据集加载器中获取一个批次的数据。
  (2)让模型计算预测结果。
  (3)使用工具函数预测结果和labels进行变形,移除预测结果和labels中的PAD。
  (4)计算loss并执行梯度下降优化模型参数。
  (5)每隔一定的steps,输出一次模型当前的各项数据,便于观察。
  (6)每训练完一个epoch,将模型的参数保存到磁盘。

三、实现效果展示

  目前本系统的功能包括:系统注册与登录、数据获取与处理、知识图谱构建、知识图谱展示、意图识别与问句分类、命名实体识别、答案生成,下图给出了系统运行流程及功能展示。
系统运行流程及功能展示
  从上图可知系统的运行流程可以分为5个步骤:
  第一,用户首先需要进行系统注册并登录系统才能进入图谱展示和问答界面。
  第二,当用户开始问答时,只需在系统提供的接口处输入问句并提交给系统,系统则会利用FastText模型完成用户问题的意图识别与问句分类功能,并将识别出来的分类标签传递给答案生成功能板块。
  第三,当识别和分类结束后,系统会再将问句传递给BERT模型完成命名实体识别任务,并将识别出的命名实体传递给答案生成功能板块。
  第四,在答案生成功能板块中,利用识别出来的命名实体进行Cypher语句的槽值填充,然后再将该语句提交到Neo4j数据库中获得相应的知识。
  第五,在答案生成功能板块会根据返回的知识结合用户的意图,在话术包装环节生成对应用户问题的答案,最后再将答案返回到前端显示给用户。
  根据系统设计的功能,下面将展现目前系统实现的效果,如何实现将在后续章节讲解。

1. 知识图谱构建
  由于导入Neo4j数据库的节点和关系较多,采用多进程导入数据,尽管如此整个导入工作也花费近10个小时之久。构建的古诗词知识图谱如下图所示,目前整个知识图谱包含近62万个节点,近125万条关系,后续可根据实际应用继续导入节点和关系。
古诗词知识图谱
  下面两幅图给出了目前整个知识图谱的节点和关系的占比。
实体占比
关系占比

  下面两幅图给出了目前知识图谱中各个朝代的名句和作品的占比情况。
朝代的名句占比
朝代的作品占比
2. 知识图谱展示
  为了能够给用户多种查询方式,本系统实现了以图谱的形式查找知识,主要的查询对象是作者的基本信息以及作者的作品,图谱展示如下图所示。
知识图谱中的作者与作品展示
3. 意图识别与问句分类
  下图给出了FastText模型针对4种意图的问句预测,分别选取了预测概率排在前三的标签,在实际使用中选择概率最高的一种作为预测结果。
FastText模型预测结果
4. 命名实体识别
  下图针对实际的问句,BERT命名实体识别微调模型预测出的各类命名实体,例如,针对问句“小诗,你在不在?知不知道唐朝有哪些杰出的女性诗人?知道的话请告诉我。”,该模型能够识别出“唐朝”和“女”两个实体。
NER任务中BERT模型预测结果
5. 古诗词领域机器人——智能小诗
(1)答案生成界面
  当例如用户问及“唐宋八大家是指哪些大家时?”,系统生成的答案如下图所示。
问句的答案展示
(2)问句用例1-2:从下图得知,第一个问句属于第一种意图(询问事实型),问句分类为“author_1”,即询问作者的相关信息;第二个问句仍属于第一种意图,问句分类为“fs_1”,即询问名句的相关信息。从识别和分类效果看,完全正确,确保了答案的生成和返回。
问句用例1-2
(3)问句用例3-4:从下图可知,第一个问句和第二个问句都属于第一种意图,问句分类为“author_of_title_1”和“content_of_title_1”,是询问某个作品的作者和作品内容。从回答的结果来看,问答系统将标题为《静夜思》的所有作品都考虑到了,而不仅仅返回大众熟悉的李白的《静夜思》。
问句用例3-4
(4)问句用例5-6:下图给出了“type_of_work_1”和“fs_of_work_1”两个识别类型,第一个问句是询问标题为《水调歌头·明月几时有》的作品类型,第二个问句是询问该标题的作品里的名句有哪些,从智能小诗回答的结果看,与实际情况符合。
在这里插入图片描述

(5)问句用例7-10:从下图可知,第一个问句与第三个问句的意图相同,均是回答是否,问句类型分别为“gender_of_author_2”,“author_of_work_2”,旨在确定词人李清照的性别和确定作品的作者;第四个问句的意图为闲聊型,问句分类为“others_4”;第二个问句的意图属于对比型,问句分类为wc_of_author_3,旨在询问两个作者的作品数量的比较结果。从小诗的回答结果来看与常识相符,且针对除古诗词以外的领域,问答系统会返回提醒信息。但值得注意的是,知识图谱中每个作者的作品数量,仅仅代表了目前系统搜集到的作品,如果后期继续完善知识库,那么结果可能发生变化。
问句示例7-10
6. 智能小诗 VS 百度和微软
  关于“你能提供一些描写读书的优美古诗词句子吗?”问题的解答,下面第一幅图给出了百度的查询结果,第二幅图展示的是微软必应的查询结果,第三幅图是智能小诗的回答结果。
百度查询结果
微软必应查询结果
对比问句1中小诗的回答
  从微软必应的查询结果来看,第一条结果显示的是一个与问句本身无关的广告信息,第二条结果则是包含了关键词“读书”的一个网页链接,虽然找到了约58700个结果,但没有一条与用户的真实意图和想得到的答案完全符合;从百度的查询结果来看,第一条显示的是一个自媒体创作的内容,仍旧以网页链接的形式展现,第二条结果则显示一个广告;从智能小诗的回答来看,它一共知道有关读书的古诗词句子130条,而展现的是其中著名的77条,它并没有以关键词“读书”展现内容,而是围绕“读书”的内涵展现了一些有关读书的名句。
  从以上对比回答的结果分析可知,传统的通用搜索引擎摆脱不了它们的“弊端”——只知其问句的表层意思,而不知其问句的深层意思,即搜索引擎主要围绕问句中的关键词展现与之高相似度的网页链接,而并没有理解用户问句的实际意思。这就会导致用户多次调整输入的问句进行试错,或者多次点开“无用”的其它网页链接,从根本上付出了更多的时间成本。
  而本文实现的古诗词问答系统,针对古诗词领域的一些知识,智能小诗能够理解问句的深层含义,从而返回与问句“最贴切”的答案。

7. 智能小诗 VS 苹果Siri和华为小艺
  针对问句“你知道张杰唱过的那句‘空山新雨后,天气晚来秋’是哪个朝代的诗人留下的吗?”下面第一幅图展示的是Siri的回答,第二幅图是小艺的回答,而第三幅图是小诗的回答。
苹果Siri的回答
华为小艺的回答
小诗的回答
  针上面的问句,Siri的回答与问句有一定的相关性,但从答案的展示看,Siri是借助搜索引擎才成功回答了此问句,并且从答案的第二条可以看出,它将“张杰”作为了问句的关键词返回对应的答案,可是这完全偏离了此问句的实际意图。
  小艺的回答仍旧十分简单,它回答不了此问题,可能对提示的“小艺电台”,“设置音色”等能够有良好的反应。
  小诗抓住了问句中的诗句“空山新雨后,天气晚来秋”,明白问句是在询问该句的创作朝代而不是该句的作者,而且也忽略了与问句实际意图不相关的“张杰”。

四、总结与展望
  本文从实际应用出发,实现了基于知识图谱的古诗词问答系统,虽然目前完成的效果不错,但仍旧存在诸多不足之处,需要得到进一步的改进。
  其一,古诗词数据的局限。古诗词领域的知识量非常庞大,且获取渠道受限,再加上个人时间和精力有限,所以很多古诗词知识并没有悉数获取,从而导致某些问题无法正确回答。在下一步系统完善中,有必要扩充古诗词知识图谱的大小,补全各个知识盲区。
  其二,问句类型的局限。目前本文实现的问答系统可以回答设计的43类问题,这对于诗词文化领域还远远不够,诸如作者的简介、诗词的翻译、诗词的赏析等等问题系统无法回答;且问答系统并没有基于用户问答的上下文建模,所以多轮问答无法开展。在下一步系统完善中,可以选择在古诗词知识图谱扩展后,设计更多的问句类型并对用户问答的上下文建模,从而提供一款更加智能的问答机器人。
  其三,算法和模型的局限。在本问答系统中主要使用了3个模型和多种算法,在分词任务中,使用的是Jieba分词工具,由于自定义词典较大导致增加了加载分词模型的时间;在命名实体识别任务中,使用的是经过预训练后BERT模型,该模型的参数量极为庞大,在实现实体预测时加载时间较长。在下一步系统完善中,着重从全局出发对各类算法的设计和模型的使用进一步优化,从而减少端到端的时间。
  在如今AIGC的时代,各行各业在充满着无限可能的同时也存在着很多不可忽视的局限,本系统实现的是古诗词领域的问答系统,采用的技术与目前的大模型相比仍有很大的差距,所以实现的过程仅是对课本理论知识的实践应用,从而达到对知识的巩固和个人想象的催生。接下来我将从理论层面对整个系统的设计作详细的阐述,从实践层面对系统的环境配置、代码实现进行讲解。
  欢迎对该领域感兴趣的同学、朋友们,就本文的各个内容与我交流、探讨,就本文的不足之处不吝赐教,同时也欢迎在本文的基础上继续扩展和创新。

参考文献

 ① 王昊奋,漆桂林,陈华钧. 知识图谱方法、实践与应用[M]. 北京:电子工业出版社,2019.
 ② Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv: 1810.04805, 2018.
 ③ 邵浩,张凯,李方圆等. 从零构建知识图谱: 技术、方法与案例[M]. 北京:机械工业出版社,2021.
 ④ 李福林. HuggingFace自然语言处理详解:基于BERT中文模型的任务实战[M]. 北京:清华大学出版社.2023.
 ⑤ https://blog.csdn.net/qq_57421630/article/details/129481145

注:由于参考的文献较多,不再逐一列举,若有侵权,联系立删。


其余篇章(设计 + 源码)
基于知识图谱的古诗词问答系统 - 理论篇: 点击跳转
基于知识图谱的古诗词问答系统 - 实践篇: 点击跳转

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐