Skip to content

Belarus/BelVoice

Repository files navigation

BelVoice - фрэймварк апрацоўкі беларускага маўлення

Гэты фрэймварк дае доступ да перадавых на сённяшні дзень (SOTA) тэхналогій апрацоўкі голасу для беларускай мовы. Наша галоўная мэта — не проста механічнае пераўтварэнне тэксту ў гук, а забеспячэнне правільнага і натуральнага беларускага вымаўлення з улікам усіх фанетычных законаў (асіміляцыя, аканне, яканне, змякчэнне і г.д.).

Фрэймварк утрымлівае модулі для сінтэзу (TTS) і распазнавання (ASR) маўлення. Ён пабудаваны па модульным прынцыпе, прапаноўваючы розныя варыянты рэалізацыі кожнага этапу. Гэтыя варыянты адрозніваюцца па:

  • Тыпу кампанентаў (выключна лакальныя або з выкарыстаннем знешніх API).
  • Патрабаваннях да вылічальных рэсурсаў (CPU / GPU) і фінансавых выдатках.
  • Выніковай якасці апрацоўкі (хуткія чарнавыя варыянты супраць SOTA рашэнняў).

Модулі можна гнутка камбінаваць у залежнасці ад вашых патрэбаў. Яны напісаная на Python, ці маюць Python-абгортку. Архітэктура дазваляе злучаць модулі простымі выклікамі функцый, а таксама правяраць і падпраўляць прамежкавы вынік на кожным кроку апрацоўкі.

Паслядоўнасць сінтэзу маўлення (TTS Pipeline)

Каб атрымаць якасную агучку, тэкст мусіць прайсці некалькі стадый падрыхтоўкі перад самім сінтэзам:

  1. Нармалізацыя — разгортванне скаротаў, абрэвіятур, ператварэнне лічбаў і сімвалаў у словы ў правільным склоне.
  2. Пазначэнне націскаў — расстаноўка націскаў ва ўсіх словах тэксту.
  3. Зняцце аманіміі націскаў — вырашэнне спрэчных выпадкаў, калі месца націску залежыць ад кантэксту і сэнсу (напрыклад, му́ка ці мука́).
  4. Фанемізацыя (G2P) — пераўтварэнне літар у гукі (фанемы). Гэта найважнейшы этап для беларускай мовы, бо ён улічвае правілы чытання і фанетычныя працэсы (аглушэнне/азванчэнне, мяккасць і інш.).
  5. Сінтэз маўлення — генерацыя аўдыёфайла па падрыхтаваным тэксце або фанемах.
  6. Канвертацыя і пост-апрацоўка — сцісканне сінтэзаванага аўдыё ў зручны фармат (opus, mp3 і г.д.) для перадачы карыстальніку.

Выклік кожнага модуля не з'яўляецца абавязковым. Напрыклад, пры агучванні абмежаванага набору сказаў (асабліва з уласнымі імёнамі ці спецыфічнымі тэрмінамі) бывае прасцей зрабіць нармалізацыю і расставіць націскі ўручную.

Паслядоўнасць распазнавання маўлення (ASR Pipeline)

Звычайна працэс абмяжоўваецца выклікам аднаго ASR-модуля, але для атрымання ідэальнага тэксту пайплайн можа быць пашыраны:

  1. Разбіўка на часткі (VAD) — вылучэнне маўлення з аўдыё і падзел яго на асобныя фрагменты (з пазнакамі часу).
  2. Аналіз спікераў — вызначэнне асоб спікераў у аўдыё (пол, узрост, пошук вядомых спікераў).
  3. Распазнаванне маўлення (Speech-to-Text) — пераўтварэнне аўдыё ў сыры тэкст.
  4. Зваротная нармалізацыя (ITN) — канвертаванне слоў-лічбаў назад у лічбавы фармат, разбіўка тэксту на сказы і абзацы, расстаноўка знакаў прыпынку.
  5. Выпраўленне правапісу — прывядзенне тэксту да актуальнага правапісу (2008).

Аптымальныя параметры аўдыяфайлаў для распазнавання: 16000 Hz, 16-bit, mono.

Абгортка(asr.PartsPipeline) вакол модуляў VAD і распазнавання маўлення, якая дазваляе наразаць аўдыё на часткі (з пазнакамі часу) і апрацоўваць іх паасобку. Гэта можа быць карысна для субцітраў ці корпусу.

Рэсурсы для апрацоўкі

Паколькі большасць модуляў абапіраецца на нейрасеткі, важна ўлічваць патрабаванні да «жалеза». Выкарыстанне знешніх правайдэраў (хмарных API) уплывае на прыватнасць звестак, патрабуе стабільнага інтэрнэту і стабільнай працы знешніх правайдэраў. Для кожнага модуля ў спісе ніжэй пазначана, як ён працуе (лакальна/знешне) і якія вылічальныя магутнасці яму патрэбныя.


Спіс модуляў

Нармалізацыя - Normalization.Simple

  • Апісанне: Замяняе лічбы (ад 0 да 9) на адпаведныя словы (без уліку скланенняў), а лацінскія літары — на іх назвы з англійскага алфавіта. Варта выкарыстоўваць выключна для хуткіх тэстаў.
  • Рэсурсы: Працуе вельмі хутка на CPU.
  • Залежнасці: няма.

Нармалізацыя - Normalization.LLM

  • Апісанне: Разумная нармалізацыя праз вялікія моўныя мадэлі (LLM). Якасць узгаднення склонаў і разгортвання складаных абрэвіятур наўпрост залежыць ад абранай LLM. Падтрымлівае карыстальніцкія промпты для ўліку спецыфікі вашага тэксту (напрыклад, гласарыя тэрмінаў).
  • Рэсурсы: Патрабуе доступу да знешняга правайдэра (для мадэляў кшталту Gemini ці GPT) альбо ўласнай магутнай відэакарты (GPU) для лакальнага запуску мадэляў накшталт Llama ці Gemma.
  • Параметры: model_name - з старонкі https://models.litellm.ai/. API ключ дадаецца ў залежнасці ад мадэлі. Напрыклад, для Gemini трэба пазначыць GEMINI_API_KEY у пераменных асяроддзя. Падрабязнасці - на https://docs.litellm.ai/docs/providers/gemini
  • Залежнасці: conda create --name asr python=3.12; conda activate asr; pip install litellm==1.83.13

Пазначэнне націскаў - StressMarking.GrammarDB

  • Апісанне: Аўтаматычна пазначае націскі ў словах на падставе Граматычнай базы беларускай мовы.
  • Рэсурсы: Працуе на CPU вельмі хутка.
  • Залежнасці: няма.

Зняцце аманіміі націскаў - StressHomonyms.Stat

  • Апісанне: Вырашае праблему амонімаў статыстычным метадам — абапіраючыся на слоўнік найбольш частотных варыянтаў націску. Нягледзячы на прастату падыходу, тэсты паказваюць правільнасць да 80% выпадкаў.
  • Рэсурсы: Працуе на CPU вельмі хутка.
  • Залежнасці: няма.

Зняцце аманіміі націскаў - StressHomonyms.LLM

  • Апісанне: Вызначае правільны націск у спрэчных словах на аснове кантэксту праз просты запыт да LLM.
  • Рэсурсы: Знешні правайдэр (Gemini/GPT) або GPU (Gemma/Llama).

Зняцце аманіміі націскаў - StressHomonyms.MeaningExtraction

  • Апісанне: Самы дакладны падыход. Спачатку праз LLM вызначаецца семантычны сэнс слова ў канкрэтным сказе (у параўнанні з тлумачальным слоўнікам). Затым, маючы дакладнае значэнне, модуль бярэ беспамылковы націск з Граматычнай базы.
  • Рэсурсы: Знешні правайдэр (Gemini/GPT) або GPU (Gemma/Llama).

Фанемізацыя - Phonemization.BelG2P

  • Апісанне: Пераводзіць тэкст у транскрыпцыю (фанемы) праз BelG2P. Калі TTS-модуль падтрымлівае фанемны ўвод, выкарыстанне BelG2P крытычна паляпшае натуральнасць вымаўлення. Модуль улічвае складаныя выпадкі беларускай фанетыкі: асіміляцыю зычных па глухасці/звонкасці і мяккасці, прыстаўныя гукі, правільнае вымаўленне злучнікаў і прыназоўнікаў у патоку маўлення.
  • Рэсурсы: Працуе CPU дастаткова хутка.
  • Заўвагі: Спампоўвае 22MiB jar з github.com і патрабуе ўсталяванай java для працы.
  • Залежнасці: conda create --name asr python=3.12 conda-forge::jpype1=1.7.0 pooch=1.9.0

