на предложения и один большой аудиофайл, с голосом диктора. Между предложениями диктор делает паузу. Иногда диктор одно предложение начинает читать, понимает что ошибся и сделав паузу, еще раз читает.
Надо теперь сопоставить куски аудио к предложениям.
Кто как решает такую задачу?
Заранее записать каждое предложение в отдельный файл не рассматриваем. Имеем то, что имеем.
Текст разбиваем на предложения, аудио - по большим паузам (размер паузы надо подобрать). В каждом аудио распознаем речь с помощью ASR. Потом, для каждого кусочка аудио с распознанные текстом, измеряем какой-нибудь edit distance до каждого ground truth предложения. Выбираем наиболее близкое предложение, и если edit distance ниже порога - берём его как текст для этого кусочка. Чем ниже порог - тем больше будет потеряно данных, но тем чище будет датасет
так и делаю сейчас. но много нюансов: 1.одно предложение может быть разбито на несколько аудио файлов 2. два предложения могут находиться внутри одного аудиофайла(если паузу сделал маленькую) 3. если все делать автоматом, то приходится отбраковывать много данных. а они на вес золота. поэтому пока думаю в сторону некого UI где человек может просмотреть. Но надо по максимуму упростить ему задачу
Subtitle composer, редактор субтитров. У меня были аудио, распознала их большим русским адаптированным виспером с помощью whisperX (чтобы были знаки препинания и таймстепы), а потом все проверяла в редакторе, там можно даже смещать таймкоды, очень быстро и удобно) Потом изи делила по предложениям все и текст и аудио (благодаря таймстепам)
у меня уже есть оригинальный текст. как раз не хочется тратить время на прослушивание 20+ часов. таймкоды распознанных слов то же есть. тут больше задача про то, как сопоставить эти два текста. тогда из распознанного можно просто перенести таймкоды на исходный текст
В такой ситуации надо однозначно править сырой аудиофайл, удаляя из него ошибки диктора.
Тогда: 1. Берем первое предложение 2. Считаем в нем количество слов (например, N) 3. Идем с окном N слов по распознанным словам с таймстемпами 4. Для каждого окна считаем fuzz.ratio 5. Выбираем наиболее похожее окно, сравниваем его с каким-то трешолдом 6. Если выше трешолда - значит либо ASR не очень (на студийных виспер должен быть отличным), либо в оригинальном файле действительно нет нужного предложения 7. Если ниже трешолда - то мы нашли нужный участок в аудиозаписи, начало - start_time первого слова, конец - end_time последнего слова =)
Обсуждают сегодня