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
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support