Оглавление:

Голосовой помощник - МАКС .: 10 шагов
Голосовой помощник - МАКС .: 10 шагов

Видео: Голосовой помощник - МАКС .: 10 шагов

Видео: Голосовой помощник - МАКС .: 10 шагов
Видео: Алиса, Маруся или Сбер? Кто умнее, громче и дешевле? Сравнение голосовых ассистентов в 2023 году! 2024, Июль
Anonim
Голосовой помощник - MAX
Голосовой помощник - MAX

Привет, в этой инструкции я собираюсь поговорить о том, как сделать чат-бота MAX (назвал себя !!!)

С помощью некоторой реализации вы можете сделать этого чат-бота голосовым управлением или с использованием различного программного обеспечения вы можете сделать его в качестве голосового помощника. Я не буду здесь говорить об этом, поскольку каждый действительно может легко реализовать эту реализацию.

Так что все, пожалуйста, поддержите меня …….

Моя первая инструкция !!!!!!!

Чувство нервозности из-за того, что должно произойти …………….

Шаг 1. Информация о конкурсе

Знание о конкурсе
Знание о конкурсе
Знание о конкурсе
Знание о конкурсе

Привет, инженеры и дизайнеры ……..

Я, студент, изучающий информатику, люблю играть в игры и всегда вдохновлялся компьютерами. Говоря кратко, я люблю знать, как все эти вещи работают. Поэтому я продолжал искать, гуглил (на самом деле, я тоже использовал Yahoo !!! !!!) для поиска и изучения вещей.

Итак, однажды я оказался перед экраном Instructables. Меня очень позабавили различные проекты с множеством идей по различным аспектам. С того дня я продолжаю следовать этому. Страница конкурса действительно позабавила меня, обеспокоенная как призами, так и проектами, которые были представлены разными людьми из разных стран. Мир.

VOICE ACTIVATED CHALLENGE - моя первая платформа для написания инструкций.

Призы меня очень позабавили (Ага !!! Слишком много ……..).

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

В этом руководстве я покажу вам, как создать своего собственного голосового помощника.

Поскольку это мой первый обучающий материал, может быть так много ошибок (хотя я думаю, что все они были исправлены), так что простите за это.

ТАК…

Давайте начнем путешествие ………………

Шаг 2. Откуда я узнал о вещах?

Откуда я узнал о вещах?
Откуда я узнал о вещах?
Откуда я узнал о вещах?
Откуда я узнал о вещах?
Откуда я узнал о вещах?
Откуда я узнал о вещах?

Это будет главный вопрос, я думаю, большинство ваших умов, возможно, уже пережили ………

Я очень увлечен искусственным интеллектом [ИИ] еще со времен учебы, поэтому я много искал, искал ресурсы для изучения и разработки модели самостоятельно.

Изначально это было очень сложно (истинное состояние), как я понял, это очень обширная тема, с которой совсем не легко справиться.

Среди найденных книг:

  1. Искусственный интеллект - современный подход
  2. Искусственный интеллект в 21 веке 2-е издание
  3. Глубокое обучение

Это очень хорошие книги (да, конечно), но совсем непросто понять то, что на них написано. это действительно представляет и способы добраться до этого.

Потом я заинтересовался этим. На каникулах после школы я начал узнавать об этом более глубоко.

В то время я также изучал различные языки программирования (C ++, C, Python, Java …), что тоже было очень интересно.

Прочитав больше по этой теме, я понял одну важную вещь ………………..

Языки программирования ЯВЛЯЮТСЯ ОСНОВНОЙ ДЛЯ КАЖДОГО ПРОЦЕССА ОБУЧЕНИЯ МАШИНАМ

Машинное обучение - это процесс применения ИИ

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

Поэтому я решил создать хорошую основу на языках, которые помогли мне понять концепции, изложенные в книге, о которой я уже упоминал

Вы тоже можете это сделать ……

В сети существует так много веб-сайтов, на которых можно свободно преподавать языки программирования

Так что вы можете путешествовать по Интернету, чтобы узнать об этом больше, если хотите ………

Шаг 3. Давайте начнем

Перед тем, как начать писать Instructable, я подумал написать что-то такое, что можно понять:

  1. Люди, имеющие опыт программирования
  2. Люди без опыта программирования

Так что я думаю, что сделал это без каких-либо ошибок (надеюсь).

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

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

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

Шаг 4: Как это на самом деле работает?

Шаг 1:

MAX выясняет, ввел ли пользователь какой-либо нулевой ввод. Если пользователь предоставил ввод таким образом, он берет факт из статической базы данных для ответа.

Ой, извини ……

Забыла сказать,

Статическая база данных: место, где хранятся встроенные ответы. Ответы типа:

1. Когда МАКС не понимает, о чем говорит пользователь.

2. Когда пользователь повторяется.

3. Для приветственных заявлений.

4. Когда пользователь ничего не набирает, а просто продолжает нажимать Enter.

Ключевое слово: слова, имеющие особое значение.

Шаг 2:

Есть некоторые встроенные ответы, которые MAX может легко и легко распознать. Он обнаруживает наличие любого такого предложения после идентификации ввода пользователя и запоминает связанное ключевое слово.

Шаг 3:

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

Шаг 4:

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

Шаг 5:

I есть необходимость изменить слова, которые он сделает сам (например, преобразование МОИ в ВАШЕ и т. Д.).

Шаг 5: Позвольте нам кодировать …………

Я использую Turbo C IDE 3.0, так как это IDE [интегрированная среда разработки]

Перед кодированием давайте посмотрим на структуру образца файла данных.

MAX распознает определенные ключевые слова.

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

В файле данных ключевое слово отделяется от ответов токеном @ KWD @.

Токен - это самая маленькая часть всех аспектов программирования.

Этот токен означает, что следующая строка является ключевым словом, а не ответом.

@ KWD @ ПРИВЕТ

ПРИВЕТ, КАК ДЕЛА

ПРИВЕТ, ДОРОГОЙ !

Я В ПОРЯДКЕ

КАК БЫЛА ВАША РАБОТА?

СКОЛЬКО ТЕБЕ ЛЕТ?

@ KWD @

Я БУДУ

ВЫ СДЕЛАЕТЕ ТАК. Я ВЕРЮ В ЭТО …

Сможете ли вы это сделать?

Ты мне доверяешь?

@ KWD @

ДА

ВЫ УВЕРЕНЫ ?

КАК ВЫ МОЖЕТЕ БЫТЬ ТАК УВЕРЕНЫ?

@ KWD @

НЕТ

ВЫ КАЖЕТЕСЬ ОЧЕНЬ ПЕССИМИСТИЧНЫМ.

НИКОГДА НЕ ГОВОРИ НЕТ…

НИКОГДА НЕ ГОВОРИ НИКОГДА

НИКОГДА НЕ БЫТЬ Грубым

НИКОГДА НЕ ГОРДИТЕ !!!!

НИКОГДА НЕ СКАЗАТЬ, ЧТО Я НЕ МОГУ ЭТО СДЕЛАТЬ

НИКОГДА НЕ БУДЬ ОПТИМИСТИЧНЫ

@ KWD @

КОМПЬЮТЕР

Я ЗНАЮ, КАК РАБОТАТЬ НА КОМПЬЮТЕРЕ.

ВЫ ИСПОЛЬЗУЕТЕ КОМПЬЮТЕР. ПРАВИЛЬНО ?

Например, «Привет» из приведенного выше словаря MAX даст один из следующих ответов:

ПРИВЕТ, КАК ВЫ ДОРОГИЕ!

Я В ПОРЯДКЕ

КАК БЫЛА ВАША РАБОТА?

СКОЛЬКО ТЕБЕ ЛЕТ?

Шаг 6: классы

Как только это станет ясным, давайте теперь определим структуры данных, которые мы будем использовать.

Создаем два класса:

progstr - используется для хранения информации, связанной с вводом пользователем.

resp - используется для хранения информации о различных ответах

class progstr {

общественность:

char userip [MAX_USER_INPUT];

ключевое слово char [30];

int keyfound;

int keyno;

int nullip;

// конструктор

progstr () {keyno = -1; nullip = 0; keyfound = 0;

}

} ip;

класс соответственно

{

int tot_resp;

int last_resp;

символы ответа [MAX_RESP_NO] [MAX_RESP_LEN];

символьное слово [MAX_KWD_LEN];

общественность:

// конструктор

resp ()

{

tot_resp = 0;

last_resp = -1;

}

int getcount ()

{

вернуть last_resp;

}

недействительное дополнение (строка символа [MAX_KWD_LEN])

{

strcpy (слово, стр);

}

char * getword ()

{

ответное слово;

}

недействительный адрес (строка символа [MAX_RESP_LEN])

{

strcpy (ответы [++ last_resp], str);

}

// определено позже

void display_resp (int num);

void quit_display_resp (целое число);

};

Глядя на первый класс, Путь пользователя массива символов используется для хранения предложения, предоставленного пользователем.

Другое ключевое слово массива используется для хранения ключевого слова, если оно есть, найденного во входных данных. Если ключевое слово найдено, мы делаем int keyfound равным 1, иначе он остается 0, поскольку он инициализируется значением 0 в конструкторе.

keyno хранит соответствующий номер ключа соответствующего ключевого слова.

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

Теперь перейдем ко второму классу, соответственно.

Первый член данных, tot_resp, указывает количество общих ответов для данного ключевого слова.

Ответы фактически хранятся в ответах [MAX_RESP_NO] [MAX_RESP_LEN], а соответствующее ключевое слово сохраняется в слове массива.

Конструктор: используется для инициализации общего количества ответов равным 0. Почему last_resp инициализируется значением -1, станет ясно, когда вы посмотрите на функцию add_resp.

int getcount ():

Эта функция используется для подсчета количества ответов на заданное ключевое слово.

void addword (char str [MAX_KWD_LEN]):

Используется для добавления ключевого слова.

char * getword ():

Используется для возврата ключевого слова для конкретного объекта класса соотв.

недействительный адрес (…):

Это используется для добавления ответа, соответствующего заданному ключевому слову.

void display_resp (int):

Это используется для отображения ответа пользователю, соответствующего заданному порядковому номеру ответов. (на самом деле он делает больше!).

void quit_display_resp (int):

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

Шаг 7: Функции

void initialize_global ()

{

strcpy (wordin [0], «ARE»);

strcpy (wordout [0], «AM»);

strcpy (wordin [1], «AM»);

strcpy (wordout [1], «ARE»);

strcpy (wordin [2], «БЫЛИ»);

strcpy (wordout [2], «БЫЛ»);

strcpy (wordin [3], «БЫЛ»);

strcpy (wordout [3], «БЫЛИ»);

strcpy (wordin [4], «ВЫ»);

strcpy (wordout [4], «Я»);

strcpy (wordin [5], «Я»);

strcpy (wordout [5], «ВЫ»);

strcpy (wordin [6], «ВАШ»);

strcpy (wordout [6], «МОЙ»);

strcpy (wordin [7], «МОЙ»);

strcpy (wordout [7], «ВАШ»);

strcpy (wordin [8], «Я ВСЕ»);

strcpy (wordout [8], «ВЫ»);

strcpy (wordin [9], «ВЫ»);

strcpy (wordout [9], «Я ВСЕ»);

strcpy (wordin [10], «Я»);

strcpy (wordout [10], «ВЫ»);

strcpy (wordin [11], «ВЫ»);

strcpy (wordout [11], «Я»);

strcpy (wordin [12], «Я»);

strcpy (wordout [12], «ВЫ»);

strcpy (wordin [13], «ВЫ»);

strcpy (wordout [13], «Я»);

}

Теперь напишем функцию для отображения ответов пользователю. Первый оператор if в цикле for используется для преднамеренной опечатки, чтобы она выглядела более человечной;-). Один символ выбирается случайным образом за опечатку. Отдельно рассматриваются особые случаи, такие как New Line и Backspace. (Подумайте, почему?). Теперь представляю кое-что новенькое. Специальный символ - *. Char * представляет весь текст, найденный ПОСЛЕ указанного ключевого слова и перед одним из следующих знаков препинания.

Например, рассмотрим ввод пользователя

AMIT> МОГУ ЛИ Я ПОЕЗДАТЬ ЗАВТРА?

МАКС> А ЧТО ЕСЛИ ВЫ НЕ ПОЙДЕТЕ ЗАВТРА?

Подчеркнутый фрагмент не сохраняется в словаре, а берется из пользовательского ввода. В файле MAX. Dat мы храним эту информацию как

МОГУ Я

ЧТО ЕСЛИ ТЫ НЕ *

Звезда (*) просит программу просто скопировать все, что напечатано после ключевого слова (здесь CAN I) в пользовательском вводе, как есть. Я надеюсь, что теперь функция * как специального ключевого слова понятна. Итак, рассмотрим более сложный случай.

AMIT> МОГУ Я ПОЙТИ В ПОКУПКИ?

МАКС> ЧТО ЕСЛИ ВЫ НЕ ПОЙДИТЕ В ПОКУПКИ?

Мы также должны произвести некоторую трансформацию. Когда мы думаем о трансформации, предложение делится на следующие 3 части:

  • Текст перед транспонированием слова. (здесь ПЕРЕЙДИТЕ В ПОКУПКИ)
  • Ключевое слово Transposed. (здесь ВАШ вместо МОЙ)
  • Текст после ключевого слова транспозиции. (здесь я ?)

Шаг 8: Случаи могут быть решены ………

Шаг 9: поиск ключевого слова во вводе пользователем

MAX_KEY указывает количество ключевых слов в файле DAT.

Здесь мы просто ищем, присутствует ли ключевое слово в пользовательском вводе.

Шаг 10: Заключение

Это все ………

Вы сделали это !!!!!!!

Я думаю, что все ясно поняли ……

Рекомендуемые: