Skip to content

Belarus/BelVoice

Repository files navigation

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

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

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

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

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

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

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

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

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

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

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

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

Фарматы аўдыё

Аптымальныя параметры аўдыяфайлаў для распазнавання: wav фармат без кампрэсіі, 16000 Hz, 16-bit, mono. Хоць некаторыя модулі падтрымліваюць іншыя фарматы, яны могуць працаваць з імі некарэктна.

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

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

Некаторыя модулі выкарыстоўваюць TORCH_DEVICE для пераносу апрацоўкі на CUDA альбо MPS.


Спіс модуляў

Нармалізацыя - belvoice.synth.normalization.NormalizationSimple

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

Нармалізацыя - belvoice.synth.normalization.NormalizationLLM

  • Апісанне: Разумная нармалізацыя праз вялікія моўныя мадэлі (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

Пазначэнне націскаў - belvoice.synth.stress.StressStat

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

Пазначэнне націскаў - belvoice.synth.stress.StressLLM

  • Апісанне: Пазначае націскі на падставе Граматычнай базы беларускай мовы. Для амографаў выклікаецца LLM для аналізу граматычных характарыстык слова(на падставе Граматычнай базы) і ягонага значэння (на падставе Тлумачальнага слоўніка) у канкрэтным сказе і па гэтым абіраецца варыянт націску. Такі падыход дае найлепшую якасць.
  • Рэсурсы: Знешні правайдэр (Gemini/GPT) або GPU (Gemma/Llama).
  • Залежнасці: pip install litellm==1.84.0

Фанемізацыя - belvoice.synth.phonemization.PhonemizationBelG2P

  • Апісанне: Пераводзіць тэкст у транскрыпцыю (фанемы) праз 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

Сінтэз маўлення - belvoice.synth.tts.TTSCoquiTTS

  • Апісанне: Выкарыстоўвае мадэль 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

Сінтэз маўлення - belvoice.synth.tts.TTSOmniVoice

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

Распазнаванне маўлення - belvoice.asr.stt.STTNvidia

  • Апісанне: Выкарыстоўвае мадэлі 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

Распазнаванне маўлення - belvoice.asr.stt.STTFacebook

  • Апісанне: Выкарыстоўвае мадэлі 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.

Распазнаванне маўлення - belvoice.asr.stt.STTGemini

  • Апісанне: Выкарыстоўвае мадэлі 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 у пераменных асяроддзя.

Разбіўка на часткі - belvoice.asr.split.SplitPyannote

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

Разбіўка на часткі - belvoice.asr.split.SplitSilero

  • Апісанне: Выкарыстоўвае мадэль 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

Аб'яднанне частак - belvoice.asr.merge.MergeWindow

  • Апісанне: Аб'ядноўвае малыя фрагменты аўдыё ў адзін фрагмент - шукае фрагменты, якія агулам даюць працягласць не больш за патрэбную.
  • Рэсурсы: Працуе на CPU вельмі хутка.
  • Залежнасці: няма.

Аб'яднанне частак - belvoice.asr.merge.MergeGraph

  • Апісанне: Аб'ядноўвае малыя фрагменты аўдыё ў адзін фрагмент - шукае фрагменты як абыход графа.
  • Рэсурсы: Працуе на CPU вельмі хутка.
  • Залежнасці: pip install networkx==3.6.1

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors