基于ElasticSearch的问答系统(KBQA)

  在上一篇博客中,我们已经大概了解了KBQA的概念,也大概知道KBQA的流程,但是针对上篇博客提出的问题,修改数据,如何更简单的做到而对问答系统的影响效果最小呢?这里我就换成另一种方式,直接使用ElasticSearch来替换TDB存放数据。下图是与上文实现一样效果的demo:

1. ElasticSearch
  Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎Apache Lucene™ 基础上的搜索引擎。但是Elasticsearch并不仅仅是Lucene那么简单,它不仅包括了全文搜索功能,还可以进行下面的工作:
  1.分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
  2.实时分析的分布式搜索引擎。
  3.可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

  ElasticSearch安装使用比较简单,可以根据官方文档Elasticsearch Reference自己安装与学习。
  这里重点需要提出的是,ElasticSearch 中处理分词的部分被称作分词器,它决定了分词的规则,默认是Standard,即将中文分为单个的字,如“我爱北京天安门“就会被分为“我/爱/北/京/天/安/门”,明显不符合我们的要求“我/爱/北京/天安门”,所以这个时候就需要我们自己制定分词器,实现分词规则,最常见的为ik分词器
  根据不同的功能,可能大家需要不同的ElasticSearch插件,大家可以在ES官网下载,但必须注意的是,插件需要与ElasticSearch版本对应,否则无法使用。如果有哪些看官不知道如何使用ES,稍后我会在后面的继续贴上博客。

2. 实例分析

  • 数据准备
      数据我们依然使用上一篇博客的数据,这里需要注意的是,将数据插入到ElasticSearch的时候,必须指定分词器和分词方式,否则功能无法实现。如何使用ElasticSearch,后续我会慢慢写出来。这里我主要分为四个字段插入:name(诗词名)、author(作者)、dynasty(朝代)、content(内容),分词分别为:ik_smart、ik_max_word、ik_smart、ik_smart。数据插入完成后,可以使用head插件查看,如下图所示:
  • 数据查询
      数据插入完成后,我们就可以直接查询数据库了,ElasticSearch使用的是相似度查询,所以很大程度上减轻了我们的搜索任务,我们可以通过head插件直接在浏览器上进行搜索,十分方便,如下图所示:
  同样的,Python也提供了一个第三方库:elasticsearch。可以让我们直接进行数据搜索。
	from elasticsearch import Elasticsearch
	
	values = []
	es = Elasticsearch(hosts=['192.168.1.118'], timeout=50000)	# 数据库IP
  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值