Consejos de precisión de Whisper: cómo mejorar la calidad de la transcripción

Consejos de precisión de Whisper: cómo mejorar la calidad de la transcripción

Eric King

Eric King

Author


Consejos de precisión de Whisper: cómo mejorar la calidad de la transcripción

OpenAI Whisper ya es uno de los modelos de reconocimiento de voz de código abierto más precisos, pero hay varias estrategias para maximizar la calidad de la transcripción. Esta guía cubre consejos prácticos, ejemplos de código y buenas prácticas para mejorar la precisión de Whisper en sus casos de uso.
Esta guía es ideal para:
  • Desarrolladores que optimizan la precisión de la transcripción con Whisper
  • Creadores de contenido que transcriben podcasts y vídeos
  • Investigadores que trabajan con datos de audio
  • Cualquiera que busque consejos de precisión de Whisper

Comprender los factores de precisión de Whisper

Antes de las optimizaciones, conviene saber qué afecta a la precisión de Whisper:
  • Calidad del audio (lo más importante)
  • Tamaño del modelo
  • Precisión de la detección de idioma
  • Preprocesado del audio
  • Parámetros de configuración
  • Duración del audio y segmentación

Consejo 1: Elija el tamaño de modelo adecuado

Whisper ofrece cinco tamaños de modelo, cada uno equilibra velocidad y precisión de forma distinta:
import whisper

# Model sizes from fastest to most accurate:
# tiny, base, small, medium, large

# For maximum accuracy, use medium or large
model = whisper.load_model("medium")  # Best balance
# or
model = whisper.load_model("large")  # Maximum accuracy
Guía de selección de modelos:
ModelAccuracySpeedUse When
tiny⭐⭐⭐⭐⭐⭐⭐Quick testing, simple audio
base⭐⭐⭐⭐⭐⭐⭐General purpose, balanced
small⭐⭐⭐⭐⭐⭐⭐Good accuracy, reasonable speed
medium⭐⭐⭐⭐⭐⭐⭐High accuracy needed
large⭐⭐⭐⭐⭐⭐Best accuracy, noisy audio
Ejemplo de código:
import whisper

def transcribe_with_optimal_model(audio_path, prioritize_accuracy=True):
    """
    Select model based on accuracy vs speed priority.
    
    Args:
        audio_path: Path to audio file
        prioritize_accuracy: True for accuracy, False for speed
    """
    if prioritize_accuracy:
        model_size = "medium"  # or "large" for best accuracy
    else:
        model_size = "base"  # or "small" for balanced
    
    model = whisper.load_model(model_size)
    result = model.transcribe(audio_path)
    
    return result

# For critical transcriptions
result = transcribe_with_optimal_model("important_meeting.mp3", prioritize_accuracy=True)
Conclusión clave: Use los modelos medium o large cuando la precisión sea crítica. El coste en velocidad suele merecer la pena para contenido importante.

Consejo 2: Especifique el idioma cuando lo conozca

Whisper puede detectar el idioma automáticamente, pero indicarlo explícitamente mejora la precisión:
import whisper

model = whisper.load_model("base")

# Auto-detect (less accurate)
result_auto = model.transcribe("audio.mp3")

# Specify language (more accurate)
result_en = model.transcribe("audio.mp3", language="en")
result_zh = model.transcribe("audio.mp3", language="zh")
result_es = model.transcribe("audio.mp3", language="es")
Por qué ayuda:
  • Reduce errores de detección de idioma
  • Mejora la precisión con hablantes multilingües
  • Acelera el procesamiento (omite la detección)
  • Mejor manejo de acentos y dialectos
Ejemplo con detección de idioma:
import whisper
import langdetect

def transcribe_with_language_detection(audio_path, model_size="base"):
    """
    Detect language first, then transcribe with explicit language.
    """
    model = whisper.load_model(model_size)
    
    # Quick language detection
    result_quick = model.transcribe(audio_path, language=None)
    detected_lang = result_quick["language"]
    
    # Re-transcribe with detected language for better accuracy
    result = model.transcribe(audio_path, language=detected_lang)
    
    return result

result = transcribe_with_language_detection("audio.mp3")

Consejo 3: Preprocese el audio antes de transcribir

El preprocesado puede mejorar notablemente la precisión de Whisper:
import whisper
import numpy as np
from scipy.io import wavfile
from scipy import signal

def preprocess_audio(audio_path, output_path):
    """
    Preprocess audio to improve transcription accuracy.
    """
    # Read audio file
    sample_rate, audio = wavfile.read(audio_path)
    
    # Normalize audio (scale to [-1, 1])
    if audio.dtype == np.int16:
        audio = audio.astype(np.float32) / 32768.0
    elif audio.dtype == np.int32:
        audio = audio.astype(np.float32) / 2147483648.0
    
    # Remove DC offset
    audio = audio - np.mean(audio)
    
    # Normalize volume
    max_val = np.max(np.abs(audio))
    if max_val > 0:
        audio = audio / max_val * 0.95  # Leave headroom
    
    # Resample to 16kHz (Whisper's optimal sample rate)
    if sample_rate != 16000:
        num_samples = int(len(audio) * 16000 / sample_rate)
        audio = signal.resample(audio, num_samples)
        sample_rate = 16000
    
    # Save preprocessed audio
    wavfile.write(output_path, sample_rate, (audio * 32767).astype(np.int16))
    
    return output_path

# Usage
preprocessed = preprocess_audio("raw_audio.wav", "preprocessed.wav")
model = whisper.load_model("base")
result = model.transcribe(preprocessed)
Pasos de preprocesado:
  1. Normalizar niveles – volumen consistente
  2. Eliminar offset DC – eliminar sesgo constante
  3. Remuestrear a 16 kHz – frecuencia óptima para Whisper
  4. Eliminar silencios – centrarse en el habla
  5. Reducir ruido – limpiar el fondo

Consejo 4: Use la temperatura para mejores resultados

El parámetro temperature de Whisper controla la aleatoriedad. Valores más bajos pueden mejorar la precisión:
import whisper

model = whisper.load_model("base")

# Default temperature (0.0)
result_default = model.transcribe("audio.mp3")

# Lower temperature for more deterministic results
result_low_temp = model.transcribe(
    "audio.mp3",
    temperature=0.0,  # Most deterministic
    best_of=5,  # Try multiple decodings, pick best
    beam_size=5  # Beam search size
)
Ajustes de temperatura:
  • temperature=0.0: Más determinista, mejor para precisión
  • temperature=0.2: Ligera aleatoriedad, buen equilibrio
  • temperature=0.6: Por defecto, equilibrado
  • Valores más altos: más creativo pero menos preciso
Buena práctica:
def transcribe_with_optimal_settings(audio_path, model_size="base"):
    """
    Use optimal settings for maximum accuracy.
    """
    model = whisper.load_model(model_size)
    
    result = model.transcribe(
        audio_path,
        temperature=0.0,  # Most deterministic
        best_of=5,  # Try 5 decodings, pick best
        beam_size=5,  # Beam search
        patience=1.0,  # Patience for beam search
        condition_on_previous_text=True,  # Use context
        initial_prompt="This is a conversation about technology."  # Context hint
    )
    
    return result

Consejo 5: Proporcione un prompt inicial de contexto

Dar contexto sobre el contenido mejora la precisión:
import whisper

model = whisper.load_model("base")

# Without context
result_basic = model.transcribe("meeting.mp3")

# With context (much better accuracy)
result_context = model.transcribe(
    "meeting.mp3",
    initial_prompt="This is a business meeting discussing project timelines and deliverables."
)

# For technical content
result_tech = model.transcribe(
    "lecture.mp3",
    initial_prompt="This is a computer science lecture about machine learning and neural networks."
)
Cuándo usar prompts iniciales:
  • Contenido técnico: incluya términos del dominio
  • Nombres y lugares: mencione sustantivos propios importantes
  • Acentos: describa el acento o dialecto
  • Contexto: describa el entorno o el tema
Ejemplo:
def transcribe_with_context(audio_path, context_description):
    """
    Transcribe with context for better accuracy.
    """
    model = whisper.load_model("medium")
    
    result = model.transcribe(
        audio_path,
        initial_prompt=context_description,
        language="en"
    )
    
    return result

# Example usage
result = transcribe_with_context(
    "interview.mp3",
    "This is an interview with Dr. Sarah Johnson about medical research. "
    "The conversation includes technical medical terminology."
)

Consejo 6: Maneje bien los archivos de audio largos

Los archivos muy largos pueden reducir la precisión. Así puede manejarlos:
import whisper
from pydub import AudioSegment
import os

def transcribe_long_audio(audio_path, model_size="base", chunk_length_minutes=30):
    """
    Transcribe long audio by splitting into optimal chunks.
    """
    model = whisper.load_model(model_size)
    
    # Load audio
    audio = AudioSegment.from_file(audio_path)
    chunk_length_ms = chunk_length_minutes * 60 * 1000
    
    # Split into chunks
    chunks = []
    for i in range(0, len(audio), chunk_length_ms):
        chunks.append(audio[i:i + chunk_length_ms])
    
    # Transcribe each chunk
    full_text = []
    all_segments = []
    
    for i, chunk in enumerate(chunks):
        chunk_path = f"temp_chunk_{i}.wav"
        chunk.export(chunk_path, format="wav")
        
        print(f"Transcribing chunk {i+1}/{len(chunks)}")
        result = model.transcribe(chunk_path)
        
        # Adjust timestamps for chunk offset
        offset = i * chunk_length_ms / 1000.0
        for segment in result["segments"]:
            segment["start"] += offset
            segment["end"] += offset
            all_segments.append(segment)
        
        full_text.append(result["text"])
        
        # Clean up
        os.remove(chunk_path)
    
    # Combine results
    combined_result = {
        "text": " ".join(full_text),
        "segments": all_segments,
        "language": result["language"]
    }
    
    return combined_result

# Usage
result = transcribe_long_audio("long_podcast.mp3", model_size="medium", chunk_length_minutes=30)
Buenas prácticas para audio largo:
  • Dividir en fragmentos de 20–30 minutos
  • Usar el mismo tamaño de modelo en todos los fragmentos
  • Mantener contexto entre fragmentos
  • Fusionar segmentos con marcas de tiempo correctas

Consejo 7: Optimice para audio ruidoso

Whisper tolera bien el ruido, pero puede mejorar aún más:
import whisper
import noisereduce as nr
import soundfile as sf
import numpy as np

def transcribe_noisy_audio(audio_path, model_size="medium"):
    """
    Reduce noise before transcription for better accuracy.
    """
    # Load audio
    audio, sample_rate = sf.read(audio_path)
    
    # Reduce noise
    reduced_noise = nr.reduce_noise(
        y=audio,
        sr=sample_rate,
        stationary=False,  # For non-stationary noise
        prop_decrease=0.8  # Reduce noise by 80%
    )
    
    # Save cleaned audio
    cleaned_path = "cleaned_audio.wav"
    sf.write(cleaned_path, reduced_noise, sample_rate)
    
    # Transcribe with larger model (better for noisy audio)
    model = whisper.load_model(model_size)
    result = model.transcribe(cleaned_path)
    
    # Clean up
    os.remove(cleaned_path)
    
    return result

# Usage
result = transcribe_noisy_audio("noisy_recording.mp3", model_size="medium")
Para audio ruidoso:
  • Use modelos medium o large
  • Preprocese con reducción de ruido
  • Aumente el parámetro best_of
  • Proporcione contexto sobre las condiciones de ruido

Consejo 8: Use marcas de tiempo por palabra para más control

Las marcas de tiempo a nivel de palabra permiten un control más fino:
import whisper

model = whisper.load_model("base")

# Get word timestamps
result = model.transcribe(
    "audio.mp3",
    word_timestamps=True  # Enable word-level timestamps
)

# Access word timestamps
for segment in result["segments"]:
    print(f"Segment: {segment['text']}")
    print(f"Start: {segment['start']:.2f}s, End: {segment['end']:.2f}s")
    
    if "words" in segment:
        for word in segment["words"]:
            print(f"  Word: {word['word']} ({word['start']:.2f}s - {word['end']:.2f}s)")
Casos de uso:
  • Subtítulos: sincronización precisa por palabra
  • Corrección de errores: identificar palabras problemáticas
  • Búsqueda: encontrar palabras concretas en el texto
  • Análisis del habla: patrones de habla

Consejo 9: Combine varias decodificaciones

El parámetro best_of prueba varias decodificaciones y elige la mejor:
import whisper

model = whisper.load_model("base")

# Single decoding (default)
result_single = model.transcribe("audio.mp3")

# Multiple decodings, pick best (more accurate)
result_best = model.transcribe(
    "audio.mp3",
    best_of=5,  # Try 5 decodings
    temperature=(0.0, 0.2, 0.4, 0.6, 0.8)  # Different temperatures
)
Compromisos:
  • Precisión: mayor con varias decodificaciones
  • Velocidad: más lenta (5× con best_of=5)
  • Úselo cuando: la precisión sea crítica y la velocidad menos importante

Consejo 10: Postprocese las transcripciones

El postprocesado puede corregir errores habituales de Whisper:
import re
import whisper

def post_process_transcript(text):
    """
    Fix common transcription errors.
    """
    # Fix common contractions
    text = re.sub(r"\b(\w+) '(\w+)\b", r"\1'\2", text)  # Fix spacing in contractions
    
    # Fix common homophones (add your own)
    replacements = {
        "there": "their",  # Context-dependent
        "its": "it's",  # Context-dependent
        # Add more based on your domain
    }
    
    # Capitalize sentences
    sentences = re.split(r'([.!?]\s+)', text)
    capitalized = []
    for i, sentence in enumerate(sentences):
        if sentence.strip():
            capitalized.append(sentence[0].upper() + sentence[1:] if len(sentence) > 1 else sentence.upper())
        else:
            capitalized.append(sentence)
    
    return "".join(capitalized)

# Usage
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
processed_text = post_process_transcript(result["text"])

Ejemplo completo: optimización de precisión lista para producción

Ejemplo completo que combina varios consejos de precisión:
import whisper
import os
from pathlib import Path

def transcribe_with_maximum_accuracy(
    audio_path,
    model_size="medium",
    language=None,
    context_prompt=None,
    output_format="txt"
):
    """
    Transcribe audio with maximum accuracy using best practices.
    
    Args:
        audio_path: Path to audio file
        model_size: Whisper model size (medium or large recommended)
        language: Language code (None for auto-detect)
        context_prompt: Initial prompt for context
        output_format: Output format (txt, json, srt)
    """
    # Load model (medium or large for best accuracy)
    print(f"Loading Whisper model: {model_size}")
    model = whisper.load_model(model_size)
    
    # Prepare transcription parameters
    transcribe_kwargs = {
        "temperature": 0.0,  # Most deterministic
        "best_of": 5,  # Try multiple decodings
        "beam_size": 5,  # Beam search
        "patience": 1.0,
        "condition_on_previous_text": True,
        "word_timestamps": True,  # Get word-level timestamps
    }
    
    # Add language if specified
    if language:
        transcribe_kwargs["language"] = language
    
    # Add context prompt if provided
    if context_prompt:
        transcribe_kwargs["initial_prompt"] = context_prompt
    
    # Transcribe
    print(f"Transcribing: {audio_path}")
    result = model.transcribe(audio_path, **transcribe_kwargs)
    
    # Post-process
    result["text"] = post_process_transcript(result["text"])
    
    # Save result
    base_name = Path(audio_path).stem
    output_path = f"{base_name}_transcript.{output_format}"
    
    if output_format == "txt":
        with open(output_path, "w", encoding="utf-8") as f:
            f.write(result["text"])
    elif output_format == "json":
        import json
        with open(output_path, "w", encoding="utf-8") as f:
            json.dump(result, f, indent=2, ensure_ascii=False)
    
    print(f"✓ Transcription saved: {output_path}")
    print(f"  Language: {result['language']}")
    print(f"  Duration: {result['segments'][-1]['end']:.2f}s")
    
    return result

# Example usage
result = transcribe_with_maximum_accuracy(
    audio_path="important_meeting.mp3",
    model_size="medium",
    language="en",
    context_prompt="This is a business meeting discussing quarterly results and project updates.",
    output_format="txt"
)

Comparación de precisión: antes y después de optimizar

Qué puede esperar con la optimización:
OptimizationAccuracy ImprovementSpeed Impact
Model size (base → medium)+15-20%-50%
Language specification+5-10%+10% (faster)
Initial prompt+5-15%No impact
Temperature=0.0+2-5%No impact
best_of=5+3-8%-80% (5x slower)
Audio preprocessing+10-20%Minimal
Las mejoras combinadas pueden aumentar la precisión un 30–50% respecto a la configuración por defecto.

Resumen de buenas prácticas

Para máxima precisión:

  1. ✅ Use el modelo medium o large
  2. ✅ Especifique el idioma explícitamente
  3. ✅ Proporcione contexto con initial_prompt
  4. ✅ Use temperature=0.0 para resultados deterministas
  5. ✅ Active word_timestamps para salida detallada
  6. ✅ Preprocese audio ruidoso
  7. ✅ Divida archivos largos en fragmentos
  8. ✅ Use best_of=5 para contenido crítico

Para equilibrio velocidad/precisión:

  1. ✅ Use el modelo small o base
  2. ✅ Deje que Whisper detecte el idioma automáticamente
  3. ✅ Use la temperatura por defecto
  4. ✅ Omita el parámetro best_of
  5. ✅ Procese archivos con preprocesado mínimo

Errores frecuentes a evitar

❌ Usar el modelo tiny para contenido importante

Solución: Use al menos base, preferiblemente small o medium

❌ No especificar el idioma

Solución: Especifique siempre el idioma cuando lo conozca

❌ Ignorar el contexto

Solución: Use initial_prompt para contenido especializado

❌ Usar ajustes por defecto con audio ruidoso

Solución: Use modelos mayores y preprocesado

❌ Procesar archivos muy largos sin dividir

Solución: Divida en fragmentos de 20–30 minutos

Solución de problemas de precisión

Problema: Baja precisión con términos técnicos

Solución:
result = model.transcribe(
    "technical_audio.mp3",
    initial_prompt="This audio contains technical terminology related to machine learning, neural networks, and deep learning."
)

Problema: Mala precisión con acentos

Solución:
# Use larger model
model = whisper.load_model("medium")

# Provide accent context
result = model.transcribe(
    "accented_audio.mp3",
    initial_prompt="This speaker has a British accent.",
    language="en"
)

Problema: Errores con nombres propios

Solución:
# Include names in initial prompt
result = model.transcribe(
    "interview.mp3",
    initial_prompt="This interview features Dr. Sarah Johnson and Professor Michael Chen discussing research."
)

Conclusión

Mejorar la precisión de Whisper consiste en tomar las decisiones adecuadas:
  • Selección del modelo: Elija medium o large para contenido crítico
  • Configuración: Use temperatura y decodificación óptimas
  • Contexto: Proporcione información del dominio
  • Preprocesado: Limpie el audio antes de transcribir
  • Postprocesado: Corrija errores habituales automáticamente
Ideas clave:
  1. El tamaño del modelo tiene el mayor impacto en la precisión
  2. Especificar el idioma mejora mucho los resultados
  3. Los prompts de contexto ayudan con contenido especializado
  4. Varias decodificaciones (best_of) aumentan la precisión pero ralentizan el proceso
  5. La calidad del audio sigue siendo el factor más importante
Siguiendo estos consejos de precisión de Whisper, puede lograr una calidad de transcripción comparable o superior a servicios comerciales de voz a texto, manteniendo el control total de sus datos y su flujo de trabajo.

¿Listo para mejorar la precisión de Whisper? Empiece usando un modelo mayor e indicando el idioma: verá mejoras de inmediato.

Pruébalo gratis ahora

Prueba ahora nuestro servicio de voz y audio/vídeo con IA. Disfruta de transcripción de voz a texto de alta precisión, traducción multilingüe y diarización inteligente de hablantes, además de generación automática de subtítulos de vídeo, edición inteligente de contenido audiovisual y análisis sincronizado de audio e imagen. Cubre por completo casos como actas de reuniones, creación de vídeos cortos y producción de pódcasts. ¡Empieza tu prueba gratuita hoy mismo!

