Одним из самых больших и важных строительных блоков современных технологий, вниз, является ИИ. Машинное обучение – это совершенно другое животное, когда речь идет о том, как машины обрабатывают информацию. Я считаю, что это один из ключевых ступенчатых камней для преодоления разрыва между тем, как машины обрабатывают и понимают данные, и тем, как мы, люди, думаем и принимаем информацию.
Машина может показаться невозможным подражать возможностям, которые делают наши человеческие умы, с уникальным способом обучения, понимания, картирования информации и извлечения контекста из данных. Это особенно применимо, когда говорит о Человеческий язык и речь . Но, как всегда, технологии нашли способ!
В этом посте я подумал, что для нас было бы интересно взглянуть на то, как работает современная технология распознавания речи, как приведенные в соответствии с такими технологиями, как Google Assistant, Amazon Alexa и Apple Siri. Затем, наконец, мы рассмотрим пример того, как мы можем использовать эту технологию в наших проектах, создав Голосовой список дел используя Веб -речь API ! 😉
Строительные блоки распознавания речи
Когда дело доходит до того, как машины понимают и обрабатывают язык, точнее, в форме аудио, есть два фундаментальных концепции, которые должны быть реализованы для признания речи, чтобы быть возможным:
Автоматическое распознавание речи (ASR) : Хотя ASR обычно используется в качестве зонтичного термина для концепций, лежащих в основе распознавания речи, он в первую очередь относится к процессу разрушения речи в форме звука и применения алгоритмов для транскрибирования пиков аудио. Это основная концепция программ речи к тексту и позволяет машине знать Что Вы говорите, но не смысл.
Обработка естественного языка (NLP) : Относится к процессу понимания или подражания языку. Акт конструирования и или деконструкции ключевых моментов в естественной речи. Это главный игрок, стоящий за программами, такими как Alexa, которые могут не только знать Что Вы говорите, но понять Он основан на резюме, который он формулирует из вашей речи (NLU) или даже отвечает (NLG). Концепции, используемые в НЛП, применяются в обоих NLG (генерация естественного языка) и NLU (понимание естественного языка) , как он используется в качестве зонтичного термина для обоих.
Как NLP, так и ASR реализованы с использованием алгоритмов, основанных на машинном обучении, нейронных сетях и глубоком обучении и в значительной степени основаны на лингвистике, семантике и статистике. И, учитывая, насколько сложный человеческий язык, это правильный подход.
Однако эти технологии не идеальны. Человеческий язык не может быть просто проанализован, как и любой другой набор данных. Существуют антимерия, сарказм, сленг, значение, слова с двойным значением, фигуры речи и множество других причуд, которые машине должна будет научиться идентифицировать со временем. Не говоря уже о том, что все варьируется от языка к языку.
Так как же ASR и NLP Acomplish, что они делают? Давайте познакомимся. 👇
Процесс ASR
Основные шаги позади ASR, что программа сделает следующим образом. Обратите внимание, что процесс может варьироваться в зависимости от конкретной конечной цели программ:
- Программа получает аудио ввод.
- Этот звук уточняется, так как программа пытается выделить речь от фонового шума.
- Полученная речь разделена на Фонемы Анкет Фонемы представляют собой небольшие единицы звуков, уникальные для языка, который обычно используется для построения слов, и могут использоваться для дифференциации одного слова от другого, или где может начаться одно слово или где другое может закончиться.
- Затем анализируются фонемы, и ИИ использует свои подельные знания об этом языке, чтобы определить наиболее вероятное слово, которое будет следовать на основе последовательности звуков. Как только он образует слова, применяется тот же анализ вероятности, чтобы определить, каким может быть предложение.
Процесс NLP
Основные шаги позади NLP (или, точнее, nlu) что программа будет сделана следующим образом. Обратите внимание, что процесс может варьироваться в зависимости от конкретной конечной цели программ:
- Входная речь разделена на предложения. Полученные предложения затем разделены на отдельные слова, это называется Токенизация Анкет
- Затем токенизированные слова анализируются и даны роли (существительные, глаголы или прилагательные) на основе окружающего предложения.
- Не Лемма затем легматизируются, что означает, что они отображаются со своей основной формой, чтобы сигнализировать о том, что они ставят такое же значение (сломанный -> разрыв).
- Общие слова, такие как «и», «или» и «А», удаляются, чтобы изолировать слова, которые удерживают основное значение.
- Расположение зависимости затем предварительно сформируется, и создается дерево, связывающее слова, которые зависят друг от друга вместе (шоколад -> Best -> Icecream -> Flavor).
- Названное признание сущности (NER) предварительно сформируется, маркируя каждое существительное на основе реального мира, которое они должны представлять (Питер Паркер -> вымышленный персонаж).
- Наконец, Резолюция Coreference делается на местоимениях, таких как «это», «она», «он» и «они», чтобы связать их с существительным, на которое они ссылаются. Как только это будет сделано, программа может должным образом вывести смысл речевого образца (она -> Лиза Росс).
Конечно, важно помнить, что есть гораздо больше, что входит в эти затраты в реальной реализации NLP и ASR. Чтобы фактически выполнить каждый из этих шагов, используются передовые алгоритмы и методы, такие как Скрытые модели Маркова , Динамическое время деформации и Нейронные сети Чтобы перечислить несколько.
В любом случае, теперь, когда у нас есть хорошее представление о том, как функционирует ASR, давайте испачкаем руки, посмотрим, как мы можем использовать его в нашем коде, используя Веб -речь API и построение Голос контролируется Список дел ! 😁
Примечание : API веб -речи все еще находится на экспериментальной фазе. Он может не поддерживать заданный браузер, и его реализация по -прежнему остается неполной. При этом он должен использоваться только в личных проектах. Уже существует стабильные API STT, такие как перечисленные Здесь , но я собираюсь с API веб -речи как чрезвычайно простых, легко доступных и достаточно ваших потребностей.
Создание списка дел, контролируемого голосом
Прежде чем я проведу вас через наш пример, позвольте мне сначала показать вам готовый продукт. Здесь, однако, встраивание не допускается доступа к медиа, что разрушает его функциональность. Если вы хотите увидеть, как это функционирует, вы можете просмотреть его Здесь Анкет Тем не мение , вот как это будет выглядеть:
Функциональность довольно проста. После того, как переключатель будет перевернут, служба распознавания речи начнет слушать речь. Наша программа сначала ожидает, что пользователь даст заголовок, и, как только это будет дано, это будет ожидает описание. После того, как описание будет сказано, в пользовательский интерфейс будет добавлена новая задача, содержащая заголовок и описание, введенное пользователем. Состояние программы (погода ее активна, или то, что она ожидает дальше), будет выражено в сообщении выше переключателя.
Просто, верно? Давай пойдем через код ..
Использование службы распознавания речи
Во -первых, давайте рассмотрим самый важный шаг, который начинает службу распознавания речи через API веб -речи. Когда я говорю «Служба распознавания речи», я имею в виду Службу распознавания речи по умолчанию в Chrome. Наш аудио будет запечатлен и отправлен на сервер (служба распознавания речи), где он будет обработан, а затем отправлено обратно.
Во -первых, нам нужно установить связь с ней:
// Setup recognition service
if (webkitSpeechRecognition || SpeechRecognition) {
const recog = new (webkitSpeechRecognition || SpeechRecognition)();
const grammarList = new (webkitSpeechGrammarList || SpeechGrammarList)();
recog.grammars = grammarList;
recog.lang = "en-US";
} else {
// Alert user if API isnt supported
alert("Sorry, your browser dosen't support the WebSpeech API!");
}
Здесь все, что мы делаем, это сначала убедиться, что API существует в рамках окно объект. Как только это сделано, мы создаем создание нового Речее определение объект, который является интерфейсом для взаимодействия с службой распознавания речи.
Его основные события и методы следующие:
start (): Начните слушать речь.Stop (): Прекратите слушать речь.Abort (): Прекратите листингом для речи без возврата результата.результат: Пожары, когда результат возвращается из службы распознавания. Результат передается обратном вызове.конец: Пожары, когда служба распознавания речи остановлена.старт: Пожары, когда началась служба распознавания речи.SpeechStart: Пожары, когда речь обнаруживается.речь: Пожары, когда речь больше не обнаружена.
Тогда я прикрепляю Speechgrammarlist к этому через Речиценазнание. Граммы Анкет Speechgrammarlist это объект, который предназначен для сохранения списка грамматики. Грамматика (хотя через этот API дается как строка) – это специальный файл, который отправляется в службу распознавания речи, что придает ему грамматику или ключевые слова или фразы, которые он должен прислушиваться. Через грамматики вы также можете сказать, какие фразы он должен слушать больше, чем другие, указав их «вес».
Грамматики обычно указываются с использованием Srgs (Спецификация грамматики распознавания речи) Формат или JSGF (Формат речевой грамматики Java). Однако в настоящее время этот API не поддерживает грамматики очень хорошо, поскольку они мало влияют на результаты распознавателя речи. Таким образом, я даю ему пустое Speechgrammarlist Анкет
После этого мы устанавливаем язык, распознаваемый должен слушать через SpeechRecognizer.lang собственность, которая в этом случае является английским.
И это действительно все, что нужно встать и работать. Теперь нам просто нужно заполнить пробелы, которые нам нужно интегрировать в наш список дел!
Сделать все это вместе
Поскольку пользовательский интерфейс не так важен, я буду только переходить через JavaScript, но вы можете придать ему ближе Здесь Или во вставке я показал ранее. Вы, конечно, можете заставить пользовательский интерфейс выглядеть так, как хотите, если вы собираетесь следовать.
Основная идея состоит в том, что у нас просто есть основная кнопка для переключения службы распознавания речи, сообщение, указывающее состояние программы (активное, прослушивание или какую информацию ожидает), и область, где появятся полученные задачи.
Чтобы завершить, я пройду каждый сегмент функциональности.
// Only proceed if API is Supported...
if (webkitSpeechRecognition || SpeechRecognition) {
/*
"active" will be used to keep track of weather
or not the service is active.
"phase" will be used to keep track of what
information is currently being
expected (either the title or description).
"task" is simply a container for our information
when results are received.
*/
let active = false,
phase = undefined,
task = {};
//________________________________________
/*
Listen for when the switch is toggled.
If the service is inactive, start the service
and set the phase to "title" since
this is the first peice of info once
the service is listening.
If the service is active, do the opposite.
*/
// select message element above switch
const message = document.querySelector(".container__message");
// select toggle switch
const button = document.querySelector(".container__button");
button.addEventListener("click", () => {
if (!active) {
recog.start();
active = true;
phase = "title";
message.innerText = "waiting for title...";
} else {
recog.abort();
active = false;
phase = undefined;
message.innerText = "Flip switch to toggle speech recognition";
}
});
// ________________________________________
/*
"addTask()" will be after both the title and description are
spoken. This will hide the placeholder
and fill a copy of the tasks template with the
respective information. It'll then be
appended to the tasks container
*/
// Select container where tasks will appear, its placeholder and the template for the tasks.
const tasks = document.querySelector(".container__tasks"),
placeholder = document.querySelector(".container__tasks__placeholder"),
template = document.querySelector("#task-template");
// Function for appending tasks
function addTask() {
placeholder.style.display = "none";
let content = template.content.cloneNode(true);
content.querySelector("p").innerText = task.desc;
let n = content.querySelector("div");
content.querySelector("summary").innerText = task.title;
content.querySelector(".x").addEventListener("click", () => {
tasks.removeChild(n);
if (tasks.children.length === 2) {
placeholder.style.display = "block";
}
});
tasks.appendChild(content);
}
//________________________________________
/* Setting up the recognition service,
as already explained previously */
// Setup recognition service
const recog = new (webkitSpeechRecognition || SpeechRecognition)();
const grammarList = new (webkitSpeechGrammarList || SpeechGrammarList)();
recog.grammars = grammarList;
recog.lang = "en-US";
//________________________________________
/* Inform user that service is listening when speech s detected */
// Let user know recognition service is listening
recog.addEventListener("speechstart", () => {
message.innerText = "listening...";
});
//________________________________________
/*
Register an event listener for when the result comes in,
which will be each time the user stops
speaking and speech was recognized.
In the callback, if the phase is currently
"title" (the program is waiting for the title)
add the title to the "task" object and
switch phase to "desc".
If the the phase is currently "desc"
(we already have the title, and are waiting for the description)
add the description to the "task" object, call "addTask()"
and inform the user that the task was successfully added.
*/
// Determine what to do with result once it comes in
recog.addEventListener("result", (res) => {
let result = res.results[res.results.length - 1][0].transcript;
switch (phase) {
case "title":
task.title = result;
message.innerText = "waiting for description...";
phase = "desc";
break;
case "desc":
task.desc = result;
message.innerText = "task added!";
phase = "title";
window.setTimeout(() => {
message.innerText = "waiting for title...";
}, 2000);
addTask();
break;
}
});
//________________________________________
// Keep service open by restarting it, since it ends after each speech segment it receives.
recog.addEventListener("end", () => {
if (active) recog.start();
});
// Cancel service if error occurs
recog.addEventListener("error", () => {
recog.abort();
});
} else {
// Alert user if API isnt supported
alert("Sorry, your browser dosen't support the WebSpeech API!");
}
Вывод
И там у тебя есть, ребята! Введение в то, как работает ASR, и небольшой пример того, как вы можете внедрить его в свои проекты. Если вы хотите глубже погрузиться в ASR, NLP или API веб -речи, вам следует проверить эти ресурсы ниже. 👇
ASR: https://verbit.ai/asr-and-the-next-generation-of-transcription/ NLP: https://medium.com/@ritidass29/the-essential-guide-to-how-nlp-works-4d3bb23faf76 API веб -речи: https://developer.mozilla.org/en-us/docs/web/api/web_speech_api ;
Спасибо за чтение ..😊!
Оригинал: “https://dev.to/zippcodder/understanding-speech-recognition-and-building-a-voice-controlled-to-do-list-3e5”