Bark: преобразование текста в аудио, реалистичное звучание и … Попробовать БЕСПЛАТНО!
Попробуйте бесплатно здесь: BARK
Последнее десятилетие ознаменовалось значительным прогрессом в области синтеза речи благодаря возможностям нейронных сетей и сквозного моделирования. Этот прогресс привел к созданию каскадных систем преобразования текста в речь (TTS), использующих в качестве промежуточных звеньев акустические модели и вокодеры со спектрограммами мелодии. Однако даже при наличии сложных систем TTS, способных генерировать высококачественную речь, существует постоянная потребность в чистых и качественных обучающих данных. Широкомасштабные данные, найденные в Интернете, не отвечают этим требованиям, что приводит к снижению производительности. В этом блоге рассматривается принципиально новый подход к решению проблемы “нулевых” TTS с помощью фреймворка языковой модели Bark.
Проблема “нулевого выстрела” в TTS
Существующие системы TTS, несмотря на свою эффективность, все еще сталкиваются с проблемами, когда речь идет о сценариях TTS с нулевым выстрелом. К основным проблемам относятся низкая обобщенность, ухудшение сходства с диктором и снижение естественности речи для невидимых дикторов. Предыдущие подходы, такие как адаптация к дикторам и методы кодирования, предполагают сложную тонкую настройку, предварительную разработку функций или сложную инженерию структуры. Более масштабируемое решение заключается в обучении моделей на обширных и разнообразных данных, что отражает успехи, достигнутые в синтезе текста.
Использование массивных данных с помощью LibriLight
Bark обучается на корпусе LibriLight – обширном наборе данных, содержащем 60 тыс. часов английской речи от более чем 7000 уникальных дикторов. Несмотря на то, что этот массив содержит зашумленную речь и неточные транскрипции, в нем представлен широкий спектр дикторов и просодий. Ключевая инновация заключается в способности Bark работать с таким массивным и разнообразным набором данных, демонстрируя свою устойчивость к шумам и способность к обобщению.
Сила Bark
Влияние Bark многогранно и преобразующе:
- Внутриконтекстное обучение: Bark отражает возможности GPT-3, обеспечивая эффективное внутриконтекстное обучение. Это означает, что модель не требует сложной тонкой настройки, заранее разработанных функций или сложных кодировщиков речи.
- Масштабирование данных: Благодаря использованию огромного количества данных с полунаблюдением Bark достигает уровня производительности и устойчивости, ранее недооцененного в системах TTS.
- Разнообразный синтез: Акустические маркеры Bark позволяют генерировать различные результаты для одного и того же текста и целевого диктора. Эта возможность может быть использована для создания псевдоданных в задачах распознавания речи.
- Синтез естественной речи: Результаты оценки на наборах данных LibriSpeech и VCTK показали, что Bark синтезирует естественную речь с высокой степенью сходства с диктором, превосходя по этому показателю современные системы TTS с нулевым уровнем громкости.
Использование Bark
Первым шагом на пути к кору будет установка библиотеки 🤗 (Hugging Face) Transformers. Убедитесь, что у вас установлена версия 4.31.0 или более поздняя версия:
pip install transformers
После установки библиотеки 🤗 Transformers генерировать речь с помощью Bark становится очень просто. Просто выполните следующие действия:
from transformers import AutoProcessor, BarkModel
# Load the processor and model
processor = AutoProcessor.from_pretrained("suno/bark")
model = BarkModel.from_pretrained("suno/bark")
# Define the voice preset
voice_preset = "v2/en_speaker_6"
# Prepare the input text
text = "Hello, my dog is cute"
inputs = processor(text, voice_preset=voice_preset)
# Generate audio samples
audio_array = model.generate(**inputs)
# Convert audio to numpy array
audio_array = audio_array.cpu().numpy().squeeze()
Прислушиваясь к своему творению
Теперь, когда вы сгенерировали образец речи, настало время оценить результат. В блокноте Jupyter Notebook можно использовать следующий фрагмент кода для прослушивания аудиообразцов:
from IPython.display import Audio
sample_rate = model.generation_config.sample_rate
Audio(audio_array, rate=sample_rate)
Сохранение шедевра
Если вы хотите сохранить свой шедевр речевой генерации в виде .wav-файла, вы можете воспользоваться сторонними библиотеками, например scipy:
import scipy
sample_rate = model.generation_config.sample_rate
scipy.io.wavfile.write("bark_out.wav", rate=sample_rate, data=audio_array)
Дополнительные голоса
Дополнительные голосовые пресеты для выбора и на разных языках можно найти в библиотеке Bark Speaker Library (v2) (notion.site).
Вы можете использовать любой из этих пресетов для изменения этой строки:
# Define the voice preset
voice_preset = "v2/en_speaker_6"
(Дополнительно) Дополнительно: Генерация длинных текстов
Чтобы создать более длинные аудиоклипы, мы разделим скрипт на отдельные предложения с помощью библиотеки NLTK. Таким образом, мы уложимся в 15-секундный порог для бесплатной версии Bark.
script = """
Hey, have you heard about this new text-to-audio model called "Bark"?
Apparently, it's the most realistic and natural-sounding text-to-audio model
out there right now. People are saying it sounds just like a real person speaking.
I think it uses advanced machine learning algorithms to analyze and understand the
nuances of human speech, and then replicates those nuances in its own speech output.
It's pretty impressive, and I bet it could be used for things like audiobooks or podcasts.
In fact, I heard that some publishers are already starting to use Bark to create audiobooks.
It would be like having your own personal voiceover artist. I really think Bark is going to
be a game-changer in the world of text-to-audio technology.
""".replace("\n", " ").strip()
import nltk
nltk.download('punkt')
sentences = nltk.sent_tokenize(script)
Чтобы сгенерировать более длинный аудиоклип, плавно переходящий от одного предложения к другому, можно просмотреть предложения и сгенерировать звук для каждого из них. Вот как это можно сделать:
import numpy as np
# Initialize an array to store the audio samples
audio_full = np.array([])
# Loop through sentences and generate audio
for sentence in sentences:
inputs = processor(sentence, voice_preset=voice_preset)
audio_array = model.generate(**inputs).cpu().numpy().squeeze()
audio_full = np.concatenate((audio_full, audio_array))
# Save or play the concatenated audio
scipy.io.wavfile.write("bark_long_audio.wav", rate=SAMPLE_RATE, data=audio_full)
Этот подход использует токенизацию предложений для создания плавного потока речи, что позволяет получать более длинные аудиоклипы, сохраняющие связность.