ODQA 全称 Open Domain Question Answering,即开放域问答,是 NLP 领域长期研究的重要课题,在搜索引擎、智能客服、智能助手等行业应用广泛。

随着深度学习技术的发展,问答系统逐渐从基于特征的多模块级联系统,向更为精简高效的端到端训练转变。

基于神经搜索框架 Jina,百度 NLP 团队推出了领先的检索式端到端问答开发工具--RocketQA,进一步提升了 ODQA 系统的性能。

Jina:下一代开源神经搜索引擎

Jina 是一个神经搜索框架,目前已经在 GitHub 开源,适用于所有格式的数据类型。利用 Jina,用户可以在几分钟内构建 SOTA 和可扩展的深度学习搜索应用。

它具有以下优势:

节省时间:神经搜索系统的设计模式,支持 PyTorch/Keras/ONNX/Paddle,用户可以在几分钟内搭建解决方案。

支持所有数据类型:支持处理、索引、查询和理解视频、图像、长/短文本、音频、源代码、 pdf 等多种数据类型。

本地和云端友好:支持分布式架构、可扩展和云原生。

拥有自己的堆栈:保留解决方案的端到端堆栈所有权。规避多供应商、通用遗留工具等风险。

用 Jina 搭建 ODQA 系统,可参见:

https://github.com/jina-ai/example-odqa

RocketQA 工作原理

在实际应用中,RocketQA 引入 cross-attention encoder,对检索结果排序;同时利用一个包含 4 步的 pipeline,改进训练程序。

RocketQA 中检索器的工作原理

 Cross Encoder:

通常情况下,Dual Encoder 架构可以通过学习问题和段落的密集表征,进行语义匹配。

但是某些情况下,会遇到训练和推理之间存在差异、训练数据有限等问题,这就使得 Dual Encoder 很难进行有效训练。

在 RocketQA 中,除 Dual Encoder 外,还使用了 Cross Encoder 模型,来学习问题和段落之间的交叉关联,这使得结果更加精准。

Dual Encoder 和 Cross Encoder 的原理演示

Cross-Encoder 交叉关联验证,使得结果更加准确

 4 个步骤完成训练过程 

RocketQA 训练 Dual Encoder 和 Cross Encoder 的过程一共包括 4 个步骤。

1、通过 Cross Batch 生成强负样本 (hard negative samples)。这解决了 DPR 的批量采样问题,使模型意识到难以区分的负样本的存在。

2、训练 Cross Encoder。用步骤 1 中训练的 Dual Encoder,从强负样本中过滤出假阳性样本。

3、再次训练 Dual Encoder。为了过滤掉假阳性样本,RocketQA 会同时使用步骤 1 的 Dual Encoder 和步骤 2 的 Cross Encoder,进一步去除数据噪音。

4、利用步骤 2 的 Cross Encoder 和步骤 3 的 Dual Encoder,进一步过滤数据中的噪音。由于 Cross Encoder 和 Dual Encoder 都已经被训练过,因此可以利用它们从未标记数据集中,生成训练数据。

训练过程结束后,就可以用 Dual Encoder 和 Cross Encoder 来检索段落。Cross Encoder 可以针对每对问题和答案,返回一个可信分数。

RocketQA 中的正负样本

在 Jina 中使用 RocketQA

RocketQA 目前已经上线 Jina Hub,我们可以通过创建一个 Flow,对 Document 进行索引。

Document 的段落被存储在 .tags['para']字段中。你也可以通过.tags['title'] 来提高准确性。使用 RocketQADualEncoder 将段落编码为向量,并存储在 SimpleIndexer 中。

RocketQADualEncoder 详细介绍参见:

https://hub.jina.ai/executor/27h1qsmc

doc = Document(tags={'title': title, 'para': para})
f = (Flow().add(uses='jinahub+docker://RocketQADualEncoder',uses_with={'use_cuda': False}).add(uses='jinahub://SimpleIndexer',uses_metas={'workspace': 'workspace_rocketqa'}))with f:f.post(on='/index', inputs=[doc,])

创建查询流程,代码如下:

from jina import Flowf = (Flow(use_cors=True, protocol='http', port_expose=45678).add(uses='jinahub+docker://RocketQADualEncoder',uses_with={'use_cuda': False}).add(uses='jinahub://SimpleIndexer',uses_metas={'workspace': 'workspace_rocketqa'},uses_with={'match_args': {'limits': 10}}).add(uses='jinahub+docker://RocketQAReranker',uses_with={'model': 'v1_marco_ce', 'use_cuda': False}))

RocketQADualEncoder 外,还可以用 RocketQAReranker 对结果进行排序,它也可以实现 RocketQA 中的 Cross Encoder 部分。

RocketQAReranker 详细介绍参见:

https://hub.jina.ai/executor/ao0cuqe8

完整代码参见:

https://github.com/jina-ai/example-odqa

更多 Jina 案例,点击阅读原文或访问:

https://github.com/jina-ai/jina

参考文献:

RocketQA: An Optimized Training Approach to Dense Passage Retrieval for Open-Domain Question Answering, Qu et al., NAACL 2021

https://arxiv.org/abs/2010.08191

《您的新年大礼包即将送达,检索、问答、情感分析,代码模型全开源太香了!》

https://mp.weixin.qq.com/s/3y75PD1AxRugvkhxFFi15w

—— 完 ——

下一代开源神经搜索引擎

