热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用RocketQA实现检索式问答系统

使用RocketQA开发工具实现端到端问答系统12.28~12.30日每晚8点,百度工程师将针对问答、检索、情感分析场景带来直播讲解,深入解读Rock

使用RocketQA开发工具实现端到端问答系统

12.28~12.30日每晚8点,百度工程师将针对问答、检索、情感分析场景带来直播讲解,深入解读RocketQA等系统方案,并带来手把手项目实战。报名链接


问答系统(Question Answering System, QA)是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。问答系统在搜索引擎、智能客服和智能助手等应用场景中都发挥着重要作用。检索式问答系统是问答系统的重要类别,它能从大量文本中检索出问题的答案。下图是检索式问答系统的功能示意。

主流的检索式问答系统通常包含检索(retriever)、排序(reranker)和答案抽取(reader)等多个串行模块。随着大规模预训练模型的发展,研究人员开始探索基于深度语义表示的问答模型。得益于预训练模型生成的高质量语义表示空间和端到端的训练方法,语义模型能够提供更优质的结果,并且简化了传统问答系统的级联架构和特征工程方案,使系统的复杂性大大降低。

在此背景下,百度NLP提出了一系列基于语义的问答模型–RocketQA。RocketQA系列工作不仅被自然语言处理领域的多个国际顶级会议录取,也在百度的搜索业务中发挥了重要作用。为了使更多研发人员能够方便地获取最先进的问答语义检索与排序技术,百度NLP联合飞桨共同发布了基于RocketQA的开发工具。

本示例介绍了RocketQA开发工具的功能,演示如何基于该工具搭建一套问答系统。

RocketQA工具的基本功能

1、提供训练好的RocketQA模型和简单易用的模型预测api。

2、提供基于RocketQA模型搭建问答系统的简单方案。

项目亮点


1、领先的问答模型:

RocketQA开发工具提供11个业界领先的预置模型,包括3篇***顶会论文***的共9个英文开源模型,和***首个中文***的开源语义检索、排序模型。



2、强大的中文能力:

RocketQA提供首个开源的中文端到端问答模型。模型是在强大的预训练语言模型ERNIE上,用百万量级人工标注数据集DuReader训练得到的,效果出众。



3、简单的开发接口:

RocketQA开发工具可以通过pip一键安装,同时也提供了装有所有依赖的docker镜像。

工具提供精简的开发接口和使用样例,仅需两行命令即可搭建自己的问答系统。



项目详情和源码见:

https://github.com/PaddlePaddle/RocketQA

如果您觉得本案例有帮助,欢迎点击右上角的"喜欢",或者分享给别人~

使用说明


1、安装

