首頁  >  文章  >  科技週邊  >  利用 NVIDIA Riva 快速部署企業級中文語音 AI 服務並進行優化加速

利用 NVIDIA Riva 快速部署企業級中文語音 AI 服務並進行優化加速

WBOY
WBOY原創
2024-06-10 21:57:48957瀏覽

一、Riva 概覽

1. Overview

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

Riva是NVIDIA推出的一款SDK,用於即時的Speech AI服務。它是一個高度可自訂的工具,並且使用GPU進行加速。 NGC上提供了許多預先訓練好的模型,這些模型開箱即用,可以直接使用Riva提供的ASR和TTS解決方案進行部署。

為了滿足特定領域的需求或進行客製化功能的開發,使用者也可以使用 NeMo 對這些模型進行重新訓練或微調。從而進一步提升模型的效能,使其更適應使用者的需求。

Riva+Skills是一種高度可自訂化的工具,它利用GPU加速即時串流的語音辨識和語音合成,並且能夠同時處理成千上萬個並發請求。它支援多種部署平台,包括本地端、雲端和端側。

2. Riva ASR

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

在語音辨識方面,Riva使用了準確度很高的SOTA 模型,例如Citrinet、 Conformer 和NeMo 自我研究的FastConformer 等。目前,Riva 支援超過10種單語言模型,並且還支援多語種的語音識別,包括英語-西班牙語、英語-中文和英語-日語等多語言語音識別。

通透過客製化的功能,可以進一步提升模型的準確率。例如,針對特定行業術語、口音或方言的支持,以及對噪音環境的客製化處理,都可以幫助提高語音辨識的性能。

Riva的整體框架能夠適用於多種場景,例如客服和會議系統等。除了通用場景外,Riva的服務還可以根據不同行業的需求進行客製化,例如CSP、教育、金融等行業。

3. ASR Pipeline & Customization

在Riva ASR 的整個流程中,有一些可客製化的模組,這些模組可以依照難度分為三類。

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

首先,橘色框中是在 inference 過程中,在客戶端即可做的客製化。例如支援熱詞功能,透過在 inference 過程中加入產品名稱或專有名詞,使語音模型更能準確地辨識這些特定的詞彙。這項功能是 Riva 本身就支援的,在不重新訓練模型或重新啟動 Riva 伺服器的情況下即可完成客製化。

紫色方塊中是部署時可以進行的一些客製化。例如,在 Riva 的串流識別中,提供了延遲優化或吞吐優化兩種模式,可以根據業務需求進行選擇,以獲得更好的效能表現。此外,在部署過程中,還可以進行發音字典的客製化。透過客製化發音字典,可以確保特定術語、名稱或行業術語的正確發音,並提高語音辨識的準確性。

綠色框中是訓練過程中可以進行的客製化,也就是在伺服器端進行的訓練和調整。例如在訓練開始的文本正規化階段,可以加入一些特定文本的處理。另外,可以微調或重新訓練聲學模型,以解決特定業務場景下的諸如口音、噪音等問題,使模型更加穩健。還可以重新訓練語言模型、微調標點模型、逆文本正規化等。

以上就是 Riva 可以客製化的部分。

4. Riva TTS

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

#Riva TTS 流程如上圖右側所示,它包含以下幾個模組:

  • 第一步是文字正規化。
  • 第二步是 G2P,將文字的基本單位轉換為發音或口語的基本單位。例如,將單字轉換為音素。
  • 第三步是頻譜合成,將文字轉換為聲學頻譜。
  • 第四步是音訊合成,也稱為 vocoder。在這一步驟中,將前一步得到的頻譜轉換為音訊。

上圖中,以合成"Hello World"這句話為例,首先進入文字正規化模組,對文字進行標準化處理,例如將大小寫規範化。接著進入 G2P 模組,將文字轉換為音素序列。之後進入頻譜合成模組,透過神經網路訓練,得到頻譜。最後進入 vocoder,將頻譜轉換為最終的聲音。

Riva 提供串流 TTS 支持,使用了目前流行的 FastPitch 和 HiFi-GAN 模型的組合。目前支援多種語言,包括英語、中文普通話、西班牙語、義大利語和德語等。

5. TTS Pipeline & Customization

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

在Riva 的TTS 流程中,為客製化提供了兩種方式。第一種方式是使用語音合成標記語言(SSML),這是一種比較容易的客製化方式。透過一些配置,可以調整發音的音調、語速、音量等。通常情況下,如果想改變特定單字的發音,會選擇這種方式。

另一種方式是進行微調或重新訓練 FastPitch 或 HiFi-GAN 模型。可以使用自己的特定資料對這兩個模型進行微調或重新訓練。

二、中文語音辨識模型的最新更新

1. Overview

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

在過去的一年中,Riva 對中文模型進行了一些更新和改進。接下來介紹其中一些重要的更新。

首先,持續優化中文語音辨識(ASR)模型。可以在對應的連結中找到最新的 ASR 模型。