在 GitHub 找到我们

更多精彩内容(点击图片阅读)

Jina 牵手百度 PaddlePaddle,打造端到端问答开发工具 RocketQA相关推荐

  1. 飞桨携手Jina推出端到端问答开发工具RocketQA

    本文来自公众号Jina AI ODQA全称Open Domain Question Answering,即开放域问答,是NLP领域长期研究的重要课题,在搜索引擎.智能客服.智能助手等行业应用广泛. 随 ...

  2. 用Tkinter打造自己的Python IDE开发工具(1)建立一个简单的代码编辑器

    用Tkinter打造自己的Python IDE开发工具(1)建立一个简单的代码编辑器 很多Python初学者,安装完Python后,已经包含了IDLE代码开发和调试系统.都会再安装各种Python开发 ...

  3. 用Tkinter打造自己的Python IDE开发工具(4)利用HP_tk模块设计自己的代码编辑器

    用Tkinter打造自己的Python IDE开发工具(4)利用HP_tk模块设计自己的代码编辑器 HP_tk.py模块是小白量化第二代量化系统中的开发模块.其中HP_tk.py模块是小白量化系统GU ...

  4. 用Tkinter打造自己的Python IDE开发工具(5)利用HP_tka模块设计自己的中文代码编辑器

    用Tkinter打造自己的Python IDE开发工具(5)利用HP_tka模块设计自己的中文代码编辑器 前面我们介绍了在Tkinter中使用exec()函数运行用户程序的方法.exec()采用多线程 ...

  5. 用Tkinter打造自己的Python IDE开发工具(6)Python多文件共享变量与智能插件设计

    用Tkinter打造自己的Python IDE开发工具(6)Python多文件共享变量与智能插件设计 在Python中实现多个文件共享变量,即又可以获取变量值,也可以修改变量的值.有两种方式. 一是作 ...

  6. 用Tkinter打造自己的Python IDE开发工具(7)变量数据共享机制及小白量化策略编写

    用Tkinter打造自己的Python IDE开发工具(7)变量数据共享机制及小白量化策略编写 首先我设计的HP_开头的系列Python模块及源文件目前不开源,所有源文件只对读者自己使用学习,不得放到 ...

  7. 2021/3/8--前端第2天--开发工具、快捷键、标签

    2021/3/8–前端学习第2天笔记 4开发工具 记事本.editplus.notepad++ Dreamweaver.sublime.webstorm.VS Code sublime快捷键: htm ...

  8. 岗位推荐 | 百度视觉技术部招聘移动端视觉算法工程师

    PaperWeekly 致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁. 如果你需要我们来帮助你推广实习机会或全职岗位,请添加微信号「pwbot02」. 百度视觉技 ...

  9. 京东 618:如何配合业务打造 JDReact 三端融合开发平台?

    京东 618:如何配合业务打造 JDReact 三端融合开发平台? 阅读 616 收藏 31 2017-06-18 原文链接:mp.weixin.qq.com 腾讯云技术升级,年终钜惠!云服务器最高降 ...

最新文章

  1. 【点云重采样Resampling】Python-pcl 基于多项式平滑点云及法线估计的曲面重建
  2. kiss原则包括什么_求职干货想让HR瞬间对你产生好感?简历做好这三个原则
  3. python笔记本-如何用Python在笔记本电脑上分析100GB数据(上)
  4. Codeforces 1314 题解
  5. 微服务发现组件Eureka:简介以及Eureka服务端开发
  6. 哈希表(hashtable)的javascript简单实现
  7. JVM 调优系列之监控工具
  8. 5G、IoT 时代下,手机聚焦拍照是否走错了方向?
  9. python写代码酷炫插件_使用 Python 制作酷炫多彩的 Jenkins 插件词云图
  10. my eclipse 破解通用步骤
  11. PHP_XLSXWriter 样式,使用PHP_XLSXWriter代替PHPExcel
  12. j1900适合装哪版群晖_NAS部署指南 群晖篇六—— NAS兼做路由器,群晖虚拟机套件教程...
  13. 国内的微软更新服务器地址,windows update 服务器
  14. [杂项项目]纯C语言实现控制台小游戏——数字拼图
  15. npm安装报no such file or directory原因和解决方法
  16. 【阅读】Extrinsic 6DoF Calibration of 3D LiDAR and Radar
  17. matlab图形图像处理论文,基于matlab图形图像处理技术-本科毕设论文.doc
  18. 用python画小猪佩琪_怎么用python画小猪佩奇
  19. 测速网宽带提速自动生效方案
  20. STM32CubeIDE开发(二十五), 物联网应用之stm32的蓝牙通信设计

热门文章

  1. 2022年信息学部物联网工程学院学生科协第二次网页大培训
  2. 慕课网前端面试06--js基础-作用域和闭包
  3. 呼伦贝尔计算机学院广场舞,有一种记忆,叫做呼院人的民族民间广场舞
  4. Windows远程连接桌面报错“由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。请跟服务器管理员联系。”
  5. WOJ-204 继续找相同
  6. 會變魔術的DreamMail
  7. 阿里巴巴Java规约p3c-pmd与maven集成
  8. 惨遭全国大厂封杀的百分百进大厂的面试题,确定不来看看。
  9. 超详细行业竞争度数据-CR4,6,8,10,包括行业细分
  10. The 2019 ACM-ICPC China Shannxi Provincial Programming Contest( J. And And And)