Как обстоят дела с распознаванием речи в 2021 году

Итак, вы захотели распознать речь на Python и обнаружили, что существует множество различных вариантов. Не бойтесь, я здесь, чтобы помочь. Мы можем разделить наши параметры распознавания речи Python на две основные категории: с открытым исходным кодом и облако.

Решения с открытым исходным кодом — это библиотеки с открытым исходным кодом (обычно на github), которые вы импортируете в свою программу и используете программно, выполняя вычисления на своих собственных ресурсах. Облачные решения для распознавания речи Python выполняют вычисления на облачных ресурсах и обычно предоставляются через конечные точки API, которые вы можете использовать.

Варианты распознавания речи с открытым исходным кодом и облачным Python

Одним из самых больших преимуществ решений распознавания речи Open Source Python является то, что это открытый исходный код. Открытый исходный код означает, что вы можете видеть исходный код. Вы можете точно знать, что делается, как это делается и когда это делается. Если вы высококвалифицированный инженер, то ещё одним большим преимуществом таких является то, что вы можете самостоятельно изменить код. Самый большой недостаток решений с открытым исходным кодом заключается в том, что вычислительная мощность, необходимая для распознавания речи, должна исходить от вас. Либо локально, либо на собственных облачных ресурсах. Для многих это проблема.

Если вы разрабатываете решение для компании или корпорации, у которой есть много облачных ресурсов и денег, то это не проблема. Однако, если денег нет, то это недостаток. Еще одно важное соображение заключается в том, что параметры распознавания речи на Python с открытым исходным кодом обычно намного менее точны, чем параметры облачного API. Если в вашем проекте важна точность, вам, вероятно, будет лучше облачное решение.

Облачные решения для создания проекта распознавания речи на Python имеют большое преимущество в том, что они просты в использовании, намного более точны, чем варианты с открытым исходным кодом, и не требуют размещения каких-либо моделей на собственном оборудовании.

Основным недостатком некоторых облачных решений является стоимость. К счастью, существуют бесплатные опции, которые предлагают настройку, такую ​​как настройка словаря, определение абзацев и ведение дневника говорящего для создания простого проекта распознавания речи на Python. Одним из примеров является AssemblyAI’s Speech-to-Text API. Еще одно большое преимущество облачных решений заключается в том, что их намного проще реализовать, чем варианты с открытым исходным кодом.

Ключевой вывод: когда вы выбираете решение для своего проекта распознавания речи на Python, главное, о чем следует подумать, — это точность, стоимость и простота реализации.

Возможности распознавания речи Python с открытым исходным кодом

Существует множество вариантов распознавания речи Python с открытым исходным кодом. Мы рассмотрим три наиболее удачных из них. Эти библиотеки распознавания речи Python с открытым исходным кодом — wav2letter, SpeechRecognition и DeepSpeech.

wav2letter

Библиотека с открытым исходным кодом wav2letter была впервые разработана Facebook. Теперь он перенесен в новую библиотеку с открытым исходным кодом под названием Flashlight, но все еще в основном известен разработчикам под старым названием wav2letter. Самое интересное в wav2letter заключается в том, что он полностью построен на сверточных нейронных сетях (CNN) от акустического моделирования до языкового моделирования. Это редкое явление, потому что с 2014 года в обработке естественного языка (NLP) преобладают модели на основе рекуррентных нейронных сетей (RNN).

Еще одна интересная вещь о wav2letter и недостаток для неопытных программистов это то, что он должен быть построен для использования в Python и не может быть просто установлен с помощью команды pip. Фактически, для установки wav2letter вам понадобится компилятор C++! Если вы создаете простой проект распознавания речи на Python, это наверняка помешает вашим планам. Другой недостаток заключается в том, что, поскольку он был перенесен на Flashlight, теперь вам также понадобится Flashlight в качестве зависимости для использования wav2letter.

Сама установка wav2letter может стать для вас мини-проектом. Если вы заинтересованы в реализации проекта wav2letter, потому что вам нравится звук проекта распознавания речи Python, который а) сложно запустить, б) имеет много зависимостей и в) построен на классной структуре нейронной сети, которая немного отличается чем большинство других речей для текстовых библиотек, тогда wav2letter для вас, и вы можете начать с чтения этого руководства о том, как установить wav2letter.

SpeechRecognition

Как могла библиотека SpeechRecognition не быть лучшей библиотекой с открытым исходным кодом для распознавания речи? К сожалению, трудно сказать, что это настоящее решение с открытым исходным кодом для распознавания речи, потому что на самом деле оно охватывает другие технологии распознавания речи. По общему признанию, она поддерживает множество других технологий, включая преобразование речи в текст Google Cloud, CMU Sphinx, Wit, Azure, Houndify, IBM и Snowboy. Конечно, единственные два, которые вы можете использовать в автономном режиме (локально), — это CMU Sphinx и Snowboy.Какие еще есть решения? Облачные решения, заключенные в библиотеку с открытым исходным кодом, поэтому похоже, что у вас больше возможностей для настройки, чем у вас.

Если вы не ищете облачное решение, то библиотека с открытым исходным кодом SpeechRecognition Python, вероятно, не для вас. Единственное реальное офлайн-решение, которое он предлагает, — это использование CMU Sphinx, cоздатели Snowboy больше не поддерживают, и я больше не мог найти ссылку на его документацию в Интернете. Если вы можете найти его, пожалуйста, напишите мне в комментариях, потому что из всех библиотек распознавания речи, которые я видел, у него второе самое крутое имя (Sphinx, безусловно, круче). CMU Sphinx хорош тем, что в нем много документации для разработчиков и часто задаваемых вопросов. Он основан на более чем 20-летних исследованиях, проведенных Университетом Карнеги-Меллона, ведущей (некоторые могут поспорить с лучшей) школой компьютерных наук в мире. Это не так ресурсоемко, как некоторые другие решения Python для преобразования речи в текст, и поддерживает несколько языков. Если в этот момент вы чувствуете, что я даже не говорю о библиотеке SpeechRecognition, это потому, что я не говорю. SpeechRecognition — это простая оболочка для других решений преобразования речи в текст. Фактически, он БУКВАЛЬНО вызывает другую речь в текстовую службу, чтобы сделать ее транскрипцию. Хотя приятно, что он объединяет их все в один пакет, поэтому вы можете использовать несколько сервисов, загрузив только одну библиотеку! Я бы посоветовал эту библиотеку, если вы тестируете все облачные сервисы, для которых она предоставляет оболочки.

import speech_recognition as sr
 
# получить звук с микрофона
r = sr.Recognizer()
with sr.Microphone() as source:
   print("Say something!")
   audio = r.listen(source)
 
# распознавать речь с помощью Sphinx
try:
   print("Sphinx thinks you said " + r.recognize_sphinx(audio))
except sr.UnknownValueError:
   print("Sphinx could not understand audio")
except sr.RequestError as e:
   print("Sphinx error; {0}".format(e))

DeepSpeech

Первоначально DeepSpeech был статьей о методах распознавания речи, подготовленной исследовательской группой Baidu. Связанная мной библиотека — это проект с открытым исходным кодом, который находится на GitHub Mozilla. DeepSpeech может работать в автономном режиме и на устройствах.DeepSpeech работает на широком спектре устройств, от устройств Raspberry Pi до реальных графических процессоров, которые используются для обучения моделей в промышленности.

DeepSpeech довольно легко загрузить и начать работу, все, что вам нужно сделать, это установить его с помощью pip, а затем загрузить аудиофайлы, такие как фрагмент кода ниже.На самом деле нет никаких правил, согласно которым вы должны использовать английские модели DeepSpeech. Если у вас есть собственные, вы можете полностью использовать их.

# Install DeepSpeech
pip3 install deepspeech
 
# If using GPU
pip3 install deepspeech-gpu
 
# Download pre-trained English model files
curl -LO https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.pbmm
curl -LO https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.scorer

Помните, что для использования DeepSpeech все должно запускаться на устройстве. Это означает, что потребуется много локальных вычислительных ресурсов. Если вы собираетесь обучать модель DeepSpeech на графическом процессоре, убедитесь, что у вас есть необходимые файлы CUDA. DeepSpeech для графических процессоров зависит от CUDA 10.1 и CuDNN 7.6. Кроме того, вам необходимо установить deepspeech-gpu с pip. Я рекомендую DeepSpeech, если вы лично хотите запускать свои модели для локального распознавания речи. Я также считаю, что DeepSpeech — довольно продвинутая библиотека, которую можно использовать по назначению, поэтому я также рекомендую ее для продвинутых программистов, которые будут выполнять множество настроек.

Распознавание речи Cloud Python

AssemblyAI создает быстрый API-интерфейс автоматического распознавания речи, который могут бесплатно использовать разработчики. API, размещенный в облаке, чрезвычайно прост в использовании и включает в себя множество функций. В этом разделе я расскажу, как использовать API AssemblyAI для преобразования речи в текст для транскрипции, как вести дневник докладчика,как добавить собственный словарь в вашу транскрипцию и как создать абзацы из созданной вами транскрипции. Все, что вам нужно сделать, чтобы следовать остальной части этого руководства, — это получить ключ API свободного преобразования речи в текст и получить аудиофайл, который вы хотите расшифровать.

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

Использование AssemblyAI Speech to Text API

API-интерфейс AssemblyAI для преобразования текста в текст быстр, точен и очень прост в использовании. Начиная с нашего аудиофайла, сначала мы загрузим его в конечную точку выгрузки AssemblyAI, а затем отправим запрос на расшифровку загруженного файла.Если у вас есть аудиофайл, загруженный где-то в Интернете (например, в корзину S3), вы можете пропустить этот шаг.

auth_key = ''
headers = {"authorization": auth_key, "content-type": "application/json"}
def read_file(filename):
   with open(filename, 'rb') as _file:
       while True:
           data = _file.read(5242880)
           if not data:
               break
           yield data
 
upload_response = requests.post('https://api.assemblyai.com/v2/upload', headers=headers, data=read_file(''))
audio_url = upload_response.json()[‘upload_url’]

Все, что вам нужно для получения транскрипции, — это сделать запрос к конечной точке транскрипции AssemblyAI со ссылкой на загруженный аудиофайл, немного подождать, а затем сделать еще один запрос к конечной точке транскрипции с идентификатором вашего запроса, чтобы вернуть транскрипцию. в ответ.

transcript_request = {'audio_url': audio_url}
transcript_response = requests.post("https://api.assemblyai.com/v2/transcript", json=transcript_request, headers=headers)
_id = transcript_response.json()['id']

После отправки ответа с транскрипцией мы подождем некоторое время. В настоящее время в документации предлагается 30% длины аудиофайла, но при моем эмпирическом использовании я обнаружил, что это немного быстрее, чем это. После того, как мы подождали разумное количество времени, мы просто отправляем запрос на опрос и загружаем нашу расшифровку.

polling_response = requests.get("https://api.assemblyai.com/v2/transcript/" + _id, headers=headers)
if polling_response.json()['status'] != 'completed':
   print(polling_response.json())
else:
   with open(_id + '.txt', 'w') as f:
       f.write(polling_response.json()['text'])
   print('Transcript saved to', _id, '.txt')

Пользовательский словарь с API распознавания речи AssemblyAI

Одна из самых крутых особенностей API AssemblyAI для преобразования текста в текст — это простота запроса различных функций для вашей транскрипции.Вы можете передать собственный словарь в транскрипцию AI, используя параметр повышения слов и передав список слов, которые должна распознавать модель. Запрос расшифровки тогда будет выглядеть как код ниже. Вам не нужно добавлять ключевое слово boost param, если вы не хотите увеличить или уменьшить силу вашего слова boost.

transcript_request = {
    'audio_url': audio_url,	
    'word_boost': ['boost', 'these', 'words'],
    'boost_param': 'high
}

Некоторые правила, которым следует следовать при использовании пользовательского словаря с API ассемблера для преобразования речи в текст: 1) удалить знаки препинания, 2) каждое слово должно быть в его устной форме и 3) не должно быть пробелов между буквами акронима.

Диаризация спикера с помощью API распознавания речи AssemblyAI

Вы также можете получить дневник докладчика из вашего транскрипта, передав дополнительный параметр API. Запрос на расшифровку стенограммы, который также вернет вам метки выступающих, может быть выполнен, как в приведенном ниже коде.

transcript_request = {
    'audio_url': audio_url,	
    'speaker_labels': 'true'
}

Пример ответа из расшифровки стенограммы с дневником докладчика может выглядеть как JSON ниже. Вы можете рассчитывать найти результаты своей записи в дневнике под клавишей «высказывания». Спикеры будут обозначены от А до Я.

{
   "acoustic_model": "assemblyai_default",
   "audio_duration": 150.766167800454,
   "audio_url": "https://app.assemblyai.com/static/media/phone_demo_clip_1.wav",
   "confidence": 0.922175805047867,
   "dual_channel": true,
   "format_text": true,
   "id": "5552830-d8b1-4e60-a2b4-bdfefb3130b3",
   "language_model": "assemblyai_default",
   "punctuate": true,
   "status": "completed",
   "text": "Hi, I'm joy. Hi, I'm sharon. Do you have kids in school. ...",
   # the "utterances" key below is a list of the turn-by-turn utterances found in the audio
   "utterances": [
       {
           # speakers will be marked as "A" through "Z"
           "speaker": "A",
           "confidence": 0.97,
           "end": 1380,
           "start": 0,
           # the text for the entire speaker "turn"
           "text": "Hi, I'm joy.",
           # the individual words from the speaker "turn"
           "words": [
               {
                   "speaker": "A",
                   "confidence": 1.0,
                   "end": 320,
                   "start": 0,
                   "text": "Hi,"
               },
               ...
           ]
       },
       # the next "turn" by speaker "B" - for example
       {
           "speaker": "B",
           "confidence": 0.94,
           "end": 3260,
           "start": 0,
           "text": "Hi, I'm sharon.",
           "words": [
               {
                   "speaker": "B",
                   "confidence": 1.0,
                   "end": 480,
                   "start": 0,
                   "text": "Hi,"
               },
               ...
           ]
       },
       {
           "speaker": "A",
           "confidence": 0.94,
           "end": 5420,
           "start": 2820,
           "text": "Do you have kids in school.",
           "words": [
               {
                   "speaker": "A",
                   "confidence": 1.0,
                   "end": 4300,
                   "start": 2820,
                   "text": "Do"
               },
               ...
           ]
       },
   ],
   # all of the words found in the audio across all speakers
   "words": [
       {
           "speaker": "A",
           "confidence": 1.0,
           "end": 320,
           "start": 0,
           "text": "Hi,"
       },
       {
           "speaker": "A",
           "confidence": 1.0,
           "end": 720,
           "start": 320,
           "text": "do"
       },
       ...
   ]
}

Получение абзацев из API распознавания речи AssemblyAI

После того, как вы выполнили транскрипцию и передали все необходимые параметры, такие как настраиваемая лексика или дневник говорящего, есть также дополнительная конечная точка, которую вы можете задействовать, если вы также хотите дополнительно обработать стенограмму на абзацы почти без дополнительной работы.Все, что вам нужно сделать, это отправить запрос GET в конечную точку стенограммы вашего идентификатора стенограммы + «/ параграфы», как показано ниже.

paragraphs_endpoint = "https://api.assemblyai.com/v2/transcript/" + _id + "/paragraphs"
paragraphs_response = requests.get(paragraphs_endpoint, headers=headers)
pprint.pprint(paragraphs_response.json())

‍ Ответ, который вы получите от конечной точки абзаца, должен выглядеть как JSON ниже.

{
   "paragraphs":[
       {
           "text":"Hello. I'm Sunny Williams. I'm up here on the International Space Station. So this is No two. This is a really cool module.",
           "start":770,
           "end":10710,
           "confidence":0.97,
           "words":[
           {"text": "Hello.", "start": 100, "end": 1000, "confidence": 0.99},
           "..."
           ]
       },
       ...
       ],
   "id": "3otc28umy-25ae-4446-b133-70e244be5208",
   "confidence": 0.951530612244907,
   "audio_duration": 521.352
}

Распознавание речи в реальном времени в Python

Наконец, я коснусь еще одной вещи: API-интерфейс AssemblyAI для преобразования речи в текст имеет возможность распознавать речь в потоковом режиме в реальном времени. Для распознавания речи в реальном времени необходимо обновить вашу учетную запись, чтобы она не входила в состав API свободы слова для текста.

Краткое описание состояния распознавания речи Python в 2021 году

В этом посте я рассмотрел текущее состояние технологий распознавания речи для пользователей Python — от трех популярных библиотек с открытым исходным кодом, wav2letter, SpeechRecogntion и DeepSpeech, до облачного решения, такого как API распознавания речи AssemblyAI.

Wav2letter — это библиотека с открытым исходным кодом, которая использует в своих моделях чистую архитектуру CNN и изначально была создана Facebook. SpeechRecognition — это в основном библиотека-оболочка для некоторых облачных API-интерфейсов и модель, основанная на CMUSphinx, исследование, проведенное в Университете Карнеги-Меллона.

Первоначально DeepSpeech был разработан учеными из Baidu, которые опубликовали на нем статью; библиотека с открытым исходным кодом поддерживается Mozilla, и это единственная библиотека, которую я рассмотрел, которая работает на устройстве.

Единственным облачным провайдером, о котором я рассказывал здесь, был API автоматического распознавания речи AssemblyAI. AssemblyAI преобразовывает речь в текстовый API быстро, точно, и прост в использовании. Также предоставляется множество функций, таких как ведение дневника говорящего, настраиваемый словарь и извлечение абзацев, которые так же легко реализовать, как отправка HTTP-запроса.
Source The State of Python Speech Recognition in 2021

Print Friendly, PDF & Email

CC BY-NC 4.0 Как обстоят дела с распознаванием речи в 2021 году, опубликовано К ВВ, лицензия — Creative Commons Attribution-NonCommercial 4.0 International.


Респект и уважуха

Добавить комментарий