🇺🇿 Uzbek TTS — Fine-tuned VITS Model
O'zbek tili uchun fine-tuned text-to-speech modeli. Facebook MMS-TTS (Cyrillic) modelini Beehzod/UzTTS_data dataseti bilan to'liq GAN training orqali fine-tune qilingan.
Model haqida
| Parametr | Qiymat |
|---|---|
| Base model | facebook/mms-tts-uzb-script_cyrillic |
| Training dataset | Beehzod/UzTTS_data (1461 namuna, bitta speaker) |
| Training steps | 8000 |
| Batch size | 64 |
| Learning rate | 2e-5 |
| Training framework | Transformers VITS Trainer (to'liq GAN) |
| Mel loss (boshlang'ich) | 0.567 |
| Mel loss (yakuniy) | 0.414 |
Training arxitekturasi
To'liq VITS GAN training:
- Generator — matndan audio sintez
- Discriminator — MultiPeriod + MultiScale
- Feature matching loss
- KL divergence loss
- Mel-spectrogram loss
Foydalanish
Model Kirilcha matn bilan ishlaydi. Lotin matnni Kirilga o'girish uchun quyidagi funksiyadan foydalaning:
from transformers import VitsModel, AutoTokenizer
import torch
import soundfile as sf
# Modelni yuklash
tokenizer = AutoTokenizer.from_pretrained("MuzaffarSharofitdinov/mms-tts-uzbek-girl-voice_cyrillic")
model = VitsModel.from_pretrained("MuzaffarSharofitdinov/mms-tts-uzbek-girl-voice_cyrillic")
model.eval()
# Lotin → Kiril konvertatsiya
LAT2CYR = {
"sh": "ш", "ch": "ч", "ng": "нг", "g'": "ғ", "o'": "ў",
"yo": "ё", "yu": "ю", "ya": "я", "ts": "ц",
"a": "а", "b": "б", "v": "в", "g": "г", "d": "д",
"e": "е", "z": "з", "i": "и", "y": "й", "k": "к",
"l": "л", "m": "м", "n": "н", "o": "о", "p": "п",
"r": "р", "s": "с", "t": "т", "u": "у", "f": "ф",
"x": "х", "q": "қ", "h": "ҳ", "j": "ж", " ": " ",
"'": "", '"': "",
}
def latin_to_cyrillic(text):
text = text.lower()
result = ""
i = 0
while i < len(text):
if i + 1 < len(text) and text[i:i+2] in LAT2CYR:
result += LAT2CYR[text[i:i+2]]
i += 2
elif text[i] in LAT2CYR:
result += LAT2CYR[text[i]]
i += 1
else:
i += 1
return result
from IPython.display import Audio, display
def speak(text_latin, output_file="output.wav"):
text_cyrillic = latin_to_cyrillic(text_latin)
inputs = tokenizer(text_cyrillic, return_tensors="pt")
with torch.no_grad():
audio = model(**inputs).waveform.squeeze().numpy()
sf.write(output_file, audio, model.config.sampling_rate)
display(Audio(output_file))
return audio
# Lotin matn bilan foydalanish
speak("salom, o'zbekiston!")
speak("bugun havo juda yaxshi, tashqarida quyosh chiqdi")
speak("men sun'iy intellekt yordamida yaratilgan ovozman")
Izohlar
- Model bitta ayol ovozi bilan o'qitilgan
- Kiril alifbosi asosida ishlaydi, lotin matnni avtomatik konvertatsiya qilish mumkin
- Audio chiqish: 16000 Hz
o',g'kabi o'zbek harflari to'g'ri talaffuz qilinadi
Litsenziya
CC BY 4.0 — erkin foydalanish mumkin, manba ko'rsatilishi kerak.
Muallif
Muzaffar — O'zbek TTS loyihasi