Come Riconoscere la Voce Russa Più Accuratamente di Whisper Usando GigaAM
Chiunque abbia provato a usare Whisper su registrazioni reali di call center o brevi messaggi vocali in russo conosce questo dolore. Il modello spesso allucina, perde le desinenze, o inizia a tradurre il parlato russo in un inglese stentato. Per molto tempo sembrava che non ci fosse nulla da fare, finché non è arrivato un progetto open del team di SberDevices chiamato GigaAM.
Il repository salute-developers/GigaAM contiene una famiglia di modelli acustici basati sull'architettura Conformer. L'attenzione principale è rivolta al russo e alle lingue della CSI, anche se le versioni recenti hanno aggiunto il supporto per oltre 70 lingue. I modelli sono distribuiti con licenza MIT permissiva, rendendoli una scelta eccellente per i prodotti commerciali senza rischi legali.
Cosa può fare questa famiglia di modelli
Il progetto copre diversi compiti principali di elaborazione audio. All'interno del repository troverai soluzioni per diversi scenari:
- ASR classico con decodificatori CTC e RNN-T. I modelli della terza versione (v3) sono stati addestrati su 700.000 ore di audio. Forniscono un miglioramento tangibile della qualità in domini complessi: rumore, musica di sottofondo, parlato esitante e registrazioni di call center di supporto tecnico.
- Trascrizione end-to-end e2e. Le versioni
v3_e2e_ctcev3_e2e_rnntaggiungono automaticamente punteggiatura e eseguono la normalizzazione del testo, convertendo numeri e abbreviazioni in forma leggibile. Nei test alla cieca (Side-by-Side con LLM come giudice) questa combinazione batte Whisper-large-v3 con un punteggio di 70:30. - Riconoscimento delle emozioni. Il modello
GigaAM-Emoè addestrato per determinare il tono emotivo di una frase e supera i baseline popolari sulla metrica Macro F1 di circa il 15%. - Timestamp a livello di parola e audio lunghi. Puoi ottenere timestamp precisi per ogni parola o collegare il modulo di segmentazione pyannote per l'elaborazione di registrazioni di ore.
- Multilingua. Il branch
multilingualoffre encoder con 220M e 600M parametri, pre-addestrati su 2 milioni di ore di dati, con forte qualità sulle lingue kazaka, kirghisa e uzbecha.
Quick start ed esempi di lavoro
Avrai bisogno di Python 3.10+ e ffmpeg installati nel tuo sistema per iniziare.
Installazione del pacchetto base:
git clone https://github.com/salute-developers/GigaAM.git
cd GigaAM
pip install -e .[torch]
La pipeline base è estremamente semplice. Ecco un esempio in cui prima trascriviamo un file audio, otteniamo i timestamp delle parole e poi controlliamo il tono emotivo del parlante:
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}")
C'è un dettaglio importante indicato esplicitamente nella documentazione: il metodo base .transcribe è progettato per segmenti fino a 25 secondi. Se hai bisogno di fornire al modello una lunga registrazione di una riunione o podcast, devi installare dipendenze aggiuntive pip install -e ".[longform]" e configurare un token Hugging Face per scaricare il segmenter 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}")
Come distribuire in produzione
Gli sviluppatori si sono presi cura del deployment in produzione. I modelli non sono strettamente accoppiati a PyTorch puro:
- Esportazione ONNX. Qualsiasi modello può essere convertito in un paio di righe tramite il metodo
model.to_onnx(). FP16 è supportato per l'inferenza GPU tramite onnxruntime-gpu. - Integrazione con Triton Inference Server e TensorRT. La cartella
triton_scriptscontiene ricette pronte all'uso per la creazione di microservizi ad alta velocità di throughput. - Fine-tuning. Il repository ha script pronti basati su PyTorch Lightning, quindi se hai il tuo dataset etichettato, gli adapter CTC e RNN-T possono essere adattati al vocabolario o alla terminologia specifica della tua azienda.
Esempio di esportazione in ONNX:
import gigaam
import torch
model = gigaam.load_model("v3_ctc")
model.to_onnx(dir_path="onnx_models", dtype=torch.float16)
Chi troverà questo progetto utile adesso
Se stai costruendo un voice bot, un sistema di trascrizione chiamate, un'analisi del parlato degli operatori o un generatore di sottotitoli per contenuti in lingua russa, c'è poco senso pratico nel guardare ancora Whisper. GigaAM funziona più velocemente, pesa un modesto 220-600 milioni di parametri, richiede meno VRAM e gestisce la fonetica russa complessa significativamente meglio.
Il modo più semplice per iniziare è con il notebook interattivo Google Colab, un link al quale si trova proprio nell'header del repository ufficiale.
Progetti correlati