Сінтэз маўлення - TTS.CoquiTTS

  • Апісанне: Выкарыстоўвае мадэль CoquiTTS, натрэніраваную на беларускім голасе з Mozilla CommonVoce. Працуе з фанемамі ад BelG2P. Гэты модуль зроблены ў выглядзе docker image, бо Coqui-TTS больш не абнаўляецца.
  • Рэсурсы: Вельмі хутка генеруе аўдыё на GPU, але цалкам прыдатна для працы і на звычайным CPU.
  • Залежнасці: conda create --name asr python=3.11; conda activate asr; pip install TTS==0.22.0

Сінтэз маўлення - TTS.OmniVoice

  • Апісанне: SOTA-мадэль для максімальна натуральнага сінтэзу.
  • Рэсурсы: Патрабуе GPU.
  • Залежнасці: conda create --name asr python=3.12; conda activate asr; pip install omnivoice==0.1.2

Распазнаванне маўлення - ASR.Nvidia

  • Апісанне: Выкарыстоўвае мадэлі Nvidia NeMo. Найлепшая мадэль: nvidia/stt_be_fastconformer_hybrid_large_pc, але і яна мае праблемы з разбіўкай на сказы.
  • Рэсурсы: Працуе на CPU даволі хутка, можа выкарыстоўваць GPU. На i5-11600 10-хвіліннае аўдыё канвертуецца за ~65 секунд.
  • Залежнасці: conda create --name asr python=3.12; conda activate asr; pip install nemo_toolkit[asr]==2.7.3

Распазнаванне маўлення - ASR.Facebook

  • Апісанне: Выкарыстоўвае мадэлі Omnilingual ASR. Найлепшыя: omniASR_LLM_Unlimited_*_v2. Яны не дадаюць пунктуацыю наогул, але дакладна паказваюць гукі. Можна выкарыстоўваць для алічбоўкі дыялектнага маўлення.
  • Рэсурсы: Працуе на GPU. omniASR_LLM_Unlimited_1B_v2 на Nvidia 5060Ti/16GiB апрацоўвае 5-хвіліннае аўдыё за 42 секунды.
  • Залежнасці: conda create --name asr python=3.12 pytorch==2.8.0 torchaudio==2.8.0 conda-forge::libsndfile==1.0.31; conda activate asr; pip install git+https://github.com/facebookresearch/omnilingual-asr.git@81f51e224ce9e74b02cc2a3eaf21b2d91d743455 fairseq2==0.6.0 --extra-index-url https://fair.pkg.atmeta.com/fairseq2/whl/pt2.8.0/cpu. Змяніце /cpu на нешта больш прыдатнае - дэталі на https://github.com/facebookresearch/fairseq2#variants.

Распазнаванне маўлення - ASR.Gemini

  • Апісанне: Выкарыстоўвае мадэлі Gemini. На сённяшні дзень (красавік 2026 года) мадэлі, такія як Gemini 3 Flash і Gemini 3.1 Pro, забяспечваюць, бадай, самае дакладнае распазнаванне маўлення з разуменнем кантэксту і добрай пунктуацыяй. Падтрымлівае файлы: wav, mp3, aiff, aac, ogg, opus, flac.
  • Рэсурсы: Патрабуецца знешні правайдэр.
  • Залежнасці: conda create --name asr python=3.12 numpy=2.4.4 scipy=1.17.1; conda activate asr; pip install litellm==1.83.13, патрэбны GEMINI_API_KEY у пераменных асяроддзя.

Разбіўка на часткі (VAD) - ASR.Pyannote

  • Апісанне: Выкарыстоўвае мадэль pyannote.audio для выдзялення маўлення з аўдыё і падзелу яго на асобныя фрагменты з пазнакамі часу.
  • Рэсурсы: Працуе на CPU, але для вялікіх аўдыёфайлаў рэкамендуецца GPU.
  • Залежнасці: conda create --name asr python=3.12; conda activate asr; pip install pyannote.audio==4.0.4

Разбіўка на часткі (VAD) - ASR.Silero

  • Апісанне: Выкарыстоўвае мадэль Silero VAD для выдзялення маўлення з аўдыё.
  • Рэсурсы: Працуе на CPU, але для вялікіх аўдыёфайлаў рэкамендуецца GPU.
  • Залежнасці: conda create --name asr python=3.12 numpy=2.4.4; conda activate asr; pip install silero-vad==6.2.1

About

Modular framework for Belarusian speech synthesis (TTS) and recognition (ASR)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors