Ответ 1
Многие люди, кажется, предлагают какое-то расстояние редактирования, что ИМО является совершенно неправильным подходом для определения сходства двух речевых моделей, особенно для шаблонов, столь же коротких, как подразумевается в OP. Конкретные алгоритмы, используемые распознаванием речи на самом деле, почти противоположны тому, что вы хотели бы использовать здесь. Проблема распознавания речи заключается в разрешении многих подобных произношений тому же представлению. Проблема здесь состоит в том, чтобы взять несколько немного отличающихся произношений и получить какое-то значимое расстояние между ними.
Я сделал довольно много этого материала для крупномасштабной науки о данных, и, хотя я не могу прокомментировать, как именно это делают проприетарные программы, я могу прокомментировать, как это делается в академических кругах, и предоставить простое решение и даст вам силу и гибкость, которые вы хотите для этого подхода.
Во-первых: Предполагая, что у вас есть некоторый фрагмент аудио без какой-либо фильтрации. Так же, как это было бы получено от микрофона. Первым шагом является устранение фонового шума. Для этого существует несколько разных методов, но я собираюсь предположить, что то, что вы хотите, - это то, что будет хорошо работать, без невероятно сложного в реализации.
- Отфильтруйте аудио, используя модуль scipy filtering здесь. Есть много частот, которые собирают микрофоны, которые просто не полезны для категоризации речи. Я бы предложил либо Bessel, либо фильтр Butterworth, чтобы гарантировать, что ваша волна будет продолжаться с помощью фильтрации. Основные частоты для повседневной речи обычно составляют от 800 до 2000 Гц (ссылка), поэтому разумное отсечение будет примерно таким же, как 300-4000 Гц, убедитесь, что вы ничего не потеряли.
- Ищите наименее активную часть речи и предположите, что это разумное представление фонового шума. На этом этапе вам захочется запустить серию преобразований Фурье вдоль ваших данных (или создать спектрограмму) и найти часть вашей речевой записи, которая имеет самый низкий среднечастотный отклик. После того, как у вас есть этот снимок, вы должны вычесть его из всех других точек в вашем примере аудио.
- На этом этапе должен быть аудиофайл, который в основном является только вашей речью пользователя, и должен быть готов к сравнению с другим файлом, который прошел этот процесс. Теперь мы хотим фактически закрепить звук и сравнить этот клип с некоторым основным клипом.
Во-вторых:. Вам нужно будет найти метрику расстояния между двумя речевыми образцами, есть несколько способов сделать это, но я собираюсь предположить, что у нас есть вывод первой части и некоторый мастер файл, который прошел через аналогичную обработку.
-
Создайте спектрограмму рассматриваемого звукового файла (example). Результатом этого является в конечном итоге изображение, которое может быть представлено как 2-мерный массив значений частотной характеристики. Спектрограмма по существу является преобразованием Фурье с течением времени, когда цвет соответствует интенсивности.
-
Используйте OpenCV (имеет привязки python, пример), чтобы запустить обнаружение blob на вашей спектрограмме. Эффективно это будет искать большой красочный blob в середине вашей спектрограммы и дать вам некоторые ограничения на это. Эффективно, что это должно сделать, возвращается значительно более редкая версия исходного 2d-массива, который только представляет речь. (Предполагая, что ваш аудиофайл будет иметь некоторые трейлинг файлы на переднем и заднем концах записи)
-
Нормализовать два капли для учета различий в скорости речи. Все говорят на разных скоростях, и поэтому ваши капли, вероятно, будут иметь разные размеры вдоль оси x (время). Это, в конечном счете, приведет к повышению уровня проверки вашего алгоритма, который вам не нужен для скорости речи. Этот шаг не нужен, если вы также хотите, чтобы они говорили на той же скорости, что и главная копия, но я бы предложил. В принципе, вы хотите растянуть более короткую версию, умножив ее на временную ось на некоторую константу, равную только отношению длин двух ваших блоков.
-
Вы также должны нормализовать две капли на основе максимальной и минимальной интенсивности для учета людей, говорящих на разных томах. Опять же, это зависит от вашего усмотрения, но чтобы исправить это, вы должны найти аналогичные коэффициенты для общего диапазона интенсивностей, которые у вас есть, а также две максимальные интенсивности записи и убедитесь, что эти два значения совпадают между вашими 2-мя массивами.
Третий: Теперь, когда у вас есть 2-мерные массивы, представляющие ваши два речевых события, теоретически они должны содержать всю полезную информацию, чтобы сравнить их напрямую. К счастью, сравнение двух матриц - это хорошо разрешенная проблема, и есть несколько способов двигаться вперед.
-
Лично я бы предложил использовать метрику, такую как сходство с косинусом, чтобы определить разницу между двумя вашими блоками, но это не единственное решение и, хотя это даст вам быструю проверку, вы можете сделать лучше.
-
Вы можете попытаться вычесть одну матрицу из другой и получить оценку того, какая разница между ними, что, вероятно, было бы более точным, чем простое косинусное расстояние.
-
Это может быть излишним, но вы можете предположить, что есть определенные области речи, которые имеют более или менее важное значение для оценки различий между блоками (может быть, неважно, использует ли кто-то длинный я вместо короткого i, но ag вместо ak может быть совсем другим словом). Для чего-то подобного вам нужно разработать маску для разностного массива на предыдущем шаге и умножить на нее все ваши значения.
-
Какой бы метод вы ни выбрали, теперь вы можете просто установить порог разницы и убедиться, что разница между двумя блоками ниже желаемого порога. Если это так, захваченная речь достаточно похожа на правильность. В противном случае попробуйте еще раз.
Я надеюсь, что это полезно, и опять же, я не могу заверить вас, что это точный алгоритм, который использует компания, поскольку эта информация чрезвычайно запатентована и не открыта для публики, но я могу заверить вас, что методы, подобные этим используются в самых лучших документах в академических кругах и что эти методы позволят вам добиться отличного баланса точности и простоты реализации. Дайте мне знать, если у вас есть какие-либо вопросы, и удачи в ваших будущих науках о развитии данных!