Sadržaj:

Glasovno aktivirani pomoćnik - MAX: 10 koraka
Glasovno aktivirani pomoćnik - MAX: 10 koraka

Video: Glasovno aktivirani pomoćnik - MAX: 10 koraka

Video: Glasovno aktivirani pomoćnik - MAX: 10 koraka
Video: КАК НАСТРОИТЬ L4D2 2024, Studeni
Anonim
Glasovno aktivirani pomoćnik - MAX
Glasovno aktivirani pomoćnik - MAX

Hej u ovom Instructableu govorit ću o tome kako napraviti chat-bot MAX (nazvao sam se !!!)

Uz određenu implementaciju, ovaj chatbot možete glasovno kontrolirati ili pomoću različitog softvera učiniti glasovnim pomoćnikom. Ovdje neću govoriti o tome jer svatko može zaista jednostavno izvesti ovu implementaciju.

Zato vas molim da me svi podržite ……

Moj prvi Instructable !!!!!!!

Osjećati se nervozno zbog onoga što će se dogoditi …………….

Korak 1: Upoznavanje s natječajem

Upoznavanje s natječajem
Upoznavanje s natječajem
Upoznavanje s natječajem
Upoznavanje s natječajem

Pozdrav inženjeri i dizajneri ……

Ja sam student računarstva koji voli igrati igre i uvijek je nadahnut na računalima. Ukratko govoreći, volim znati kako sve ove stvari funkcioniraju. Pa sam kao razlog nastavio tražiti, guglati (uostalom i ja sam koristio Yahoo !!! !!!) za traženje i učenje stvari.

Tako sam jednog dana došao pred ekran Instructables. Zaista me zabavilo kroz razne projekte s raznim idejama o različitim aspektima. Od tada nastavljam s tim. Stranica natječaja me jako zabavila i zabrinuta za nagrade i projekte koje su dostavili različiti ljudi iz cijelog svijeta. svijet.

GLASNO AKTIVIRANI IZAZOV moja je prva platforma u pogledu pisanja Instructable.

Nagrade su me jako zabavile (Da !!! Previše ……..).

Također želim podijeliti svoje znanje u području računala i njegove tehnologije drugima o tome kako različite stvari zapravo funkcioniraju.

U ovom Instructableu pokazat ću vam kako izgraditi vlastitog glasovno aktiviranog pomoćnika.

Budući da je to moj prvi Instructable, moglo bi biti toliko grešaka (iako mislim da su sve ove ispravljene), pa oprostite na tome.

TAKO…

Krenimo na put ………………

Korak 2: Gdje sam znao o stvarima?

Gdje sam znao o stvarima?
Gdje sam znao o stvarima?
Gdje sam znao o stvarima?
Gdje sam znao o stvarima?
Gdje sam znao o stvarima?
Gdje sam znao o stvarima?

Ovo će biti veliko pitanje za koje mislim da je većina vaših misli prošla ………

Od školovanja imam veliku strast za umjetnu inteligenciju [AI], od tada sam mnogo pretraživao tražeći resurse za proučavanje i samostalno razvijanje modela.

U početku je to bilo jako teško (pravo stanje), koliko sam shvatio, to je bila vrlo opsežna tema s kojom se nije nimalo lako nositi.

Potražene knjige uključuju:

  1. Umjetna inteligencija Suvremeni pristup
  2. Umjetna. Inteligencija.u 21. stoljeću. 2. izdanje
  3. Duboko učenje

Ovo su jako dobre knjige (da da), ali nije nimalo lako razumjeti stvari koje su o tome napisane. Zatim sam to držao po strani i nastavio tražiti resurse koji daju kratku ideju o tome što doista predstavlja i načine kako doći do toga.

Tada sam pronašao interes za to. Kroz odmor nakon školovanja počeo sam o tome dublje učiti.

U to sam vrijeme naučio i razne programske jezike (C ++, C, Python, Java….), Koji su također vrlo zanimljivi.

Čitajući više o ovoj temi shvatio sam jednu važnu stvar ………………..

Programski jezici OSNOVNI su za svaki proces učenja strojeva

Strojno učenje proces je primjene umjetne inteligencije

S velikim razumijevanjem o programskim jezicima i raznim stvarima koje programer može učiniti ovisno o tome da računalo učini bilo što umjesto nas.

Stoga sam odlučio stvoriti dobru bazu na jezicima koji su me natjerali da razumijem koncepte navedene u knjizi koje sam već spomenuo

To možete i vi ……

Na webu postoji toliko mnogo web stranica koje slobodno podučavaju programske jezike

Tako da možete surfati internetom da biste o tome razumjeli više ako želite ………

Korak 3: Počnimo

Ja sam prije nego što sam počeo pisati Instructable smislio da napišem nešto što bi podrazumijevalo:

  1. Ljudi koji imaju iskustva s kodiranjem
  2. Ljudi bez ikakvog kodiranja

Tako da mislim da sam to učinio bez grešaka (nadam se).

Stoga sam odlučio izgraditi chat bot koji može razgovarati s korisnikom i koji može odgovoriti u skladu s našim razgovorom.

Program (skup uputa) ne može samostalno razmišljati. Ima bazu podataka (mjesto gdje su podaci pohranjeni) činjenica i pravila, koja se pretražuju u vrijeme razgovora kako bi se dao najbolji mogući odgovor u vezi s korisnikom.

Djeluje tako da se proces podudaranja ovisno o upisanim stvarima, samo u rijetkim slučajevima cijela rečenica podudara s potpunom rečenicom.

Korak 4: Kako to zapravo funkcionira?

Korak 1:

MAX otkriva je li korisnik dao nulti ulaz. Ako korisnik dobije unos na takav način, bit će potrebna činjenica iz statičke baze podataka da odgovori.

O oprosti ……

Zaboravila sam reći,

Statička baza podataka: Mjesto gdje se pohranjuju ugrađeni odgovori. Odgovori poput:

1. Kada MAX ne razumije o čemu korisnik govori.

2. Kad se korisnik ponovi.

3. Za pozdravne izjave.

4. Kada korisnik ne upiše ništa i samo nastavi pritiskati Enter.

Ključna riječ: riječi sa posebnim značenjem.

Korak 2:

Postoje neki ugrađeni odgovori koje MAX može lako i lako prepoznati. Utvrđuje prisutnost takve rečenice nakon što identificira unos korisnika i pamti pridruženu ključnu riječ.

3. korak:

Ako ni nakon fragmentacije zadane rečenice nije pronađena ugrađena rečenica, tada MAX traži određenu ključnu riječ kako bi definirao kontekst. Ako se ne pronađe kontekst, onda je sljedeći cilj natjerati korisnika da namjerno na određen način govori o temi.

Korak 4:

Iz statičke baze podataka o kojoj smo već govorili pokupit će odgovor koji ovisi o tome o čemu su korisnici razgovarali.

5. korak:

Ako postoji potreba za promjenom riječi, to će učiniti sam (poput pretvaranja MOJE u VAŠE itd …)

Korak 5: Kodirajmo …………

Koristim Turbo C IDE 3.0 jer je ovo IDE [Integrirano razvojno okruženje]

Prije kodiranja, pogledajmo strukturu uzorka datoteke podataka.

MAX prepoznaje određene ključne riječi.

Ako su te ključne riječi pronađene u unosu koji daje korisnik, tada se odgovarajući odgovor odabire iz podatkovne datoteke, bira se i prikazuje na zaslonu.

Ključna riječ je u datoteci podataka odvojena @ KWD @ tokenom od odgovora.

Token je najmanji dio svakog aspekta programiranja.

Ovaj token označava da je sljedeći redak ključna riječ, a ne odgovor.

@ KWD@ ZDRAVO

BOK, KAKO SI

ZDRAVO DRAGI!

DOBRO SAM

KAKO JE BIO VAŠ POSAO?

KOLIKO SI STAR?

HOĆU

TAKO ĆEŠ UČINITI. I VERUJEM U TO…

HOĆETE LI TO MOĆI UČINITI?

HOĆEŠ LI MI VJEROVATI?

DA

JESI LI SIGURAN ?

KAKO MOŽETE BITI SIGURNI?

NE

Čini se da ste vrlo pesimistični.

NIKADA NE reci NE…

NIKAD NE RECI NIKAD

NIKADA NE BITI GRUB

NIKADA NE BITI DROGAN !!!!

NIKAD NE KAŽI DA TO NE MOGU UČINITI

NIKADA NE BITI OPTIMISTIČAN

RAČUNALO

ZNAM KAKO RADITI NA RAČUNALU.

TRENUTNO KORISTITE RAČUNALO. DOBRO?

Na primjer, 'Hello', iz gornjeg rječnika, MAX će dati jedan od sljedećih odgovora:

Bok, KAKO STE DRAGI!

DOBRO SAM

KAKO JE BIO VAŠ POSAO?

KOLIKO SI STAR?

Korak 6: Nastava

Kad ovo postane jasno, definirajmo sada strukture podataka koje ćemo koristiti.

Izrađujemo dvije klase:

progstr - Ovo se koristi za spremanje podataka vezanih za unos korisnika.

Resp - Ovo se koristi za spremanje informacija o različitim odgovorima

razred progstr {

javnost:

char userip [MAX_USER_INPUT];

ključna riječ char [30];

int keyfound;

int keyno;

int nullip;

// konstruktor

progstr () {keyno = -1; nullip = 0; pronađen ključ = 0;

}

} ip;

razreda odn

{

int tot_resp;

int last_resp;

char odgovori [MAX_RESP_NO] [MAX_RESP_LEN];

char riječ [MAX_KWD_LEN];

javnost:

// konstruktor

odg. ()

{

tot_resp = 0;

last_resp = -1;

}

int getcount ()

{

return last_resp;

}

nevažeći dodatak (niz znakova [MAX_KWD_LEN])

{

strcpy (riječ, str);

}

char * getword ()

{

povratna riječ;

}

adresar void (niz znakova [MAX_RESP_LEN])

{

strcpy (odgovori [++ last_resp], str);

}

// kasnije definirano

void display_resp (int broj);

void quit_display_resp (int broj);

};

