Jak rozpoznawać mowę rosyjską dokładniej niż Whisper za pomocą GigaAM
Każdy, kto próbował zmusić Whisper do pracy z prawdziwymi nagraniami z call center czy szybkimi wiadomościami głosowymi po rosyjsku, zna ten ból. Model często halucynuje, obcina końcówki lub zaczyna tłumaczyć mowę rosyjską na łamaną angielszczyznę. Przez długi czas wydawało się, że trzeba z tym żyć, aż pojawił się otwarty projekt zespołu SberDevices o nazwie GigaAM.
Repozytorium salute-developers/GigaAM zawiera rodzinę modeli akustycznych opartych na architekturze Conformer. Główny nacisk kładziony jest na język rosyjski oraz języki krajów WNP, choć najnowsze wydania dodały obsługę ponad 70 języków. Modele są rozpowszechniane na podstawie liberalnej licencji MIT, co czyni je doskonałym wyborem dla produktów komercyjnych bez ryzyka prawnych.
Co potrafi ta rodzina modeli
Projekt obejmuje kilka podstawowych zadań przetwarzania audio. W repozytorium znajdziesz rozwiązania dla różnych scenariuszy:
- Klasyczny ASR z dekoderami CTC i RNN-T. Modele w wersji trzeciej (v3) były trenowane na 700 000 godzin audio. Zapewniają zauważalny wzrost jakości w złożonych domenach: szum, muzyka w tle, niepłynna mowa i nagrania z rozmów wsparcia technicznego.
- Transkrypcja end-to-end e2e. Wersje
v3_e2e_ctciv3_e2e_rnntautomatycznie dodają interpunkcję i wykonują normalizację tekstu, przekształcając liczby i skróty w czytelną formę. W testach ślepych (Side-by-Side z LLM jako sędzia) ten zestaw pokonuje Whisper-large-v3 z wynikiem 70:30. - Rozpoznawanie emocji. Model
GigaAM-Emojest trenowany do określania emocjonalnego tonu wypowiedzi i przewyższa popularne baseline'y w metryce Macro F1 o około 15%. - Znaczniki czasowe na poziomie słów i długie audio. Możesz uzyskać precyzyjne znaczniki czasowe dla każdego słowa lub połączyć moduł segmentacji pyannote do przetwarzania nagrań trwających godzinę.
- Wielojęzyczność. Branch
multilingualoferuje enkoder z 220M i 600M parametrów, wstępnie trenowane na 2 milionach godzin danych, z silną jakością dla języków kazachskiego, kirgiskiego i uzbeckiego.
Szybki start i przykłady pracy
Aby rozpocząć, potrzebujesz Pythona 3.10+ i ffmpeg zainstalowanego w systemie.
Instalacja pakietu bazowego:
git clone https://github.com/salute-developers/GigaAM.git
cd GigaAM
pip install -e .[torch]
Podstawowy pipeline jest niezwykle prosty. Oto przykład, w którym najpierw transkrybujemy plik audio, pobieramy znaczniki czasowe słów, a następnie sprawdzamy emocjonalny ton mówcy:
import gigaam
# Скачиваем тестовый файл через встроенную утилиту
audio_path = gigaam.utils.download_short_audio()
# 1. Распознавание речи с пунктуацией
asr_model = gigaam.load_model("v3_e2e_rnnt")
text = asr_model.transcribe(audio_path)
print("Текст:", text)
# 2. Получение таймстемпов для каждого слова
timed_result = asr_model.transcribe(audio_path, word_timestamps=True)
for word in timed_result.words:
print(f"[{word.start:.2f} - {word.end:.2f}] {word.text}")
# 3. Определение эмоций
emo_model = gigaam.load_model("emo")
emotions = emo_model.get_probs(audio_path)
for emotion, prob in emotions.items():
print(f"{emotion}: {prob:.3f}")
Jest ważny szczegół explicite podany w dokumentacji: bazowa metoda .transcribe jest zaprojektowana dla segmentów do 25 sekund. Jeśli musisz przekazać modelowi długie nagranie ze spotkania lub podcastu, musisz zainstalować dodatkowe zależności pip install -e ".[longform]" i skonfigurować token Hugging Face do pobrania segmentera pyannote/segmentation-3.0:
import os
import gigaam
os.environ["HF_TOKEN"] = "ваш_токен_huggingface"
long_audio = gigaam.utils.download_long_audio()
model = gigaam.load_model("v3_e2e_rnnt")
segments = model.transcribe_longform(long_audio)
for seg in segments:
print(f"[{gigaam.format_time(seg.start)} - {gigaam.format_time(seg.end)}]: {seg.text}")
Jak wdrożyć do produkcji
Twórcy zadbali o wdrożenie produkcyjne. Modele nie są silnie sprzężone z czystym PyTorch:
- Eksport ONNX. Każdy model można przekonwertować w kilku linijkach za pomocą metody
model.to_onnx(). FP16 jest obsługiwane dla wnioskowania na GPU przez onnxruntime-gpu. - Integracja z Triton Inference Server i TensorRT. Folder
triton_scriptszawiera gotowe przepisy na budowanie mikroserwisów o wysokiej przepustowości. - Fine-tuning. W repozytorium znajdują się gotowe skrypty oparte na PyTorch Lightning, więc jeśli masz własny oznaczony zbiór danych, adaptery CTC i RNN-T można dostosować do specyficznego słownictwa lub terminologii Twojej firmy.
Przykład eksportu do ONNX:
import gigaam
import torch
model = gigaam.load_model("v3_ctc")
model.to_onnx(dir_path="onnx_models", dtype=torch.float16)
Komu projekt przyda się już teraz
Jeśli budujesz bota głosowego, system transkrypcji rozmów, analitykę mowy operatorów lub generator napisów dla treści w języku rosyjskim, nie ma już praktycznego sensu patrzeć na Whisper. GigaAM działa szybciej, waży zaledwie 220–600 milionów parametrów, wymaga mniej VRAM i znacznie lepiej radzi sobie ze złożoną fonetyką rosyjską.
Najłatwiejszy sposób na rozpoczęcie pracy to interaktywny notatnik Google Colab, którego link znajduje się tuż w nagłówku oficjalnego repozytorium.
Powiązane projekty