KBQA是指基于知识图谱的问答系统,是知识图谱的重要应用形式,基于知识图谱的问答和基于LLM的问答殊途同归。
KBQA是一个系统,由多种功能模块组成,其核心架构梳理如下:
下面对各个模块简单小结
文本清洗
只有是文本的领域都基本上要做一些清洗和预处理操作,比如标点符号统一,无效字符删除等。
另外,在这个阶段需要认真评估应用场景的问题描述方式和KG构建阶段的数据特点是否一致(专业化说叫数据分布是否一致),若不一致,则在实体链接阶段可能识别不出实体或识别错误(较大概率,特别是NER算法采用CRF类的,感觉对序列分布比较敏感),所以在清洗时要将数据处理成和训练阶段一致的数据。
意图识别
除开闲聊外,知识问答都是带有目的的,因此需要识别出用户的意图。
最简单的,用关键词加正则的方式来进行意图分类,前提是你能从问题中抽取出特定意图的特定表达方式。
在NLP领域,这里本质是也在做一个文本分类任务,因此文本分类的模型也可以上。
实体链接
这里比较难,是进行实体链接而不是实体抽取,因为抽取完成之后,有很多事情要做。对实体链接模块进行展开,其包括三个子模块:
(1)实体抽取模块
这个同知识图谱构建阶段,可以复用NER算法。或者基于词典进行识别(不推荐,因为用户的问题五花八门,词典很难覆盖全)
若存在前面说的数据分布不一致,则实体抽取可能有结果,可能无结果。
(2)候选实体生成及排序模块
针对有结果的实体进行候选实体生成,如抽取出“苹果”,此时知识库中可能存在相同指称的多个实体(类比不同),也可能不存在这个指称的实体,对于前者,属于有有链接的实体,若只有一个链接结果,则无歧义,若有多个,则需要进行实体消歧,已确定实体就是属于哪种类别。
这里可能需要算法来对每个候选实体进行打分排序。
(3)无链接实体预测模块
对于无链接实体,一种情况可能是因为输入或抽取错误,导致知识库中存在的实体二没有被准确链接到,还有一种情况就是输入和抽取是争取的,但知识库中不存在该实体(此时为新知识),因此在进行预测,需要分情况处理。
对于前者,则可以在知识库中召回一些候选实体,通过语义相似度或字符串相似度与待链接实体进行计算,将top1且大于一定阈值的作为链接实体,小于阈值,则则视为发现新知识。
可以借鉴推荐系统的召回算法及思路。
cypher构造/执行查询/话术模板填充
这几个部分都比较简单,就不展开了。