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. keras中conv2d,conv2dTranspose的Padding详细介绍
  2. 解决 王爽写的汇编语言的第七个验七- 寻址方式在结构化数据访问中的应用
  3. 【IEEE】2020 年AI's 10 To Watch名单新鲜出炉!MIT韩松、方飞、张含望等华人入选!...
  4. mac中使用 sourcetree 的快速配置和git服务器登录
  5. C Implement a string class with basic functionality
  6. 随机森林算法4种实现方法对比测试:DolphinDB速度最快,XGBoost表现最差
  7. success for advertisement
  8. springboot+flowable第二节(流程基本操作)
  9. 对waitpid 的学习
  10. 改善C#程序的建议2:C#中dynamic的正确用法
  11. 抓包,反抓包,反反抓包
  12. CorelDRAWX4的VBA插件开发(二十)创建进度条来显示程序运行进度
  13. layui官方文档保存
  14. 克利夫顿优势识别器 Clifton Strengths
  15. 定义多边形类,继承产生矩形类和正多边形类
  16. 简单实现网页登录框中的“记住我”
  17. 原腾讯QQ技术总监、T13专家,黄希彤被裁,原因竟是不愿意被 PUA ?
  18. [NOIP模拟赛]棋子游戏
  19. 好事成双--庆祝牛郎织女一年一次的见面
  20. ADRC自抗扰控制自学笔记(包含simulink仿真)(转载)

热门文章

  1. 最强开源考试系统-卷王
  2. 微信聊天软件哪个好用?好用的微信聊天工具,微信新功能,适合营销老板使用
  3. [机缘参悟-44]:鬼谷子-第八摩篇- 摩者,顺而抚之也, 摩得其情,则顺而抚之,以成其事.
  4. 我成为谷歌开发者专家啦
  5. 清华大学计算机在职研究生有用吗,清华大学在职研究生读出来有用吗?
  6. 在H3C防火墙上用l2tp实现用户***网络(包括本地验证和AAA验证)
  7. Codeforces Round #713 (Div. 3)题解
  8. 怎样修改日立uax规格表_UAX电梯读写软件功能调试说明
  9. 计算机考研386分什么水平,艺术设计考研386分经验分享
  10. 282021年云南省高考成绩查询,快来查!2020年云南省高考成绩查询入口-云南招考频道...