你很有可能問過聰明的演講者一個(gè)問題,比如“珠穆朗瑪峰有多高?”如果你問了,它可能會(huì)說,“珠穆朗瑪峰海拔 29032 英尺。”你有沒有想過它是如何為你找到答案的?
問答系統(tǒng)是一個(gè)由信息檢索( IR )和自然語言處理( NLP )組成的系統(tǒng),主要負(fù)責(zé)以自然語言回答人類提出的問題。如果您不熟悉信息檢索,它是一種從數(shù)據(jù)庫中的資源庫、網(wǎng)頁或文檔中獲取查詢相關(guān)信息的技術(shù)。理解這個(gè)概念最簡單的方法就是你每天使用的搜索引擎。
然后,您需要 NLP 系統(tǒng)在 IR 系統(tǒng)中查找與查詢相關(guān)的答案。雖然我剛剛列出了構(gòu)建 QA 系統(tǒng)所需的內(nèi)容,但從頭開始構(gòu)建 IR 和 NLP 并不是一項(xiàng)簡單的任務(wù)。以下是 NVIDIA Riva 如何使開發(fā) QA 系統(tǒng)變得容易。
Riva 概述
NVIDIA Riva 是一款 GPU – 加速 SDK ,用于構(gòu)建使用端到端深度學(xué)習(xí)管道的多模式對話 AI 服務(wù)。 Riva 框架包括針對語音、視覺和自然語言理解( NLU )任務(wù)的優(yōu)化服務(wù)。除了為您的對話 AI 服務(wù)的整個(gè)管道提供幾個(gè)預(yù)先訓(xùn)練的模型外, Riva 的體系結(jié)構(gòu)也適合大規(guī)模部署。在本文中,我將仔細(xì)研究 Riva 的 QA 功能,以及如何使用它創(chuàng)建自己的 QA 應(yīng)用程序。
Riva 質(zhì)量保證功能
要了解 Riva QA 功能的工作原理,請從 transformers ( BERT )的雙向編碼器表示開始。這是谷歌在 2018 年開發(fā)的一種基于 transformer 的 NLP 預(yù)訓(xùn)練方法,它徹底改變了 NLP 領(lǐng)域。 BERT 理解文本中給定單詞的上下文表示。它是根據(jù)包括維基百科在內(nèi)的大量數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練的。
使用預(yù)訓(xùn)練的 BERT ,一個(gè)強(qiáng)大的 NLP 引擎,您可以進(jìn)一步微調(diào)它,以對許多問答對執(zhí)行 QA ,就像斯坦福問答數(shù)據(jù)集( SQuAD )中的問答對一樣。該模型現(xiàn)在可以從給定的上下文中找到自然語言問題的答案:句子或段落。圖 1 顯示了一個(gè) QA 示例,其中突出顯示了“重力”一詞,作為對“是什么導(dǎo)致降水量下降?”問題的回答。在本例中,段落是上下文,成功微調(diào)的 QA 模型返回單詞“重力”作為答案。
圖 1 團(tuán)隊(duì)數(shù)據(jù)集中一篇示例文章的問答對。
使用 Riva 創(chuàng)建 QA 系統(tǒng)
NVIDIA 的工程師和研究人員團(tuán)隊(duì)提供了質(zhì)量保證功能,您可以直接使用 Riva 。 Riva NLP 服務(wù)提供了一組高級(jí) API 操作,包括 QA 、 NaturalQuery 。 Wikipedia API 操作允許您獲取在線百科全書 Wikipedia 上發(fā)布的文章,并使用自然語言進(jìn)行查詢。這就是我之前討論過的信息檢索系統(tǒng)。結(jié)合 WikipediaAPI 操作和 Riva QA 函數(shù),您可以使用幾行 Python 代碼創(chuàng)建一個(gè)簡單的 QA 系統(tǒng)。
首先安裝 Wikipedia API for Python 。接下來,導(dǎo)入 Riva NLP 服務(wù) API 和 gRPC ,這是 Riva 的底層通信框架。
import grpc import riva_api.riva_nlp_pb2 as rnlp import riva_api.riva_nlp_pb2_grpc as rnlp_srv
現(xiàn)在,創(chuàng)建一個(gè)輸入查詢。使用 Wikipedia API 操作獲取相關(guān)文章,并定義要獲取的文章數(shù)量,定義為max_articles_combine
。問一個(gè)問題,“什么是語音識(shí)別?”然后打印出搜索返回的文章的標(biāo)題。最后,將每篇文章的摘要添加到變量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 服務(wù)器運(yùn)行位置的 gRPC 通道。因?yàn)槟诒镜剡\(yùn)行 Riva 服務(wù)器,所以它是“localhost:50051
”。然后,實(shí)例化NaturalQueryRequest
,并向 Riva 服務(wù)器發(fā)送請求,同時(shí)傳遞查詢和上下文。最后,打印從 Riva 服務(wù)器返回的響應(yīng)。
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 操作,您只需創(chuàng)建一個(gè)簡單的 QA 應(yīng)用程序。如果維基百科中有一篇文章與你的查詢相關(guān),理論上你可以找到答案。想象一下,你有一個(gè)數(shù)據(jù)庫,里面裝滿了與你的領(lǐng)域、公司、行業(yè)或任何感興趣的東西相關(guān)的文章。您可以創(chuàng)建一個(gè) QA 服務(wù),該服務(wù)可以找到特定于您感興趣領(lǐng)域的問題的答案。顯然,您需要一個(gè) IR 系統(tǒng)從數(shù)據(jù)庫中獲取相關(guān)文章,就像本文中使用的 Wikipedia API 操作一樣。當(dāng)你有了紅外系統(tǒng), Riva 可以幫你找到答案。我們期待著您將使用 Riva 創(chuàng)建的酷應(yīng)用程序。
關(guān)于作者
James Sohn 是 NVIDIA 的深度學(xué)習(xí)技術(shù)營銷工程師,專注于多模態(tài)對話 AI 框架 Riva 。杰姆斯獲得了西北大學(xué)的機(jī)器人學(xué)碩士學(xué)位,在那里他專注于計(jì)算機(jī)視覺和人體運(yùn)動(dòng)建模與機(jī)器學(xué)習(xí)。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5299瀏覽量
106302 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8501瀏覽量
134548 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5560瀏覽量
122765
發(fā)布評論請先 登錄
請問在NXP板的BSP QA過程中采用了哪些具體的測試方法?
AWTK-WEB 快速入門(6) - JS WebSocket 應(yīng)用程序

AWTK-WEB 快速入門(5) - C 語言 WebSocket 應(yīng)用程序

基于HPM_SDK_ENV開發(fā)應(yīng)用程序的升級(jí)處理

如何快速創(chuàng)建用戶自定義Board和App工程

AWTK-WEB 快速入門(4) - JS Http 應(yīng)用程序

TAS2521應(yīng)用程序參考指南

android手機(jī)上emulate應(yīng)用程序的方法
AWTK-WEB 快速入門(2) - JS 應(yīng)用程序

AWTK-WEB 快速入門(1) - C 語言應(yīng)用程序

使用OpenVINO? ElectronJS中創(chuàng)建桌面應(yīng)用程序

NVIDIA助力企業(yè)創(chuàng)建定制AI應(yīng)用
IB Verbs和NVIDIA DOCA GPUNetIO性能測試

評論