思路:
在ElasticSearch数据库中以“问题-回答”对的方式构建知识库,对用户输入的问题进行预处理后,在ES中检索相应的答案,返回答案。
方案:
具体过程讲解:
1、敏感词汇过滤:
非必要功能,只是为了防止用户输入政治错误或者黄赌毒相关词汇。与敏感词汇库进行比对即可完成。
2、判断问题是否能匹配到相应的实体模板
在实际生活中,我们对同一个实体会有许多不同的叫法,比如“上学”也常常说成“读书”。此功能的意义便在于我们可以对同一事物的不同问法匹配到知识库中相应的“问题”。
3、对问句进行中文分词,去除停用词
中文分词就是将连续的字序列按照一定的规范重新组合成词序列的过程,是除停用词前一步必要操作。结巴分词分最常用的分词技术。
停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。可以通用与停用词库进行匹配实现些功能
4、根据聊天问句检索相似度为90%以上问句的答案
es查询的时候控制可以相似度,eg:
GET /nm*/_search
{
"query": {
"match": {
"title": {
"query" : "国家利益高于一",
"minimum_should_match": "90%"
}
}
}
}
相似度查询原理:计算词在数据库文本中出现的频率,以及数据库文本中含有该词的文本数量,然后通过TF-IDF模型的计算公式计算出数据库中文本与查询文本的相似度值,根据相似度值降序快速返回搜索结果。