你很有可能问过聪明的演讲者一个问题,比如“珠穆朗玛峰有多高?”如果你问了,它可能会说,“珠穆朗玛峰海拔 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 模型返回单词“重力”作为答案。
使用 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)
接下来,打开指向 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}")
概括
使用 Riva QA 和 Wikipedia API 操作,您只需创建一个简单的 QA 应用程序。如果维基百科中有一篇文章与你的查询相关,理论上你可以找到答案。想象一下,你有一个数据库,里面装满了与你的领域、公司、行业或任何感兴趣的东西相关的文章。您可以创建一个 QA 服务,该服务可以找到特定于您感兴趣领域的问题的答案。显然,您需要一个 IR 系统从数据库中获取相关文章,就像本文中使用的 Wikipedia API 操作一样。当你有了红外系统, Riva 可以帮你找到答案。我们期待着您将使用 Riva 创建的酷应用程序。