HUOXIU

NVIDIA NeMo は会話型 AI タスクのトレーニングと推論をどのようにサポートしますか?

出典: DataFunSummit

はじめに: NeMoは、NVIDIAの会話型AI向けディープラーニングツールキットです。自動音声認識(ASR)、自然言語処理(NLP)、音声合成(TTS)など、様々な会話型AI関連タスクの学習と推論に使用できます。このプレゼンテーションでは、NeMoを用いたASRモデルの学習方法、NeMoの中国語音声サポート、そして他の音声AIアプリケーションへのサポートについて重点的に説明します。

本日のプレゼンテーションでは、以下の 4 つの点に焦点を当てます。

1. NeMoの背景紹介

2. ケーススタディ: NeMoに基づくASRモデルのトレーニング

3. NeMoの中国語スピーチのサポート

4. NeMoの他の音声AI関連アプリケーションのサポート

ゲストスピーカー | Ding Wen、NVIDIA ソリューションアーキテクト

編集・編纂:李書

コミュニティ制作 | DataFun


01

NeMoの背景紹介

1. NeMoと会話型AIの概要

NeMoは、会話型AI向けのディープラーニングツールです。自動音声認識(ASR)、自然言語処理(NLP)、音声合成(TTS)など、様々な会話型AI関連タスクの学習と推論に使用できます。次の図は、会話型AIのワークフロー全体を示しています。

会話型AIへの入力は音声です。音声はまず、特徴抽出、音響モデル、言語モデル、デコーダーを含むASR(自動音声認識)モジュールに入ります。認識されたテキストはNLU(自然言語理解)モジュールに入り、機械翻訳やクエリマッチングなど、さまざまなビジネスニーズに応じて処理されます。機械翻訳を例にとると、英語のテキストを中国語のテキストに翻訳し、その中国語のテキストをTTS(音声合成)モジュールに入力して、最後に音声セグメントを出力します。このパイプライン全体はNeMoで実装できます。NeMoは、AI実践者が既存のコードまたは事前学習済みモデルを使用して、音声および言語関連タスクの開発を加速できるように支援することを目的としています。パイプライン全体は、それぞれASRとTTSで始まり、TTSで終わります。これら2つの部分は音声AI分野に属し、本日の議論の焦点となります。

2. 音声AI(ASR)の背景

このセクションでは、ASR(自動音声認識)の概要を簡単に説明します。ASR、音声をテキストに変換するプロセスです。従来のASRモデリング手法は、隠れマルコフモデル(HMM)とガウス混合モデル(GMM)に基づいています。2015年、マイクロソフトは音声認識モデリングにニューラルネットワークを初めて導入しました。ニューラルネットワークを用いて、与えられた音声フレームに基づいてHMMの状態の事後確率分布をモデル化し、HMMを用いて混合デコードを行い、テキストを取得します。

近年、豊富なコンピューティング能力とデータのおかげで、エンドツーエンドのASRが広く注目を集めています。エンドツーエンドのASRは、音声モデリングパイプライン全体をより簡潔にします。上の図は、典型的なASRパイプラインを示しています。入力音声はまず特徴抽出および前処理モジュールに入り、スペクトル特徴を取得します。次に、ニューラルネットワークの音響モデルに入力されます。最後に、デコーダーは言語モデルと組み合わせてテキストを出力します。近年人気のニューラルネットワークモデル構造には、Wav2letter、DeepSpeech、LAS、Citrinet、そして現在非常に人気のあるConformerなどがあります。一般的な音声認識ツールにはKaldiがあり、これも音声認識で最も重要なツールの1つです。NVIDIAはKaldi向けに一連の最適化を行ってきました。Kaldiは主にハイブリッドシステムといくつかの一般的なニューラルネットワークのトレーニングをサポートしています。2番目のタイプのツールは、OpenSeq2Seq、EspNet、WeNet、NeMoなど、PyTorchまたはTensorflowに基づくオープンソースツールです。

3. NeMoのASRサポート

次のセクションでは、現在 NeMo でサポートされている ASR のいくつかの側面を紹介します。

サポートされている主なモデル アーキテクチャには、従来の LSTM と、NVIDIA の NeMo チームによって提案された Jasper ファミリ (Jasper、QuartzNet、Citrinet などの純粋な CNN アーキテクチャを含む) のほか、Conformer や Squeezeformer などの現在主流のモデルがあります。

NeMoは、CTCデコーダーとTransducer/RNNTデコーダーの両方をサポートしています。これらは現在、学術界と産業界の両方で大きな関心を集めている2つのデコーダーです。言語モデルに関しては、NeMoはN-gram LMフュージョンとニューラルネットワーク言語モデルの両方をサポートし、リスコアリングに活用しています。さらに、NeMoはストリーミング学習とデコードをサポートし、様々なビジネスニーズに合わせてチャンクサイズを設定できます。

02

ケーススタディ: NeMo に基づく ASR モデルのトレーニング

1. ASRのためのデータ準備

このセクションでは、音声認識を例に、NeMo で音声認識モデルを素早く構築する方法を紹介し、前述の各音声 ASR モジュールを 1 つずつ紹介します。

NeMoでは、設定ファイルを通じてさまざまなモジュールとパラメータが使用されます。まず、データセットマニフェスト(JSONファイル)を準備する必要があります。上の画像に例を示します。`audio_filepath`には各オーディオファイルのURLが必要です。`Duration`はオーディオの長さ、`text`はラベル付きテキストです。Librispeechや中国のデータセットAishell-1/2など、さまざまなデータセット用の前処理スクリプトも提供しています。Kaldi2jsonスクリプトを使用して、Kaldi形式のデータをNeMoトレーニングに必要な形式に変換することもできます。設定では、`train`、`validation`、および`test`の3つの部分を指定する必要があります。上の画像の右下隅には、`train_ds`の設定例が示されています。ユーザーは独自のデータに従って設定する必要があります。主に、`manifest_filepath`(オーディオパス); `sample_rate`(通常は16Kまたは8K); `labels`(トレーニング中のモデリング単位)が含まれます。そして `max_duration` (最大オーディオ長。中国語のオーディオでは通常 0.1 秒から 20 秒の範囲で、これを超えると破棄されます)。

NeMoは、主に文字、サブワード、またはBPE(バイトペアエンコーディング)をモデリング単位としてサポートしています。上記の例では、左側がサブワード、右側が文字をモデリング単位として使用されています。文字をモデリング単位として使用する場合は、ラベルフィールドに辞書を指定する必要があります。サブワードまたはBPEをモデリング単位として使用する場合は、設定で対応するトークナイザーを指定する必要があります。テキストからトークナイザーを取得するためのスクリプトも提供しています。詳細は画像の下のリンクをご覧ください。このスクリプトを使用すると、個人データに基づいてトレーニングされたトークナイザーを直接取得できます。

2. 機能と拡張機能

データを準備した後、最初のステップは特徴抽出です。音声セグメントをメルスペクトログラムやMFCC特徴などの特徴に変換します。NeMoは、特徴抽出用に2つのモジュールを提供しています。メルスペクトログラム抽出用のAudioToMelSpectrogramPreprocessorと、 MFCC特徴抽出用のAudioToMFCCPreprocessorです。上の画像の右側に例を示します。メルスペクトログラム特徴を使用する場合は、`preprocessor`モジュールの`target`フィールドを`AudioToMelSpectrogramPreprocessor`に設定する必要があります。さらに、NeMoはASRで使用される一般的な特徴拡張とデータ拡張手法をサポートしています。たとえば、Spec Augmentationの場合は、`SpectrogramAugmentation`を`target`に設定するだけです。NeMoは、Speed Perturbationを含む他のデータ拡張手法もサポートしています。

3. モデル構造

特徴量を処理した後、次のステップではNeMoでニューラルネットワークモデルを設定する方法を紹介します。Conformerを例にとると、主な設定はエンコーダ部分にあります。ターゲットをConformerEncoderに設定します。レイヤー数(n_layers)と次元数(d_model)を設定することで、異なるパラメータ数のConformerモデルを構築できます。また、ヘッド数(n_heads)などのSelf Attention関連パラメータを設定することで、パラメータ数を直接調整することも可能です。相対位置エンコーディングもサポートされています。

NeMoはストリーミング学習とデコードをサポートしています。`att_context_size`を設定することでこれを調整できます。`[-1, -1]` は左右の可視領域の長さが無限大であることを示すため、これはオフラインモデル用の設定です。

右の画像は、 NeMo ASRで現在サポートされているすべてのモデルと、各タスクの設定ファイルのリストを示しています。例えば、Conformerモデルをトレーニングするには、Conformerフォルダを開くだけで、現在サポートされている設定を確認できます。

NeMoはCTCRNN-Transducerの両方のデコーダーをサポートしています。CTC損失を使用する場合、デコーダーのターゲットをConv ASR Decoderに設定する必要があります。`num_classes`は辞書またはBPE語彙サイズを指します。RNN Transducer損失を使用する場合、デコーダーのターゲットをRNNT Decoderに設定する必要があります。予測ネットワーク(`prednet`)の隠しサイズ(`pred_hidden`)とレイヤー数(`pred_rnn_layers`)、そしてジョイントネットワークも設定する必要があります。上の画像の右側に示すように、`conformer`フォルダには、CTC損失とTransducer損失の両方の基本モデリングユニット、およびキャラクターモデルとBPEモデルが表示されています。さらに、ストリーミングConformerモデルをトレーニングするには、`streaming`フォルダに移動してその方法を確認してください。

4. コンフォーマー-CTC構成

上記の紹介を踏まえ、Conformer CTC ベースの音声認識モデルのトレーニングを開始するには、NeMo git リポジトリの examples/ASR/conf/conformer に移動し、conformer_ctc_char.yaml を選択して、適切な設定を行うだけです。指定する必要がある部分には、最も重要なデータセットが含まれます。Spec Augment はデフォルトで有効になっています。デフォルトのデコーダーは CTC です(これは、先ほど CTC 設定を選択したためです)。デフォルトのオプティマイザーは Adam です。トレーニングには PyTorch Lightning を使用します。トレーニング中に、GPU と CPU のどちらを使用するか、および最大エポック数を指定できます。さらに、その他のトレーニング設定は Exp_manager で設定できます。

5. 研修と評価

設定が完了したら、トレーニングを開始できます。Pythonスクリプトexamples/ASR/ASR_ctc/speech_to_text_ctc.pyを呼び出すだけです。config-nameは、先ほど設定したconformer_ctc_char.yamlに設定する必要があります。

その他のパラメータを設定または置換する必要がある場合は、トレーニング開始時に値を指定できます。例えば、トレーニングデータセットマニフェストのアドレスを置換したり、トレーニングに特定のGPUを指定したり、混合精度トレーニングを使用したりする場合は、trainer.precision を16に設定するだけで、FP32とFP16の精度トレーニングを組み合わせて使用​​し、トレーニングプロセス全体を高速化します。

モデルをトレーニングした後は、テストと評価を行う必要があります。これは主に `speech_to_text_eval.py` ファイルを使用して行います。このファイルでは、トレーニング済みの NeMo モデルのチェックポイントを `model_path` に入力できます。`dataset_manifest` には、テストに使用するデータセットを入力します。これも JSON 形式である必要があります。指標が CER の場合は、ここで `user_cer=True` を設定する必要があります。これにより、CER を使用して音声認識モデルのパフォーマンスを測定できるようになります。

6. 展開

NeMoは直接的なデプロイメントソリューションを提供します。まず、NeMoはONNXへの直接エクスポートをサポートしています。NVIDIAは、主にRivaを使用したモデルデプロイメントソリューションも提供しています。Rivaは、ニューラルネットワークモデルの高速化にNVIDIA TensorRTを使用し、サービスにはNVIDIA Tritonを使用しています。トレーニング済みのNeMoモデルは、NeMo2rivaコマンドを使用して直接変換し、Rivaで使用できます。RivaのASRコンポーネントは、多様なビジネスニーズに対応するストリーミングデコード機能も提供します。

03

中国の支援

1. NeMo内の中国語モデルとアプリケーション

以下のセクションでは、主にNeMoの中国語音声サポートについて紹介します。まず、ASRセクションでは、Aishell-1とAishell-2という2つの前処理スクリプトと、Citrinet-CTCやConformer-Transducerなどの事前学習済みモデルが提供されます。ユーザーはこれらの事前学習済みモデルをNGCからダウンロードして、テストや微調整を行うことができます。上の画像は、Aishell-2におけるConformerトランスデューサーの現在のパフォーマンスも示しており、全体的に良好なパフォーマンスを示しています。さらに、他のネットワーク構造を使用するには、設定ファイル内のラベルを対応する辞書またはBPE語彙に置き換えるだけです。NeMoは中国語テキスト正規化(WFSTベース)のサポートを追加し、中国語データの前処理を容易にしました。さらに、中国語TTSのサポートも計画されています。

2. Riva内の中国語モデルとアプリケーション

Rivaは主に2つのASRモデル(Citrinet-CTCとConformer-CTC)をサポートしています。また、N-gram LM融合デコードと中国語句読点モデルもサポートしています。

04

NeMoの他の音声AI関連アプリケーションのサポート

次に議論する点は、ASR モデルがあり、音声認識サービスを構築する場合に、他にどのような Speech AI 機能が必要かということです。

1. 音声エンドポイント検出

まず、 VAD(音声区間検出)モジュールが必要です。VADは音声中の人間の音声区間を検出し、多くの音声認識タスクにおいて有効な人間の音声区間をフィルタリングするためのプリモジュールとしてよく使用されます。VADは多くのリソースを節約し、ASRやその他の後続の音声タスクの効率を向上させます。また、さまざまなノイズレベルに対する堅牢性が高いため、ASRは認識タスク自体に集中できます。VADは、音声ラベルが「人間の声」か「人間の声ではない」かを判断するバイナリ分類タスクと見なすことができます。NeMoでは、主にMarbleNet VADモデルを使用しています。その構造は上図の右側に示されています。これは、純粋畳み込みネットワーク構造であるJasperファミリーの派生モデルでもあり、AVA音声データセットにおいて最先端(SOTA)の結果を達成しています。さらに、より少ないパラメータで優れたパフォーマンスを実現しています。

2. スピーカーログ

2つ目に紹介する音声AIタスクは、話者ダイアライゼーションです。その主な目的は、「誰がいつ話したか」という問題を解決することです。つまり、音声クリップが与えられた場合、異なる話者に属する音声セグメントと、それぞれのタイムスタンプを出力する必要があります。このタスクは多くのシナリオに応用できます。例えば、会議の文字起こしにおいて、SDモジュールは異なる参加者が話した音声セグメントを出力できます。

上の画像の右側は、SD(音声認識)とASR(オーディオ音声認識)を組み合わせた例を示しています。上部は音声認識モジュールの動作を示しており、音声内の対応するテキストを識別します。下部はSDモジュールを示しています。SDモジュールは、話者1の「やあ」と「かなり忙しい」という発言と、話者2の「調子はどう?」という発言の2つの音声セグメントを受け取り、音声セグメント内の対応する発話の開始時刻と終了時刻を提供します。SDモジュールは、元のASR認識テキストに話者情報を追加することで、異なる話者の特徴​​を捉え、録音のどのセグメントがどの話者に属しているかを区別することができます。話者の音声特徴を抽出し、話者数をカウントし、対応する話者に音声セグメントを割り当て、インデックスを取得します。

次に、NeMoにおける話者ダイアライゼーションの実装方法を説明します。上図はパイプラインを示しています。まず、長い音声ファイルから各音声セグメントの開始と終了を検出するプリプロセッサVADモジュールがあります。次のステップは、話者埋め込み抽出です。NeMoは、ICASSP 2022で発表された最新の論文で提案されたTitaNetモデルと同じモデルを使用しており、音響特徴に基づいて話者情報を抽出します。次に、抽出された話者埋め込みを異なるカテゴリにクラスタリングするクラスタリングモジュールがあります。

最後のステップは、前述の情報を要約して、異なる話者のタイムスタンプを取得することです。NeMoはマルチスケール話者ダイアライゼーションを使用しており、これはInterSpeech 2022で発表された最新の論文の内容でもあります。興味のある学生はぜひご覧ください。

3. NeMoが提供するSDオープンソースリソース

上の画像は、NeMoから現在入手可能な話者ダイアライゼーションの事前学習済みモデルを示しています。これには、様々なデータセットで学習されたVADモデル、話者埋め込み特徴量抽出用のTitanetとEcapa_tdnnが含まれています。前述のマルチスケール話者ダイアライゼーションモデルもオープンソース化されており、NGCリンクから該当モデルをダウンロードしてテストや微調整を行うことができます。

05

質疑応答セッション

Q1: Kaldi シングルマシンマルチ GPU トレーニング中にタスクのプリエンプションを防ぐにはどうすればよいですか?

A1: GPU を排他状態に設定すると、タスクのプリエンプションが防止されます。

Q2: 中国語の TTS はどの程度サポートされていますか?

A2: サポートは年末までに完了する予定です。すでに作業を進めています。

Q3: 汎用データセットにはどのようなものがありますか?語彙をGPUメモリに強制的に保存すると、スペースが足りなくなるでしょうか?

A3: NeMo では現在、一般的に使用される約 5,000 文字 (最もコアとなる文字は約 3,000 文字) の漢字を使用しており、これは実際に GPU に収容可能です。

Q4: MarbleNet のリソース消費量と同時実行性はどれくらいですか? また、モデルのサイズはどれくらいですか?

A4: モデルは非常に小さく、数百キロバイト程度です。実際、MarbleNetは既にRivaでサポートされており、パイプライン全体に統合されています。

Q5: NeMoのASR、VAD、SDを同時に使用するにはどうすればよいですか?関連スクリプトはありますか?

A5: はい、NeMo のチュートリアルに、VAD と SD を連鎖させる方法の例があります。

Q6: 事前トレーニング済みモデルとは何ですか?事前トレーニング済みモデルをどのように活用すれば、ビジネスアプリケーションの音声認識ニーズに迅速に対応できるのでしょうか?

A6: 例えば、ConformerモデルをAishell-2で学習させ、オープンソース化しました。これにより、誰もが独自のデータやビジネスニーズに基づいて微調整するための初期モデルとして利用できるようになります。これにより、モデル全体の反復処理と収束が加速され、誰もが後続のタスクをより容易に実行できるようになります。

Q7: NeMo パイプラインのポストプロセス部分では、CTC テスト部分は GPU を使用していますか、それとも CPU を使用していますか?

A7: 現在の言語モデルの融合は CPU 上で行われていますが、GPU ソリューションもいくつかあります。

Q8: アライメント機能はありますか?効果はどのくらいですか?

A8: いいえ、ハイブリッド システムに見られるアライメント機能ではなく、CTC と RNNT をサポートしているためです。

Q9: ノイズ除去モデルの結果はありますか?例えば、事前トレーニング済みモデルなどです。

A9: スペック拡張はデフォルトで有効になっていますが、リバーブ、ノイズ追加、速度調整などの他のデータ拡張手法はデフォルトでは有効になっていません。弊社の事前学習済みモデルでは、基本的にスペック拡張が有効になっています。

Q10: NeMoはNLP関連のタスクもサポートしているようですが、関係抽出のためにはどのように設定すればよいでしょうか?

A10: 関係抽出、いくつかのNLPタスク。NeMoの公式GitHubページをご覧ください。READMEには、現在サポートされているモデルとメソッドがリストされています。

Q11: ストリーミングとオフラインの両方の要件を満たすために、推論中に同じ ASR モデルをチャンク サイズで構成できますか?

A11: 推論中はチャンク サイズを固定値に設定する必要があります。チャンク サイズの動的な増加はサポートされていません。

Q12: NeMo は可変長入力に対して特別な処理を行いますか?

A12: 特別な処理は必要ありません。通常、トレーニング中にデータを一度ソートすることで、各バッチの長さがほぼ一定になり、パディング長の不一致を防ぎます。基本的に、各バッチサイズはほぼ一定であるため、スループットとトレーニング速度が向上します。