其次,引入了統一模型(Unified Model)的支援。這意味著在一次推理中,可以同時做語音辨識標點符號預測。

第三,增加了中英文混合模型的支持。這意味著模型可以同時處理中文和英文的語音輸入。

此外,也引入了一些新的模組和功能支援。包括基於神經網路的語音活動偵測(VAD)和說話者日誌(Speaker Diarization)模組。也引入了中文逆文本正規化的功能。這些模型的詳細資訊都可以在相應的連結中找到。

2. Word Boosting

#除此之外,我們也為中文提供了詳細的教學。第一部分是關於熱詞(Word Boosting)的教學。

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

熱詞是透過在辨識時候對特定的字詞的權重做調整,這使得這個字詞辨識得更準。在教程中,展示了一個中文模型使用熱詞的示例,如"望岳",這是一首古詩的名字,我們為這個詞賦予了一個分數為 20 的權重。接著,使用 Riva 提供的 add_word_boosting_to_config 方法,將我們希望新增的詞彙及其分數配置到客戶端。然後,將配置好的請求傳送給 ASR 伺服器,就可以取得加入熱詞後的識別結果。

在配置熱詞時,需要設定兩個參數:boosted_lm_words 和boosted_lm_score。 boosted_lm_words 是我們希望提高辨識準確度的詞彙清單。而 boosted_lm_score 則是為這些詞彙所設定的分數,通常在 20 到 100 之間。

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

#

除了前面的基本配置,Riva 的熱詞功能也支援一些進階用法。例如,可以同時提升多個詞彙的權重。例如,在例子中我們給"五 G"和"四 G"這兩個詞彙,分別設定了權重 20 和 30。

此外,我們還可以使用 word boosting 來降低某些詞彙的準確度,即給它們分配負的權重,從而降低其出現的機率。例如,在例子中,我們給了一個漢字"她",它的分數設定為 -100。這樣,模型就會傾向於不辨識出這個漢字。理論上,我們可以設定任意數量的熱詞,不會對延遲造成影響。另外值得注意的是,boosting 的過程是在客戶端實現的,對伺服器端沒有影響。

3. Finetuning Conformer AM

第二個教學課程,是關於如何微調 Conformer 聲學模型。

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

微調 ASR 所使用的是 NeMo 工具。配置 NGC 帳戶後,就可以使用"NGC download"指令直接下載 Riva 所提供的預先訓練好的中文模型。在這個例子中,下載了第五個版本的中文 ASR 模型。下載完成後,需要載入預訓練模型。

首先,需要導入一些套件。參數 model path 設定為剛下載好的模型的路徑。接下來,使用 NeMo 提供的 ASRModel.restore_from 函數來取得模型的設定文件,透過 target 這個參數可以取得原始 ASR 模型的類別。接著,使用 import_class_by_path 函數取得實際的模型類別。最後,使用該類別下模型的 restore_from 方法來載入指定路徑下的 ASR 模型參數。

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

載入了模型後,就可以使用 NeMo 提供的訓練腳本來微調。在這個例子中,我們以訓練 CTC 模型為例,使用的腳本是 speech_to_text_ctc.py。一些需要配置的參數包括 train_ds.manifest_filepath,即訓練資料的 JSON 檔案路徑,還有是否使用 GPU、最佳化器以及最大迭代輪數等。

在訓練完模型之後,可以進行評估。評估時需要注意將 use_cer 參數設為true,因為對於中文,我們使用字元錯誤率(Character Error Rate)作為指標。完成了模型的訓練和評估之後,可以使用 nemo2riva 指令將 NeMo 模型轉換為 Riva 模型。然後使用 Riva 的 Quickstart 工具來部署模型。

三、Riva TTS(Text-to-Speech)服務

接下來介紹Riva TTS 服務。

1. Demo

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

#在這一示範中,Riva TTS 提供的自訂功能,使合成出的語音更加自然。

接下來將介紹 Riva TTS 提供的兩種客製化方式。

2. SSML

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

#首先是前面提到的SSML(Speech Synthesis Markup Language),它透過一個腳本來進行配置。透過 SSML,可以調整 TTS 中的韻律,包括音高(pitch)和語速(rate),另外還可以調整音量。

如上圖所示,對​​第一句話「Today is a sunny day“,將其節奏的 pitch 改成了 2.5。對第二句話,做了兩個配置,一個是將它的 rate 設成 high,另外一個將音量加 1DB。這樣就可以獲得一個客製化的結果。

3.  TTS Finetuning using NeMo

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

除了 SSML 之外,還可以使用 NeMo 工具微調或重新訓練 Riva TTS 的FastPitch 或 HiFi-GAN 模型。

Riva 提供了相關教程,在 NGC 上也提供了一些預訓練模型(請參閱上圖中的連結)。

圖中舉了一個微調 HiFi-GAN 模型的例子。使用 hifigan_finetune.py 指令,並設定模型組態名稱、批次大小、最大迭代步數、學習率等參數。透過設定train_dataset 參數設定微調 HiFi-GAN 所需的資料集路徑。如果從 NGC 下載了預訓練模型,也可以使用 init_from_pretrained_model 參數來載入預訓練模型。這樣就可以重新訓練 HiFi-GAN 模型。

四、Riva Quickstart 工具

客製化好的模型就可以使用 Quickstart 工具來進行部署。

1. 準備

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

#在開始之前,需要註冊一個NGC 帳號,並確保GPU 支持Riva,並且已經安裝了Docker 環境。

一旦準備工作完成,即可透過提供的連結下載 Riva Quickstart。如果已經設定了 NGC CLI,也可以使用 NGC CLI 直接下載 Riva Quickstart。

2. 伺服器啟動停止

在下載完成 Riva Quick Start 之後,可以使用其中提供的腳本來進行伺服器的初始化、啟動和關閉等操作。

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

以最新版本的Riva(2.13.1)為例,下載完成後,只需執行riva_init.sh、riva_start.sh 或riva_stop .sh 即可完成伺服器的初始化、啟動和關閉操作。

如果想要使用中文模型,只要將語言程式碼設定為 zh-CN,工具就會自動下載對應的預訓練模型。即可啟動服務使用中文的 ASR(自動語音辨識)和 TTS(文字轉語音)功能。

3. Riva Client

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

#一旦伺服器啟動成功,即可使用Riva 提供的腳本riva_start_client .sh 來呼叫服務。如果希望進行離線語音識別,只需執行 riva_asr_client 命令並指定要識別的音訊檔案路徑。如果要進行串流語音識別,則可以使用 riva_streaming_asr_client 指令。如果要進行語音合成,可以使用 riva_tts_client 指令,向剛啟動的伺服器傳送要處理或合成的音訊。

五、參考資源

以下是一些Riva 相關的文件資源:

利用 NVIDIA Riva 快速部署企业级中文语音 AI 服务并进行优化加速

Riva 官方文件:這個文件提供了關於Riva 的詳細信息,包括安裝、配置和使用指南等。您可以在這裡找到 Riva 的官方文檔,以便深入了解和學習 Riva 的各個方面。

Riva Quick Start 使用者指南:這個指南為使用者提供了 Riva Quick Start 的詳細說明,包括安裝和設定步驟,以及常見問題的解答。如果您在使用 Riva Quick Start 過程中遇到任何問題,您可以在這個使用者指南中找到答案。

Riva Release Notes:這個文件提供了關於 Riva 最新模型的更新資訊。您可以在這裡了解每個版本的更新內容和改進。

以上這些資源將可以為使用者更能理解並使用 Riva 提供協助。

以上就是這次分享的內容,謝謝大家。

六、問答環節

Q1:Riva 和 Triton 的關係是怎麼樣的?是否有些功能重疊?

A1:對,Riva 使用的是 Nvidia Triton 的inference 框架,是基於 Nvidia Triton 所做的一些開發。

Q2:Riva 在 RAG 領域有實際落地嗎?或開源專案?

A2:Riva 目前應該主要還是聚焦在 Speech AI 領域。

Q3:Riva 和 Nemo 有關係嗎?

A3:Riva 更專注於部署的解決方案,用Nemo 訓練的模型可以用Riva 來部署,我們也可以使用Nemo 來做一些fine-tuning 和訓練的工作,然後fine-tune 好的模型也可以在Riva 當中部署。

Q4:其他框架訓練的模型可以適用嗎?

A4:其他框架訓練的暫時是不支援的,或是需要一些額外的開發工作。

Q5:Riva 能部署 PyTorch 或 TensorFlow 訓練框架的模型嗎?

A5:Riva 現在主要支援的是 Nemo 訓練出來的模型,Nemo 其實就是基於 PyTorch 所做的一些開發。

Q6:如果在 Nemo 裡自訂了新的模型,需要在 Riva 中寫部署程式碼嗎?

A6:對於自研的模型,想在 Riva 裡面支持的話,是需要做一些額外的開發的。

Q7:小記憶體 GPU 能否使用 Riva?

A7:可參考 Riva 提供的適配平台相關文檔,其中有不同型號 GPU 的適配的情況。

Q8:怎麼快速地試用 Riva?

A8:可以直接在 NGC 下載 Riva Quickstart 工具包來試用 Riva。

Q9:如果要支援中文方言,Riva 是不是要做客製化訓練?

A9:對的。可以使用自己的一些方言的數據。在 Riva 提供的預訓練模型基礎上進行微調,再在 Riva 裡面部署就可以了。

Q10:Riva 和 Tensor LM 的定位有沒有一些重合,或是差別?

A10:Riva 的加速其實也是使用 Tensor RT,Riva 是一個基於 Tensor RT 和 Triton 的產品。

以上是利用 NVIDIA Riva 快速部署企業級中文語音 AI 服務並進行優化加速的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn