Telegramda yozing@Odilient

SI VA AVTOMATLASHTIRISH

Knigopoisk: SI yaratgan audiokitoblar

Rus tilidagi kitob do‘koni uchun SI audiokitob konveyeri: ochiq kodli va bulutli TTS dvigatellarini solishtirish, boblarga bo‘lingan va personajlarga alohida ovoz berilgan o‘qish hamda to‘langan buyurtmalar uchun avtomatik render.

Knigopoisk
Mijoz
Kitoblar va nashriyot
Soha
2026-yildan beri davom etmoqda
Muddat
2026
Yil
Boshlang‘ich nuqta

Muammo

Knigopoisk hali yozib olinmagan kitoblarning ham audionashrlarini sotuvga qo‘ygan, ammo diktor ovozi bilan yozish rus tilidagi ulkan va rang-barang katalog uchun masshtablanmaydi. Rus tili nutq sintezi uchun murakkab: urg‘u so‘z ma’nosini o‘zgartiradi, bosma matnda odatda «yo» harfi (ikki nuqtali e) yozilmaydi, ba’zi modellar esa gallyutsinatsiya qiladi yoki ma’nosiz tovushlar chiqaradi. Dvigatel tanlashda sifat, faqat CPU’dagi tezlik va litsenziya shartlarini tarozuga qo‘yish kerak edi. To‘liq kitob esa o‘nlab, hatto yuzlab sekin sintez chaqiruvlaridan iborat — ularning istalgani xato bilan tugashi mumkin.

Biz nima qildik

Yechim

Rus tilini biladigan o‘n ikkiga yaqin ochiq kodli va bulutli TTS dvigatellarini solishtirdik, ma’nosiz nutqni ASR tekshiruvlari bilan ushladik. Keyin Laravel navbatlariga asoslangan konveyer qurdik: matnni ajratib olish, uni aniq qoidalar bo‘yicha tozalash, xohishga ko‘ra LLM’ga kitobga xos keraksiz qismlarni topish va personajlarga ovoz taqsimlashni topshirish, sintez, kodlash va ID3 teglari bilan MP3 fayllarni chop etish. Vazifalar keshlangan segmentlardan davom etadi, jim yoki shovqinli qismlarni belgilaydi va kimdir fayli yo‘q audiokitobni sotib olganda avtomatik ishga tushadi. Ishlab chiqarishdagi ommaviy to‘ldirishdan oldin 5 kitoblik tekshiruv bosqichi o‘tkazildi.

Texnologiyalar
LaravelPythonGoogle GeminiDeepSeekFFmpegFilamentMySQLDocker
Parda ortida

Loyiha qanday yaratildi

Rus tilidagi kitob do‘koni uchun SI yordamida audiokitob yaratish

Rus tilidagi elektron va audiokitoblar do‘koni Knigopoisk uchun raqamli nashrni ovozlashtirilgan audiokitob mahsulotiga aylantiradigan SI konveyerini qurdik: matnni ajratib olish va tozalash, xohishga ko‘ra personaj ovozlari, nutq sintezi, MP3 kodlash, teglash va katalogga chop etish. Xodimlar uni admin paneldan ishga tushiradi, bundan tashqari, mijoz hali audiofayli yo‘q audiokitob uchun to‘lov qilganda u avtomatik boshlanadi.

Birinchi qadam: rus tili TTS benchmarki

Konveyer kodini yozishdan oldin rus tilidagi nutq sintezi dvigatellarini faqat CPU’li uskunada solishtirdik, chunki 4 GB’li Quadro T2000 kattaroq modellarni GPU’da ishga tushirish uchun kichiklik qildi. Bitta qisqa ruscha namuna rus tiliga ixtisoslashgan dvigatellar (F5-TTS Russian, ESpeech, Silero v5, Vosk-TTS, Piper), ko‘p tilli modellar (CosyVoice3, Chatterbox, VibeVoice, XTTS-v2, Bark) va bulutli bazaviy variantlar, jumladan Gemini 2.5 TTS orqali o‘tkazildi; har biri uchun ovozlar, sintez vaqti va litsenziya qayd etildi.

Loyihani uchta xulosa belgilab berdi:

  • Urg‘u belgilari muhim. RUAccent yordamida namunaning urg‘ulari qo‘yilgan nusxasini tayyorladik va dvigatellarni unda A/B test qildik. ESpeech to‘plamdagi + urg‘u belgilarini ovoz chiqarib o‘qimasdan yoki e’tiborsiz qoldirmasdan, haqiqatan ham hisobga olgan birinchi dvigatel bo‘ldi.
  • Ovoz balandligi tekshiruvi ma’nosiz nutqni ushlamaydi. CosyVoice2 rus tilini qo‘llab-quvvatlamaydi va tasodifiy harflardan iborat «nutq» chiqaradi — daraja o‘lchagichda u oddiy ko‘rinadi; CosyVoice3 esa ishlaydi. Tushunib bo‘lmaydigan natijani ushlash uchun Vosk ASR yordamida so‘zlarni qayta tanish (word recall) bahosini qo‘shdik.
  • Tezlik va litsenziyalar keskin farq qiladi. Silero va Piper namunani CPU’da taxminan besh soniyada render qildi, F5-TTS Russian’ga esa bir soatga yaqin vaqt kerak bo‘ldi; eng yaxshi eshitiladigan modellarning bir nechtasi notijorat litsenziyaga ega.

