Transformers documentation
Nemotron 3 Diarization
このモデルは2026年9月23日に Hugging Face Transformers に貢献されました。
Nemotron 3 Diarization
概要
Nemotron 3 Diarization は、実世界の音声において「誰がいつ話したか」を判定するために設計された、オープンウェイトのストリーミング型話者分離モデルです。ストリーミング推論とオフライン推論の両方をサポートし、最大8人の話者を処理できます。また、話者の出力は、入力音声における各話者の初回出現順に並べられます。
モデルは、Streaming Sortformer 1、2 で導入された Arrival-Order Speaker Cache (AOSC) 1 および FIFO キューを使用しています。単一のチェックポイントで、80 ms の入力バッファから 30.4 秒のオフライン風バッファまでの設定可能なレイテンシプロファイル、および 10 ms の倍数で設定可能な出力フレーム解像度をサポートします。チャンク推論を使用する場合、最大音声長は制限されません。
使用方法
オフライン
import torch
from transformers import AutoModelForAudioFrameClassification, AutoProcessor
from transformers.audio_utils import load_audio
model_id = "nvidia/Nemotron-3-Diarization"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForAudioFrameClassification.from_pretrained(model_id, device_map="auto")
sampling_rate = processor.feature_extractor.sampling_rate
audio = load_audio(
"https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/diarization_example.mp3",
sampling_rate=sampling_rate,
)
inputs = processor(audio, sampling_rate=sampling_rate).to(model.device, dtype=model.dtype)
with torch.inference_mode():
logits = model(**inputs).logits # (1, num_frames, 8), one frame every 10 ms
segments = processor.extract_speaker_dict(logits, inputs.attention_mask)[0]
for segment in segments:
print(f"speaker_{segment['Speaker']}: {segment['Start']:.2f}s - {segment['End']:.2f}s")ストリーミング
Audio はチャンク単位で到着し、各 forward は 1 つのチャンクを処理します。プロセッサは streaming_mode に基づいてチャンクを切り出し、num_lookahead_frames 分(モデルが注意するがスコアリングしない、次のチャンクを開くための末尾のルックアヘッドフレーム数)を追加します。forward は、次の呼び出しに渡すための speaker_cache を返します。セッションの最後のチャンクは is_last_audio_chunk=True を指定して抽出します。ルックアヘッドがないため、残りのすべてのフレームがスコアリングされます。
streaming_mode | レイテンシー¹ |
|---|---|
"low_latency"(デフォルト) | 1.04 s |
"very_low_latency" | 0.64 s |
"ultra_low_latency" | 0.32 s |
¹ モデルがチャンクを実行する前に待機するオーディオ: 計算時間を除いた、チャンクとそのルックアヘッドの合計。
import torch
from transformers import AutoModelForAudioFrameClassification, AutoProcessor
from transformers.audio_utils import load_audio
model_id = "nvidia/Nemotron-3-Diarization"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForAudioFrameClassification.from_pretrained(model_id, device_map="auto")
processor.set_streaming_mode("low_latency") # the default, can also be "very_low_latency" and "ultra_low_latency"
print(f"Streaming latency: {processor.streaming_latency_ms} ms")
sampling_rate = processor.feature_extractor.sampling_rate
audio = load_audio(
"https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/diarization_example.mp3",
sampling_rate=sampling_rate,
)
def inputs_generator():
"""Yields the processor outputs of each chunk."""
yield processor(
audio[: processor.num_samples_first_audio_chunk],
sampling_rate=sampling_rate,
is_streaming=True,
is_first_audio_chunk=True,
)
mel_frame_idx = processor.num_mel_frames_per_step
start_idx = processor.audio_chunk_start(mel_frame_idx)
while (end_idx := start_idx + processor.num_samples_per_audio_chunk) <= audio.shape[0]:
yield processor(
audio[start_idx:end_idx],
sampling_rate=sampling_rate,
is_streaming=True,
is_first_audio_chunk=False,
)
mel_frame_idx += processor.num_mel_frames_per_step
start_idx = processor.audio_chunk_start(mel_frame_idx)
# the audio ended: the frames left in the buffer are the last ones of the session
yield processor(
audio[start_idx:],
sampling_rate=sampling_rate,
is_streaming=True,
is_first_audio_chunk=False,
is_last_audio_chunk=True,
)
speaker_cache, logits = None, []
with torch.inference_mode():
for inputs in inputs_generator():
inputs = inputs.to(model.device, dtype=model.dtype)
# `inputs` carries `num_lookahead_frames` for every chunk but the last, `speaker_cache` links the chunks
outputs = model(**inputs, speaker_cache=speaker_cache)
logits.append(outputs.logits) # the chunk's frames, without its look-ahead
speaker_cache = outputs.speaker_cache
logits = torch.cat(logits, dim=1) # (1, num_frames, 8), one frame every 10 ms
segments = processor.extract_speaker_dict(logits)[0] # [{"Start": 0.0, "End": 15.43, "Speaker": 0}, ...]高速化
ストリーミングステップにおけるエンコーダーの入力は [speaker cache | FIFO | chunk] であり、キャッシュと FIFO が埋まっていくにつれて、また縮小していくにつれて、その長さが変化します: torch.compile を使用すると、セッションごとに約100回再コンパイルされてしまいます。各ステップをそのモードの最大ウィンドウ長までパディングすることで、形状を固定できます。各チャンクごとに位置がゼロから再開されるため、右パディングをしても有効なフレームは変わりません:
import torch.nn.functional as F
chunk_length, chunk_right_context = processor.streaming_modes[processor.streaming_mode]
max_window = (
model.config.streaming_config.speaker_cache_length
+ model.config.streaming_config.fifo_length
+ chunk_length
+ chunk_right_context
)
encoder = model.model
compiled_forward = torch.compile(encoder.forward, mode="reduce-overhead", fullgraph=True, dynamic=False)
def padded_forward(inputs_embeds, attention_mask=None, position_ids=None, **kwargs):
batch_size, num_frames, _ = inputs_embeds.shape
if attention_mask is None:
attention_mask = inputs_embeds.new_ones(batch_size, num_frames, dtype=torch.bool)
padding = max_window - num_frames
hidden_states = compiled_forward(
inputs_embeds=F.pad(inputs_embeds, (0, 0, 0, padding)),
attention_mask=F.pad(attention_mask.bool(), (0, padding), value=False),
position_ids=torch.arange(max_window, device=inputs_embeds.device)[None, :],
**kwargs,
)
return hidden_states[:, :num_frames].clone() # CUDA graphs reuse the output buffer
encoder.forward = padded_forward
# warm up before the session: compiles, then records the CUDA graph, so the first real chunk runs at full speed
with torch.inference_mode():
for _ in range(3):
hidden_size = model.config.audio_config.hidden_size
padded_forward(torch.zeros(1, max_window, hidden_size, device=model.device, dtype=model.dtype))上記のストリーミングループは1回だけコンパイルされます。オフラインのフォワードも同様にチャンク分割されるため、max_window に config.fifo_length、config.chunk_left_context、config.chunk_length、config.chunk_right_context を指定した同じラッパーが適用されます。
| Eager に対する高速化率(A100、バッチサイズ 1) | float32 | bfloat16 |
|---|---|---|
| ストリーミング、ステップごと | 1.2x | 4.4x |
| オフライン、488秒の録音 | 1.3x | 2.8x |
Nemotron3DiarizationConfig
class transformers.Nemotron3DiarizationConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneaudio_config: transformers.models.nemotron3_diarization.configuration_nemotron3_diarization.Nemotron3DiarizationAudioConfig | dict | None = Nonehead_config: transformers.models.nemotron3_diarization.configuration_nemotron3_diarization.Nemotron3DiarizationHeadConfig | dict | None = Nonestreaming_config: transformers.models.nemotron3_diarization.configuration_nemotron3_diarization.Nemotron3DiarizationStreamingConfig | dict | None = Nonechunk_length: int = 340chunk_right_context: int = 40chunk_left_context: int = 0fifo_length: int = 40speaker_cache_update_period: int = 300initializer_range: float = 0.02 )
パラメータ
- audio_config (
Nemotron3DiarizationAudioConfigまたはdict、省略可) — transformer 音声エンコーダーの設定。デフォルトはNemotron3DiarizationAudioConfig()です。 - head_config (
Nemotron3DiarizationHeadConfigまたはdict、省略可) — スピーカーヘッドの設定。デフォルトはNemotron3DiarizationHeadConfig()です。 - streaming_config (
Nemotron3DiarizationStreamingConfigまたはdict、省略可) — スピーカーキャッシュのポリシーと、ストリーミングモードの FIFO サイズを指定します。デフォルト値はNemotron3DiarizationStreamingConfig()です。 - chunk_length (
int, 任意、デフォルトは 340) — オフラインモードでは、録音全体を 1 回のフォワードで話者分離する場合のチャンクあたりのエンコーダフレーム数です。 ストリーミングモードでは、チャンクは各フォワードの入力です。 - chunk_right_context (
int、任意、デフォルトは 40)— オフラインモード: 各チャンクが後続のチャンクから取得する、先読みエンコーダフレームの数。ストリーミングモードでは、先読みは各フォワードのnum_lookahead_framesです。 - chunk_left_context (
int、任意、デフォルトは 0)— オフラインモード: 各チャンクが直前のチャンクから再度取得する、前方参照エンコーダフレームの数。キャッシュされたフレームとチャンクの間に投入されます。前方参照と同様にアテンションの対象にはなりますが、スコアリングも FIFO キューへのプッシュもされません。ストリーミングモードでは、前方参照は各フォワードのnum_lookback_framesです。 - fifo_length (
int, 任意、デフォルトは 40) — オフラインモード: 直近のエンコーダーフレームの FIFO キューの容量。ストリーミングモードではstreaming_config.fifo_lengthが使用されます。 - speaker_cache_update_period (
int、任意、デフォルト値は 300)— オフラインモード: キューがオーバーフローした際に、FIFO キューからスピーカーキャッシュへ移動されるエンコーダーフレームの数。ストリーミングモードではstreaming_config.speaker_cache_update_periodが使用されます。 - initializer_range (
float、任意、デフォルトは0.02) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。
これは、Nemotron3DiarizationModel の設定を保存するための設定クラスです。指定された引数に基づいて Nemotron3 Diarization モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、nvidia/Nemotron-3-Diarization と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
Nemotron3DiarizationAudioConfig
class transformers.Nemotron3DiarizationAudioConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 512intermediate_size: int = 2048num_hidden_layers: int = 31num_attention_heads: int = 8num_key_value_heads: int | None = Nonehidden_act: str = 'gelu'max_position_embeddings: int = 5000initializer_range: float = 0.02rope_parameters: dict | None = Noneattention_dropout: float | int = 0.0num_mel_bins: int = 128subsampling_factor: int = 8 )
パラメータ
- hidden_size (
int、任意、デフォルトは512) — 隠れ表現の次元数。 - intermediate_size (
int、任意、デフォルトは2048) — MLP 表現の次元数。 - num_hidden_layers (
int、任意、デフォルトは31) — Transformer デコーダーの隠れ層の数。 - num_attention_heads (
int、任意、デフォルトは8) — Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。 - num_key_value_heads (
int, 任意) — Grouped Query Attention を実装するために使用する key_value ヘッドの数です。num_key_value_heads=num_attention_headsの場合、モデルは Multi Head Attention (MHA) を使用し、num_key_value_heads=1の場合は Multi Query Attention (MQA) を使用し、それ以外の場合は GQA が使用されます。 マルチヘッドのチェックポイントを GQA チェックポイントに変換する際は、各グループの key ヘッドと value ヘッドは、そのグループ内の元のすべてのヘッドを平均プーリングして構築する必要があります。詳細については、この論文を参照してください。指定されない場合、デフォルトでnum_attention_headsが使用されます。 - hidden_act (
str、任意、デフォルトはgelu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、"relu"、"silu"など。 - max_position_embeddings (
int、任意、デフォルトは5000) — このモデルが使用される可能性のある最大シーケンス長です。 - initializer_range (
float、任意、デフォルトは0.02) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。 - rope_parameters (
dict, 任意) — RoPE 埋め込みの設定パラメータを含む辞書です。辞書にはrope_thetaの値が含まれており、より長いmax_position_embeddingsで RoPE を使用する場合、スケーリングに使用されるパラメータが任意で含まれます。 - attention_dropout (
Union[float, int]、任意、デフォルトは0.0) — アテンション確率のドロップアウト率です。 - num_mel_bins (
int, 任意、デフォルトは128) — 入力フレームごとに使用される mel 特徴の数を指定します。AutoFeatureExtractorクラスで使用された値と一致させる必要があります。 - subsampling_factor (
int、任意、デフォルトは 8) — 1 つのエンコーダーフレームに積み重ねられる連続スペクトログラムフレームの数です。分類器は出力を同じ倍率でアップサンプリングするため、話者の活動はスペクトログラムフレームレートで予測されます。
これは、Nemotron3DiarizationModel の設定を保存するための設定クラスです。指定された引数に基づいて Nemotron3 Diarization モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、nvidia/Nemotron-3-Diarization と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
Nemotron3DiarizationHeadConfig
class transformers.Nemotron3DiarizationHeadConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 192num_speakers: int = 8audio_hidden_size: int = 512subsampling_factor: int = 8 )
パラメータ
- hidden_size (
int、任意、デフォルト値は 192) — スピーカーヘッドの隠れ層サイズです。エンコーダーの出力はこのサイズに射影され、アップサンプラーと分類器もこのサイズを維持します。 - num_speakers (
int、任意、デフォルトは 8) — 最大話者数、すなわちフレームごとの活動出力の数です。話者は、音声内で最初に検出された順序で並べられます。 - audio_hidden_size (
int、任意、デフォルト値は 512)— ヘッドが射影するエンコーダー出力の隠れ層サイズです。Nemotron3DiarizationAudioConfig.hidden_sizeと一致する必要があります。 - subsampling_factor (
int、任意、デフォルトは 8) — ヘッドのアップサンプリング係数。スペクトログラムのフレームレートに戻すために使用します。Nemotron3DiarizationAudioConfig.subsampling_factorと一致する必要があります。
これは、Nemotron3DiarizationModel の設定を保存するための設定クラスです。指定された引数に基づいて Nemotron3 Diarization モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、nvidia/Nemotron-3-Diarization と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
Nemotron3DiarizationStreamingConfig
クラス transformers.Nemotron3DiarizationStreamingConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonefifo_length: int = 264speaker_cache_update_period: int = 222speaker_cache_length: int = 264speaker_cache_silence_frames_per_speaker: int = 1prediction_score_threshold: float = 0.25latest_frames_score_boost: float = 0.05strong_boost_rate: float = 0.75weak_boost_rate: float = 1.5min_positive_scores_rate: float = 0.5num_speakers: int = 8subsampling_factor: int = 8 )
パラメータ
- fifo_length (
int, 任意、デフォルトは 264) — ストリーミングモードにおける直近のエンコーダーフレームの FIFO キューの容量(オフラインモードではNemotron3DiarizationConfig.fifo_lengthを使用します)。 - speaker_cache_update_period (
int、任意、デフォルト値は 222)— ストリーミングモードにおいて、FIFO キューがオーバーフローした際に、キューからスピーカーキャッシュへ移動されるエンコーダーフレームの数です(オフラインモードではNemotron3DiarizationConfig.speaker_cache_update_periodが使用されます)。 - speaker_cache_length (
int、任意、デフォルト値は 264)— Arrival-Order Speaker Cache の容量です。(1 + speaker_cache_silence_frames_per_speaker) * num_speakers以上である必要があります。 - speaker_cache_silence_frames_per_speaker (
int、任意、デフォルト値は 1)— キャッシュが圧縮された場合、学習された無音埋め込みのために話者ごとに確保される話者キャッシュのスロット数です。 - prediction_score_threshold (
float、任意、デフォルト値は 0.25) — スピーカーキャッシュのフレームスコアで、スピーカー確率の対数を計算する前に適用される下限値。 - latest_frames_score_boost (
float、任意、デフォルト値は 0.05) — スピーカーキャッシュが圧縮された際に、新たに追加されたフレームに付与されるスコアのボーナスです。 - strong_boost_rate (
float、任意、デフォルト値は 0.75) — 各話者のキャッシュ予算のうち、最高のフレームに強いスコアブーストを適用する割合です。これにより、各話者がキャッシュに少なくともその数のフレームを保持するようにします。 - weak_boost_rate (
float、任意、デフォルト値は 1.5) — 話者ごとのキャッシュ予算のうち、ベストフレームに弱いスコアブーストを適用する割合です。これにより、ある1人の話者がキャッシュを独占することを防ぎます。 - min_positive_scores_rate (
float、任意、デフォルト値は 0.5) — 話者ごとのキャッシュ予算に対する割合です。この割合以上の正のスコアを持つフレームを有する話者については、非正(オーバーラップした発話)のフレームがキャッシュから除外されます。 - num_speakers (
int、任意、デフォルトは 8) — スピーカーキャッシュが追跡するスピーカーの数。Nemotron3DiarizationHeadConfig.num_speakersと一致する必要があります。 - subsampling_factor (
int、任意、デフォルトは 8) — エンコーダフレームあたりの話者確率フレーム数。Nemotron3DiarizationAudioConfig.subsampling_factorと一致する必要があります。
これは、Nemotron3DiarizationModel の設定を保存するための設定クラスです。指定された引数に基づいて Nemotron3 Diarization モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、nvidia/Nemotron-3-Diarization と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
Nemotron3DiarizationAudioModel
class transformers.Nemotron3DiarizationAudioModel
< source >( config: Nemotron3DiarizationAudioConfig )
パラメータ
- config (Nemotron3DiarizationAudioConfig) — モデルのすべてのパラメータを含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連付けられた重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
生の隠れ状態を出力し、上部に特定のヘッドを持たない、素の Nemotron3 Diarization Model です。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_features: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutput or tuple(torch.FloatTensor)
パラメータ
- input_features (
torch.Tensor、形状(batch_size, sequence_length, feature_dim)、任意) — 入力音声特徴に対応するテンソルです。音声特徴は NemotronAsrStreamingFeatureExtractor を使用して取得できます。詳細はNemotronAsrStreamingFeatureExtractor.__call__()を参照してください(Nemotron3DiarizationProcessor は音声の処理に NemotronAsrStreamingFeatureExtractor を使用します)。 - attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- inputs_embeds (
torch.Tensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込み参照行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - position_ids (
torch.Tensorの形状(batch_size, sequence_length), 、省略可) — 位置埋め込みにおける各入力シーケンスのトークンの位置のインデックス。範囲[0, config.n_positions - 1].
戻り値
BaseModelOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル、または BaseModelOutput(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(Nemotron3DiarizationConfig)や入力に応じて、さまざまな要素で構成されます。
Nemotron3DiarizationAudioModel の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
Nemotron3DiarizationModel
class transformers.Nemotron3DiarizationModel
< source >( config: Nemotron3DiarizationConfig )
パラメータ
- config (Nemotron3DiarizationConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
話者分類器を備えない Nemotron3Diarization モデル: 1チャンク(キャッシュされたフレームを含む)をエンコードし、エンコーダーのフレームをスペクトログラムのフレームレートにアップサンプリングします。ストリーミング状態は保持せず、チャンク化されたフォワードについては Nemotron3DiarizationForAudioFrameClassification を参照してください。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_features: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutput or tuple(torch.FloatTensor)
パラメータ
- input_features (
torch.Tensor、形状(batch_size, sequence_length, feature_dim)、任意) — 入力音声特徴に対応するテンソルです。音声特徴は NemotronAsrStreamingFeatureExtractor を使用して取得できます。詳細はNemotronAsrStreamingFeatureExtractor.__call__()を参照してください(Nemotron3DiarizationProcessor は音声の処理に NemotronAsrStreamingFeatureExtractor を使用します)。 - attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- inputs_embeds (
torch.Tensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込み参照行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - position_ids (
torch.Tensorの形状(batch_size, sequence_length), 、省略可) — 位置埋め込みにおける各入力シーケンスのトークンの位置のインデックス。範囲[0, config.n_positions - 1].
戻り値
BaseModelOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル、または BaseModelOutput(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(Nemotron3DiarizationConfig)や入力に応じて、さまざまな要素で構成されます。
Nemotron3DiarizationModel の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
Nemotron3DiarizationProcessor
class transformers.Nemotron3DiarizationProcessor
< source >( feature_extractorsubsampling_factor = 8streaming_modes = Nonestreaming_mode = 'low_latency' )
パラメータ
- feature_extractor (
NemotronAsrStreamingFeatureExtractor) — フィーチャーエクストラクターは必須の入力です。 - subsampling_factor (
int、任意、デフォルトは 8) — エンコーダーフレームあたりの mel フレーム数です。Nemotron3DiarizationAudioConfig.subsampling_factorと同じです。 - streaming_modes (
dict[str, tuple[int, int]], 省略可) — チェックポイントがサポートするストリーミングモード。エンコーダーフレームにおける(chunk_length, chunk_right_context)への名前付きマッピングです。 このセットの唯一の信頼できる情報源はプロセッサであり、set_streaming_mode()はこれに対して検証を行います。デフォルトではモデルカードの モード、"low_latency"(9, 4)、"very_low_latency"(6, 2)、"ultra_low_latency"(3, 1) が使用されます。 - streaming_mode (
str、任意、デフォルトは"low_latency") — セッションのストリーミングモード。streaming_modesのいずれかです。set_streaming_mode()で変更できます。オフライン使用時は無視されます。
Nemotron3DiarizationProcessor を構築し、フィーチャーエクストラクターを単一のプロセッサーにラップします。
Nemotron3DiarizationProcessor は NemotronAsrStreamingFeatureExtractor のすべての機能を提供します。詳細については、~NemotronAsrStreamingFeatureExtractor を参照してください。
__call__
< source >( audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]sampling_rate: int | None = Noneis_streaming: bool = Falseis_first_audio_chunk: bool = Trueis_last_audio_chunk: bool = False**kwargs: *<class 'transformers.models.nemotron3_diarization.processing_nemotron3_diarization.Nemotron3DiarizationProcessorKwargs'> ) → BatchFeature
パラメータ
- audio (
Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]]) — 準備対象のオーディオまたはオーディオのバッチです。各オーディオは NumPy 配列または PyTorch テンソルである必要があります。 NumPy 配列/PyTorch テンソルの場合、各オーディオの形状は (C, T) である必要があります。ここで C はチャネル数、T はオーディオのサンプル長です。 - sampling_rate (
int, 任意) — 入力オーディオのサンプリングレート (Hz) です。指定された場合、feature extractor が想定するサンプリングレート (16000 Hz) と照合して検証されます。 - is_streaming (
bool、省略可能、デフォルトはFalse) — オーディオがストリーミングセッションの1チャンクであるかどうかを示します。is_first_audio_chunkとis_last_audio_chunkは、それぞれ最初のチャンクと最後のチャンクを他のチャンクと区別するために使用されます。チャンクサイズはstreaming_modeのものであり、set_streaming_mode()で変更できます。最後のチャンクを除くすべてのチャンクは、最初のチャンクの場合にnum_samples_first_audio_chunk個のオーディオサンプル、それ以降のチャンクの場合にnum_samples_per_audio_chunk個のオーディオサンプルを正確に保持する必要があります。 - is_first_audio_chunk (
bool、任意、デフォルトはTrue) — ストリーミングセッションの最初のチャンクかどうかを示します。特徴量抽出器は、最初のチャンクおよびオフライン使用時には解析ウィンドウを中央揃いにします(center=True)、それ以降のチャンクでは中央揃にしません(center=False)。これにより、チャンクごとのスペクトログラムが、フレーム単位で単一の完全な発話パスと一致するようになります。is_streaming=Falseの場合はTrueである必要があります。 - is_last_audio_chunk (
bool、任意、デフォルトはFalse) — このチャンクがストリーミングセッションの終了を示すかどうかです。セッションのチャンクは、chunk_right_context分のルックアヘッドエンコーダフレームで終わります。これらのフレームは、次のステップでのみモデルによってスコアリングされ、次のチャンクがこれらで始まります。最後のチャンクには次のステップがないため、フレーム数がいくつであってもすべてスコアリングされます。また、その末尾は、完全な発話パスが音声の末尾をゼロパディングするようにゼロパディングされ、発話の最後のフレームを出力します。is_streaming=Falseの場合、Falseである必要があります。 - return_tensors (
strまたは TensorType, 省略可) — 設定すると、特定のフレームワークのテンソルを返します。使用可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': NumPyのnp.ndarrayオブジェクトを返します。
- **kwargs (ProcessingKwargs、任意) — 各モダリティ(テキスト、画像、動画、音声)の追加処理オプション。モデル固有のパラメータは上記にリストされています。サポートされている引数の完全なリストについては、TypedDictクラスを参照してください。
戻り値
feature extractor の出力は、input_features と attention_mask です。ストリーミングモードでは、最後のチャンク以外のチャンクにおいて、解析ウィンドウがそのチャンクを超えてしまう末尾のフレームは破棄されるため、input_features にはそのチャンクのフレームがちょうど含まれ、そのままモデルに渡すことができます。また、最後のチャンク以外のすべてのチャンクには、その末尾のルックアヘッドエンコーダフレーム数である num_lookahead_frames が含まれており、これによりモデルがストリーミングモードになります。
Nemotron3DiarizationSpeakerCache
class transformers.Nemotron3DiarizationSpeakerCache
< source >( config: Nemotron3DiarizationStreamingConfigfifo_length: int | None = Nonespeaker_cache_update_period: int | None = None )
パラメータ
- config (
Nemotron3DiarizationStreamingConfig) — スピーカーキャッシュのポリシーと、ストリーミングモードのFIFOサイズです。 - fifo_length (
int, 任意) — 直近のエンコーダーフレームのFIFOキューの容量です。デフォルト値はconfig.fifo_lengthです。 - speaker_cache_update_period (
int, 任意) — キューがオーバーフローした際に、FIFO キューからスピーカーキャッシュへ移動されるエンコーダーフレームの数です。デフォルト値はconfig.speaker_cache_update_periodです。
Nemotron3DiarizationForAudioFrameClassificationのストリーミング状態: 到着順スピーカーキャッシュと、各チャンクがアテンションを向ける直近のエンコーダーフレームのFIFOキュー。
update
< source >( chunk_input_embeds: Tensorchunk_logits: Tensorsilence_embeds: Tensornum_chunk_frames: intmask: typing.Optional[torch.Tensor] = Nonenum_lookback_frames: int = 0 )
パラメータ
- chunk_input_embeds (
torch.Tensor、形状(batch_size, num_input_frames, hidden_size)) — ステップのエンコーダー入力:get_embedsが返すキャッシュされたフレーム、ルックバックフレーム、チャンク、およびそのルックアヘッドです。 - chunk_logits (
torch.Tensor、形状(batch_size, num_input_frames * subsampling_factor, num_speakers)) — ステップのスピーカー logits。スピーカーキャッシュが圧縮された際に、フレームのスコアリングに使用されます。 - silence_embeds (
torch.Tensor、shape(hidden_size,)) — 圧縮キャッシュの予約済みサイレンススロットを埋めるために学習されたサイレンス埋め込みです。 - num_chunk_frames (
int) —chunk_input_embedsにおける、キャッシュ済みフレームおよび look-back フレームに続くチャンクフレームの数です。FIFO キューに参加するのはこれらだけで、その後の look-ahead フレームは次のステップで再度投入されます。 - mask (
torch.Tensor、形状(batch_size, num_input_frames)、任意) —chunk_input_embedsの有効なフレーム。パディングフレームにはゼロのスピーカー確率が割り当てられます。 - num_lookback_frames (
int、任意、デフォルトは 0) —chunk_input_embedsのチャンクとキャッシュされたフレーム間のルックバックフレーム数です。前のチャンクのフレームを再度入力し、すでにプッシュ済みのフレームを指します。
FIFOキューに処理済みのチャンクをプッシュし、オーバーフローが発生した場合は最も古いフレームをスピーカーキャッシュに移動します。
Nemotron3DiarizationOutput
class transformers.Nemotron3DiarizationOutput
< source >( logits: typing.Optional[torch.Tensor] = Nonehidden_states: tuple[torch.Tensor, ...] | None = Noneattentions: tuple[torch.Tensor, ...] | None = Nonespeaker_cache: transformers.models.nemotron3_diarization.modeling_nemotron3_diarization.Nemotron3DiarizationSpeakerCache | None = None )
パラメータ
- logits (
torch.FloatTensor、shape(batch_size, num_frames, config.head_config.num_speakers)) — スペクトログラムのフレームレートにおける、フレームごとの話者アクティビティの logits。logits.sigmoid()を計算すると、各フレームで各話者がアクティブである確率が得られます。話者は、音声内で最初に検出された順に並べられます。 - hidden_states (
tuple[torch.FloatTensor, ...]、任意、output_hidden_states=Trueの場合のみ返されます) — チャンク順に並べられた、各チャンクのエンコーダーの隠れ状態です。エンコーダーはチャンクごとに1回実行されるため、このタプルにはチャンクごとにconfig.audio_config.num_hidden_layers + 1個のテンソルが含まれます。シーケンス長は、キャッシュおよびルックアヘッドフレームを含むチャンク長です。 - attentions (
tuple[torch.FloatTensor, ...]、任意、output_attentions=Trueの場合のみ返却) — チャンク順に並べられた、各チャンクごとのエンコーダーの注意重み。チャンクごとにconfig.audio_config.num_hidden_layers個のテンソル。 - speaker_cache (
Nemotron3DiarizationSpeakerCache、任意、ストリーミングモードで返されます) — 次の同じストリームのオーディオチャンクを forward に渡すために使用する、更新されたストリーミング状態です。
Nemotron3DiarizationForAudioFrameClassification
class transformers.Nemotron3DiarizationForAudioFrameClassification
< source >( config: Nemotron3DiarizationConfig )
パラメータ
- config (Nemotron3DiarizationConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
Streaming Sortformer話者分離モデル: スペクトログラムの各フレームについて、最初に検出された順序で最大config.head_config.num_speakers人の話者の活動を予測します。音声はチャンクごとに処理され、各チャンクは数フレームの先行フレームと、Nemotron3DiarizationSpeakerCacheに保持されるArrival-Order Speaker CacheおよびFIFOキューに注意を払います。録音全体はforward自体によってチャンク分割されます(オフラインモード)。ストリームは、forwardごとに1チャンクずつ投入されます(ストリーミングモード)。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_features: Tensorattention_mask: typing.Optional[torch.Tensor] = Nonespeaker_cache: transformers.models.nemotron3_diarization.modeling_nemotron3_diarization.Nemotron3DiarizationSpeakerCache | None = Nonenum_lookahead_frames: int | None = Nonenum_lookback_frames: int | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Nemotron3DiarizationOutput or tuple(torch.FloatTensor)
パラメータ
- input_features (
torch.Tensor、shape(batch_size, sequence_length, feature_dim)) — 入力音声特徴に対応するテンソルです。音声特徴は NemotronAsrStreamingFeatureExtractor を使用して取得できます。詳細はNemotronAsrStreamingFeatureExtractor.__call__()を参照してください(Nemotron3DiarizationProcessor は音声の処理に NemotronAsrStreamingFeatureExtractor を使用します)。 - attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- speaker_cache (
Nemotron3DiarizationSpeakerCache、任意) — 同じ音声ストリームの前チャンクの forward によって返されるストリーミング状態です。 - num_lookahead_frames (
int, 省略可) — ストリーミングモード: 入力において、ルックアヘッドのみとして扱われる末尾エンコーダーフレームの数。これらはアテンションの対象となりますが、その logits は返されず、次のチャンクを開くため FIFO キューにも追加されません。 Nemotron3DiarizationProcessor は、セッションの最後のチャンクを除くすべてのチャンクに対してこれを設定します。これらの引数と
num_lookback_framesがモードを選択します。ストリーミングモード(1回の forward ごとに 1 チャンク):num_lookahead_framesまたはnum_lookback_framesが指定されている場合(最初のチャンクがspeaker_cacheを作成し、以降のチャンクがそれを取得する)、またはspeaker_cacheのみが指定されている場合(セッションの最後のチャンクで、look-ahead なし)。look-back フレームと look-ahead フレームを除いた入力が、長さに関係なく 1 チャンクとなり、config.streaming_configでサイズが設定された FIFO キューにまとめて投入されます。オフラインモード(どちらも指定されていない場合): 入力は録音全体であり、forward によってconfig.chunk_lengthエンコーダフレームのチャンクに分割されます。各チャンクは、先行するチャンクから最大config.chunk_left_contextフレームの look-back、後続のチャンクから最大config.chunk_right_contextフレームの look-ahead を取得し、config.fifo_lengthでサイズが設定された FIFO キューを使用します。キャッシュは返されません。 - num_lookback_frames (
int, 任意) — ストリーミングモード: 入力における、speaker_cacheのフレームに加えて、直前のチャンクの末尾をこのチャンクの先頭に再度与えるための、先頭エンコーダフレームの数を指定します。これらのフレームはアテンションの対象となりますが、その logits は返されず、FIFO キューにも再び追加されません。デフォルト値は 0 です。
戻り値
Nemotron3DiarizationOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または Nemotron3DiarizationOutput。設定(Nemotron3DiarizationConfig)や入力に応じて、さまざまな要素で構成されます。
Nemotron3DiarizationForAudioFrameClassificationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
- logits (
torch.FloatTensor、shape(batch_size, num_frames, config.head_config.num_speakers)) — スペクトログラムのフレームレートにおける、フレームごとの話者アクティビティの logits。logits.sigmoid()を適用すると、各フレームで各話者がアクティブである確率が得られます。話者は、音声内で最初に検出された順序で並べられます。 - hidden_states (
tuple[torch.FloatTensor, ...]、optional、output_hidden_states=Trueの場合のみ返却) — チャンク順に並べられた、各チャンクのエンコーダーの隠れ状態です。エンコーダーはチャンクごとに 1 回実行されるため、このタプルにはチャンクごとにconfig.audio_config.num_hidden_layers + 1個のテンソルが含まれます。シーケンス長は、キャッシュおよびルックアヘッドフレームを含むチャンク長です。 - attentions (
tuple[torch.FloatTensor, ...]、optional、output_attentions=Trueの場合のみ返却) — チャンク順に並べられた、各チャンクごとのエンコーダーの注意重み。チャンクごとにconfig.audio_config.num_hidden_layers個のテンソル。 - speaker_cache (
Nemotron3DiarizationSpeakerCache、optional、ストリーミングモードで返されます) — 同一ストリームの次のオーディオチャンクを forward に渡すために使用する、更新されたストリーミング状態です。
例:
>>> from transformers import AutoModelForAudioFrameClassification, AutoProcessor
>>> from transformers.audio_utils import load_audio
>>> model_id = "nvidia/Nemotron-3-Diarization"
>>> processor = AutoProcessor.from_pretrained(model_id)
>>> model = AutoModelForAudioFrameClassification.from_pretrained(model_id, device_map="auto")
>>> sampling_rate = processor.feature_extractor.sampling_rate
>>> audio = load_audio(
... "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/en-Alice_woman.wav",
... sampling_rate=sampling_rate,
... )
>>> inputs = processor(audio, sampling_rate=sampling_rate).to(model.device, dtype=model.dtype)
>>> probabilities = model(**inputs).logits.sigmoid() # (1, num_frames, 8), one frame every 10 ms