>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Python

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.

plot

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:

  1. 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.
  2. Trascrizione end-to-end e2e. Le versioni v3_e2e_ctc e v3_e2e_rnnt aggiungono 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.
  3. 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%.
  4. 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.
  5. Multilingua. Il branch multilingual offre 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_scripts contiene 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