Actualización : olvidé el enlace al repositorio: https://github.com/snakers4/silero-models#text-to-speech y al colab con ejemplos: https://colab.research.google.com/github/snakers4 / silero- modelos / blob / master / examples_tts.ipynb
Estamos muy contentos de que a Habr le haya gustado nuestro último artículo . Hemos recibido muchos comentarios positivos y negativos. También en él hicimos una serie de promesas para desarrollar nuestra síntesis.
Hemos logrado un progreso significativo en estos puntos, pero el lanzamiento del ultimátum con todas las características nuevas y los altavoces puede llevar un tiempo relativamente largo, por lo que no querría quedarme en silencio de radio durante mucho tiempo. En este artículo, responderemos críticas justas y no tan críticas y compartiremos las buenas noticias sobre el desarrollo de nuestra síntesis.
En breve:
- Hicimos nuestro codificador de voz 4 veces más rápido;
- Hemos hecho que los modelos de empaque sean más convenientes;
- Hicimos un modelo multihablante / multilingüe y "forzamos" a los hablantes a hablar idiomas "extranjeros";
- ;
- 15 — 1 ( 3-7 ) 5 ( ). ;
- , . (, , , , ). — ;
- , , - 5-10 , ;
, ,
. . . — ( ).
, ( — ). … . .
warning
, ( ), . ( , ).
- ;
- ( , , , );
- ( 2 - 1-2);
silero-vad
, , silero-models
. , :
-
torch.hub
, (omegaconf
yaml-torchaudio
). PyTorch. , , ( , c " "). colab, standalone . -# Minimal Example to Run Locally
; - , , . ;
torch.hub
:
import torch
language = 'ru'
speaker = 'kseniya_v2'
sample_rate = 16000
device = torch.device('cpu')
model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models',
model='silero_tts',
language=language,
speaker=speaker)
model.to(device) # gpu or cpu
audio = model.apply_tts(texts=[example_text],
sample_rate=sample_rate)
standalone :
import os
import torch
device = torch.device('cpu')
torch.set_num_threads(4)
local_file = 'model.pt'
if not os.path.isfile(local_file):
torch.hub.download_url_to_file('https://models.silero.ai/models/tts/ru/v2_kseniya.pt',
local_file)
model = torch.package.PackageImporter(local_file).load_pickle("tts_models", "model")
model.to(device)
example_batch = [' + + .',
' - !',
'+ + + +.']
sample_rate = 16000
audio_paths = model.save_wav(texts=example_batch,
sample_rate=sample_rate)
, 15 — 20 . , , , . 2-3 .
:
15 — 20 | ||
5-6 | , , | |
3 | , | |
1 | ||
-------------------------- | ------------------------ | --------------------------------------------------------- |
5-6 | , | , , |
5-6 | , | , , |
5-6 | , | , , |
3 | , | , , |
1 | , | , , |
3 — 15 | , | , 3 |
, 6 :
, 6 :
, 3 :
, 3 .
, 3 :
, 1 :
1 .
, 1 :
1 .
, 3 — 15 :
, ? , - 3 .
:
, - ( ).
, , .
, , .
, , . . , . , , , .
, , "" ( LTV , - ), , , .
:
, :
, .
:
-. , : Mein König, das Fichtenbaum, Bundesausbildungsförderungsgesetz, die Ubüng.
.
. . , . , .
:
- 5-6 (, );
- , , 15 — 1 ;
- , ;
- ;
- , , (40 — 100 ) ;
, "" -. . , .
, .
, , / , , .
, . . , , .
, .
, . , "" . , , " ".
4 ( 0.1 — 0.2 MOS ) :
8 kHz | 16 kHz | |
---|---|---|
v1 , 1 | 18 | 8 |
v2 , 1 | 70 | 35 |
, . , 10 . v2
.
, ( abandonware). , , " ".
:
- . 100 — 200 . ;
- , - ;
- , ;
, , :
- ( 130 ), 99.9%;
- ( 540 ), 99.9%;
- 1,300 ( );
- ( , 2 ), 99%;
- 3% -, (
—
,
—
). , ;
3% , , ( ). , — . .
:
- ,
(
—
,
—
), , . (
, hard negative ); -
99% ( hard positive, hard negative ); - , . - —
; - ,
.
;
, :
(
, -
,
).
(
) , .
, "", , .
:
-
middleware
; - / - - ;
- , ;
- ;
— middleware
. / - , — + (1-2 ), .
— . , - . : " — ". "" , ( 0.25 — 0.5 ).
— , 1 1 . , STT . , . , ( ), — .
.
, - — . , - — .
:
- 4 ;
- ( );
- ;
-
; - ;
:
- ;
- (10+ );
- , ;
- ;
- ;
- ;
— — https://github.com/snakers4/silero-models#text-to-speech — https://colab.research.google.com/github/snakers4/silero-models/blob/master/examples_tts.ipynb
— , . . 1 . .