Съдържание:
- Стъпка 1: Познаване на конкурса
- Стъпка 2: Откъде знаех за нещата?
- Стъпка 3: Нека започнем
- Стъпка 4: Как всъщност работи?
- Стъпка 5: Нека да кодираме …………
- Стъпка 6: Класове
- Стъпка 7: Функции
- Стъпка 8: Случаите могат да бъдат решени от ………
- Стъпка 9: Търсене на ключова дума във въведеното от потребителя
- Стъпка 10: Заключение
Видео: Гласово активиран асистент - MAX: 10 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Хей в този Instructable ще говоря за това как да направя чат-бот MAX (наречен аз !!!)
С известна реализация можете да направите този chatbot гласово контролиран или с помощта на различен софтуер можете да го направите като гласов асистент. Тук няма да говоря за това, тъй като всеки наистина може лесно да направи това изпълнение.
Така че всички моля да ме подкрепите …….
Моят първи инструктаж !!!!!!!
Изпитвате нервност към това, което ще се случи …………….
Стъпка 1: Познаване на конкурса
Здравейте инженери и дизайнери ……
Аз самият студент по компютърни науки обича да играе игри и винаги се вдъхновява на компютри. Говорейки накратко, обичам да знам как работят всички тези неща. Така че като причина продължих да търся, да гугъл (също използвах Yahoo !!! !!!) за търсене и изучаване на нещата.
И така един ден излязох пред екрана на Instructables. Това наистина ме забавляваше чрез различни проекти с разнообразни идеи по различни аспекти. След това от този ден продължавам с него. Страницата на конкурса наистина ме забавляваше, както за наградите, така и за проектите, които бяха изпратени от различни хора от света.
VOICE ACTIVTED CHALLENGE е моята първа платформа по отношение на писането на Instructable.
Наградите много ме забавляваха (Да !!! Твърде много ……..).
Също така искам да споделя знанията си в областта на компютрите и технологиите на другите за това как всъщност работят различните неща.
В тази инструкция ще ви покажа как да създадете свой собствен гласово активиран асистент.
Тъй като това е първият ми Instructable, може да има толкова много грешки (въпреки че мисля, че всички те са поправени), така че простете за това.
ТАКА…
Нека започнем пътуването ………………
Стъпка 2: Откъде знаех за нещата?
Това ще бъде основен въпрос, мисля, че повечето от умовете ви може да са преминали през ………
Имам голяма страст към изкуствения интелект [AI] от моето образование, от това съм търсил много, търсейки ресурси, за да уча и да разработя модел сам.
Първоначално беше много трудно (истинско състояние), тъй като разбрах, че това е много обширна тема, която изобщо не е лесна за справяне.
Потърсените книги включват:
- Изкуствен интелект Съвременен подход
- Изкуствено. Интелигентност.в.21 -ви. Век
- Дълбоко обучение
Това са много добри книги (да със сигурност), но не е никак лесно да се разберат нещата, които са написани върху него. След това го оставих отстрани и продължих да търся ресурсите, които дават кратка представа за това това наистина представлява и начини да се стигне до него.
Тогава намерих интерес към това. През ваканцията след училище започнах да научавам за това по -задълбочено.
По това време научих и различни езици за програмиране (C ++, C, Python, Java….), Които също бяха много интересни.
Като прочетох повече по темата разбрах едно важно нещо ………………..
Езиците за програмиране са ОСНОВНИТЕ ЗА ВСЕКИ МАШИНЕН ПРОЦЕС
Машинното обучение е процесът на прилагане на AI
С голямо разбиране за езиците за програмиране и различни неща, които могат да бъдат направени в зависимост от програмиста, за да направи компютър да направи всичко за нас.
Затова реших да създам добра база на езиците, които ме накараха да разбера концепциите, представени в книгата, които вече споменах
Вие също можете да направите това ………
В мрежата има толкова много уебсайтове, които да преподават свободно езици за програмиране
Така че можете да сърфирате в интернет, за да разберете повече за това, ако желаете ………
Стъпка 3: Нека започнем
Аз, преди да започна да пиша Instructable, се сетих да напиша нещо, което да се разбира от:
- Хора, които имат опит с кодирането
- Хора без кодиране
Така че мисля, че направих нещата без никакви грешки (надявам се).
Затова реших да създам чат бот, който да може да разговаря с потребителя и да реагира според нашия разговор.
Програмата (набор от инструкции) не може да мисли сама. Той разполага с база данни (място, където се съхраняват данни) с факти и правила, които се търсят по време на разговора, за да дадат възможно най -добрия отговор, който прави във връзка с потребителя.
Той работи чрез съвпадение на процеса в зависимост от въведените неща, само в редки случаи цяло изречение се съпоставя с цяло изречение.
Стъпка 4: Как всъщност работи?
Етап 1:
MAX установява дали потребителят е въвел нулев вход. Ако потребителят получи въвеждане по такъв начин, той трябва да отговори от статичната база данни.
О, съжалявам ……
Забравих да кажа,
Статична база данни: Мястото, където се съхраняват вградените отговори. Отговори като:
1. Когато MAX не разбира за какво говори потребителят.
2. Когато потребителят се повтаря.
3. За поздравителни изявления.
4. Когато потребителят не въведе нищо и просто продължава да натиска Enter.
Ключова дума: думи със специално значение.
Стъпка 2:
Има някои вградени отговори, които MAX може да разпознае лесно и лесно. Той установява наличието на такова изречение след идентифициране на въведените от потребителите данни и запомня свързаната ключова дума.
Стъпка 3:
Ако дори след фрагментирането на дадено изречение не е намерено вградено изречение, тогава MAX търси конкретната ключова дума, за да определи контекста. Ако не се намери контекст, следващата цел е да накара потребителя да говори по темата по -умишлено по определен начин.
Стъпка 4:
От статичната база данни, за която вече говорихме, тя ще получи отговора, който зависи от това, за което е говорил потребителят.
Стъпка 5:
I Има нужда от промяна на думите, които ще направят сами (като Преобразуване на МОЕТО В ВАШЕТО и т.н. …)
Стъпка 5: Нека да кодираме …………
Използвам Turbo C IDE 3.0, тъй като това е IDE [Интегрирана среда за развитие]
Преди кодирането нека да видим структурата на примерен файл с данни.
MAX разпознава определени ключови думи.
Ако тези ключови думи са намерени във въведените от потребителя данни, съответният отговор се избира от файла с данни и се избира и показва на екрана.
Ключова дума е отделена във файла с данни от отговорите чрез @ KWD @ token.
Токенът е най -малката част от всеки аспект на програмирането.
Този знак означава, че следващият ред е ключова дума, а не отговор.
@ KWD@ ЗДРАВЕЙ
ЗДРАВЕЙ КАК СИ
ЗДРАВЕЙ, СКЪПА !
ДОБРЕ СЪМ
КАК БЕШЕ ВАШАТА РАБОТА?
НА КОЛКО ГОДИНИ СИ?
АЗ ЩЕ
ТОВА ЩЕ НАПРАВИТЕ. И ТОВА ВЕРЯВАМ …
Ще успеете ли да направите това?
ЩЕ МИ ЛИ ДОВЕРИТЕ?
ДА
СИГУРЕН ЛИ СИ ?
КАК МОЖЕТЕ ДА БЪДЕТЕ СИГУРНИ?
НЕ
Изглежда, че сте много песимистични.
НИКОГА НЕ КАЗВАЙ НЕ…
НИКОГА НЕ КАЗВАЙ НИКОГА
НИКОГА не бъди груб
НИКОГА НЕ БЪДЕТЕ НАГРАДЕНИ !!!!
НИКОГА НЕ КАЗВАЙ, ЧЕ НЕ МОГА ДА ПРАВЯ ТОВА
НИКОГА НЕ БЪДЕТЕ ОПТИМИСТИЧНИ
КОМПЮТЪР
ЗНАМ КАК ДА РАБОТЯ НА КОМПЮТЪР.
В момента използвате компютър. НАЛИ?
Например „Здравей“, от горния речник, MAX ще даде един от следните отговори:
ЗДРАВЕЙТЕ, КАК СТЕ СКЪПИ!
ДОБРЕ СЪМ
КАК БЕШЕ ВАШАТА РАБОТА?
НА КОЛКО ГОДИНИ СИ?
Стъпка 6: Класове
След като това е ясно, нека сега дефинираме структурите на данните, които ще използваме.
Създаваме два класа:
progstr - Това се използва за съхраняване на информация, свързана с въвеждането от потребителя.
resp - Това се използва за съхраняване на информацията за различните отговори
клас 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;
char отговори [MAX_RESP_NO] [MAX_RESP_LEN];
char дума [MAX_KWD_LEN];
публично:
// конструктор
resp ()
{
tot_resp = 0;
last_resp = -1;
}
int getcount ()
{
връщане last_resp;
}
невалидна добавка (char str [MAX_KWD_LEN])
{
strcpy (word, str);
}
char * getword ()
{
обратна дума;
}
void addresp (char str [MAX_RESP_LEN])
{
strcpy (отговори [++ last_resp], str);
}
// определено по -късно
void display_resp (int num);
void quit_display_resp (int num);
};
Поглеждайки към първа класа, Userip на символния масив се използва за съхраняване на изречението, предоставено от потребителя.
Друга ключова дума за масив се използва за съхраняване на ключовата дума, ако има такава, намерена в този вход. Ако се намери ключова дума, ние правим int keyfound до 1 else, тя остава 0, тъй като се инициализира на 0 в конструктора.
keyno съхранява номера на съответния ключ на съответната ключова дума.
nullip показва дали потребителят е въвел нулев вход, т.е. просто натиска Enter, без да прави нищо друго.
Сега нека преминем към втория клас, респ.
Първият член на данните, tot_resp, показва броя на отговорите за дадена ключова дума.
Отговорите всъщност се съхраняват в отговори [MAX_RESP_NO] [MAX_RESP_LEN] и съответната ключова дума се съхранява в думата на масива.
Конструктор: Използва се за инициализиране на общия брой отговори на 0. Защо last_resp се инициализира на -1 ще стане ясно, когато погледнете функцията add_resp.
int getcount ():
Тази функция се използва за изчисляване на броя отговори за дадена ключова дума.
невалидна добавка (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], "WERE");
strcpy (wordout [2], "WAS");
strcpy (wordin [3], "WAS");
strcpy (wordout [3], "WERE");
strcpy (wordin [4], "ТИ");
strcpy (wordout [4], "ME");
strcpy (wordin [5], "I");
strcpy (wordout [5], "ТИ");
strcpy (wordin [6], "ТВОЯ");
strcpy (wordout [6], "МОЙ");
strcpy (wordin [7], "MY");
strcpy (wordout [7], "ТВОЯ");
strcpy (wordin [8], "I'VE");
strcpy (wordout [8], "ВИЕ");
strcpy (wordin [9], "ВИЕ");
strcpy (wordout [9], "I'VE");
strcpy (wordin [10], "Аз съм");
strcpy (wordout [10], "ТИ");
strcpy (wordin [11], "ТИ");
strcpy (wordout [11], "Аз съм");
strcpy (wordin [12], "ME");
strcpy (wordout [12], "ТИ");
strcpy (wordin [13], "ТИ");
strcpy (wordout [13], "ME");
}
Нека сега напишем функция за показване на отговорите на потребителя. Първият оператор if в цикъла for се използва за умишлена грешка при въвеждане, за да изглежда по-човешки;-). Един случайно избран символ за грешка при въвеждане. Специални случаи като New Line и Backspace се разглеждат отделно. (Помислете защо?). Сега представям нещо ново. Специален знак - *. Char * представлява целия намерен текст СЛЕД идентифицираната ключова дума и преди един от следните препинателни знаци.
Например, помислете за въвеждането от потребителя
AMIT> МОГА ЛИ УТРЕ ДА СЕ ИНДОРИРА?
MAX> КАКВО, АКО УТРЕ НЕ ИДЕТЕ ДА ИНДОРИРАТЕ?
Подчертаната част не се съхранява в речника, по -скоро е взета от потребителското въвеждане. Във файла MAX. Dat съхраняваме тази информация като
МОГА ЛИ
КАКВО АКО НЕ ПРАВИТЕ *
Star (*) изисква от програмата просто да копира каквото и да е въведено след ключовата дума (тук CAN I) във въведеното от потребителя. Надявам се, че сега функцията на * като специална ключова дума е ясна. Така че, нека разгледаме по -сложен случай.
AMIT> Мога ли да отида да пазарувам?
MAX> КАКВО, АКО НЕ ОТЛИЧЕТЕ ДА ПАЗАРУВАТЕ?
Ние също трябва да извършим някаква трансформация. Когато мислим за трансформация, изречението се разделя на следните 3 раздела:
- Текст преди транспониране Word. (тук, КЪМ ПАЗАРУВАНЕ С)
- Транспонираната ключова дума. (тук, ТВОЯ, на мястото на МОЕТО)
- Текст след транспониране ключова дума. (тук аз ?)
Стъпка 8: Случаите могат да бъдат решени от ………
Стъпка 9: Търсене на ключова дума във въведеното от потребителя
MAX_KEY показва броя ключови думи във файла DAT.
Тук просто търсим дали ключовата дума присъства във въведените от потребителя данни.
Стъпка 10: Заключение
Това е всичко ………
Ти го направи !!!!!!!
Мисля, че всички разбраха нещата ясно …
Препоръчано:
Начало/Лабораторен асистент с гласово управление: 14 стъпки (със снимки)
Начало/Лабораторен асистент с гласов контрол: За менЗдравейте! Това е първият ми инструктаж, на 17 години съм. Аз съм от Гърция, така че английският ми може да не е перфектен, но ще направя всичко възможно. И така, за първи път проектирах това приложение преди 2 години и намерих този конкурс като възможност да актуализирам стария си проект
Гласово активиран BT: 3 стъпки (със снимки)
Гласово активиран BT: Гласово контролирана домашна автоматизация с помощта на Arduino: В този проект аз използвам гласова функция за управление на домашните устройства. Този проект е част от моята поредица за домашна автоматизация. Този проект е много лесен за използване в реалния живот. Хората на всяка възраст могат да контролират
RabbitPi - Активиран Alexa, IFTTT свързан, IoT асистент, който размахва ушите: 12 стъпки
RabbitPi - Alexa Enabled, IFTTT Connected, Ear -Wiggling IoT Assistant: Това е остарял Nabaztag от 2005 г. " интелигентен заек " че съм преустроен в модерен IoT Assistant, използвайки Raspberry Pi 3 и Adafruit Motor HAT, с микрофон за уеб камера и високоговорител Philips Soundshooter, съдържащ се в сладката оригинална касета
Гласово активиран релеен превключвател (Arduino): 6 стъпки (със снимки)
Гласово активиран релеен превключвател (Arduino): Здравейте на всички! В този проект ще ви покажа как да прилагате гласови команди за вашите проекти на Arduino. Използвайки гласови команди, ще ви покажа как да управлявате модул за релеен превключвател
Гласово активиран RoBoT: 5 стъпки
Гласово активиран RoBoT: Робот с гласов контрол, използващ Arduino: Здравейте на всички, надявам се, че сте добре и се справяте добре. Днес ще стартираме проекти, свързани с роботиката, използвайки Arduino. Днес ще говорим за гласово управляван робот с помощта на Arduino и android ap