Gledajući prvu klasu, Korisnički niz nizova znakova koristi se za spremanje rečenice koju je dao korisnik.

Druga ključna riječ polja koristi se za spremanje ključne riječi, ako postoji, koja se nalazi u tom unosu. Ako je ključna riječ pronađena, int keyfoundiramo na 1 else, ona ostaje 0, jer je inicijalizirana na 0 u Konstruktoru.

keyno pohranjuje odgovarajući broj ključa odgovarajuće ključne riječi.

nullip označava je li korisnik dao bilo koji null unos, tj. samo je pritisnuo enter, a da nije učinio ništa drugo.

Dođimo sada do drugog razreda, odn.

Prvi član podataka, tot_resp označava ukupan broj odgovora za datu ključnu riječ.

Odgovori su zapravo pohranjeni u odgovorima [MAX_RESP_NO] [MAX_RESP_LEN], a odgovarajuća ključna riječ pohranjena je u riječi niza.

Konstruktor: Ovo se koristi za inicijalizaciju ukupnog broja odgovora na 0. Zašto je last_resp inicijaliziran na -1 bit će jasno kada pogledate funkciju add_resp.

int getcount ():

Ova se funkcija koristi za izračunavanje broja odgovora za datu ključnu riječ.

nevažeća dodana riječ (niz znakova [MAX_KWD_LEN]):

Ovo se koristi za dodavanje ključne riječi.

char * getword ():

Koristi se za vraćanje ključne riječi za određeni objekt klase odn.

adresa ništava (…):

Ovo se koristi za dodavanje odgovora koji odgovara datoj ključnoj riječi.

void display_resp (int):

Ovo se koristi za prikaz odgovora korisniku koji odgovara danom broju indeksa za odgovore. (zapravo čini više od toga!).

void quit_display_resp (int):

Razlika između ove i gornje funkcije je u tome što se koristi na kraju kada korisnik odustane. Dakle, ne vraća upit korisniku.

Korak 7: Funkcije

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], "TI");

strcpy (wordout [4], "ME");

strcpy (wordin [5], "I");

strcpy (wordout [5], "TI");

strcpy (wordin [6], "VAŠ");

strcpy (wordout [6], "MOJ");

strcpy (wordin [7], "MOJ");

strcpy (wordout [7], "VAŠ");

strcpy (wordin [8], "I'VE");

strcpy (wordout [8], "VAS");

strcpy (wordin [9], "VAS");

strcpy (wordout [9], "I'VE");

strcpy (wordin [10], "Ja sam");

strcpy (wordout [10], "VI");

strcpy (wordin [11], "VI");

strcpy (wordout [11], "Ja sam");

strcpy (wordin [12], "ME");

strcpy (wordout [12], "TI");

strcpy (wordin [13], "TI");

strcpy (wordout [13], "ME");

}

Napisimo sada funkciju za prikaz odgovora korisniku. Prva naredba if u for petlji koristi se za namjernu grešku pri upisivanju kako bi izgledala poput čovjeka;-). Jedan znak je nasumično odabran za tipkarsku pogrešku. Posebni slučajevi poput New Line i Backspace zasebno se razmatraju. (Razmislite zašto?). Sada predstavljam nešto novo. Poseban znak - *. Char * predstavlja sav tekst koji se nalazi NAKON identificirane ključne riječi, a prije jednog od sljedećih interpunkcijskih znakova.

Na primjer, razmislite o korisničkom unosu

AMIT> MOGU LI SUTRA IĆI U INDORE?

MAX> ŠTO AKO SUTRA NE OTIŠETE INDORE?

Podcrtani dio nije pohranjen u rječniku, već je preuzet iz korisničkog unosa. U datoteci MAX. Dat ove podatke pohranjujemo kao

MOGU LI

ŠTO AKO NE UČINITE *

Star (*) traži od programa da jednostavno kopira sve što je upisano nakon ključne riječi (ovdje MOŽEM I) u korisnički unos, onakvog kakav je. Nadam se da je sada jasna funkcija * kao posebne ključne riječi. Dakle, razmotrimo složeniji slučaj.

AMIT> MOGU LI IĆI U KUPOVINU?

MAX> ŠTO AKO NE IDEŠ U KUPOVINU?

Moramo izvršiti i neku transformaciju. Kad pomislimo na transformaciju, rečenica se dijeli u sljedeća 3 odjeljka:

  • Tekst prije transpozicije Word. (ovdje, IDITE NA KUPUJTE)
  • Transponirana ključna riječ. (ovdje, TVOJE, umjesto MOJEG)
  • Tekst nakon transpozicije Ključna riječ. (ovdje, ja?)

Korak 8: Slučajevi se mogu riješiti ………

Korak 9: Traženje ključne riječi u korisničkom unosu

MAX_KEY označava broj ključnih riječi u DAT datoteci.

Ovdje jednostavno pretražujemo je li ključna riječ prisutna u korisničkom unosu.

Korak 10: Zaključak

To je sve ………

Uspjeli ste !!!!!!!

Mislim da su svi jasno razumjeli stvari ……

Preporučeni: