>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Comment reconnaître la parole russe plus précisément que Whisper avec GigaAM

Quiconque a essayé d'appliquer Whisper à de véritables enregistrements de centre d'appels ou à de brefs messages vocaux en russe connaît cette galère. Le modèle a souvent des hallucinations, coupe les terminaisons, ou se met à traduire la parole russe en anglais approximatif. Pendant longtemps, il semblait qu'il fallait simplement vivre avec, jusqu'à ce qu'un projet open source de l'équipe SberDevices appelé GigaAM voie le jour.

plot

Le dépôt salute-developers/GigaAM contient une famille de modèles acoustiques basés sur l'architecture Conformer. L'objectif principal est le russe et les langues de la CEI, bien que les dernières versions aient ajouté la prise en charge de plus de 70 langues. Les modèles sont distribués sous la licence MIT permissive, ce qui en fait un excellent choix pour les produits commerciaux sans risques juridiques.

Ce que cette famille de modèles peut faire

Le projet couvre plusieurs tâches principales de traitement audio. Dans le dépôt, vous trouverez des solutions pour différents scénarios :

  1. ASR classique avec décodeurs CTC et RNN-T. Les modèles de la troisième version (v3) ont été entraînés sur 700 000 heures d'audio. Ils offrent une amélioration notable de la qualité dans les domaines complexes : bruit, musique de fond, parole hésitante et enregistrements d'appels d'assistance technique.
  2. Transcription bout en bout e2e. Les versions v3_e2e_ctc et v3_e2e_rnnt ajoutent automatiquement la ponctuation et effectuent la normalisation du texte, convertissant les chiffres et abréviations en forme lisible. En tests à l'aveugle (Side-by-Side avec LLM comme juge), ce combo surpasse Whisper-large-v3 avec un score de 70:30.
  3. Reconnaissance des émotions. Le modèle GigaAM-Emo est entraîné pour déterminer le ton émotionnel d'une phrase et surpasse les bases de référence populaires sur la métrique Macro F1 d'environ 15%.
  4. Horodatages au niveau des mots et audio longue. Vous pouvez obtenir des horodatages précis pour chaque mot ou connecter le module de segmentation pyannote pour traiter des enregistrements d'une heure.
  5. Multilinguisme. La branche multilingual propose des encodeurs de 220M et 600M paramètres, pré-entraînés sur 2 millions d'heures de données, avec une qualité solide sur les langues kazakhe, kirghize et ouïghoure.

Démarrage rapide et exemples de travail

Vous aurez besoin de Python 3.10+ et de ffmpeg installé sur votre système pour commencer.

Installation du package de base :

git clone https://github.com/salute-developers/GigaAM.git
cd GigaAM
pip install -e .[torch]

Le pipeline de base est extrêmement simple. Voici un exemple où nous transcrivons d'abord un fichier audio, obtenons les horodatages des mots, puis vérifions le ton émotionnel du locuteur :

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}")

Il y a un détail important explicitementstated dans la documentation : la méthode de base .transcribe est conçue pour des segments jusqu'à 25 secondes. Si vous devez fournir au modèle un long enregistrement de réunion ou un podcast, vous devez installer des dépendances supplémentaires pip install -e ".[longform]" et configurer un token Hugging Face pour télécharger le segmenteur 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}")

Comment déployer en production

Les développeurs ont pris soin du déploiement en production. Les modèles ne sont pas fortement couplés à PyTorch pur :

  • Export ONNX. N'importe quel modèle peut être converti en quelques lignes via la méthode model.to_onnx(). Le FP16 est pris en charge pour l'inférence GPU via onnxruntime-gpu.
  • Intégration avec Triton Inference Server et TensorRT. Le dossier triton_scripts contient des recettes prêtes à l'emploi pour construire des microservices à haut débit.
  • Affinage. Le dépôt dispose de scripts prêts à l'emploi basés sur PyTorch Lightning, donc si vous avez votre propre jeu de données étiqueté, les adaptateurs CTC et RNN-T peuvent être adaptés au vocabulaire ou à la terminologie spécifique de votre entreprise.

Exemple d'export vers ONNX :

import gigaam
import torch

model = gigaam.load_model("v3_ctc")
model.to_onnx(dir_path="onnx_models", dtype=torch.float16)

Qui trouvera ce projet utile dès maintenant

Si vous construisez un bot vocal, un système de transcription d'appels, une analytique de la parole des opérateurs ou un générateur de sous-titres pour du contenu en langue russe, il y a peu d'intérêt pratique à regarder Whisper. GigaAM fonctionne plus rapidement, pèse un modeste 220 à 600 millions de paramètres, nécessite moins de VRAM et gère beaucoup mieux la phonétique russe complexe.

Le moyen le plus simple de commencer est le notebook Google Colab interactif, dont le lien se trouve juste dans l'en-tête du dépôt officiel.

Projets similaires