Volver al inicio

Silero-TTS v5: preguntas con entonación en ruso

Silero-TTS v5 actualizado para el idioma ruso con soporte para cuatro tipos de preguntas: acentos prosódicos en preguntas generales vía *asteriscos*, SSML y homógrafos automáticos. Ejemplos de código en pip y torch.hub demuestran generación de audio en CPU.

Preguntas en silero-tts v5: prosodia y acentos en ruso
Advertisement 728x90

Silero-TTS v5: Ahora con cuatro tipos de entonación interrogativa en ruso

La versión v5 de Silero-TTS para ruso ahora genera voz con una entonación interrogativa precisa. El modelo maneja cuatro tipos de preguntas: especiales (con palabras interrogativas), generales (con énfasis prosódico), alternativas y preguntas de cola. En las preguntas generales, el centro entonacional se indica con asteriscos — esto mejora la expresividad sin necesidad de parámetros adicionales.

Características clave de la actualización:

  • Manejo automático de homógrafos y acentuación.
  • Soporte completo de SSML para control de prosodia.
  • Alta velocidad de inferencia en CPU.
  • Voces: aidar, baya, kseniya, xenia (eugene en desarrollo).

Fundamentos lingüísticos de la prosodia interrogativa

En ruso, las preguntas se marcan gramaticalmente (orden de palabras, rara vez), léxicamente (palabras interrogativas, partículas) y prosódicamente (entonación). Las preguntas generales dependen únicamente de la prosodia: el centro entonacional puede caer en cualquier palabra, alterando así el significado.

Ejemplos:

Google AdInline article slot
  • Did he COME? — énfasis en la acción.
  • HE came? — énfasis en el sujeto.

Entrenar el modelo requiere etiquetar los tipos de preguntas y las posiciones del acento. Los datos de corpus sin estas anotaciones no son suficientes.

Ejemplos de síntesis de preguntas generales

Código para generar preguntas con diferentes posiciones de acento:

import IPython.display as ipd

texts = [
  '*Organizers* sent us electronic tickets?',
  'Organizers *sent* us electronic tickets?',
  'Organizers sent *us* electronic tickets?',
  'Organizers sent us *electronic* tickets?',
  'Organizers sent us electronic *tickets*?'
]

for i, text in enumerate(texts):
    audio = model.apply_tts(text=text, speaker='xenia')
    ipd.display(ipd.Audio(audio, rate=48000))

Las muestras de audio muestran un aumento suave en el tono sobre la palabra enfatizada y una caída al final.

Google AdInline article slot

Instalación y uso básico

Instala mediante pip:

!pip install silero
from silero import silero_tts
model, example_text = silero_tts(language='ru', speaker='v5_4_ru')
audio = model.apply_tts(text=example_text)

Inicialización completa mediante torch.hub:

import torch

language = 'ru'
model_id = 'v5_4_ru'
device = torch.device('cpu')
model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models',
                                     model='silero_tts',
                                     language=language,
                                     speaker=model_id)
model.to(device)
sample_rate = 48000
speaker = 'xenia'
put_accent=True
put_yo=True
put_stress_homo=True
put_yo_homo=True

example_text = 'My name is Leva Korolev. I am ready. And I am ready to open locks of any complexity!'

audio = model.apply_tts(text=example_text,
                        speaker=speaker,
                        sample_rate=sample_rate,
                        put_accent=put_accent,
                        put_yo=put_yo,
                        put_stress_homo=put_stress_homo,
                        put_yo_homo=put_yo_homo)

Ejemplo de SSML con control de prosodia:

Google AdInline article slot
ssml_sample = """
              <speak>
              <p>
                  When I wake up, <prosody rate="x-slow">I speak quite slowly</prosody>.
                  Then I start speaking in my normal voice,
                  <prosody pitch="x-high">and I can speak in a higher tone</prosody>,
                  or <prosody pitch="x-low">conversely, lower</prosody>.
                  Then, if I am lucky, <prosody rate="fast">I can speak quite quickly.</prosody>
                  And I can make pauses of any length, for example, two seconds <break time="2000ms"/>
                  <p>
                    Also I can make pauses between paragraphs.
                  </p>
                  <p>
                    <s>And I can also make pauses between sentences.</s>
                    <s>Here, for example, like now.</s>
                  </p>
              </p>
              </speak>
              """

audio = model.apply_tts(ssml_text=ssml_sample,
                        speaker=speaker,
                        sample_rate=sample_rate)

Parámetros de entonación y recomendaciones

  • intensity=3: intensidad de la entonación interrogativa (por defecto, óptimo).
  • Para preguntas especiales, alternativas y de cola, el acento es opcional.
  • Las preguntas generales requieren asteriscos para posicionar exactamente el acento.

Tipos de preguntas y su manejo:

  • Especiales: What? Where? When? — marcado léxico + prosodia estándar.
  • Generales: You home? — acento prosódico en cualquier palabra.
  • Alternativas: Fish or meat? — entonación sobre las opciones.
  • De cola: No, really? — tono ascendente en la parte final.

Lo que realmente importa

  • Silero-TTS v5 genera preguntas con acento prosódico en posiciones arbitrarias sin GPU.
  • Soporte para cuatro tipos de preguntas mediante marcado simple con asteriscos en casos generales.
  • Integración de SSML para ajustar finamente la prosodia y pausas.
  • Instalación mediante pip/torch.hub, sample_rate=48000 Hz.
  • Énfasis en oraciones declarativas previsto para futuras actualizaciones.

— Editorial Team

Advertisement 728x90

Leer después