YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Gooya 0.1

Gooya 0.1 is a Persian neural TTS model — a LoRA fine-tune of MOSS-TTS-Nano (100M) trained on 48k Persian clips phonemized with the Gooya clean G2P (Reza2kn/negara-g2p-clean).

The point of this release is correct Persian pronunciation from phonemes: the model reads the clean Repr.1 phoneme stream (char-spaced MOSS text) and speaks it naturally, including the greeting-interjection ezafe rule (سلام من → salAm man, not salAme man).

Quickstart

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("Reza2kn/gooya-0.1", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("Reza2kn/gooya-0.1", trust_remote_code=True)
model.to(device="cuda", dtype=torch.bfloat16).eval()

# char-spaced phonemes for "سلام من رضا هستم" (use Gooya G2P to produce this)
phonemes = "s a l A m m a n r e z A h a s t a m"
...

Full inference requires the MOSS-Audio-Tokenizer-Nano codec to decode the 16 codebook streams back to 48 kHz audio. See MOSS-TTS-Nano for the reference inference path; the codec is OpenMOSS-Team/MOSS-Audio-Tokenizer-Nano.

How to phonemize Persian text

Gooya 0.1 is a phoneme→speech model. It does not accept raw Persian graphemes. Convert text with the Gooya clean G2P before synthesis:

python scripts/negara_tts_phonemize.py "سلام من رضا هستم"
# سلام من رضا هستم	salAm man rezA hastam
  • Reza2kn/negara-g2p-clean — the T5 G2P that emits word-spaced Repr.1 directly.
  • fix_salame_man post-processing strips the spurious greeting ezafe (سلام خوبیsalAm xubi) while preserving the legitimate possessive (سلام من راsalAme man rA).
  • The phoneme string is char-spaced (each phoneme separated by a space) to match MOSS's SentencePiece tokenization.

Training

Base model MOSS-TTS-Nano-100M (OpenMOSS-Team/MOSS-TTS-Nano-100M)
Data Reza2kn/gooya-v7-chizzled-multispeaker (raw Persian + audio, ~54k rows)
Phonemes Reza2kn/negara-g2p-clean + fix_salame_man, char-spaced MOSS text
Ref voices same-speaker derangement (each clip paired with another clip from the same speaker)
Method LoRA (r=16, α=32, dropout 0.05) on 48 transformer.h.* linears (1.97% of params)
Epochs 3
Optimizer AdamW (β1 0.9, β2 0.95), cosine LR 1e-4 → 0, 3% warmup
Precision bf16 mixed precision
Hardware 2× NVIDIA RTX PRO 6000 (96 GB), distributed over 2 GPUs
Batch 8 per device, grad accumulation 2 → effective 32
Steps 4,524
Held-out 200 rows (seed 41), used for Gate C eval
Final loss ~5.1

Evaluation (Gate C)

For 6 held-out rows, the model synthesizes the row's phoneme text in two timbres:

  • gate_c/*_manaref.wav — pronunciation + base voice.
  • gate_c/*_demoref.wav — pronunciation + a cross-voice clone (speaker ≠ training speaker).

A Gate C clip passes if pronunciation is correct and voice cloning survives (timbre tracks the reference, not collapsed to a single speaker). The gate_c/ folder in this repo holds the clips.

Contents

config.json                     model config (MossTTSNanoForCausalLM)
configuration_moss_tts_nano.py  custom config
modeling_moss_tts_nano.py       custom model
tokenization_moss_tts_nano.py   custom tokenizer
tokenizer.model                 SentencePiece vocab (16,384)
pytorch_model.bin               merged LoRA weights (285 MB)
finetune_config.json            exact training hyperparameters
gate_c/                         Gate C evaluation clips

License / status

Experimental. Pronunciation quality is good but not production-perfect; the manaref clips are audibly better than the demoref clones. Voice cloning works but is imperfect. Use accordingly.

Downloads last month
16
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support