Transformers documentation
Nemotron 3 Diarization
Este modelo foi contribuído para o Hugging Face Transformers em 2026-09-23.
Nemotron 3 Diarization
Visão geral
Nemotron 3 Diarization é um modelo de diarização de falantes em streaming com pesos abertos, projetado para determinar “quem falou quando” em áudio do mundo real. Ele suporta inferência tanto em streaming quanto offline, lida com até oito falantes e ordena as saídas dos falantes pela primeira aparição de cada um no áudio de entrada.
O modelo utiliza o Arrival-Order Speaker Cache (AOSC) 1 e a fila FIFO introduzidos para o Streaming Sortformer 1, 2. Um único checkpoint suporta perfis de latência configuráveis, desde um buffer de entrada de 80 ms até um buffer offline de 30,4 s, e resolução de quadro de saída configurável em múltiplos de 10 ms. Com inferência em blocos, a duração máxima do áudio não é limitada.
Uso
Offline
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")Streaming
O áudio chega em blocos, e cada chamada de forward processa um bloco: o processador o recorta de acordo com o streaming_mode e adiciona num_lookahead_frames, o número de frames de look-ahead finais que o modelo considera, mas não pontua, pois eles abrem o próximo bloco. O forward retorna o speaker_cache para ser passado à próxima chamada. O último bloco de uma sessão é extraído com is_last_audio_chunk=True: ele não possui look-ahead, portanto todos os frames restantes são pontuados.
streaming_mode | Latência¹ |
|---|---|
"low_latency" (padrão) | 1.04 s |
"very_low_latency" | 0.64 s |
"ultra_low_latency" | 0.32 s |
¹ Áudio a aguardar antes de o modelo executar em um bloco: o bloco mais seu olhar antecipado, excluindo o tempo de computação.
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}, ...]Fazendo-o rodar
A entrada do codificador de uma etapa de streaming é [speaker cache | FIFO | chunk], cujo comprimento varia conforme o cache e o FIFO se enchem e diminuem: torch.compile recompilaria cerca de cem vezes por sessão. Preencher cada etapa até a maior janela do modo corrige a forma. As posições reiniciam em zero a cada chunk, portanto o preenchimento à direita não altera os quadros válidos:
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))O loop de streaming acima é compilado apenas uma vez. O forward offline faz o chunking da mesma forma, de modo que o mesmo wrapper se aplica com config.fifo_length, config.chunk_left_context, config.chunk_length e config.chunk_right_context em max_window.
| Aceleração em relação ao eager (A100, tamanho de lote 1) | float32 | bfloat16 |
|---|---|---|
| streaming, por etapa | 1.2x | 4.4x |
| offline, gravação de 488 s | 1.3x | 2.8x |
Nemotron3DiarizationConfig
classe 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 )
Parâmetros
- audio_config (
Nemotron3DiarizationAudioConfigoudict, opcional) — Configuração do codificador de áudio do transformer. O padrão éNemotron3DiarizationAudioConfig(). - head_config (
Nemotron3DiarizationHeadConfigoudict, opcional) — Configuração da cabeça de falante. O padrão éNemotron3DiarizationHeadConfig(). - streaming_config (
Nemotron3DiarizationStreamingConfigoudict, opcional) — Política de cache de falantes e os tamanhos FIFO do modo de streaming. O padrão éNemotron3DiarizationStreamingConfig(). - chunk_length (
int, opcional, padrão 340) — Modo offline: número de quadros do codificador por bloco quando uma gravação inteira é diarizada em uma única passagem. No modo de streaming, o bloco é a entrada de cada passagem. - chunk_right_context (
int, opcional, padrão 40) — Modo offline: número de quadros de codificador de antecipação que cada bloco obtém dos seguintes. No modo de streaming, a antecipação énum_lookahead_framesde cada passo à frente. - chunk_left_context (
int, opcional, padrão 0) — Modo offline: número de quadros de encoder de retorno que cada chunk retira novamente dos quadros anteriores, inseridos entre os quadros em cache e o chunk. Assim como o retorno à frente, eles são considerados, mas não pontuados nem enviados para a fila FIFO. No modo de streaming, o retorno énum_lookback_framesde cada forward. - fifo_length (
int, opcional, padrão 40) — Modo offline: capacidade da fila FIFO dos quadros de codificador mais recentes. O modo de streaming usastreaming_config.fifo_length. - speaker_cache_update_period (
int, opcional, padrão 300) — Modo offline: número de quadros do codificador movidos da fila FIFO para o cache do falante quando a fila transborda. O modo de streaming usastreaming_config.speaker_cache_update_period. - initializer_range (
float, opcional, padrão0.02) — O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos.
Esta é a classe de configuração para armazenar a configuração de um Nemotron3DiarizationModel. Ela é usada para instanciar um modelo de Diarização Nemotron3 de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do nvidia/Nemotron-3-Diarization
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Nemotron3DiarizationAudioConfig
classe 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 )
Parâmetros
- hidden_size (
int, opcional, padrão512) — Dimensão das representações ocultas. - intermediate_size (
int, opcional, padrão2048) — Dimensão das representações do MLP. - num_hidden_layers (
int, opcional, padrão31) — Número de camadas ocultas no decodificador do Transformer. - num_attention_heads (
int, opcional, padrão8) — Número de cabeças de atenção para cada camada de atenção no decodificador do Transformer. - num_key_value_heads (
int, opcional) — Este é o número de cabeças de key_value que devem ser usadas para implementar Grouped Query Attention. Senum_key_value_heads=num_attention_heads, o modelo usará Multi Head Attention (MHA); senum_key_value_heads=1, o modelo usará Multi Query Attention (MQA); caso contrário, será usado GQA. Ao converter um checkpoint multi-head para um checkpoint GQA, cada grupo de cabeças de chave e valor deve ser construído por meio do meanpooling de todas as cabeças originais dentro desse grupo. Para mais detalhes, consulte este artigo. Se não for especificado, o valor padrão seránum_attention_heads. - hidden_act (
str, opcional, padrãogelu) — A função de ativação não linear (função ou string) no decodificador. Por exemplo,"gelu","relu","silu", etc. - max_position_embeddings (
int, opcional, padrão5000) — O comprimento máximo de sequência com o qual este modelo pode ser utilizado. - initializer_range (
float, opcional, padrão0.02) — O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos. - rope_parameters (
dict, opcional) — Dicionário contendo os parâmetros de configuração para os embeddings RoPE. O dicionário deve conter um valor pararope_thetae, opcionalmente, parâmetros usados para escalonamento, caso você queira usar RoPE commax_position_embeddingsmaiores. - attention_dropout (
Union[float, int], opcional, padrão0.0) — A taxa de dropout para as probabilidades de atenção. - num_mel_bins (
int, opcional, padrão128) — Número de recursos mel usados por quadro de entrada. Deve corresponder ao valor utilizado na classeAutoFeatureExtractor. - subsampling_factor (
int, opcional, padrão 8) — Número de quadros consecutivos do espectrograma empilhados em um único quadro do codificador. O classificador faz o aumento de amostragem de suas saídas pelo mesmo fator, de modo que a atividade do falante é prevista na taxa de quadros do espectrograma.
Esta é a classe de configuração para armazenar a configuração de um Nemotron3DiarizationModel. Ela é usada para instanciar um modelo de Diarização Nemotron3 de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do nvidia/Nemotron-3-Diarization
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Nemotron3DiarizationHeadConfig
classe 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 )
Parâmetros
- hidden_size (
int, opcional, padrão 192) — Tamanho oculto da cabeça do falante: a saída do codificador é projetada para ele, e o amplificador e o classificador o mantêm. - num_speakers (
int, opcional, padrão 8) — Número máximo de falantes, ou seja, o número de saídas de atividade por quadro. Os falantes são ordenados pela sua primeira ocorrência no áudio. - audio_hidden_size (
int, opcional, padrão 512) — Tamanho oculto da saída do codificador a partir do qual a cabeça projeta. Deve corresponder aNemotron3DiarizationAudioConfig.hidden_size. - subsampling_factor (
int, opcional, padrão 8) — Fator de upsampling da head, de volta para a taxa de quadros do espectrograma. Deve corresponder aNemotron3DiarizationAudioConfig.subsampling_factor.
Esta é a classe de configuração para armazenar a configuração de um Nemotron3DiarizationModel. Ela é usada para instanciar um modelo de Diarização Nemotron3 de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do nvidia/Nemotron-3-Diarization
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Nemotron3DiarizationStreamingConfig
classe 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 )
Parâmetros
- fifo_length (
int, opcional, padrão 264) — Capacidade da fila FIFO dos quadros mais recentes do codificador no modo de streaming (o modo offline usaNemotron3DiarizationConfig.fifo_length). - speaker_cache_update_period (
int, opcional, padrão 222) — Número de quadros do codificador movidos da fila FIFO para o cache de falantes quando a fila transborda, no modo de streaming (o modo offline usaNemotron3DiarizationConfig.speaker_cache_update_period). - speaker_cache_length (
int, opcional, padrão 264) — Capacidade do Arrival-Order Speaker Cache. Deve ser pelo menos(1 + speaker_cache_silence_frames_per_speaker) * num_speakers. - speaker_cache_silence_frames_per_speaker (
int, opcional, padrão 1) — Número de slots de cache de falante por falante reservados para o embedding de silêncio aprendido quando o cache é comprimido. - prediction_score_threshold (
float, opcional, padrão 0.25) — Limite inferior das probabilidades de falantes antes de calcular o logaritmo nas pontuações dos quadros do cache de falantes. - latest_frames_score_boost (
float, opcional, padrão 0.05) — Bônus de pontuação atribuído aos quadros recém-adicionados ao cache do falante quando ele é comprimido. - strong_boost_rate (
float, opcional, padrão 0,75) — Fração do orçamento de cache por falante cujos melhores quadros recebem um forte aumento de pontuação, garantindo que cada falante mantenha pelo menos esse número de quadros no cache. - weak_boost_rate (
float, opcional, padrão 1.5) — Fração do orçamento de cache por falante cujos melhores quadros recebem um reforço de pontuação fraca, o que impede que um único falante domine o cache. - min_positive_scores_rate (
float, opcional, padrão 0.5) — Fração do orçamento de cache por falante: um falante com pelo menos esse número de quadros com pontuação positiva tem seus quadros não positivos (fala sobreposta) excluídos do cache. - num_speakers (
int, opcional, padrão 8) — Número de falantes rastreados pelo cache de falantes. Deve corresponder aNemotron3DiarizationHeadConfig.num_speakers. - subsampling_factor (
int, opcional, padrão 8) — Número de quadros de probabilidade de falante por quadro do codificador. Deve corresponder aNemotron3DiarizationAudioConfig.subsampling_factor.
Esta é a classe de configuração para armazenar a configuração de um Nemotron3DiarizationModel. Ela é usada para instanciar um modelo de Diarização Nemotron3 de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do nvidia/Nemotron-3-Diarization
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Nemotron3DiarizationAudioModel
classe transformers.Nemotron3DiarizationAudioModel
< source >( config: Nemotron3DiarizationAudioConfig )
Parâmetros
- config (Nemotron3DiarizationAudioConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
O modelo de diarização Nemotron3 sem processamento adicional, que gera estados ocultos brutos sem nenhum cabeçalho específico no topo.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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.Tensor)
Parâmetros
- input_features (
torch.Tensorde forma(batch_size, sequence_length, feature_dim), opcional) — Os tensores correspondentes às características de áudio de entrada. As características de áudio podem ser obtidas usando NemotronAsrStreamingFeatureExtractor. ConsulteNemotronAsrStreamingFeatureExtractor.__call__()para mais detalhes (Nemotron3DiarizationProcessor usa NemotronAsrStreamingFeatureExtractor para processar os áudios). - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passarinput_ids, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices deinput_idsnos vetores associados do que a matriz de busca de incorporação interna do modelo. - position_ids (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo[0, config.n_positions - 1].
Retorna
BaseModelOutput ou tuple(torch.Tensor)
Um BaseModelOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (Nemotron3DiarizationConfig) e das entradas.
O método forward do Nemotron3DiarizationAudioModel substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
last_hidden_state (
torch.Tensorde forma(batch_size, sequence_length, hidden_size)) — Sequência de estados ocultos na saída da última camada do modelo.hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
Nemotron3DiarizationModel
classe transformers.Nemotron3DiarizationModel
< source >( config: Nemotron3DiarizationConfig )
Parâmetros
- config (Nemotron3DiarizationConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
O modelo Nemotron3Diarization sem o classificador de falantes: codifica um bloco (com seus quadros em cache) e aplica upsample nos quadros do codificador de volta para a taxa de quadros do espectrograma. Ele não mantém estado de streaming; consulte Nemotron3DiarizationForAudioFrameClassification para o forward em blocos.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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.Tensor)
Parâmetros
- input_features (
torch.Tensorde forma(batch_size, sequence_length, feature_dim), opcional) — Os tensores correspondentes às características de áudio de entrada. As características de áudio podem ser obtidas usando NemotronAsrStreamingFeatureExtractor. ConsulteNemotronAsrStreamingFeatureExtractor.__call__()para mais detalhes (Nemotron3DiarizationProcessor usa NemotronAsrStreamingFeatureExtractor para processar os áudios). - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passarinput_ids, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices deinput_idsnos vetores associados do que a matriz de busca de incorporação interna do modelo. - position_ids (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo[0, config.n_positions - 1].
Retorna
BaseModelOutput ou tuple(torch.Tensor)
Um BaseModelOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (Nemotron3DiarizationConfig) e das entradas.
O método forward do Nemotron3DiarizationModel sobrescreve o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
last_hidden_state (
torch.Tensorde forma(batch_size, sequence_length, hidden_size)) — Sequência de estados ocultos na saída da última camada do modelo.hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
Nemotron3DiarizationProcessor
classe transformers.Nemotron3DiarizationProcessor
< source >( feature_extractorsubsampling_factor = 8streaming_modes = Nonestreaming_mode = 'low_latency' )
Parâmetros
- feature_extractor (
NemotronAsrStreamingFeatureExtractor) — O extrator de recursos é uma entrada obrigatória. - subsampling_factor (
int, opcional, padrão 8) — Número de quadros mel por quadro do codificador, espelhandoNemotron3DiarizationAudioConfig.subsampling_factor. - streaming_modes (
dict[str, tuple[int, int]], opcional) — Modos de streaming suportados pelo checkpoint, mapeando o nome para(chunk_length, chunk_right_context)em frames do encoder. O processador é a única fonte de verdade para esse conjunto:set_streaming_mode()valida com base nele. O padrão são os modos do model-card,"low_latency"(9, 4),"very_low_latency"(6, 2) e"ultra_low_latency"(3, 1). - streaming_mode (
str, opcional, padrão"low_latency") — Modo de streaming das sessões, um dos valores destreaming_modes; altere-o comset_streaming_mode(). O uso offline o ignora.
Constrói um Nemotron3DiarizationProcessor que encapsula um extrator de recursos em um único processador.
Nemotron3DiarizationProcessor oferece todas as funcionalidades de NemotronAsrStreamingFeatureExtractor. Consulte ~NemotronAsrStreamingFeatureExtractor para mais informações.
__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
Parâmetros
- audio (
Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]]) — O áudio ou lote de áudios a ser preparado. Cada áudio pode ser um array NumPy ou um tensor PyTorch. No caso de um array NumPy/tensor PyTorch, cada áudio deve ter a forma (C, T), onde C é o número de canais e T é o comprimento de amostragem do áudio. - sampling_rate (
int, opcional) — A taxa de amostragem do áudio de entrada em Hz. Validada em relação à taxa de amostragem esperada pelo extrator de recursos (16000 Hz) quando fornecida. - is_streaming (
bool, opcional, padrãoFalse) — Indica se o áudio é um fragmento de uma sessão de streaming, sendois_first_audio_chunkeis_last_audio_chunkindicadores do primeiro e do último fragmento, respectivamente. Os tamanhos dos fragmentos são os destreaming_mode, alterados porset_streaming_mode(). Todo fragmento, exceto o último, deve conter exatamentenum_samples_first_audio_chunkamostras de áudio para o primeiro enum_samples_per_audio_chunkpara os subsequentes. - is_first_audio_chunk (
bool, opcional, padrãoTrue) — Indica se este é o primeiro bloco de uma sessão de streaming. O extrator de recursos centraliza as janelas de análise (center=True) para o primeiro bloco e para uso offline, e não centraliza (center=False) para os blocos subsequentes, de modo que o espectrograma por bloco reproduza, quadro a quadro, uma única passagem de toda a fala. Deve serTruequandois_streaming=False. - is_last_audio_chunk (
bool, opcional, padrãoFalse) — Indica se este chunk encerra a sessão de streaming. Um chunk de uma sessão termina comchunk_right_contextframes do codificador de look-ahead que o modelo pontua apenas na próxima etapa, e com os quais o próximo chunk da sessão começa. O último chunk não possui próxima etapa, portanto todos os seus frames são pontuados, independentemente da quantidade, e o seu final é preenchido com zeros (zero-padded) da mesma forma que uma passagem de fala completa preenche o final do áudio, de modo que ele produza os últimos frames da fala. Deve serFalsequandois_streaming=False. - return_tensors (
strou TensorType, opcional) — Se definido, retornará tensors de um framework específico. Os valores aceitos são:'pt': Retorna objetostorch.Tensordo PyTorch.'np': Retorna objetosnp.ndarraydo NumPy.
- **kwargs (ProcessingKwargs, opcional) — Opções de processamento adicionais para cada modalidade (texto, imagens, vídeos, áudio). Os parâmetros específicos do modelo estão listados acima; consulte a classe TypedDict para a lista completa de argumentos suportados.
Retorna
as saídas do extrator de recursos, input_features e attention_mask. No modo de streaming, os quadros finais cuja janela de análise ultrapassa um bloco que não é o último são descartados, de modo que input_features contém exatamente os quadros do bloco e pode ser passado ao modelo diretamente, e todos os blocos, exceto o último, também carregam num_lookahead_frames, o número de seus quadros finais de antecipação do codificador, o que coloca o modelo em modo de streaming.
Nemotron3DiarizationSpeakerCache
classe transformers.Nemotron3DiarizationSpeakerCache
< source >( config: Nemotron3DiarizationStreamingConfigfifo_length: int | None = Nonespeaker_cache_update_period: int | None = None )
Parâmetros
- config (
Nemotron3DiarizationStreamingConfig) — Política de cache de falantes e tamanhos da FIFO do modo de streaming. - fifo_length (
int, opcional) — Capacidade da fila FIFO dos quadros de codificador mais recentes. O valor padrão éconfig.fifo_length. - speaker_cache_update_period (
int, opcional) — Número de quadros do codificador movidos da fila FIFO para o cache do falante quando a fila transborda. O valor padrão éconfig.speaker_cache_update_period.
Estado de streaming de Nemotron3DiarizationForAudioFrameClassification: o Arrival-Order Speaker Cache e a fila FIFO dos quadros de codificador mais recentes, aos quais cada chunk presta atenção.
atualizar
< source >( chunk_input_embeds: Tensorchunk_logits: Tensorsilence_embeds: Tensornum_chunk_frames: intmask: typing.Optional[torch.Tensor] = Nonenum_lookback_frames: int = 0 )
Parâmetros
- chunk_input_embeds (
torch.Tensorde forma(batch_size, num_input_frames, hidden_size)) — Entrada do codificador da etapa: os frames em cache retornados porget_embeds, os frames de retrospectiva, o chunk e sua antelucidação. - chunk_logits (
torch.Tensorde forma(batch_size, num_input_frames * subsampling_factor, num_speakers)) — Logits dos falantes da etapa, usados para pontuar os quadros quando o cache de falantes é comprimido. - silence_embeds (
torch.Tensorde forma(hidden_size,)) — Incorporação de silêncio aprendida que preenche os slots de silêncio reservados de um cache comprimido. - num_chunk_frames (
int) — Número de quadros de chunk que seguem os quadros em cache e de look-back emchunk_input_embeds. Apenas esses entram na fila FIFO: os quadros de look-ahead que vêm depois deles são fornecidos novamente na próxima etapa. - mask (
torch.Tensorde forma(batch_size, num_input_frames), opcional) — Quadros válidos dechunk_input_embeds, cujos quadros de preenchimento recebem probabilidades de falante iguais a zero. - num_lookback_frames (
int, opcional, padrão 0) — Número de frames de lookback entre os frames em cache e o chunk emchunk_input_embeds: frames do chunk anterior enviados novamente, já empurrados junto com ele.
Envia um bloco processado para a fila FIFO, movendo seus quadros mais antigos para o cache do alto-falante quando ocorre estouro.
Nemotron3DiarizationOutput
classe 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 )
Parâmetros
- logits (
torch.Tensorde forma(batch_size, num_frames, config.head_config.num_speakers)) — Logits de atividade dos falantes por quadro, na taxa de quadros do espectrograma.logits.sigmoid()fornece a probabilidade de cada falante estar ativo em cada quadro; os falantes são ordenados pela sua primeira aparição no áudio. - hidden_states (
tuple[torch.Tensor, ...], opcional, retornado quandooutput_hidden_states=True) — Estados ocultos do codificador de cada chunk, na ordem dos chunks: o codificador é executado uma vez por chunk, portanto a tupla contémconfig.audio_config.num_hidden_layers + 1tensores por chunk. O comprimento da sequência é o do chunk, incluindo os frames de cache e de antecipação. - attentions (
tuple[torch.Tensor, ...], opcional, retornado quandooutput_attentions=True) — Pesos de atenção do codificador de cada chunk, na ordem dos chunks,config.audio_config.num_hidden_layerstensores por chunk. - speaker_cache (
Nemotron3DiarizationSpeakerCache, opcional, retornado no modo de streaming) — Estado de streaming atualizado, para ser passado ao forward do próximo trecho de áudio dos mesmos streams.
Nemotron3DiarizationForAudioFrameClassification
classe transformers.Nemotron3DiarizationForAudioFrameClassification
< source >( config: Nemotron3DiarizationConfig )
Parâmetros
- config (Nemotron3DiarizationConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
Modelo de diarização de falantes Sortformer em streaming: prevê, para cada quadro do espectrograma, a atividade de até config.head_config.num_speakers falantes ordenados pela ordem de chegada. O áudio é processado em blocos, em que cada bloco atende a alguns quadros de antecipação e ao Arrival-Order Speaker Cache e à fila FIFO mantidos em um Nemotron3DiarizationSpeakerCache. Uma gravação inteira é dividida em blocos pelo próprio forward (modo offline); um fluxo é alimentado com um bloco por forward (modo streaming).
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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.Tensor)
Parâmetros
- input_features (
torch.Tensorde forma(batch_size, sequence_length, feature_dim)) — Os tensors correspondentes às características de áudio de entrada. As características de áudio podem ser obtidas usando NemotronAsrStreamingFeatureExtractor. ConsulteNemotronAsrStreamingFeatureExtractor.__call__()para obter detalhes (Nemotron3DiarizationProcessor usa NemotronAsrStreamingFeatureExtractor para processar os áudios). - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- speaker_cache (
Nemotron3DiarizationSpeakerCache, opcional) — Estado de streaming retornado pelo forward do chunk anterior dos mesmos fluxos de áudio. - num_lookahead_frames (
int, opcional) — Modo de streaming: número de frames do codificador no final da entrada que são apenas de antecipação (look-ahead). Eles são considerados na atenção, mas seus logits não são retornados e eles não entram na fila FIFO, pois abrem o próximo bloco (chunk). Nemotron3DiarizationProcessor define isso para todos os blocos, exceto o último, de uma sessão.Esses argumentos e
num_lookback_framesselecionam o modo. Modo de streaming, um chunk por forward:num_lookahead_framesounum_lookback_framesfornecidos (o primeiro chunk cria ospeaker_cache, os chunks subsequentes o recebem), ouspeaker_cachefornecido sozinho (o último chunk da sessão, sem look-ahead). A entrada, menos seus frames de look-back e look-ahead, é um chunk, independentemente do seu comprimento, enviado como um todo para a fila FIFO dimensionada porconfig.streaming_config. Modo offline, nenhum dos dois fornecido: a entrada é uma gravação inteira, dividida pelo forward em chunks deconfig.chunk_lengthframes do encoder que utilizam atéconfig.chunk_left_contextframes de look-back dos anteriores e atéconfig.chunk_right_contextframes de look-ahead dos seguintes, com uma fila FIFO dimensionada porconfig.fifo_length; nenhum cache é retornado. - num_lookback_frames (
int, opcional) — Modo de streaming: número de quadros iniciais do codificador da entrada que servem apenas como look-back, ou seja, o final do chunk anterior é alimentado novamente antes deste, além dos quadros despeaker_cache. Eles são considerados na atenção, mas seus logits não são retornados e eles não voltam a entrar na fila FIFO. O valor padrão é 0.
Retorna
Nemotron3DiarizationOutput ou tuple(torch.Tensor)
Um Nemotron3DiarizationOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (Nemotron3DiarizationConfig) e das entradas.
O método forward da Nemotron3DiarizationForAudioFrameClassification substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
- logits (
torch.Tensorde forma(batch_size, num_frames, config.head_config.num_speakers)) — Logits de atividade dos falantes por quadro, na taxa de quadros do espectrograma.logits.sigmoid()fornece a probabilidade de cada falante estar ativo em cada quadro; os falantes são ordenados pela sua primeira aparição no áudio. - hidden_states (
tuple[torch.Tensor, ...], opcional, retornado quandooutput_hidden_states=True) — Estados ocultos do codificador de cada chunk, na ordem dos chunks: o codificador é executado uma vez por chunk, portanto a tupla contémconfig.audio_config.num_hidden_layers + 1tensores por chunk. O comprimento da sequência é o do chunk, incluindo os frames de cache e de antecipação. - attentions (
tuple[torch.Tensor, ...], opcional, retornado quandooutput_attentions=True) — Pesos de atenção do codificador de cada chunk, na ordem dos chunks,config.audio_config.num_hidden_layerstensores por chunk. - speaker_cache (
Nemotron3DiarizationSpeakerCache, opcional, retornado no modo de streaming) — Estado de streaming atualizado, para ser passado ao forward do próximo trecho de áudio dos mesmos streams.
Exemplo:
>>> 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