信息分类检索工具(RocketQA)的使用

一、背景

我们所处是一个信息爆炸的时代,无论是工作还是生活中,我们每天都要收到来自同事、朋友等很多信息和资料,即便我们很好的管理了这些信息,但由于信息量过于庞大,我们寻找起来也非常的麻烦。此时如果有一款信息分类和检索很好的工具,那么我们就可快速的进行提问找到我们想找到的信息。

此时,RocketQA就可大放异彩,因为RocketQA就是应对这种痛点,出生的技术,接下里我们了解一下RocketQA的一些操作。

二、使用方法

2.1.环境准备

RocketQA的使用其实也是非常的简单,首先,我们需要准备对应的环境,RocketQA基于Python3环境,这里推荐安装Anaconda,因为这个Anaconda它是一个管理Python相关包的软件,自带Python,Jupyter Notebook、Spyder,还有管理包conda工具,所以推荐直接安装Anaconda。

因为RocketQA是百度出品,它是基于百度深度学习模型语言paddlepaddle,所以首先要安装paddlepaddle

python 复制代码
# GPU version:
$ pip install paddlepaddle-gpu

# CPU version:
$ pip install paddlepaddle

如果我们不需要源码运行,我们可以直接通过python安装RocketQA的发布包

python 复制代码
$ pip install rocketqa

如果我们要源码裕兴RocketQA,我们需要从github中将RocketQA下载下来 https://github.com/PaddlePaddle/RocketQA.git

python 复制代码
git clone https://github.com/PaddlePaddle/RocketQA.git

注意基于python环境为Python3.6+ 并且paddlepaddle 2.0+,在选择安装版本的时候需要注意。

2.2.运行RocketQA模式简介

RocketQA 提供了多种运行模式包括JINA、FAISS、并且它还对外提供了多种API,供外部接口,可以提供给第三方系统调用RocketQA的服务,接下来我们就看一下如何进行使用

2.3.RocketQA和JINA配合搭建快速搜索模式

JINA是一个云原生神经网络搜索框架,可快速构建深度学习搜索程序。它可以与RocketQA进行配合构建出一个功能齐全的搜索应用,下面是一个基于JINA和RocketQA构建搜索引擎的示例

python 复制代码
cd examples/jina_example
pip3 install -r requirements.txt

# Generate vector representations and build a libray for your Documents
# JINA will automaticlly start a web service for you
python3 app.py index toy_data/test.tsv

# Try some questions related to the indexed Documents
python3 app.py query_cli

2.4.Rocket和FAISS

faiss是相似度检索方案的佼佼者,来自Meta AI 的开源项目,也是目前最流行的、效率比较高的相似度检索方案之一。

python 复制代码
cd examples/faiss_example/
pip3 install -r requirements.txt

# Generate vector representations and build a libray for your Documents
python3 index.py zh ../data/dureader.para test_index

# Start a web service on http://localhost:8888/rocketqa
python3 rocketqa_service.py zh ../data/dureader.para test_index

# Try some questions related to the indexed Documents
python3 query.py

由于我们使用,我这里主要是基于Faiss进行单机使用。

2.5 简述一下Faiss运行过程

faiss主要使用近似最近邻居算法来提供高效的性能,Faiss核心算法是基于k-means聚类和局部敏感哈希(LSH)的方法。

第一步:

pip3 install -r requirements.txt

我们细看一下requirements.txt

faiss-cpu

tornado

里面包含faiss-cpu ,主要是使用faiss将文本向量化

tornado 是python开发的Web框架和异步网络库,主要是提供RocketQA运行起来可以对外提供web服务。

python3 index.py zh .../data/dureader.para test_index

主要是调用 zh_dureader_de_v2这个模型,然后对输入的内容 .../data/dureader.para 构建向量索引文档库 ,索引存放于test_index

python3 rocketqa_service.py zh .../data/dureader.para test_index

加载输入内容,以及构建的向量文档库索引,最后通过tornado提供webService 地址是 http://localhost:8888/rocketqa,后续需要请求以及API的暴露均通过http://localhost:8888服务暴露给第三方系统或用户。

python3 query.py

这个请求其实就是调用WebService 即http://localhost:8888/rocketqa 然后执行请求操作

最终给出与问题最相似的TopK的答案