>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Python

Cómo reconocer el habla rusa con mayor precisión que Whisper usando GigaAM

Cualquiera que haya intentado forzar Whisper con grabaciones reales de centros de llamadas o mensajes de voz rápidos en ruso conoce este dolor. El modelo a menudo alucina, elimina terminaciones o comienza a traducir el habla rusa a un inglés roto. Durante mucho tiempo pareció que simplemente tenías que vivir con esto, hasta que llegó un proyecto abierto del equipo de SberDevices llamado GigaAM.

gráfico

El repositorio salute-developers/GigaAM contiene una familia de modelos acústicos basados en la arquitectura Conformer. El enfoque principal está en ruso y los idiomas de la CEI, aunque las versiones recientes han añadido soporte para más de 70 idiomas. Los modelos se distribuyen bajo la licencia MIT permisiva, lo que los convierte en una excelente opción para productos comerciales sin riesgos legales.

Qué puede hacer esta familia de modelos

El proyecto cubre varias tareas principales de procesamiento de audio. Dentro del repositorio encontrarás soluciones para diferentes escenarios:

  1. ASR clásico con decodificadores CTC y RNN-T. Los modelos de la tercera versión (v3) fueron entrenados con 700,000 horas de audio. Proporcionan un заметное mejora de calidad en dominios complejos: ruido, música de fondo, habla con titubeos y grabaciones de llamadas de soporte técnico.
  2. Transcripción de extremo a extremo e2e. Las versiones v3_e2e_ctc y v3_e2e_rnnt añaden puntuación automáticamente y realizan normalización de texto, convirtiendo números y abreviaturas a una forma legible. En pruebas ciegas (Side-by-Side con LLM como juez) esta combinación supera a Whisper-large-v3 con una puntuación de 70:30.
  3. Reconocimiento de emociones. El modelo GigaAM-Emo está entrenado para determinar el tono emocional de una frase y supera a las líneas base populares en la métrica Macro F1 en aproximadamente un 15%.
  4. Marcas de tiempo a nivel de palabra y audio largo. Puedes obtener marcas de tiempo precisas para cada palabra o conectar el módulo de segmentación de pyannote para procesar grabaciones de una hora de duración.
  5. Multilingüismo. La rama multilingual ofrece codificadores con 220M y 600M parámetros, preentrenados con 2 millones de horas de datos, con gran calidad en los idiomas kazajo, kirguís y uzbeko.

Inicio rápido y ejemplos de trabajo

Necesitarás Python 3.10+ y ffmpeg instalado en tu sistema para comenzar.

Instalando el paquete base:

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

El pipeline básico es extremadamente simple. Aquí tienes un ejemplo donde primero transcribimos un archivo de audio, obtenemos las marcas de tiempo de las palabras y luego verificamos el tono emocional del hablante:

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

Hay un detalle importante indicado explícitamente en la documentación: el método base .transcribe está diseñado para segmentos de hasta 25 segundos. Si necesitas alimentar al modelo con una grabación larga de una reunión o podcast, necesitas instalar dependencias adicionales pip install -e ".[longform]" y configurar un token de Hugging Face para descargar el segmentador 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}")

Cómo desplegar en producción

Los desarrolladores se ocuparon del despliegue en producción. Los modelos no están acoplados estrictamente a PyTorch puro:

  • Exportación a ONNX. Cualquier modelo puede convertirse en un par de líneas mediante el método model.to_onnx(). FP16 es compatible para inferencia en GPU a través de onnxruntime-gpu.
  • Integración con Triton Inference Server y TensorRT. La carpeta triton_scripts contiene recetas listas para usar para construir microservicios de alto rendimiento.
  • Fine-tuning. El repositorio tiene scripts listos para usar basados en PyTorch Lightning, así que si tienes tu propio conjunto de datos etiquetado, los adaptadores CTC y RNN-T pueden adaptarse al vocabulario o terminología específica de tu empresa.

Ejemplo de exportación a ONNX:

import gigaam
import torch

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

Quién encontrará útil este proyecto ahora mismo

Si estás construyendo un bot de voz, un sistema de transcripción de llamadas, análisis de habla de operadores o un generador de subtítulos para contenido en ruso, ya no tiene mucho sentido práctico mirar Whisper. GigaAM funciona más rápido, pesa entre 220 y 600 millones de parámetros, requiere menos VRAM y maneja la fonética rusa compleja significativamente mejor.

La forma más fácil de comenzar es con el cuaderno interactivo de Google Colab, un enlace al cual está justo en el encabezado del repositorio oficial.

Proyectos relacionados