Ishlab chiqarish konveyerining arxitekturasi

Davom ettirsa bo‘ladigan generatsiya vazifalari

Har bir render — bu pending → extracting → generating → encoding → done bosqichlaridan o‘tadigan generatsiya yozuvi; Filament admin panelida jarayon va taxminiy tugash vaqti ko‘rinadi. Bitta model ortida ikkita dvigatel turadi: matnni bo‘lakma-bo‘lak xom PCM’ga sintez qilib, FFmpeg bilan bitta MP3 faylga kodlaydigan Gemini TTS yo‘li va HTTP orqali boshqariladigan, har bir bob uchun alohida MP3 chiqaradigan o‘z serverimizdagi Python render xizmati. Jarayon har bir bo‘lakdan keyin saqlanadi, uzoq ishlar navbat taymauti tugashidan oldin o‘zini qayta jo‘natadi, qayta yuborilgan vazifa esa keshlangan segmentlardan davom etadi. Butun kitob render qilinmaguncha hech narsa chop etilmaydi.

Matnni tayyorlash va ovozlarni taqsimlash

Aniq qoidalar asosidagi tozalagich sahifa raqamlari, kolontitullar, rasm osti yozuvlari, mundarija qatorlari va izoh belgilarini olib tashlaydi, so‘z bo‘linishlarini tuzatadi, xatboshilarni qayta tiklaydi va lug‘at bo‘yicha «yo» harfini (ikki nuqtali e) joyiga qaytaradi. Ixtiyoriy audit bosqichida DeepSeek’ga kitobdan kichik namuna ko‘rsatiladi va u qaytargan keraksiz matn andozalari PHP’da butun matnga qo‘llanadi — shu tufayli kitob qancha uzun bo‘lmasin, SI xarajati bitta arzon chaqiruv bilan cheklanadi. Ko‘p ovozli o‘qish uchun LLM matnni so‘zlovchilar bo‘yicha segmentlarga ajratadi, ovozlar esa aniqlangan jinsga qarab har bir personajga biriktiriladi; biror narsa ishlamay qolsa, oddiy bir ovozli o‘qishga qaytiladi.

Sifat nazorati va yetkazib berish

Jimlikka tushib qolgan yoki doimiy shovqinli variantda qolgan segmentlar har bir generatsiya bo‘yicha sanaladi, shuning uchun ogohlantirishli render boshidan oxirigacha eshitib tekshiriladi. Boblarga bo‘lingan render so‘zlar soniga nisbatan aql bovar qilmas darajada qisqa chiqsa, u kesilgan deb rad etiladi: chop etilmaydi, xaridorga xat yuborilmaydi, jamoa esa Telegram’da ogohlantirish oladi. Tayyor fayllarda ID3 teglari va muqova rasmi bo‘ladi.

Avtomatlashtirish va ishga tushirish

Buyurtma to‘langan holatga o‘tganda navbatdagi tinglovchi (listener) xaridor sotib olgan aynan o‘sha mahsulotga bog‘langan bir ovozli o‘qishni boshlaydi, tayyor bo‘lganda esa xaridorga xat yuboriladi. Har bir tekshiruv idempotent, shuning uchun bitta kirish nuqtasi to‘langan buyurtmalar tinglovchisiga ham, fayli hali yo‘q to‘langan audiokitoblarni tunda ommaviy to‘ldirishga ham, qayta urinishlarga ham, admin yordamchisiga ham xizmat qiladi. Standart sozlamada ketma-ket uch marta muvaffaqiyatsiz tugagan kitob odam ko‘rib chiqishi uchun qoldiriladi.

Ishga tushirish bosqichma-bosqich bo‘ldi. Avval ishlab chiqarishda besh generatsiyadan iborat tekshiruv partiyasi kuzatuv skripti ostida ishladi: skript navbatdagi ishlarni faqat render to‘liq audiofayl biriktirilgan holda tugagandan keyin bo‘shatardi va birinchi xatodayoq to‘xtardi. Keyin kengroq ommaviy to‘ldirish faol, tugagan va muvaffaqiyatsiz vazifalar sonini hisobot qilib boradigan va xatolar belgilangan chegaradan oshsa to‘xtaydigan monitor ostida ishladi. Har soatlik vazifa render uchun vaqtinchalik joyni saqlash muddati va hajm limiti doirasida ushlab turadi.

Tegishli ishlar

Bu konveyer Knigopoisk uchun sun’iy intellekt integratsiyasi va avtomatlashtirish bo‘yicha ishlarimizning bir qismi. Shuningdek, yirik shriftli kitoblar konveyeri va muvaffaqiyatsiz renderlar haqida xabar beradigan Telegram orqali buyurtma ogohlantirishlari bilan tanishing.

Birga yaratamiz

Knigopoisk: SI yaratgan audiokitoblar kabi loyiha kerakmi?

Mahsulotingiz nima qilishi kerakligini ayting. Ish hajmini belgilaymiz, muddatlarni rejalashtiramiz va qat’iy narx yuboramiz — bepul va davom ettirish majburiyatisiz.

Bepul konsultatsiya Majburiyatsiz Tezkor javob