一个自动问答系统可分为问句处理和答案检索两大部分。
在一个面向电影领域知识的问答系统中,把所有数据存放在mysql数据库中,用非结构数据库neo4j(也称图形属性数据库)构造电影图谱,在电影图谱的基础上进行答案检索。之所以不直接从mysql数据库中检索所有数据是因为关系型数据库mysql的查询效率不高。那么又为什么不直接把所有信息存放在非结构数据库neo4j上呢?反正我们是通过这个数据库进行检索的。这是因为mysql数据库增删查改操作更加方便,而neo4j的每次改动都需要重新构造图谱以覆盖。事实上这也是比较“工程性”的思想。
首先是我们的数据格式。对于每一部电影我们的信息组织如下:
这个图也是neo4j数据库将构造出来的图谱,基于其中的结点、关系、属性,我们进行答案检索。
接着问句处理,包括:命名实体词典的构建、问题抽象、问题分类和问题还原、答案生成。
对于用户输入的一个问句,我们首先都是进行hanlp分词,由于hanlp自己提供的通用型命名实体工具包在电影领域上的分词效果可能没有想象中那么好,很多电影名诸如“我不是潘金莲”“爱乐之城”“巴黎危机”等等都无法识别出来,因此我们人工标注了很多词典,包括演员名、导演名和电影名等作为Hanlp的自定义词典,把这些词典放在hanlp词典的data/dictionary/custom/文件目录下。在项目的hanlp.properties(