Sonido a Texto OnlineSonido a Texto GratisConvertidor de Sonido a TextoSonido a Texto MP3Sonido a Texto WAVSonido a Texto con Marcas de TiempoVoz a texto para reunionesSound to Text Multi LanguageSonido a Texto SubtítulosConvertir WAV a textoVoz a TextoVoz a Texto en LíneaVoz a textoConvertir MP3 a textoConvertir grabación de voz a textoEscritura por Voz OnlineVoz a Texto con Marcas de TiempoVoz a Texto en Tiempo RealVoz a Texto para Audio LargoVoz a Texto para VideoVoz a Texto para YouTubeVoz a Texto para Edición de VideoVoz a Texto para SubtítulosVoz a Texto para PodcastsVoz a Texto para EntrevistasAudio de Entrevista a TextoVoz a Texto para GrabacionesVoz a Texto para ReunionesVoz a Texto para ConferenciasVoz a Texto para NotasVoz a Texto MultiidiomaVoz a Texto PrecisaVoz a Texto RápidaAlternativa Premiere Pro Voz a TextoAlternativa DaVinci Voz a TextoAlternativa VEED Voz a TextoAlternativa InVideo Voz a TextoAlternativa Otter.ai Voz a TextoAlternativa Descript Voz a TextoAlternativa Trint Voz a TextoAlternativa Rev Voz a TextoAlternativa Sonix Voz a TextoAlternativa Happy Scribe Voz a TextoAlternativa Zoom Voz a TextoAlternativa Google Meet Voz a TextoAlternativa Microsoft Teams Voz a TextoAlternativa Fireflies.ai Voz a TextoAlternativa Fathom Voz a TextoAlternativa FlexClip Voz a TextoAlternativa Kapwing Voz a TextoAlternativa Canva Voz a TextoVoz a Texto para Audio LargoVoz a Texto con IAVoz a Texto GratisVoz a Texto Sin AnunciosVoz a Texto para Audio con RuidoVoz a Texto con TiempoGenerar Subtítulos desde AudioTranscripción de Podcasts OnlineTranscribir Llamadas de ClientesVoz de TikTok a TextoAudio de TikTok a TextoVoz de YouTube a TextoAudio de YouTube a TextoNota de Voz a TextoMensaje de Voz de WhatsApp a TextoMensaje de Voz de Telegram a TextoTranscripción de Llamadas DiscordVoz de Twitch a TextoVoz de Skype a TextoVoz de Messenger a TextoMensaje de Voz de LINE a TextoTranscribir Vlogs a TextoConvertir Audio de Sermón a TextoConvertir Habla en EscrituraTraducir Audio a TextoConvertir Notas de Audio a TextoEscritura por VozEscritura por Voz para ReunionesEscritura por Voz para YouTubeHablar para EscribirEscritura Sin ManosVoz a PalabrasHabla a PalabrasHabla a Texto en LíneaOnline Transcription SoftwareHabla a Texto para ReunionesHabla a Texto RápidoReal Time Speech to TextLive Transcription AppHabla a Texto para TikTokSonido a Texto para TikTokHablar a PalabrasHablar a TextoTalk to Text FreeTalk to Text OnlineTalk to Text for YouTubeTalk to Text for SubtitlesTalk to Text for Content CreatorsTalk to Text for MeetingsAudio a EscrituraSonido a TextoHerramienta de Escritura por VozHerramienta de Escritura por HablaDictado por VozHerramienta de Transcripción LegalHerramienta de Dictado MédicoTranscripción de Audio JaponésTranscripción de Reuniones en CoreanoHerramienta de Transcripción de ReunionesAudio de Reunión a TextoConvertidor de Conferencias a TextoAudio de Conferencia a TextoTranscripción de Video a TextoGenerador de Subtítulos para TikTokTranscripción de Centro de LlamadasHerramienta de Audio de Reels a TextoTranscribir MP3 a TextoTranscribir archivo WAV a textoCapCut Voz a TextoCapCut Voz a TextoVoice to Text in EnglishAudio a Texto en InglésVoice to Text in SpanishVoice to Text in FrenchAudio a Texto en FrancésVoice to Text in GermanAudio a Texto en AlemánVoice to Text in JapaneseAudio a Texto en JaponésVoice to Text in KoreanAudio a Texto en CoreanoVoice to Text in PortugueseVoice to Text in ArabicVoice to Text in ChineseVoice to Text in HindiVoice to Text in RussianWeb Voice Typing ToolVoice Typing Website