Transformers documentation

Nemotron 3 Diarization

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

このモデルは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)float32bfloat16
ストリーミング、ステップごと1.2x4.4x
オフライン、488秒の録音1.3x2.8x

Nemotron3DiarizationConfig

class transformers.Nemotron3DiarizationConfig

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( config: Nemotron3DiarizationAudioConfig )

パラメータ

  • config (Nemotron3DiarizationAudioConfig) — モデルのすべてのパラメータを含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連付けられた重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

生の隠れ状態を出力し、上部に特定のヘッドを持たない、素の Nemotron3 Diarization Model です。

このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

forward

< >

( 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.Tensor)

パラメータ

  • 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].

    ポジションIDとは?

戻り値

BaseModelOutput または tuple(torch.Tensor)

torch.Tensor のタプル、または BaseModelOutput(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(Nemotron3DiarizationConfig)や入力に応じて、さまざまな要素で構成されます。

Nemotron3DiarizationAudioModel の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなくModuleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。

  • last_hidden_state (torch.Tensor、形状 (batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。

  • hidden_states (tuple(torch.Tensor)、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返されます) — torch.Tensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple(torch.Tensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます) — torch.Tensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

Nemotron3DiarizationModel

class transformers.Nemotron3DiarizationModel

< >

( config: Nemotron3DiarizationConfig )

パラメータ

  • config (Nemotron3DiarizationConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

話者分類器を備えない Nemotron3Diarization モデル: 1チャンク(キャッシュされたフレームを含む)をエンコードし、エンコーダーのフレームをスペクトログラムのフレームレートにアップサンプリングします。ストリーミング状態は保持せず、チャンク化されたフォワードについては Nemotron3DiarizationForAudioFrameClassification を参照してください。

このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

forward

< >

( 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.Tensor)

パラメータ

  • 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].

    ポジションIDとは?

戻り値

BaseModelOutput または tuple(torch.Tensor)

torch.Tensor のタプル、または BaseModelOutput(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(Nemotron3DiarizationConfig)や入力に応じて、さまざまな要素で構成されます。

Nemotron3DiarizationModel の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなくModuleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。

  • last_hidden_state (torch.Tensor、形状 (batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。

  • hidden_states (tuple(torch.Tensor)、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返されます) — torch.Tensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple(torch.Tensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます) — torch.Tensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

Nemotron3DiarizationProcessor

class transformers.Nemotron3DiarizationProcessor

< >

( 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__

< >

( 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.processing_utils.ProcessingKwargs'> ) → 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_mm_token_type_ids (bool, kwargs) — マルチモーダルプレースホルダトークンの位置を示すマルチモーダルトークンタイプIDを返すかどうか。
  • return_text_replacement_offsets (bool, kwargs) — 各マルチモーダルプレースホルダーとその置換文字列の文字オフセットを返すかどうかを指定します。
  • return_tensors (str または TensorType, 省略可) — 設定すると、特定のフレームワークのテンソルを返します。使用可能な値は以下の通りです:
    • 'pt': PyTorchのtorch.Tensorオブジェクトを返します。
    • 'np': NumPyのnp.ndarrayオブジェクトを返します。
  • **kwargs (ProcessingKwargs、任意) — 各モダリティ(テキスト、画像、動画、音声)の追加処理オプション。モデル固有のパラメータは上記にリストされています。サポートされている引数の完全なリストについては、TypedDictクラスを参照してください。

戻り値

BatchFeature

feature extractor の出力は、input_features と attention_mask です。ストリーミングモードでは、最後のチャンク以外のチャンクにおいて、解析ウィンドウがそのチャンクを超えてしまう末尾のフレームは破棄されるため、input_features にはそのチャンクのフレームがちょうど含まれ、そのままモデルに渡すことができます。また、最後のチャンク以外のすべてのチャンクには、その末尾のルックアヘッドエンコーダフレーム数である num_lookahead_frames が含まれており、これによりモデルがストリーミングモードになります。

Nemotron3DiarizationSpeakerCache

class transformers.Nemotron3DiarizationSpeakerCache

< >

( 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

< >

( 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

< >

( 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.Tensor、shape (batch_size, num_frames, config.head_config.num_speakers)) — スペクトログラムのフレームレートでの、フレームごとの話者アクティビティの logits。logits.sigmoid() は、各フレームで各話者がアクティブである確率を返します。話者は、音声内で最初に検出された順序で並べられています。
  • hidden_states (tuple[torch.Tensor, ...]、任意、output_hidden_states=True の場合に返されます) — チャンク順に並べられた、すべてのチャンクのエンコーダーの隠れ状態です。エンコーダーはチャンクごとに1回実行されるため、このタプルにはチャンクごとにconfig.audio_config.num_hidden_layers + 1個のテンソルが含まれます。シーケンス長は、キャッシュおよびルックアヘッドフレームを含むチャンクの長さに等しくなります。
  • attentions (tuple[torch.Tensor, ...]、任意、output_attentions=True の場合に返されます)— チャンク順に並べられた、各チャンクのエンコーダーアテンション重み。チャンクごとにconfig.audio_config.num_hidden_layers個のテンソル。
  • speaker_cache (Nemotron3DiarizationSpeakerCache、任意、ストリーミングモードで返されます) — 次の同じストリームのオーディオチャンクを forward に渡すために使用する、更新されたストリーミング状態です。

Nemotron3DiarizationForAudioFrameClassificationの出力です。

Nemotron3DiarizationForAudioFrameClassification

class transformers.Nemotron3DiarizationForAudioFrameClassification

< >

( 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

< >

( 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.Tensor)

パラメータ

  • 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.Tensor)

torch.Tensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)または Nemotron3DiarizationOutput。設定(Nemotron3DiarizationConfig)と入力に応じて、さまざまな要素で構成されます。

Nemotron3DiarizationForAudioFrameClassificationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなくModuleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。

  • logits (torch.Tensor、形状 (batch_size, num_frames, config.head_config.num_speakers)) — スペクトログラムのフレームレートでの、フレームごとの話者アクティビティの logits。logits.sigmoid() は、各フレームで各話者がアクティブである確率を返します。話者は、音声内で最初に検出された順序で並べられています。
  • hidden_states (tuple[torch.Tensor, ...]、optional、output_hidden_states=True の場合に返されます) — チャンク順に並べられた、すべてのチャンクのエンコーダーの隠れ状態です。エンコーダーはチャンクごとに1回実行されるため、このタプルにはチャンクごとにconfig.audio_config.num_hidden_layers + 1個のテンソルが含まれます。シーケンス長は、キャッシュおよびルックアヘッドフレームを含むチャンクの長さに等しくなります。
  • attentions (tuple[torch.Tensor, ...]、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
Update on GitHub