# pip安装RocketQA工具包
!pip install rocketqa

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting rocketqa
[?25l Downloading https://pypi.tuna.tsinghua.edu.cn/packages/77/23/0a22aee6dd29cf35796466519f1c532be42f8331325b5cdf72e98860383f/rocketqa-1.0.0-py3-none-any.whl (43kB)
[K |████████████████████████████████| 51kB 8.6MB/s eta 0:00:011
[?25hRequirement already satisfied: tqdm in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from rocketqa) (4.27.0)
Installing collected packages: rocketqa
Successfully installed rocketqa-1.0.0

# 查看RocketQA提供的预置模型import rocketqa
rocketqa_models = rocketqa.available_models()
for m_name in rocketqa_models:print (m_name)

v1_marco_de
v1_marco_ce
v1_nq_de
v1_nq_ce
pair_marco_de
pair_nq_de
v2_marco_de
v2_marco_ce
v2_nq_de
zh_dureader_de
zh_dureader_ce

2、使用预置模型完成预测

# 使用RocketQA预置的模型做预测import rocketqaquery_list = ["交叉验证的作用"]
title_list = ["交叉验证的介绍"]
para_list = ["交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。"]# load model - RocketQA中文检索模型(de),在DuReader数据集中训练得到
dual_encoder = rocketqa.load_model(model="zh_dureader_de") # for cpu
# dual_encoder = rocketqa.load_model(model="v1_marco_de", use_cuda=True, device_id=0, batch_size=16) # for gpu# encode query & para
q_embs = dual_encoder.encode_query(query=query_list)
p_embs = dual_encoder.encode_para(para=para_list, title=title_list)
print (q_embs.shape, q_embs.shape)# compute dot product of query representation and para representation
dot_products = dual_encoder.matching(query=query_list, title=title_list, para=para_list)
print (dot_products)

RocketQA model [zh_dureader_de]
Download RocketQA model [zh_dureader_de]4%|█▌ | 82.1M/1.84G [00:01<00:22, 85.1MiB/s]

3、搭建自己的检索式问答系统


A. 搭建问答系统的流程


如上图&#xff0c;问答系统分为离线和在线两个部分。

离线部分&#xff0c;需要将待检索的文档转成向量&#xff0c;并建立向量索引。

在线部分&#xff0c;需要将查询语句转成向量&#xff0c;用向量从索引中检索相关内容&#xff08;通常返回不止一条结果&#xff09;&#xff0c;再对相关内容进行更精细的排序&#xff0c;得到最佳答案。

为了方便开发者使用&#xff0c;本项目提供了搭建问答系统的简单样例。



B. 使用Faiss搭建自己的问答系统

第一步&#xff1a;安装依赖

pip install faiss-cpu&#61;&#61;1.5.3
git clone https://github.com/PaddlePaddle/RocketQA.git
cd RocketQA/examples/faiss_example/

第二步&#xff1a;准备数据

按如下格式准备候选文档:

每一行是一条文档数据&#xff0c;包含文档标题和文档内容&#xff0c;标题与内容用\t分隔。如果没有标题&#xff0c;可用空字符串或’-&#39;代替

例如&#xff1a;

广西壮族自治区新型冠状病毒感染的肺炎 \t 感谢社会各界对我区抗击新型冠状病毒感染的肺炎疫情所给予的关心和大力支持&#xff01;...

第三步&#xff1a;建索引并启动检索服务

# 建立索引库
python index.py zh ${your_data} ${index_name}# 启动检索服务
!python rocketqa_service.py zh ${your_data} ${index_name} &

第四步&#xff1a;检索

python request.py

运行结果见下图&#xff1a;






C. 使用Jina搭建自己的问答系统

Jina是基于深度学习模型搭建搜索引擎的开源框架&#xff0c;将RocketQA模型嵌入Jina框架能快速搭建检索式问答系统。具体步骤如下&#xff1a;

第一步&#xff1a;安装依赖

git clone https://github.com/PaddlePaddle/RocketQA.git
cd examples/jina_example
pip install -r requirements.txt

第二步&#xff1a;准备数据

按如下格式准备候选文档:

每一行是一条文档数据&#xff0c;包含文档标题和文档内容&#xff0c;标题与内容用\t分隔。如果没有标题&#xff0c;可用空字符串或’-&#39;代替

例如&#xff1a;

广西壮族自治区新型冠状病毒感染的肺炎 \t 感谢社会各界对我区抗击新型冠状病毒感染的肺炎疫情所给予的关心和大力支持&#xff01;...

第三步&#xff1a;建索引并启动检索服务

python rocketqa_jina.py index ${your_data}

第四步&#xff1a;检索

python app.py query_cli

想了解详情可访问RocketQA开源项目


推荐阅读
  • 在 Windows 10 系统下配置 Python 3 和 OpenCV 3 的环境时,建议使用 Anaconda 分发版以简化安装过程。Anaconda 可以从其官方网站(https://www.anaconda.com/download)下载。此外,本文还推荐了几本关于 Python 和 OpenCV 的专业书籍,帮助读者深入理解和应用相关技术。 ... [详细]
  • 从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南
    从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南 ... [详细]
  • 使用 MyEclipse 和 TestNG 测试框架在 Java 中高效进行单元测试
    通过MyEclipse集成TestNG测试框架,可以在Java开发中高效地进行单元测试。本文介绍了在JDK 1.8.0_121和MyEclipse 10.0离线环境下配置和使用TestNG的具体步骤,帮助开发者提高测试效率和代码质量。 ... [详细]
  • 本文探讨了在Android应用中实现动态滚动文本显示控件的优化方法。通过详细分析焦点管理机制,特别是通过设置返回值为`true`来确保焦点不会被其他控件抢占,从而提升滚动文本的流畅性和用户体验。具体实现中,对`MarqueeText.java`进行了代码层面的优化,增强了控件的稳定性和兼容性。 ... [详细]
  • 如何在 Java LinkedHashMap 中高效地提取首个或末尾的键值对? ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
  • Java 8 引入了 Stream API,这一新特性极大地增强了集合数据的处理能力。通过 Stream API,开发者可以更加高效、简洁地进行集合数据的遍历、过滤和转换操作。本文将详细解析 Stream API 的核心概念和常见用法,帮助读者更好地理解和应用这一强大的工具。 ... [详细]
  • 在Python 2.7环境中使用PyCharm进行Cvxopt的安装及线性规划问题求解。具体步骤包括:通过PyCharm的文件菜单进入项目设置,选择解释器选项,点击右侧的“+”按钮,在可用包列表中搜索并安装Cvxopt。安装完成后,可以通过导入Cvxopt库并调用其函数来解决线性规划问题,提高模型的准确性和效率。 ... [详细]
  • 在探讨 AS3 中的数据深度复制技术时,本文详细介绍了实现数据深度克隆的有效方法。通过对比多种方案,最终确定了一种高效且可靠的实现方式,所有代码均来源于公开资源,确保了方法的实用性和可操作性。 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 本文通过复旦大学自然语言处理课程中的一个具体案例,详细解析了中文词汇分割技术的实现方法。该案例利用Java编程语言,结合词典和算法模型,展示了如何高效地进行中文文本的词汇分割,为相关研究和应用提供了宝贵的参考。 ... [详细]
  • 本文介绍了如何在 PyCharm 中高效利用 Anaconda 管理项目环境配置。首先,确保已安装必要的软件。以 Windows 10 64位专业版为例,建议使用 PyCharm 2018.2 或更高版本。通过 Anaconda 创建和管理虚拟环境,可以显著提升开发效率,确保项目依赖的一致性和隔离性。文章详细阐述了从安装到配置的每一步操作,帮助开发者快速上手并充分利用这些工具的优势。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
author-avatar
mobiledu2502912017
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有