一、背景
我们所处是一个信息爆炸的时代,无论是工作还是生活中,我们每天都要收到来自同事、朋友等很多信息和资料,即便我们很好的管理了这些信息,但由于信息量过于庞大,我们寻找起来也非常的麻烦。此时如果有一款信息分类和检索很好的工具,那么我们就可快速的进行提问找到我们想找到的信息。
此时,RocketQA就可大放异彩,因为RocketQA就是应对这种痛点,出生的技术,接下里我们了解一下RocketQA的一些操作。
二、使用方法
2.1.环境准备
RocketQA的使用其实也是非常的简单,首先,我们需要准备对应的环境,RocketQA基于Python3环境,这里推荐安装Anaconda,因为这个Anaconda它是一个管理Python相关包的软件,自带Python,Jupyter Notebook、Spyder,还有管理包conda工具,所以推荐直接安装Anaconda。
因为RocketQA是百度出品,它是基于百度深度学习模型语言paddlepaddle,所以首先要安装paddlepaddle
# GPU version:
$ pip install paddlepaddle-gpu
# CPU version:
$ pip install paddlepaddle
如果我们不需要源码运行,我们可以直接通过python安装RocketQA的发布包
$ pip install rocketqa
如果我们要源码裕兴RocketQA,我们需要从github中将RocketQA下载下来 https://github.com/PaddlePaddle/RocketQA.git
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构建搜索引擎的示例
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 的开源项目,也是目前最流行的、效率比较高的相似度检索方案之一。
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的答案