Sisukord:

Häälega aktiveeritud assistent - MAX: 10 sammu
Häälega aktiveeritud assistent - MAX: 10 sammu

Video: Häälega aktiveeritud assistent - MAX: 10 sammu

Video: Häälega aktiveeritud assistent - MAX: 10 sammu
Video: КАК НАСТРОИТЬ L4D2 2024, November
Anonim
Häälega aktiveeritud assistent - MAX
Häälega aktiveeritud assistent - MAX

Hei selles juhendatavas, ma räägin sellest, kuidas teha vestlusbot MAX (nimega mina !!!)

Mõne rakendusega saate muuta selle vestlusboti hääljuhtimiseks või mitmesuguse tarkvara abil häälassistendiks. Ma ei hakka sellest siin rääkima, sest igaüks saab selle rakendamise tõeliselt hõlpsalt teostada.

Nii et kõik palun toetage mind ….

Minu esimene juhendatav !!!!!!!

Närviline, mis juhtuma hakkab …………….

1. samm: teadmised konkursist

Võistlusest teada saamine
Võistlusest teada saamine
Võistlusest teada saamine
Võistlusest teada saamine

Tere insenerid ja disainerid ….

Mina ise, arvutiteaduse üliõpilane, armastan mängida ja olen alati arvutitest inspireeritud. Lühidalt rääkides meeldib mulle teada, kuidas kõik need asjad praegu välja töötavad. Nii et ma otsisin ja guugeldasin (tegelikult kasutasin ka Yahoo'i !!!) !!!) asjade otsimiseks ja õppimiseks.

Nii et ühel päeval jõudsin ma Instructabeli ekraani ette. See tõepoolest lõbustas mind erinevate projektide kaudu, millel oli mitmesuguseid ideid erinevatest aspektidest. Sellest ajast alates jätkan sellega kursis olemist. Võistlusleht lõbustas mind nii auhindade kui ka projektide üle, mille on esitanud erinevad inimesed kogu maailmas maailma.

VOICE ACTIVATED CHALLENGE on minu esimene platvorm Instructable'i kirjutamise osas.

Auhinnad lõbustasid mind väga (jah !!! Liiga palju ……..).

Samuti soovin jagada teistele oma teadmisi arvutite ja selle tehnoloogia valdkonnas erinevate asjade tegeliku toimimise kohta.

Selles juhendis näitan teile, kuidas luua oma häälega aktiveeritud assistent.

Kuna see on minu esimene juhendatav, võib seal olla nii palju vigu (kuigi ma arvan, et need kõik on parandatud), andke selle eest andeks.

NII…

Alustame teekonda ………………

2. samm: kust ma asjade kohta teadsin?

Kust ma asjast teadsin?
Kust ma asjast teadsin?
Kust ma asjast teadsin?
Kust ma asjast teadsin?
Kust ma asjast teadsin?
Kust ma asjast teadsin?

See saab olema suur küsimus, ma arvan, et enamik teie meeltest võib läbi käia ………..

Mul on koolipõlves suur kirg tehisintellekti [AI] vastu, sellest olen otsinud palju, otsides ressursse, et õppida ja ise mudel välja töötada.

Esialgu oli see väga raske (tõeline tingimus), sest ma sain aru, et see oli väga lai teema, mida pole üldse lihtne käsitleda.

Otsitud raamatud sisaldavad järgmist:

  1. Tehisintellekt kaasaegne lähenemine
  2. Kunstlik. Intelligentsus 21. sajandil. 2. lisa
  3. Sügav õppimine

Need on väga head raamatud (jah kindlasti), kuid sellest ei ole üldse lihtne aru saada. Sellele vaatamata jätsin selle kõrvale ja otsisin ressursse, mis annavad lühikese ettekujutuse sellest, mida see tõesti kujutab endast ja viise selleni jõudmiseks.

Siis leidsin selle vastu huvi. Pärast koolist puhkust hakkasin seda sügavamalt tundma õppima.

Sel ajal õppisin ka erinevaid programmeerimiskeeli (C ++, C, Python, Java …), mis oli liiga huvitav.

Teemat lähemalt lugedes sain aru ühest olulisest asjast ………………..

Programmeerimiskeeled on IGA MASINA ÕPPEPROTSESSI PÕHIMÕTE

Masinõpe on tehisintellekti rakendamise protsess

Suurepärane arusaam programmeerimiskeeltest ja mitmesugustest asjadest, mida programmeerija saab teha, et arvuti teeks meie heaks midagi.

Seega otsustasin luua hea baasi nendele keeltele, mis panid mind mõistma juba mainitud raamatus esitatud mõisteid

Ka sina saad seda teha ……

Veebis on nii palju veebisaite, kus programmeerimiskeeli vabalt õpetada

Nii et kui soovite, saate Internetis surfata, et sellest rohkem aru saada ……

Samm: alustame

Mõtlesin enne Instructable'i kirjutamise alustamist kirjutada midagi sellist, millest saaks aru:

  1. Inimesed, kellel on kodeerimise kogemus
  2. Inimesed ilma igasuguse kodeerimiseta

Nii et ma arvan, et olen teinud asja ilma vigadeta (loodetavasti).

Seega olen otsustanud luua vestlusboti, mis oskab kasutajaga rääkida ja saab meie jutu järgi vastata.

Programm (juhiste kogum) ei suuda iseseisvalt mõelda. Sellel on andmebaas (koht, kuhu andmeid on salvestatud) faktidest ja reeglitest, mida otsitakse rääkimise ajal, et anda kasutajale parim võimalik vastus.

See toimib sobitamisprotsessiga sõltuvalt sisestatud asjadest, ainult harvadel juhtudel sobitatakse terve lause terviklausega.

Samm: kuidas see tegelikult töötab?

Samm 1:

MAX selgitab välja, kas kasutaja on sisestanud null sisendi. Kui kasutaja sisestab sellisel viisil, võtab see vastuseks staatilisest andmebaasist fakti.

Oi vabandust ……

Unustasin öelda,

Staatiline andmebaas: koht, kuhu sisseehitatud vastused salvestatakse. Vastused nagu:

1. Kui MAX ei saa aru, millest kasutaja räägib.

2. Kui kasutaja kordab ennast.

3. Tervitusavalduste jaoks.

4. Kui kasutaja ei kirjuta midagi ja jätkab sisestusklahvi vajutamist.

Märksõna: erilise tähendusega sõnad.

2. samm:

Sisseehitatud vastused on mõned, mida MAX suudab hõlpsasti ja hõlpsalt ära tunda. Pärast kasutajate sisendi tuvastamist leiab see sellise lause olemasolu ja mäletab sellega seotud märksõna.

3. samm:

Kui isegi pärast antud lause killustamist ei leita sisseehitatud lauset, otsib MAX konteksti määratlemiseks konkreetset märksõna. Kui konteksti ei leita, on järgmiseks eesmärgiks panna kasutaja teemal teadlikumalt ja konkreetsel viisil rääkima.

4. samm:

Staatilisest andmebaasist, millest me juba rääkisime, saab see vastuse, mis sõltub sellest, millest kasutaja on rääkinud.

5. samm:

Mul on vaja muuta sõnu, mida ta ise teeb (näiteks MINU muutmine TEISEKS jne.).

Samm: kodeerime …………

Ma kasutan Turbo C IDE 3.0, kuna see on IDE [integreeritud arengukeskkond]

Enne kodeerimist vaatame näidisfaili struktuuri.

MAX tuvastab teatud märksõnu.

Kui need märksõnad leitakse kasutaja sisendist, valitakse andmefailist vastav vastus, mis valitakse üles ja kuvatakse ekraanil.

Märksõna eraldatakse andmefailis vastustest @ KWD @ märgiga.

Token on kõigi programmeerimise aspektide väikseim osa.

See märk tähistab, et järgmine rida on märksõna, mitte vastus.

@ KWD@ TERE

TERE, KUIDAS LÄHEB

TERE, KALLIS !

MINA OLEN FINE

KUIDAS SINU TÖÖ OLI?

KUI VANA SA OLED?

MA HAKKAN

SINA TEED NII. MA ISELDIN LIIGA…

KAS SINA SAAD NII?

KAS SA USALDAD MINU?

JAH

OLED SA KINDEL ?

KUIDAS SA SAAD NII KINDLASTI OLLA?

EI

TUNNED, ET OLED VÄGA PESSIMISTILINE.

ÄRGE kunagi öelge EI…

ÄRA IIAL ÜTLE IIAL

ÄRGE KUNAGI JULGE

ÄRGE KUNAGI OLGE arrogantne !!!!

ÄRGE KUNAGI ÜTLE, ET MA EI TOHI seda teha

ÄRGE KUNAGI OLGE OPTIMISTILINE

ARVUTI

MA TEAN, KUIDAS ARVUTIS TÖÖTADA.

KASUTAD HETKEL ARVUTIT. ÕIGE?

Näiteks ülaltoodud sõnastikust "Tere" annab MAX ühe järgmistest vastustest.

Tere, KUIDAS OLETE KALLIS!

MINA OLEN FINE

KUIDAS SINU TÖÖ OLI?

KUI VANA SA OLED?

6. samm: klassid

Kui see asi on selge, määratleme nüüd andmestruktuurid, mida kasutame.

Loome kaks klassi:

progstr - seda kasutatakse kasutaja sisenditeabe salvestamiseks.

resp - Seda kasutatakse erinevate vastuste kohta teabe salvestamiseks

klassi programm {

avalik:

sümbol userip [MAX_USER_INPUT];

char märksõna [30];

int keyfound;

int keyno;

int nullip;

// konstruktor

progstr () {keyno = -1; nullip = 0; võtmeotsing = 0;

}

} ip;

klass resp

{

int tot_resp;

int last_resp;

sümbolivastused [MAX_RESP_NO] [MAX_RESP_LEN];

char sõna [MAX_KWD_LEN];

avalik:

// konstruktor

resp ()

{

tot_resp = 0;

viimane_resp = -1;

}

int getcount ()

{

return last_resp;

}

tühine lisasõna (char str [MAX_KWD_LEN])

{

strcpy (sõna, str);

}

char * getword ()

{

tagasiside;

}

tühine aadress (char str [MAX_RESP_LEN])

{

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

}

// määratletud hiljem

tühine display_resp (int number);

tühine quit_display_resp (int number);

};

Vaadates esimest klassi, Märgimassiivi userip kasutatakse kasutaja antud lause salvestamiseks.

Teist massiivi märksõna kasutatakse selles sisendis leiduva märksõna salvestamiseks. Kui leitakse märksõna, leiame int võtme 1 -le, see jääb 0 -ks, kuna see on konstruktoris lähtestatud 0 -le.

keyno salvestab vastava märksõna vastava võtme numbri.

nullip näitab, kas kasutaja on andnud null -sisendi, st ta lihtsalt vajutab sisestusklahvi ilma midagi muud tegemata.

Tulgem nüüd teise klassi, resp.

Esimene andmeliik tot_resp näitab antud märksõna vastuste koguarvu.

Vastused on tegelikult salvestatud vastustesse [MAX_RESP_NO] [MAX_RESP_LEN] ja vastav märksõna salvestatakse massiivsõnasse.

Konstruktor: seda kasutatakse vastuste koguarvu lähtestamiseks väärtusele 0. Miks last_resp lähtestatakse väärtuseks -1, selgub funktsioonist add_resp.

int getcount ():

Selle funktsiooni abil saab kokku lugeda, kui palju vastuseid antud märksõnale on.

tühine lisasõna (char str [MAX_KWD_LEN]):

Seda kasutatakse märksõna lisamiseks.

char * getword ():

Kasutatakse konkreetse klassi objekti märksõna tagastamiseks.

tühine aadress (…):

Seda kasutatakse antud märksõnale vastuse lisamiseks.

tühine display_resp (int):

Seda kasutatakse kasutajale vastuse kuvamiseks, mis vastab vastuste antud indeksnumbrile. (tegelikult teeb see rohkemgi!).

void quit_display_resp (int):

Selle funktsiooni ja ülaltoodud funktsiooni erinevus seisneb selles, et seda kasutatakse lõppkokkuvõttes, kui kasutaja lõpetab. Niisiis, see ei tagasta kasutajale viipasid.

Samm 7: Funktsioonid

void initialize_global ()

{

strcpy (wordin [0], "ON");

strcpy (wordout [0], "AM");

strcpy (wordin [1], "AM");

strcpy (wordout [1], "ON");

strcpy (wordin [2], "OLI");

strcpy (wordout [2], "WAS");

strcpy (wordin [3], "WAS");

strcpy (wordout [3], "OLI");

strcpy (wordin [4], "SINA");

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

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

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

strcpy (wordin [6], "SINU");

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

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

strcpy (wordout [7], "SINU");

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

strcpy (wordout [8], "YOU'VE");

strcpy (wordin [9], "YOU'VE");

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

strcpy (wordin [10], "MINA");

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

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

strcpy (wordout [11], "MINA");

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

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

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

strcpy (sõna [13], "MINA");

}

Kirjutame nüüd funktsiooni vastuste kuvamiseks kasutajale. Esimest if-lauset silmusesse for kasutatakse tahtliku tippimisvea tegemiseks, et see näeks inimlikum välja;-). Trükivea jaoks valitakse juhuslikult üks märk. Erijuhtumeid, nagu New Line ja Backspace, käsitletakse eraldi. (Mõtle, miks?). Nüüd tutvustan midagi uut. Eriline tegelane - *. Char * tähistab kogu teksti, mis leiti PÄRAST tuvastatud märksõna ja enne ühte järgmistest kirjavahemärkidest.

Mõelge näiteks kasutaja sisendile

AMIT> KAS MA SAAN HOMME SISESTADA?

MAX> MIDA KUI EI HOMME SISESTADA?

Allajoonitud osa ei salvestata sõnastikku, vaid see võetakse kasutaja sisendist. Failis MAX. Dat salvestame selle teabe kujul

KAS MA SAAN

Mis siis, kui te ei tee *

Täht (*) palub programmil lihtsalt kopeerida kõik, mis on sisestatud kasutaja märksõna (siin CAN I) järel, nii nagu see on. Loodan, et nüüd on * kui erilise märksõna funktsioon selge. Niisiis, kaalume keerulisemat juhtumit.

AMIT> KAS MA SAAN OSTA?

MAX> MIDA KUI TE EI OSTLE?

Peame ka mõne ümberkujundamise läbi viima. Kui me mõtleme ümberkujundamisele, jagatakse lause järgmisteks osadeks:

  • Tekst enne ülevõtmist Word. (siit minge ostlema)
  • Ülevõetud märksõna. (siin, SINU, MINU asemel)
  • Tekst pärast ülevõtmist Märksõna. (siin, mina?)

8. samm: juhtumitega saab tegeleda ………

9. samm: märksõna otsimine kasutaja sisendist

MAX_KEY näitab märksõnade arvu DAT -failis.

Siin me lihtsalt otsime, kas märksõna on kasutaja sisendis olemas.

10. samm: järeldus

See on kõik ………

Sa oled seda teinud !!!!!!!

Ma arvan, et kõik said asjadest selgelt aru …

Soovitan: