Есть ли способ улучшить точность pocketsphinx при распознавании речи?

У меня есть сценарий, который просто конвертирует видео в формат wav с определенными параметрами, а затем расшифровывает его аудио.

def video_to_wav(self):
    mp4_video = os.path.join(self.dir, self.name + ".mp4")
    if os.path.isfile(mp4_video):
        subprocess.call("ffmpeg -i {0} -acodec pcm_s16le -ac 1 -ar 16000 {1}.wav".format(
            mp4_video, os.path.join(self.dir, self.name)), shell=True, env=os.environ)
        os.remove(mp4_video)
    else:
        raise SystemError
    return self.name + ".wav"

Для транскрипции аудио я выбрал PocketSphinx, но я использовал его из распознавания речи.

PocketSphinx довольно неточен, если звук не имеет очень высокого качества (он едва распознает речь с приличным / хорошим качеством). Вы можете видеть, что параметры конвертации специально выбраны для распознавания сфинксов:

ffmpeg -i {0} -acodec pcm_s16le -ac 1 -ar 16000 {1}.wav


Что я могу сделать, чтобы повысить точность? Возможно, акустическая модель настроит точность распознавания речи? Если да, то как я могу использовать его с модулем speech-recognition?

Спасибо!


person ShellRox    schedule 06.07.2018    source источник


Ответы (2)


Для обеспечения точности вы можете использовать более продвинутый инструментарий, например Kaldi. Для python вы можете проверить https://github.com/gooofy/py-kaldi-asr.

person Nikolay Shmyrev    schedule 18.08.2018

Лучший способ повысить точность PocketSphinx - для заданной частоты дискретизации (например, Гц) - это уменьшить диапазон словаря, который вы хотите, чтобы он распознавал. Если вы можете ограничить его даже несколькими тысячами возможных слов, его точность значительно улучшится. На веб-сайте CMU Sphinx есть инструменты, которые помогут вам в этом.

Кроме того, поскольку вы работаете с записью, вы можете настроить параметры обратной трассировки и достоверности, чтобы получить более медленные, но более точные результаты.

PocketSphinx включает метки времени в текстовый вывод и включает уведомления, когда его уверенность в транскрипции низкая. Вы можете попробовать запустить два процесса: первый проход с меньшим словарным запасом, а затем повторить попытку этих интервалов низкой достоверности с более широким словарем во втором проходе. Затем вам нужно будет объединить транскрипции текста.

person JimmyNJ    schedule 19.06.2020
comment
16 кГц - как вы работаете, было приемлемым для моей работы со Sphinx в прошлом. Будьте осторожны при объединении стереофонических (или лучше) звуковых потоков в один монопоток из видео. Часто в центральном канале больше речевого контента, подумайте о возможной ценности его изоляции для транскрипции. - person JimmyNJ; 19.06.2020