写在前面
虽然网上代码一大堆,论文一大堆,但是我连一篇实实在在介绍基于知识库的问答系统实现逻辑简单介绍的都找不到。
当然,基于对模板匹配的博客我倒是找到了一篇,见:
https://blog.youkuaiyun.com/xyz1584172808/article/details/89319129(写的非常好,整个问答系统的搭建流程都说明白了。)
但是他这篇文章相较于基于知识库的问答来说少了很多东西,我首先总结一下他这篇简单的实现流程,然后再引申到基于知识库的问答系统。
基于模板匹配的问答系统:
先说明一下:基于模板和基于知识库其实非常相似
阶段主要有:
- 实体识别
- 将用户的问题进行多分类,进而实现“用户自然语言问题→形式化问题模板”
- 将实体识别作为问题模板的实参,去图数据库中查询问题的答案。
实体识别阶段:
例如:“刘德华演过哪些电影呀?”
对其进行命名实体识别,就可以得到:“刘德华”,且也能将它标注为“nnt”,nnt实际上就是“人”的词性,这个实体识别过程就相当于一个分词+词性标注过程。(这个过程可以用bert来做,就不会产生用jieba分词把词分错的问题了。比如卧虎藏龙 分成了 卧虎 藏龙两个词)
注意,电影在此处不是个实体,它应该包含在“演过哪些电影”这个问题之中(更简单的理解就是“演过的电影”是一个关系)
用户自然语言问题向模板的映射:
例如某dict中保存有如下的模板(nm代表电影,nnt代表人物,ng代表电影类型,nnr我也不知道是啥):
0:nm 评分
1:nm 上映时间
2:nm 类型
3:nm 简介
4:nm 演员列表
5:nnt 介绍
6:nnt ng 电影作品
7:nnt 电影作品
8:nnt 参演评分 大于 x
9:nnt 参演评分 小于 x
10:nnt 电影类型
11:nnt nnr 合作 电影列表
12:nnt 电影数量
13:nnt 出生日期
训练阶段&