使用NVIDIA Jarvis 快速开发问题与回答应用程式

2021-06-01 11:04:15 浏览数 (1)

您可能会向智慧音箱提问「圣母峰有多高?」之类的问题。它可能会回答:「圣母峰的海拔高度为29,032 英尺。」但您是否曾经想过它是如何为您找出答案的?

提问与回答(question answering,QA)大致被定义为由资讯撷取(information retrieval,IR)和自然语言处理(natural language processing,NLP)所组成,且以自然语言回答人类提出之问题的系统。资讯撷取系从资料库中之资源、网页或文件集区查询与取得相关资讯的技术。每天使用的搜寻引擎,即是理解此概念最简单的方式。

在那之后,我们会需要利用NLP系统在IR系统中寻找与查询相关的答案。虽然仅仅是列出建构QA系统需要的要素,但是从零开始建构IR和NLP却不是一件容易的事。以下说明NVIDIA Jarvis如何协助您轻松开发QA系统。

Jarvis 概述

NVIDIA Jarvis是经过全面加速的应用程式框架,适用于建构使用端对端深度学习工作流程的多模态对话式人工智慧服务。Jarvis框架包含针对语音、视觉和自然语言理解(natural language understanding,NLU)任务的最佳化服务。除了为对话式AI服务的整个工作流程提供多种预先训练模型外,Javis也是为了大规模部署而设计。本文将会详细解说Jarvis的QA功能,以及如何使用以建立自己的QA应用程式。

Jarvis QA 功能

想要理解Jarvis QA功能的运作方式,先从了解「以transformer为基础的双向编码器表示技术(Bidirectional Encoder Representations from Transformers,BERT)」开始。它是以transformer为基础的NLP预先训练方法,由Google在2018年开发,并彻底改变了NLP领域。BERT可以理解文字中特定单字的脉络表示。它是以如Wikipdia等大型资料语料库预先训练的模型。

经过预先训练的BERT 是一个强大的NLP 引擎,可以进一步微调,以执行像是利用史丹佛问答资料集(Stanford Question Answering Dataset,SQuAD)所打造的QA 系统。现在,模型可以从给定的上下文如句子或段落中找出答案,回答以自然语言所提出的问题。图1 为QA 系统范例中,将单字「gravity」标示为问题「What causes precipitation to fall?」的答案。在此范例中,段落是文本,经过成功微调的QA 模型回传单字「gravity」为答案。

使用Jarvis 建立QA 系统

NVIDIA工程师和研究人员团队提供的高品质QA功能,可以立即与Jarvis搭配使用。Jarvis NLP服务提供了包含QA的高阶API操作集合:NaturalQuery。Wikipedia API操作可以使用自然语言查询,撷取发布在线上百科全书Wikipedia上的文章。这就是之前提到的资讯撷取系统。将Wikipedia API操作与Jarvis QA功能结合,即可透过几行Python程式码建立简单的QA系统。

首先安装适用于Python 的Wikipedia API。接着汇入以Jarvis 为基础通讯框架的Jarvis NLP 服务API 和gRPC。

代码语言:javascript复制
!pip install wikipedia
import wikipedia as wiki
import grpc
import jarvis_api.jarvis_nlp_pb2 as jnlp
import jarvis_api.jarvis_nlp_pb2_grpc as jnlp_srv

(可以左右滑动代码)

现在,建立输入查询。使用Wikipedia API操作撷取相关文章,并定义想要撷取的文章数量,定义为max_articles_combine。提出「What is speech recognition?」的问题之后印出搜寻回传的文章标题。最后,将每一篇文章的摘要组合成变数:combined_summary。

代码语言:javascript复制

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  = "n"   wiki.summary(article)

接着开启gRPC通道,指向执行Jarvis伺服器的位置。由于是在本机执行Jarvis伺服器,所以为「localhost:50051」。然后将NaturalQueryRequest个体化,并传送要求、传递查询和文本给Jarvis伺服器。最后列印从Jarvis伺服器回传的回应。

代码语言:javascript复制
 channel = grpc.insecure_channel('localhost:50051')
jarvis_nlp = jnlp_srv.JarvisNLPStub(channel)
req = jnlp.NaturalQueryRequest()
req.query = input_query
req.context = combined_summary
resp = jarvis_nlp.NaturalQuery(req)
print(f"Query: {input_query}")
print(f"Answer: {resp.results[0].answer}")

总结

利用Jarvis QA 和Wikipedia API 操作,您便可建立简单的QA 应用程式。如果在Wikipedia 中具有与查询有关的文章时,理论上可以找出答案。假设您拥有一个资料库,其中包含与您的领域、公司、产业或任何主题有关的文章。您可以建立QA 服务,以找出与您感兴趣之领域有关的问题答案。当然,您需要IR 系统,从资料库中撷取相关文章,例如本文使用的Wikipedia API 操作。将IR 系统纳入工作流程之后,Jarvis 即可协助您找出答案。我们期待您使用Jarvis 创造酷炫的应用程式。

更多NVIDIA Blog教程:

如何分析机器学习中的性能瓶颈

NVIDIA发布了那么多技术,哪些SDK值得开发者们关注?

利用NVIDIA TRT和Deepstream创建一个实时车牌检测和识别应用程序

0 人点赞