NVIDIA發布 NVIDIA NeMo,加速語音和語言模型開發

作者 NVIDIA Developer

這是可以加快語音和語言模型的神經模組開發的更新版。本文包含了有關 NGC 中預先訓練模型的相關更新訊息和基於自定義數據集微調模型的單元,以及使用文本語音轉換收集升級 NeMo 圖解,和使用 LibriSpeech 數據集替換範例中的 AN4 數據集。

作為一位研究者,如果想建構最新的語音和語言模型,就必須能夠快速地對新型網路架構進行實驗。這類實驗有可能會側重於通過修改現有網路架構提高性能,也可能會是通過將語音和語言模型合併,以建構端到端應用的高級實驗。

這類工作通常開始於研究範例代碼和模型庫中的預先訓練模型。但是通過這種方式來重複使用代碼和預先訓練模型可能會較為棘手。

這些模型中的輸入和輸出、編碼樣式以及數據處理層可能彼此不相容。更糟糕的情況是,也許用戶可以在其代碼中連接這些模型,使其在技術上“有效”,但實際情況卻是這些模型存在著語義錯誤。用戶需要花費大量的時間、精力和重複的代碼,來確保模型可以安全地重複使用。

而隨著模型複雜性和模型重複使用的增加,這種方法將不再有效。

現在我們將這種方法和建構複雜軟體應用程式的方法相對比。複雜軟體應用的發展歷程是一個抽象化層次不斷提高的過程:從機器代碼到彙編語言,再到具有編譯器和類型系統的結構化編程,最後到目標導向編程。這些高級工具帶來了更好的保護和代碼重複使用性。

深度學習函式庫也經歷了類似的發展歷程, CUDA 和 cuDNN 等底層工具能夠提供出色的性能, TensorFlow 能為人力成本開銷提供高度的靈活性。但 Keras 和 PyTorch 等高級函式庫的主要對象仍是 tensor 張量、簡易操作和層。

NVIDIA NeMo介紹

NVIDIA NeMo是一個帶有 PyTorch 後端的開源套件,它能夠進一步提高抽象化層次。 NeMo 使用戶可以使用可重複使用的組件輕鬆地建立複雜的神經網路架構。利用神經類型,這些組件之間會自動進行語義相容性檢查。

NeMo 能夠利用 NVIDIA GPU 上的 Tensor Core 核心,通過混合精度運算來獲得最高性能。其包括了將訓練擴展到多 GPU 系統和多節點叢集的功能。


圖 1 : NeMo 應用堆疊

該套件的核心是神經模組概念。神經模組會獲得一組輸入後,運算出一組輸出。用戶可以將其視為介於層和整個神經網路之間某處的一個抽象化。通常一個模組對應神經網路的一個概念部分,例如編碼器、解碼器或語言模型。

神經模組的輸入和輸出都具有神經類型,包括語義、 Axis 次序和輸入/輸出 tensor 張量的維數。這一歸類使得 NeMo 可以安全地鏈接在一起,組成應用,比如在下文中所演示的的自動語音識別( ASR )範例。

NeMo 還帶有用於 ASR 、 NLP 和 TTS 的可擴展模組集合。此類集合為數據加載、預先處理,和訓練不同的網路結構(包括 Jasper 、 BERT 、 Tacotron 2 和 WaveGlow )提供了 API 操作。用戶還可以基於自定義數據集,使用NVIDIA NGC中的預先訓練模型進行模型微調。

該套件是為解決 NVIDIA 應用研究團隊所面臨的挑戰而設計的。 NVIDIA 希望通過將此項目開源,來和整個語音、 NLP 和 TTS 研究者社區分享此項成果,並促進彼此之間的合作。

建立新模型

接下來將通過建立一個簡單的 ASR 模型來說明如何使用 NeMo 。你將了解神經類型如何提供語義安全檢查,以及如何以最輕鬆的方式將此工具橫向擴展到多個 GPU 。

如何開始

NVIDIA/NeMo GitHub 儲存庫概括列舉了一般性要求和安裝說明。該儲存庫提供了多種 NeMo 安裝方式:

  • 使用 1 個NGC 容器
  • 使用軟體包管理器( pip )指令: pip install nemo_toolkit_[all/asr/nlp/tts]。軟體包管理器能夠讓用根據其指定的集合(例如 asr 、 nlp 或 tts )安裝單個 NeMo 軟體包。
  • 使用可用於建構 Docker 圖像的Dockerfile 並且可以直接運行 NeMo 安裝。

使用端到端自動語音識別介紹: Jupyter 筆記本中的 Jupyter 筆記本範例了解如何在 NeMo 中使用 pip 命令設置環境並訓練 Jasper ASR 模型。

Jasper

在此 ASR 範例中,用戶將使用到一個名為 Jasper 的網路。Jasper 是一個端到端的 ASR 模型,它無需任何附加對齊訊息就能轉錄語音樣本。更多訊息,請參見Jasper :端到端卷積神經聲學模型

該模型的訓練處理流程包括以下模組。每個邏輯區塊都對應一個神經模組。

圖 2 Jasper 語音識別管道

Jupyter筆記本

在 Jupyter 筆記本中建構模型的步驟如下:

  • 執行個體化必要的神經模組
  • 描述這些神經模組的 DAG
  • 喚起一個操作,例如訓練

這裡的步驟很少,這是因為用戶此時所採用的是更高層次的抽象化

有關 ASR 介紹和逐步操作步驟,請參見端對端自動語音識別介紹: Jupyter 筆記本

基於自定義數據集微調模型

在使用預先訓練模型基於自定義數據建構高精度模型的過程中,微調起了重要作用。這屬於一種遷移學習技術。遷移學習能夠將一項任務中所獲得的知識遷移,轉而應用於另一項類似任務的執行當中。

NGC中有幾種預先訓練模型,用戶會在啟用 NeMo 微調用例時用到它們。接下來的部分對此進行更詳細的介紹。若要了解如何通過範例微調模型,請參見通過 NeMo 快速啟動不同語言的語音識別模型訓練

NeMo 僅需一行代碼就可將模型導出至 NVIDIA Riva。導出格式有三種: PyTorch 、 TorchScript 或 ONNX 。 Riva 通過導入模型生成TensorRT引擎並準備高性能的、生產就緒型推論模型,在 Riva 中使用 TensorRT 進行推論,在這一過程中可通過將模型量化為 INT8 來實現吞吐量的最大化。

NGC中的預先訓練模型

NGC 中有幾種預先訓練模型可用於 ASR 、 NLP 和 TTS ,例如 Jasper 、 QuartzNet 、 BERT 以及 Tacotron2 和 WaveGlow 。這些模型經過了數千小時開源數據和專有數據的訓練,具有很高的精度,並且需要在 DGX 系統上訓練超過 10 萬小時。

這些預先訓練模型基於多個開源和商業數據集建構,例如 LibriSpeech 、 Mozilla Common Voice 、 AI-shell2 Mandarin Chinese 、 Wikipedia 、 BookCorpus 和 LJSpeech 。這些數據集能夠幫助模型更加深入地了解上下文,使它們可以在即時用例中有效運行。

所有預先訓練模型都可下載,並且這些模型的代碼都是開源的,因此用戶可以使用自己的數據集訓練模型,甚至可以在基礎架構上建構新的模型。用戶還可以使用 NGC 中有現成的模型腳本和容器對其用例進行模型微調。

了解更多訊息,參考以下更多資源: