回到文章 NVIDIA 隆重推出 Nemotron 3.5 ASR,這是一款支援串流多語言的語音轉文字模型,擁有 6 億個參數,能從單一檢查點即時轉錄 40 種語言地區的語音,並內建標點符號與大小寫功能。它是今年稍早於 Hugging Face 和 NIM 上發布的熱門 Nemotron 3 ASR 模型(僅支援英文)的後繼版本。

自發布以來,Nemotron 3 ASR 已通過 Artificial Analysis 的獨立基準測試驗證,在所有串流 ASR 模型中,其延遲表現排名第二,語音結束後僅需 0.07 秒即可產生最終文字稿,並在 AA-WER 串流指數與最終轉錄時間的排行榜中,位居「最具吸引力」的象限,使其在準確性與延遲的綜合權衡方面名列前茅。

該模型採用 Cache-Aware FastConformer-RNNT 架構,能夠在串流音訊時避免大多數串流 ASR 系統因重複計算而造成的緩慢,因此能同時實現低延遲和高準確性。Nemotron 3.5 ASR 以開放權重形式在 Hugging Face 上發布,您可以檢查、微調和部署它,無需依賴 API 或按次計費。

除非您選擇,否則任何資料都不會離開您的基礎設施。由於它是一個強大的基礎模型,您可以針對自己的語言、領域或口音進行微調。本文的後半部分將詳細說明具體操作方法。如果您曾經開發過需要語音轉錄的產品,您可能遇到過以下這些難題:多語言成本。當您希望支援多種語言時,您可能需要整合 40 個不同的模型,或 40 個不同的供應商 API,每個都有其獨特的特性、延遲表現和計費方式。

您的基礎設施將變成一次性整合的博物館。串流與準確性的權衡。即時字幕需要低延遲,但大多數「串流」ASR 系統透過重複處理重疊的音訊視窗來「假裝」串流。這會消耗運算資源並增加延遲。降低延遲往往會導致準確性大幅下降。後處理流程。原始的 ASR 輸出通常是一段沒有標點符號、全小寫的文字。

您需要再額外加上一個模型來處理標點符號和大小寫,這又增加了一個複雜環節。「已知語言」的假設。許多系統要求您預先告知輸入語言。但如果是在客服專線中,來電者在同一句話中切換英文和西班牙文,該怎麼辦?Nemotron 3.5 ASR 的設計宗旨就是將這四個問題整合到一個模型中解決。

一個模型,支援 40 種語言地區。單一的 6 億參數檢查點可轉錄英文(美式/英式)、西班牙文(美式/西班牙式)、德文、法文(法式/加拿大式)、義大利文、阿拉伯文、日文、韓文、葡萄牙文(巴西式/葡萄牙式)、俄文、印地語、土耳其文、越南文、荷蘭文、烏克蘭文、波蘭文、芬蘭文、中文(普通話)、捷克文、保加利亞文、斯洛伐克文、瑞典文、克羅埃西亞文、羅馬尼亞文、愛沙尼亞文、丹麥文、匈牙利文、挪威語(書面挪威語)、挪威語(新挪威語)、希伯來文、希臘文、立陶宛文、拉脫維亞文、馬爾他文、斯洛維尼亞文和泰文。

無需為每種語言單獨部署,也無需切換模型。正確的即時串流。該模型基於 Cache-Aware FastConformer 編碼器構建。傳統的「緩衝」串流會在每個步驟重複處理重疊的音訊區塊,多次執行相同的工作。而這個模型則會快取編碼器的內部狀態並重複使用,每個音訊幀只處理一次,沒有重疊。

結果是顯著降低了運算量和端到端延遲,同時不犧牲準確性。原生支援標點符號與大小寫。輸出是可直接用於生產的文字,包含正確的大小寫、逗號、句號、問號,直接來自模型。無需額外的標點符號還原步驟。語言條件設定,由您選擇。您可以透過兩種方式運行:當您知道輸入語言時,告知模型(target_lang=en-US),通常能獲得最佳準確性。

