数据科学

使用 NVIDIA Riva 快速开发问答应用程序

你很有可能问过聪明的演讲者一个问题,比如“珠穆朗玛峰有多高?”如果你问了,它可能会说,“珠穆朗玛峰海拔 29032 英尺。”你有没有想过它是如何为你找到答案的?

问答系统是一个由信息检索( IR )和自然语言处理( NLP )组成的系统,主要负责以自然语言回答人类提出的问题。如果您不熟悉信息检索,它是一种从数据库中的资源库、网页或文档中获取查询相关信息的技术。理解这个概念最简单的方法就是你每天使用的搜索引擎。

然后,您需要 NLP 系统在 IR 系统中查找与查询相关的答案。虽然我刚刚列出了构建 QA 系统所需的内容,但从头开始构建 IR 和 NLP 并不是一项简单的任务。以下是 NVIDIA Riva 如何使开发 QA 系统变得容易。

Riva 概述

NVIDIA Riva 是一款 GPU – 加速 SDK ,用于构建使用端到端深度学习管道的多模式对话 AI 服务。 Riva 框架包括针对语音、视觉和自然语言理解( NLU )任务的优化服务。除了为您的对话 AI 服务的整个管道提供几个预先训练的模型外, Riva 的体系结构也适合大规模部署。在本文中,我将仔细研究 Riva 的 QA 功能,以及如何使用它创建自己的 QA 应用程序。

Riva 质量保证功能

要了解 Riva QA 功能的工作原理,请从 transformers ( BERT )的双向编码器表示开始。这是谷歌在 2018 年开发的一种基于 transformer 的 NLP 预训练方法,它彻底改变了 NLP 领域。 BERT 理解文本中给定单词的上下文表示。它是根据包括维基百科在内的大量数据进行预训练的。

使用预训练的 BERT ,一个强大的 NLP 引擎,您可以进一步微调它,以对许多问答对执行 QA ,就像斯坦福问答数据集( SQuAD )中的问答对一样。该模型现在可以从给定的上下文中找到自然语言问题的答案:句子或段落。图 1 显示了一个 QA 示例,其中突出显示了“重力”一词,作为对“是什么导致降水量下降?”问题的回答。在本例中,段落是上下文,成功微调的 QA 模型返回单词“重力”作为答案。

A paragraph describing the meteorological explanation of precipitation. It has three pairs of questions and answers at the bottom.
图 1 .团队数据集中一篇示例文章的问答对。
来源: 团队: 100000 多个问题,用于机器理解文本

使用 Riva 创建 QA 系统

NVIDIA 的工程师和研究人员团队提供了质量保证功能,您可以直接使用 Riva 。 Riva NLP 服务提供了一组高级 API 操作,包括 QA 、 NaturalQuery . Wikipedia API 操作允许您获取在线百科全书 Wikipedia 上发布的文章,并使用自然语言进行查询。这就是我之前讨论过的信息检索系统。结合 WikipediaAPI 操作和 Riva QA 函数,您可以使用几行 Python 代码创建一个简单的 QA 系统。

首先安装 Wikipedia API for Python 。接下来,导入 Riva NLP 服务 API 和 gRPC ,这是 Riva 的底层通信框架。

!pip install wikipedia
import wikipedia as wiki
import grpc
import riva_api.riva_nlp_pb2 as rnlp
import riva_api.riva_nlp_pb2_grpc as rnlp_srv

现在,创建一个输入查询。使用 Wikipedia API 操作获取相关文章,并定义要获取的文章数量,定义为 max_articles_combine 。问一个问题,“什么是语音识别?”然后打印出搜索返回的文章的标题。最后,将每篇文章的摘要添加到变量 combined_summary 中。

input_query = "What is speech recognition?"
wiki_articles = wiki.search(input_query)
max_articles_combine = 3
combined_summary = ""
if len(wiki_articles) == 0:
    print("ERROR: Could not find any matching results in Wikipedia.")
else:
    for article in wiki_articles[:min(len(wiki_articles), max_articles_combine)]:
        print(f"Getting summary for: {article}")
        combined_summary += "
" + wiki.summary(article)
The figure shows the printed output of the Python code run, three articles related to speech recognition.
图 2 .维基百科 API 操作获取的文章标题。

接下来,打开指向 Riva 服务器运行位置的 gRPC 通道。因为您正在本地运行 Riva 服务器,所以它是“ localhost:50051 ”。然后,实例化 NaturalQueryRequest ,并向 Riva 服务器发送请求,同时传递查询和上下文。最后,打印从 Riva 服务器返回的响应。

channel = grpc.insecure_channel('localhost:50051')
riva_nlp = rnlp_srv.RivaLanguageUnderstandingStub(channel)req = rnlp.NaturalQueryRequest()
req.query = input_query
req.context = combined_summary
resp = riva_nlp.NaturalQuery(req)

print(f"Query: {input_query}")
print(f"Answer: {resp.results[0].answer}")
The output of the Python code run, the query and answer, generated by the Riva QA function.
图 3 .查询和回答示例

概括

使用 Riva QA 和 Wikipedia API 操作,您只需创建一个简单的 QA 应用程序。如果维基百科中有一篇文章与你的查询相关,理论上你可以找到答案。想象一下,你有一个数据库,里面装满了与你的领域、公司、行业或任何感兴趣的东西相关的文章。您可以创建一个 QA 服务,该服务可以找到特定于您感兴趣领域的问题的答案。显然,您需要一个 IR 系统从数据库中获取相关文章,就像本文中使用的 Wikipedia API 操作一样。当你有了红外系统, Riva 可以帮你找到答案。我们期待着您将使用 Riva 创建的酷应用程序。

 

Tags