Transformers documentation
Gradium Phonon TTS
이 모델은 2026-10-20에 Hugging Face Transformers에 기여되었습니다.
Gradium Phonon TTS
개요
Gradium Phonon TTS는 Gradium의 온디바이스 텍스트-음성 변환 모델 계열로, Pocket TTS의 레시피로 학습되었습니다. 인과적 트랜스포머가 음성 프롬프트와 텍스트를 읽은 후, 12.5 Hz에서 1단계 플로우 헤드를 통해 각 단계마다 32차원의 연속 오디오 잠김을 출력하고, 발화가 끝나는 시점을 결정하는 발화 종료 헤드가 있습니다. 잠김은 프로세서가 보유하는 Pocket TTS 오디오 토크나이저, 즉 Pocket TTS의 PocketTTSProcessor에 의해 24 kHz 오디오로 디코딩됩니다.
Pocket TTS와 음성 조건화 방식에서 차이가 있습니다. 음성 프롬프트는 별도의 스피커 코덱의 512차원 잠재 변수(latents)로 구성되며, 학습된 스피커 벡터가 모든 오디오 잠재 변수 위치에 추가됩니다. 스피커 코덱은 공개되지 않았으므로, 음성은 사전 계산된 잠재 변수로 제공됩니다(각 체크포인트의 default-voice.safetensors 및 gradium/phonon-voices 카탈로그). 또한 오디오 토크나이저는 디코더 전용이므로, 녹음에서 음성을 복제할 수 없습니다.
| 체크포인트 | 매개변수 | 언어 | 라이선스 |
|---|---|---|---|
| gradium/phonon-31m-en | 31M | 영어 | Apache 2.0 |
| gradium/phonon-40m-en | 40M | 영어 | CC BY-NC 4.0 |
| gradium/phonon-40m-fr | 40M | 프랑스어 | CC BY-NC 4.0 |
| gradium/phonon-40m-de | 40M | 독일어 | CC BY-NC 4.0 |
| gradium/phonon-40m-es | 40M | 스페인어 | CC BY-NC 4.0 |
| gradium/phonon-40m-pt | 40M | Portuguese | CC BY-NC 4.0 |
| gradium/phonon-40m-multilingual | 40M | 영어, 프랑스어, 독일어, 스페인어, 포르투갈어 | CC BY-NC 4.0 |
모두 동일한 방식으로 로드됩니다. 체크포인트를 전환하려면 리포지토리 ID만 변경하면 됩니다.
이 모델은 Eustache Le Bihan이 기여했습니다. 원본 코드는 gradium-ai/xn-ptts입니다.
사용 팁
- apply_chat_template()로 입력을 준비합니다: 텍스트마다
user메시지 하나, 음성 위치에는 빈{"type": "audio"}항목,processor_kwargs={"audio_prompt_latents": [...]}에 음성 latents, 그리고add_generation_prompt=True를 사용합니다. - 토크나이저는 숫자, 금액, 기호, 주소를 풀어쓰지 않으며, 텍스트 정규화를 참조하세요.
generate는audio_latents와audio_latents_mask를 반환합니다. PocketTTSProcessor.decode()로 디코딩하세요.- Gradium의 런타임과 동일한 방식으로 생성 샘플을 생성합니다:
temperature0.3(플로우의 시작 노이즈 분산)를 사용하고, end-of-speech 로짓이eos_threshold를 초과한 직후에 생성을 중단합니다.do_sample=False는 플로우를 노이즈 0에서 시작합니다. - 모델은 가중치가 저장된 dtype인 bf16로 로드됩니다. CPU에서는 Gradium의 런타임과 일치하도록
dtype=torch.float32를 전달하세요. - 긴 텍스트는 PocketTTSProcessor.split_text()로 분할하며, 청크마다 대화 하나씩 포함합니다.
사용
음성
Voice는 (num_frames, 512) 크기의 latent 텐서입니다. 각 checkpoint에는 하나(default-voice.safetensors)가 포함되며, gradium/phonon-voices에는 모든 언어로 된 약 100개 이상의 voice가 있습니다. 각 voice는 고유한 voice ID를 가지며, voices.jsonl에는 이름, 언어, 설명이 나열되어 있습니다. 어떤 voice도 어떤 checkpoint와도 함께 사용할 수 있습니다.
import torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration
model_id = "gradium/phonon-31m-en"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = GradiumPhononTTSForConditionalGeneration.from_pretrained(model_id, device_map="auto")
def load_voice(voice_id):
"""A voice of gradium/phonon-voices, as latents of shape (num_frames, 512)."""
path = hf_hub_download("gradium/phonon-voices", f"voices/{voice_id}.safetensors")
return load_file(path)["speaker_wavs"][0].T.float()
# Easton (en-us); the checkpoint's own voice: hf_hub_download(model_id, "default-voice.safetensors")
voice = load_voice("LMDIYE0Oa377Qh6Z")
# an empty `audio` item marks the voice
conversation = [
{"role": "user", "content": [{"type": "audio"}, {"type": "text", "text": "Hello from Phonon."}]}
]
inputs = processor.apply_chat_template(
conversation,
tokenize=True,
return_dict=True,
add_generation_prompt=True,
processor_kwargs={"audio_prompt_latents": [voice]},
).to(model.device)
outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "phonon.wav")배치와 긴 텍스트
각각 고유한 목소리를 가진 여러 텍스트를 배치하고, 긴 텍스트는 청크로 분할합니다:
text = (
"Phonon is a small text-to-speech model that runs on your device. "
"Long texts are split into sentences, and each chunk is one conversation of the batch."
)
chunks = processor.split_text(text)
texts = chunks + ["And this one is said by another voice."]
voices = [load_voice("LMDIYE0Oa377Qh6Z")] * len(chunks) + [load_voice("NbpkqMVS3CJeq2j8")]
conversations = [
[{"role": "user", "content": [{"type": "audio"}, {"type": "text", "text": text}]}] for text in texts
]
inputs = processor.apply_chat_template(
conversations,
tokenize=True,
return_dict=True,
add_generation_prompt=True,
processor_kwargs={"audio_prompt_latents": voices},
).to(model.device)
outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio([torch.cat(audio[: len(chunks)]), audio[-1]], ["long.wav", "other.wav"])텍스트 정규화
토크나이저는 Gradium의 런타임과 마찬가지로 언어에 의존하지 않는 요소를 정규화합니다:
| 텍스트 | 토크나이저 |
|---|---|
“Hello” — it’s here… | "Hello" it's here. |
hello (world); see you 🚀 | Hello, world, see you. |
숫자, 금액, 기호, 주소와 같이 언어에 따라 달라지는 내용은 명시하지 않습니다:
| 텍스트 | 토크나이저 | Gradium의 런타임 |
|---|---|---|
It costs $1,234.56. | It costs $1,234.56. | It costs 1 thousand 234 dollars and 56 cents. |
Write to jean@gradium.ai | Write to jean@gradium.ai. | Write to jean at gradium dot A-I. |
It is 21°C | It is 21°C. | It is 21 degrees Celsius. |
이 경우, Gradium 런타임의 텍스트 정규화 기능인 ptts를 사용하거나 직접 작성하세요.
GradiumPhononTTSConfig
클래스 transformers.GradiumPhononTTSConfig
< 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 = Noneflow_head_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonevocab_size: int = 4001hidden_size: int = 768num_hidden_layers: int = 6num_attention_heads: int = 12num_key_value_heads: int | None = Nonehead_dim: int | None = Noneintermediate_size: int = 3072hidden_act: str = 'gelu'layer_norm_eps: float = 1e-05attention_bias: bool = Falseattention_dropout: float = 0.0max_position_embeddings: int = 8192rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonelatent_dim: int = 32pad_token_id: int = 3bos_token_id: int | None = Noneeos_token_id: int | None = Noneaudio_prompt_token_id: int = 5audio_latent_token_id: int = 6audio_bos_token_id: int = 4frame_rate: float = 12.5initializer_range: float = 0.02use_cache: bool = Trueeos_loss_weight: float = 0.1flow_loss_num_samples: int = 4lsd_distill_probability: float = 0.25lsd_diagonal_weight: float = 0.75lsd_time_logit_mean: float = 0.4lsd_time_logit_std: float = 1.0latent_stats_ema_steps: int = 1000latent_stats_ema_decay: float = 0.999audio_prompt_dim: int = 512num_speakers: int = 1num_speakers_vocab_size: int = 32num_speakers_embedding_dim: int = 16duration_delta: float = 0.0duration_delta_embedding_dim: int = 128duration_delta_scale: float = 1000.0duration_delta_max_period: float = 10000.0 )
매개변수
- flow_head_config (
Union[GradiumPhononTTSFlowHeadConfig, dict], 선택) — 백본의 hidden state에서 각 latent를 샘플링하는 flow head의 config입니다. - vocab_size (
int, 선택 사항, 기본값4001) — 모델의 어휘 크기입니다.input_ids로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다. - hidden_size (
int, 선택 사항, 기본값768) — 숨겨진 표현의 차원입니다. - num_hidden_layers (
int, 선택 사항, 기본값6) — Transformer decoder의 숨겨진 레이어 수입니다. - num_attention_heads (
int, 선택 사항, 기본값12) — Transformer decoder의 각 attention layer에 사용할 attention head의 수입니다. - 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 헤드는 해당 그룹 내 모든 원래 헤드를 meanpooling하여 구성해야 합니다. 자세한 내용은 이 논문을 확인하세요. 지정되지 않으면num_attention_heads가 기본값으로 사용됩니다. - head_dim (
int, 선택 사항) — Attention head의 차원입니다. None인 경우 hidden_size // num_attention_heads 값이 기본값으로 사용됩니다. - intermediate_size (
int, 선택 사항, 기본값3072) — MLP 표현의 차원입니다. - hidden_act (
str, 선택 사항, 기본값gelu) — 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어,"gelu","relu","silu"등이 있습니다. - layer_norm_eps (
float, 선택 사항, 기본값 1e-05) — backbone의 layer normalization에 사용되는 epsilon 값입니다. - attention_bias (
bool, 선택 사항, 기본값False) — 자기 주의(self-attention) 시 query, key, value 및 출력 투영 계층에 bias를 사용할지 여부입니다. - attention_dropout (
float, 선택 사항, 기본값0.0) — Attention 확률에 적용할 dropout 비율입니다. - max_position_embeddings (
int, 선택 사항, 기본값8192) — 이 모델이 사용될 수 있는 최대 시퀀스 길이입니다. - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], 선택) — RoPE 임베딩의 구성 매개변수를 포함하는 사전입니다. 사전에는rope_theta값이 포함되어야 하며, 더 긴max_position_embeddings로 RoPE를 사용하려는 경우 스케일링에 사용되는 매개변수를 선택적으로 포함할 수 있습니다. - latent_dim (
int, 선택 사항, 기본값 32) — 백본이 입력으로 받는 오디오 레이턴트(audio_latents)의 차원입니다. flow head와 오디오 토크나이저의latent_dim과 동일합니다. - pad_token_id (
int, 선택 사항, 기본값3) — 어휘에서 패딩에 사용되는 토큰 ID입니다. - bos_token_id (
int, 선택 사항) — 어휘에서 스트림 시작에 사용되는 토큰 ID입니다. - eos_token_id (
int, 선택 사항) — 어휘에서 스트림 종료에 사용되는 토큰 id입니다. - audio_prompt_token_id (
int, 선택 사항, 기본값 5) —input_ids의 음성 프롬프트 프레임에 사용되는 플레이스홀더 토큰 id(<|audio_prompt|>). - audio_latent_token_id (
int, 선택 사항, 기본값 6) —input_ids에서 오디오 잠재 위치를 나타내는 플레이스홀더 토큰 id(<|audio_latent|>). - audio_bos_token_id (
int, 선택 사항, 기본값 4) — 프롬프트를 닫는 첫 번째 오디오 위치의 토큰 id입니다. 학습된 BOS 잠재를 포함하며, 여기서 첫 번째 프레임이 생성됩니다(<|audio_bos|>). - frame_rate (
float, 선택 사항, 기본값 12.5) — 초당 오디오 오디오 latent 수:generate는 이 값에서 기본 프레임 예산을 유도합니다. - initializer_range (
float, 선택 사항, 기본값0.02) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다. - use_cache (
bool, 선택 사항, 기본값True) — 모델이 마지막 key/values attention을 반환할지 여부입니다(모든 모델에서 사용되지 않음).config.is_decoder=True인 경우 또는 모델이 decoder-only 생성 모델인 경우에만 관련이 있습니다. - eos_loss_weight (
float, 선택 사항, 기본값 0.1) — 학습 손실에서 end-of-speech 손실의 가중치입니다. - flow_loss_num_samples (
int, 선택 사항, 기본값 4) — flow loss에서 대상 프레임당 노이즈 추출 횟수입니다. - lsd_distill_probability (
float, 선택 사항, 기본값 0.25) — LSD 손실의 자기 증류(self-distillation) 항을 계산할 확률(기대 손실을 유지하도록 가중치가 재조정됨)입니다. 1이면 모든 학습 단계에서 계산합니다. - lsd_diagonal_weight (
float, 선택 사항, 기본값 0.75) — LSD 손실의 대각(즉각적 흐름) 항의 가중치입니다. 자기 증류(self-distillation) 항은 나머지 부분을 가중합니다. - lsd_time_logit_mean (
float, 선택 사항, 기본값 0.4) — LSD 손실이 추출하는 플로우 시간의 logit-normal 분포 평균입니다. - lsd_time_logit_std (
float, 선택 사항, 기본값 1.0) — LSD 손실이 추출하는 플로우 시간의 logit-normal 분포의 표준 편차입니다. - latent_stats_ema_steps (
int, 선택 사항, 기본값 1000) —latent_mean과latent_std가 대상 latent의 지수 이동 평균을 따르는 초기 학습 단계 수입니다. 0으로 설정하면 고정됩니다. - latent_stats_ema_decay (
float, 선택 사항, 기본값 0.999) — 이동 평균의 감쇠율입니다. - audio_prompt_dim (
int, 선택 사항, 기본값 512) — 음성 프롬프트 잠재 변수(audio_prompt_latents)의 차원입니다. 이는 Gradium의 스피커 코덱(Mimi 인코더이며 오디오 토크나이저의 것이 아님)의 양자화되지 않은 잠재 변수로, 백본이 이를hidden_size로 투영합니다. - num_speakers (
int, 선택 사항, 기본값 1) —num_speakers조건의 값: 모든 오디오 잠재 위치(latent position)에 추가되는 해당 조회 테이블(lookup table)의 행입니다. - num_speakers_vocab_size (
int, 선택 사항, 기본값 32) —num_speakers조회 테이블의 행 수. - num_speakers_embedding_dim (
int, 선택 사항, 기본값 16) —num_speakers조회 테이블의 폭으로,hidden_size로 투영됩니다. - duration_delta (
float, 선택 사항, 기본값 0.0) —duration_delta조건의 값으로, 사인 함수로 임베딩된 후 모든 오디오 잠재 위치(latent position)에 추가됩니다. - duration_delta_embedding_dim (
int, 선택 사항, 기본값 128) —duration_delta의 사인oidal 임베딩 크기이며,hidden_size로 투영됩니다. - duration_delta_scale (
float, 선택 사항, 기본값 1000.0) —duration_delta의 사인 임베딩을 적용하기 전에 곱해지는 계수입니다. - duration_delta_max_period (
float, 선택 사항, 기본값 10000.0) —duration_delta의 사인 함수 임베딩 최대 주기입니다.
이것은 gradium/phonon-31m-en과 유사한 설정을 생성하는 데 사용되는 GradiumPhononTTSModel의 설정을 저장하는 설정 클래스입니다. 지정된 인자에 따라 Gradium Phonon Tts 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
GradiumPhononTTSFlowHeadConfig
클래스 transformers.GradiumPhononTTSFlowHeadConfig
< 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 = 512num_hidden_layers: int = 6latent_dim: int = 32condition_dim: int = 768frequency_embedding_size: int = 256hidden_act: str = 'silu'layer_norm_eps: float = 1e-06rms_norm_eps: float = 1e-05max_period: float = 10000.0flow_type: typing.Literal['lsd', 'drifting'] = 'lsd'loss_weighting_hidden_size: int = 32loss_weighting_num_layers: int = 3 )
매개변수
- hidden_size (
int, 선택 사항, 기본값512) — 숨겨진 표현의 차원입니다. - num_hidden_layers (
int, 선택 사항, 기본값6) — Transformer decoder의 숨겨진 레이어 수입니다. - latent_dim (
int, 선택 사항, 기본값 32) — 헤드가 예측하는 연속 오디오 잠재 벡터의 차원(오디오 토크나이저의 잠재 차원). - condition_dim (
int, 선택 사항, 기본값 768) — 헤드가 조건부로 사용하는 백본 히든 상태의 차원(백본의hidden_size)입니다. - frequency_embedding_size (
int, 선택 사항, 기본값 256) — 플로우 시간의 사인oidal 임베딩 크기입니다. - hidden_act (
str, 선택 사항, 기본값silu) — 디코더의 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어,"gelu","relu","silu"등이 있습니다. - layer_norm_eps (
float, 선택 사항, 기본값 1e-06) — 잔차 블록 및 최종 레이어 내부의 레이어 정규화에서 사용되는 Epsilon 값입니다. - rms_norm_eps (
float, 선택 사항, 기본값 1e-05) — 시간 임베딩을 닫는 정규화의 Epsilon 값입니다. - max_period (
float, 선택 사항, 기본값 10000.0) — 체크포인트가freqs로 저장하는 사인 시간 임베딩의 최대 주기입니다. - flow_type (
str, 선택 사항, 기본값"lsd") — 해드가 학습된 목적이며, 이를 통해 조건부 설정 및 샘플링 방식이 결정됩니다."lsd"(Lagrangian self-distillation): 플로우 단계의 시작 및 종료 시간에 조건부 설정되며, 가우시안 노이즈에서 Euler 스텝으로 샘플링됩니다."drifting": 시간 조건부 설정이 없으며, 해드가 한 번의 호출로 노이즈를 잠재 변수로 매핑합니다. - loss_weighting_hidden_size (
int, 선택 사항, 기본값 32) — LSD 손실 항의 불확실성 가중치를 그 흐름 시간(flow times)에서 학습하는 MLP의 폭(훈련 전용). - loss_weighting_num_layers (
int, 선택 사항, 기본값 3) — 해당 MLP의 숨겨진 레이어 수입니다.
이것은 gradium/phonon-31m-en과 유사한 설정을 생성하는 데 사용되는 GradiumPhononTTSModel의 설정을 저장하는 설정 클래스입니다. 지정된 인자에 따라 Gradium Phonon Tts 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
GradiumPhononTTSModel
class transformers.GradiumPhononTTSModel
< source >( config: GradiumPhononTTSConfig )
매개변수
- config (GradiumPhononTTSConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
Gradium Phonon TTS 백본: 음성 프롬프트(스피커-코덱 잠재 변수), 텍스트 토큰, 오디오 잠재 변수로 구성된 단일 스트림에 대한 인과적 transformer로, 정규화된 은닉 상태를 반환합니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneaudio_prompt_latents: typing.Optional[torch.Tensor] = Noneaudio_prompt_latents_mask: typing.Optional[torch.Tensor] = Noneaudio_latents: typing.Optional[torch.Tensor] = Noneaudio_latents_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor형상이(batch_size, sequence_length), 선택 사항) — 어휘(input vocabulary)에서 입력 시퀀스 토큰의 인덱스입니다. 기본적으로 패딩은 무시됩니다.AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- audio_prompt_latents (
torch.Tensor, shape(batch_size, num_prompt_frames, latent_dim), 선택 사항) — 오디오 토크나이저의 음성 프롬프트 잠재 변수(프로세서에 의해 인코딩되거나 체크포인트의voices/에서 가져옴)입니다. 배치 내 가장 긴 음성까지 오른쪽 패딩을 적용하고,audio_prompt_token_id위치에 분산 배치됩니다. - audio_prompt_latents_mask (
torch.Tensor, shape(batch_size, num_prompt_frames), 선택 사항) —audio_prompt_latents에서 음성 프레임(1)과 패딩(0)을 구분하는 마스크입니다. - audio_latents (
torch.Tensor, shape(batch_size, num_latents, latent_dim), 선택 사항) —audio_latent_token_id위치에 분산된 정규화된 오디오 latents입니다. 그 앞의audio_bos_token_id위치는 프롬프트를 닫고 첫 번째 프레임이 생성되는 곳으로, 항상 학습된 BOS latent가 할당됩니다. - audio_latents_mask (
torch.Tensor, shape(batch_size, num_latents), 선택 사항) — 행마다 latent 위치의 수가 다른 경우(학습 시),audio_latents에서 각 행의 latents(1)와 padding(0)을 구분하는 마스크입니다. - attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- position_ids (
torch.LongTensor의 shape(batch_size, sequence_length), , 선택 사항) — 위치 임베딩에서 각 입력 시퀀스 토큰의 위치 인덱스. 범위[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는past_key_values디코딩의 이전 단계에서 모델이 반환한use_cache=True또는config.use_cache=True.입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요.
past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.
past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은input_ids만 입력해야 하며, 이때의 shape은(batch_size, unprocessed_length)입니다. shape이(batch_size, sequence_length)인 전체input_ids를 입력하지 않습니다. - inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다. - use_cache (
bool, 선택 사항) —True로 설정하면past_key_values키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다(past_key_values참조).
반환값
BaseModelOutputWithPast 또는 tuple(torch.Tensor)
torch.Tensor의 튜플 또는 BaseModelOutputWithPast (return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(GradiumPhononTTSConfig)과 입력에 따라 다양한 요소를 포함합니다.
GradiumPhononTTSModel의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size)) — 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.past_key_values가 사용되면,(batch_size, 1, hidden_size)형태의 시퀀스의 마지막 hidden-state만 출력됩니다.past_key_values (
Cache, 선택 사항,use_cache=True가 전달되었거나config.use_cache=True인 경우 반환됨) — Cache 인스턴스입니다. 자세한 내용은 kv cache 가이드를 참고하세요.순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록의 key와 value, 그리고
config.is_encoder_decoder=True인 경우 크로스 어텐션 블록의 key와 value)를 포함합니다(입력past_key_values참조).hidden_states (
tuple(torch.Tensor), 선택 사항,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), 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
GradiumPhononTTSForConditionalGeneration
class transformers.GradiumPhononTTSForConditionalGeneration
< source >( config: GradiumPhononTTSConfig )
매개변수
- config (GradiumPhononTTSConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
Gradium Phonon TTS 텍스트-음성 변환 모델: 백본, 각 단계마다 오디오 잠재 변수 하나를 샘플링하는 플로우 헤드, 그리고 발화 종료 헤드입니다. 오디오 토크나이저 잠재 변수를 생성하며, 프로세서가 이를 24 kHz 오디오로 디코딩합니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneaudio_prompt_latents: typing.Optional[torch.Tensor] = Noneaudio_prompt_latents_mask: typing.Optional[torch.Tensor] = Noneaudio_latents: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Nonelabels_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → GradiumPhononTTSOutputWithPast or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor형상이(batch_size, sequence_length), 선택 사항) — 어휘(input vocabulary)에서 입력 시퀀스 토큰의 인덱스입니다. 기본적으로 패딩은 무시됩니다.AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- audio_prompt_latents (
torch.Tensor, shape(batch_size, num_prompt_frames, latent_dim), 선택 사항) — 오디오 토크나이저의 음성 프롬프트 라텐트입니다. 오른쪽으로 패딩되어audio_prompt_token_id위치에 분산 배치됩니다. - audio_prompt_latents_mask (
torch.Tensor, shape(batch_size, num_prompt_frames), 선택 사항) —audio_prompt_latents에서 음성 프레임(1)과 패딩(0)을 구분하는 마스크입니다. - audio_latents (
torch.Tensor, shape(batch_size, num_latents, latent_dim), 선택 사항) —audio_latent_token_id위치에 분산된 정규화된 오디오 latents입니다. - labels (
torch.Tensor, shape(batch_size, num_frames, latent_dim), 선택 사항) — 오디오 토크나이저의 대상(latent) 값(학습용)으로, 오른쪽에 패딩이 적용됩니다. 각 행의 프롬프트는audio_bos_token_id위치로 끝나고, 프레임마다 하나의audio_latent_token_id위치가 뒤따릅니다. 모델은 정규화된 대상 값(teacher forcing)을 입력으로 사용하고, BOS와 마지막 프레임을 제외한 모든 프레임의 출력에 flow loss를 적용하여 프레임을 예측하며, 모든 프레임에 end-of-speech loss를 적용합니다. 여기서 마지막 프레임은 말의 끝을 나타냅니다. - labels_mask (
torch.Tensor, shape(batch_size, num_frames), 선택 사항) —labels에서 각 행의 대상 프레임(1)과 패딩(0)을 구분하는 마스크입니다. - attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- position_ids (
torch.LongTensor의 shape(batch_size, sequence_length), , 선택 사항) — 위치 임베딩에서 각 입력 시퀀스 토큰의 위치 인덱스. 범위[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는past_key_values디코딩의 이전 단계에서 모델이 반환한use_cache=True또는config.use_cache=True.입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요.
past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.
past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은input_ids만 입력해야 하며, 이때의 shape은(batch_size, unprocessed_length)입니다. shape이(batch_size, sequence_length)인 전체input_ids를 입력하지 않습니다. - inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다. - use_cache (
bool, 선택 사항) —True로 설정하면past_key_values키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다(past_key_values참조).
반환값
GradiumPhononTTSOutputWithPast 또는 tuple(torch.Tensor)
GradiumPhononTTSOutputWithPast 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(GradiumPhononTTSConfig)과 입력에 따라 다양한 요소를 포함합니다.
GradiumPhononTTSForConditionalGeneration의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
loss (
torch.Tensor, shape(), 선택 사항,labels가 전달될 때 반환됨) — 학습 손실: 대상 latents의 LSD flow loss에config.eos_loss_weight를 곱한 end-of-speech loss를 더한 값입니다.logits (
torch.Tensor, shape(batch_size, sequence_length, 1)) — 각 위치별 음성 종료 logits.past_key_values (
Cache, 선택 사항,use_cache=True가 전달되었거나config.use_cache=True인 경우 반환됨) — Cache 인스턴스입니다. 자세한 내용은 kv cache 가이드를 참고하세요.순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록의 key와 value)를 포함합니다(입력
past_key_values참조).hidden_states (
tuple(torch.Tensor), 선택 사항,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), 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size)) — flow head를 조건화하는 backbone의 정규화된 hidden states입니다.
예:
>>> from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration
>>> model = GradiumPhononTTSForConditionalGeneration.from_pretrained("gradium/phonon-31m-en")
>>> processor = AutoProcessor.from_pretrained("gradium/phonon-31m-en")
>>> inputs = processor(text="Hello, my dog is cute", return_tensors="pt")
>>> # generate speech
>>> speech = model(inputs["input_ids"])generate
< source >( inputs: typing.Optional[torch.Tensor] = None**kwargs )
매개변수
- inputs (
torch.LongTensor, shape(batch_size, sequence_length), 선택 사항) — PocketTTSProcessor로 준비된input_ids입니다.input_ids=로 전달할 수도 있습니다. - kwargs (
dict[str, Any], 선택) —attention_mask, 음성 프롬프트(audio_prompt_latents와audio_prompt_latents_mask, 또는 텍스트만 포함된 프롬프트와 함께 제공되는 음성들의past_key_values캐시), 프로세서에서 가져온frames_after_eos, 생성 매개변수(do_sample,temperature,max_new_tokens, …), 그리고 Pocket TTS 전용num_flow_steps,eos_threshold,min_frames_before_eos입니다. 기본값은 생성 설정에서 가져옵니다.
음성을 생성합니다. 이 메서드는 generate()를 오버라이드하여 max_new_tokens의 기본값을 원래 런타임의 프레임 버짓인, 배치 내 가장 긴 텍스트에 대해 ceil((num_text_tokens / 3 + 2) * frame_rate)로 설정합니다. 그 외 모든 처리는 일반적인 생성 훅을 통해 수행됩니다.