當您不知道時,讓模型自動偵測語言(target_lang=auto),模型會自動偵測語言並進行轉錄。該模型主要包含兩個部分:一個 Cache-Aware FastConformer 編碼器(24 層)。FastConformer 是 Conformer 架構的有效演進,具有線性可擴展的注意力機制。

「快取感知」部分是其串流的關鍵:編碼器會保留其來自先前幀的自注意力與卷積激活的快取,因此當新的音訊到達時,它只計算真正新的部分。沒有任何內容會被重複計算。一個 RNNT(循環神經網路換能器)解碼器。RNNT 是串流 ASR 的主力解碼器,它能隨著音訊逐幀串流輸入而輸出文字,這正是即時轉錄所需要的。

在此基礎上,模型還加入了基於提示詞的語言識別條件設定:一個語言訊號會與音訊一同輸入,這使得一組權重能夠將其輸出專門化為目標語言,或者在自動模式下,自行推斷語言。該模型是在涵蓋所有支援語言的大規模語音資料上進行訓練的,使用了公共和專有資料的混合,並將其標準化為帶有標點符號和正確大小寫的文字。

串流 ASR 本質上是文字輸出速度與模型在確認輸出前能「預覽」多少未來音訊之間的權衡。Nemotron ASR 透過注意力上下文大小直接揭示了這一點:Attention ContextChunk Size (Latency)Use Case[56, 0]80ms (Ultra-Low)超低延遲語音助理[56, 1]160ms (Low)互動式語音助理,對話式 AI[56, 3]320ms (Balanced)對話式 AI,即時字幕[56, 6]560ms (Medium)高準確性與合理延遲[56, 13]1.12s (High)最高準確性與高延遲同一個檢查點涵蓋了整個範圍,您可以在推論時選擇操作點,無需重新訓練。

該模型以 NeMo 檢查點的形式發布。複製 NeMo 分支並將串流推論腳本指向您的音訊:git clone https://github.com/NVIDIA-NeMo/NeMo.git使用已知語言進行轉錄:python ${NEMO_ROOT}/examples/asr/asr_cache_aware_streaming/speech_to_text_cache_aware_streaming_infer.py model_path=${MODEL_PATH} dataset_manifest=${MANIFEST_PATH} output_path=${OUTPUT_FOLDER} target_lang=es-ES att_context_size="[56,3]" strip_lang_tags=true或者讓模型自動偵測語言:python ${NEMO_ROOT}/examples/asr/asr_cache_aware_streaming/speech_to_text_cache_aware_streaming_infer.py model_path=${MODEL_PATH} dataset_manifest=${MANIFEST_PATH} output_path=${OUTPUT_FOLDER} target_lang=auto att_context_size="[56,3]" strip_lang_tags=true音訊應為單聲道 .wav 格式。

清單是一個標準的 NeMo JSON-lines 檔案:{"audio_filepath": "/path/to/clip.wav", "duration": 4.27, "text": "reference transcript"}模型會自動在每個完成的句子末尾預測語言標籤,例如「This is a test sample. <en-US>」。

「strip_lang_tags=True」可以移除語言標籤 <xx-XX> 以提高可讀性。Nemotron 3.5 ASR 開箱即用表現強勁,但其訓練資料混合中,有些語言的資料量遠多於其他語言。對於長尾語言地區,仍有很大的改進空間,只需數小時的領域內音訊加上正確的微調方法,就能帶來驚人的提升。

為了具體說明,我們進行了一個實例:取基礎模型,並針對兩種中等資源的歐洲語言,希臘語和保加利亞語,進行強化,然後在保留資料集上進行誠實測量。以下結果來自該次運行。本節為高層次概述,程式碼範例位於配套的 GitHub 儲存庫中。當我們發布涵蓋整個過程的代理式 SKILL.md 時,本部落格將會相應更新。

以下是一些值得進行微調的情況:強化長尾語言地區。預訓練資料較少的語言獲益最大。領域專業知識或專業詞彙。基礎模型很少見到的醫學、法律、金融或技術詞彙。口音、方言和聲學環境。電話語音、遠場、車載或特定說話者群體。新語言。為尚未涵蓋的語言地區建立基礎。

🎥 影片教學:在 YouTube 上觀看此教學影片展示了多語言串流推論、延遲/準確性權衡、部署選項以及下方描述的微調工作流程。整個工作流程分為五個步驟:將訓練器指向目標語言的壓縮語音資料,無需逐檔解壓縮,由 NeMo/Lhotse 高效串流處理。

使用相同的 Cache-Aware FastConformer-RNNT 方法,從基礎檢查點(init_from_nemo_model)進行微調,並根據每個音訊片段的語言標籤進行條件設定。在模型從未見過的保留資料集上進行評估,使用您將部署的相同低延遲串流設定(例如 att_context_size=[56,0],80 毫秒區塊;0 毫秒預讀)。

針對語言表現較弱的部分增加更多資料並重新訓練。匯出並部署微調後的檢查點。我們從公共多語言語料庫(Granary, Common Voice, FLEURS)中,為希臘語和保加利亞語這兩種語言組建了一個平衡的、約 2000 小時的混合資料集,並以壓縮的 NeMo/Lhotse 分片形式保存。

其中兩個最重要的細節是:每個音訊片段都帶有 target_lang 標籤,這是驅動模型基於提示詞的語言條件設定的關鍵,因此正確設定標籤(並使用模型能識別的值)至關重要。文字風格應與基礎模型保持一致,即帶有標點符號和正確大小寫的轉錄文本,因為這是模型產生的輸出。

未用於訓練的保留 FLEURS 測試集為我們提供了每種語言真實、實際的基準。對串流 RNNT 模型進行直接的完整微調,由固定的步驟預算驅動(這是處理串流/可迭代資料的正確排程方式)。它可以在單一 GPU 上快速運行,並能順暢地擴展到多 GPU 以進行更完整的運行。

對於這樣的小型資料集,一個 epoch 僅需數分鐘,而非數小時。我們在保留的 FLEURS 測試集上,以 80 毫秒區塊的串流模式測量了詞錯誤率(Word Error Rate),這是最嚴苛的條件,沒有未來音訊的「預覽」。相較於基礎模型,改進幅度很大,特別是對於最初表現最弱的語言:LanguageBase modelFine-tunedRelative Improvement in WER🇬🇷 Greek352432%🇧🇬 Bulgarian221531%在保留的 FLEURS 測試集上,以最低延遲串流模式測量的原始 WER (%)。

基礎模型和微調模型採用相同的評估方式。基礎模型中錯誤率較高的語言,在經過短暫微調後變得真正實用,例如保加利亞語的錯誤率降低了一半以上。為了測試更多資料能帶來多大效益,我們隨後混入了約 2,000 小時的議會語音資料(MOSEL/VoxPopuli),這是 Granary Dataset 的一部分,將訓練資料池從約 290 小時增加到約 2,300 小時。

即使在較長訓練過程的中途,表現最弱的語言也進一步改善(例如保加利亞語的錯誤率降至 20 多),這證實了一個明顯的槓桿:更多同語言資料持續有幫助,儘管不同語言和領域的增益不盡相同,因此需要測量而非假設。微調後的模型與基礎模型採用相同的架構,因此可以直接部署到相同的服務路徑中,並且您可以在推論時透過 att_context_size 選擇您的延遲/準確性操作點,就像第一部分所述。

微調對於資源不足的語言具有變革性意義,最大的效益來自於基礎模型表現最弱的領域。在部署延遲下,使用保留資料進行評估。訓練集分數會讓您產生錯覺;在 0 毫秒預讀的獨立測試集才能揭示真相。確保語言標籤正確。提示詞條件設定是關鍵。