Специалистам по распознаванию речи давно не хватало большого открытого корпуса устной русской речи, поэтому только крупные компании могли позволить себе заниматься этой задачей, но они не спешили делиться своими наработками.
Мы торопимся исправить это годами длящееся недоразумение.
Итак, мы предлагаем вашему вниманию набор данных из 4000 часов аннотированной устной речи, собранный из различных интернет-источников.
Подробности под катом.
Вот данные по текущей версии 0.3:
Тип данных | Аннотация | Качество | Фразы | Часы | GB |
---|---|---|---|---|---|
Книги | alignment | 95% / чистый | 1,1M | 1,511 | 166 |
Звонки | ASR | 70% / шумный | 837K | 812 | 89 |
Генерированные (русские адреса) | TTS | 100% / 4 голоса | 1,7M | 754 | 81 |
Видео с YouTube | субтитры | 95% / шумный | 786K | 724 | 78 |
Книги | ASR | 70% / шумный | 124K | 116 | 13 |
Другие датасеты | начитывание и alignment | 99% / чистый | 17K | 43 | 5 |
А вот вам сразу ссылка на сайт нашего корпуса: github.com/snakers4/open_stt
Почему 10 тысяч часов?
Есть различные исследования генерализации нейросетей при распознавании речи, но известно, что хорошая генерализация не получается на наборах данных меньше 1000 часов. Цифра порядка 10 тысяч часов уже считается приемлемой в большинстве случаев, а дальше уже зависит от конкретной задачи.
Что ещё сделать, чтобы улучшить качество распознавания, если данных по-прежнему не хватает?
Зачастую, можно приспособить нейросеть к вашим дикторам через начитку дикторами текстов.
Также можно приспособить нейросеть к словарю из вашей предметной области (языковая модель).
Будем ли мы развивать проект дальше?
Наша работа на этом не закончена, мы хотим получить хотя бы 10 тысяч часов аннотированной речи.
А дальше мы собираемся делать открытые и коммерческие модели для распознавания речи с использованием этого датасета. И вам предлагаем присоединяться: помогайте нам улучшать датасет, используйте его в своих задачах.
Как мы делали этот датасет?
- Нашли каналы с качественными субтитрами в YouTube, скачали аудио и субтитры
- Давали аудио для распознавания другим системам распознавания речи
- Начитывали адреса робо-голосами
- Нашли в интернете аудиокниги и тексты книг, после чего разбили на фрагменты по паузам и сопоставили одно с другим (так называемая задача «alignment»)
- Добавили имеющиеся в интернете маленькие русские датасеты.
- После этого преобразовали файлы в единый формат (16-bit wav, 16 kHz, mono, иерархическое расположение файлов на диске).
- Метаданные сохранили в отдельном файле manifest.csv .
Как это использовать:
Файловая БД
Расположение файлов определяется их хешами, вот таким образом:
target_format = 'wav'
wavb = wav.tobytes()
f_hash = hashlib.sha1(wavb).hexdigest()
store_path = Path(root_folder,
f_hash[0],
f_hash[1:3],
f_hash[3:15]+'.'+target_format)
Чтение файлов
from utils.open_stt_utils import read_manifest
from scipy.io import wavfile
from pathlib import Path
manifest_df = read_manifest('path/to/manifest.csv')
for info in manifest_df.itertuples():
sample_rate, sound = wavfile.read(info.wav_path)
text = Path(info.text_path).read_text()
duration = info.duration
Файлы manifest содержат тройки: имя аудио-файла, имя файла с текстовым описанием, и длительность фразы в секундах.
Фильтрация файлов только определённой длины
from utils.open_stt_utils import (plain_merge_manifests,
check_files,
save_manifest)
train_manifests = [
'path/to/manifest1.csv',
'path/to/manifest2.csv',
]
train_manifest = plain_merge_manifests(train_manifests,
MIN_DURATION=0.1,
MAX_DURATION=100)
check_files(train_manifest)
save_manifest(train_manifest,
'my_manifest.csv')
Что почитать или посмотреть на русском языке, чтобы лучше познакомиться с задачей распознавания речи?
Недавно в рамках курса Deep Learning на пальцах мы записали лекцию про задачу распознавания речи (и немного про синтез). Возможно, она будет вам полезной!
Лицензионные вопросы
- Мы выкладываем датасет под двойной лицензией: для некоммерческих целей мы предлагаем лицензию cc-by-nc 4.0, для коммерческих целей — использование после договорённости с нами.
- Как обычно в таких случаях, все права на использованные данных, входящих в датасет, остаются у их владельцев. Наши права распространяются на сам датасет. Для научных и образовательных целей при этом действуют отдельные правила, смотрите законодательство вашей страны.
Ещё раз сайт проекта для тех, кто не увидел ссылку выше: github.com/snakers4/open_stt
Автор: buriy