Obsah:

Hlasem aktivovaný asistent - MAX: 10 kroků
Hlasem aktivovaný asistent - MAX: 10 kroků

Video: Hlasem aktivovaný asistent - MAX: 10 kroků

Video: Hlasem aktivovaný asistent - MAX: 10 kroků
Video: Jak ZMĚNIT JAZYK a HLAS SIRI v iPhone | Návod | iPhone / MOBIL 2024, Červen
Anonim
Hlasem aktivovaný asistent - MAX
Hlasem aktivovaný asistent - MAX

Ahoj, v tomto Instructable budu mluvit o tom, jak vytvořit chat-bot MAX (pojmenovaný sám !!!)

S nějakou implementací můžete tento chatbot ovládat hlasem nebo s využitím různého softwaru jej můžete udělat jako hlasového asistenta. Tady o tom nebudu mluvit, protože každý může tuto implementaci skutečně snadno usnadnit.

Takže mě prosím všichni podpořte ….

Můj první instruktáž !!!!!!!

Nervózní z toho, co se stane …………….

Krok 1: Vědět o soutěži

Vědět o soutěži
Vědět o soutěži
Vědět o soutěži
Vědět o soutěži

Ahoj inženýři a designéři ………..

Já sám, student počítačových věd, rád hraji hry a vždy se inspiruji na počítačích. Krátké povídání Rád vím, jak všechny tyto věci v současnosti fungují. Jako důvod jsem stále hledal, googlil (ostatně i já jsem používal Yahoo !!! !!!) za vyhledávání a učení se věcem.

Jednoho dne jsem tedy přišel před obrazovku Instructables. Opravdu mě to bavilo prostřednictvím různých projektů s různými nápady na různé aspekty. Od toho dne jsem to sledoval. Stránka soutěže mě opravdu pobavila jak o cenách, tak o projektech, které byly zaslány různými lidmi z celého světa. svět.

VOICE ACTIVATED CHALLENGE je moje první platforma ohledně psaní Instructable.

Ceny mě hodně pobavily (Jo !!! Příliš mnoho ……..).

Také bych se chtěl podělit o své znalosti v oblasti počítačů a jejich technologií ostatním o tom, jak různé věci ve skutečnosti fungují.

V tomto Instructable vám ukážu, jak si vybudovat vlastního hlasem aktivovaného asistenta.

Jelikož je to můj první Instructable, může existovat tolik chyb (i když si myslím, že všechny byly opraveny), tak si to odpustte.

TAK…

Vydejme se na cestu ………………

Krok 2: Kde jsem o věcech věděl?

Kde jsem o věcech věděl?
Kde jsem o věcech věděl?
Kde jsem o věcech věděl?
Kde jsem o věcech věděl?
Kde jsem o věcech věděl?
Kde jsem o věcech věděl?

To bude hlavní otázka, myslím si, že většina vašich myslí si prošla ………

Už od školství mám velkou vášeň pro umělou inteligenci [AI]. Od té doby jsem hodně hledal zdroje a studoval a vyvíjel model sám.

Zpočátku to bylo velmi obtížné (skutečný stav), protože jsem pochopil, že je to velmi rozsáhlé téma, které není vůbec snadné zvládnout.

Knihy, které vzhlédly, zahrnují:

  1. Umělá inteligence moderní přístup
  2. Umělá inteligence. Ve 21. století. 2. vydání
  3. Hluboké učení

Jsou to velmi dobré knihy (určitě ano), ale není vůbec snadné porozumět věcem, které o tom byly napsány. Potom jsem to nechal stranou a pokračoval v hledání zdrojů, které dávají stručnou představu o tom, co to opravdu představuje a způsoby, jak se k tomu dostat.

Pak mě to zaujalo. Během prázdnin po škole jsem se o tom začal hlouběji učit.

V té době jsem se také naučil různé programovací jazyky (C ++, C, Python, Java ….), Které jsou také velmi zajímavé.

Při dalším čtení tématu jsem pochopil jednu důležitou věc ………………..

Programovací jazyky jsou ZÁKLADEM KAŽDÉHO PROCESU UČENÍ STROJŮ

Machine Learning je proces aplikace AI

S velkým porozuměním programovacím jazykům a různým věcem, které může programátor udělat, aby počítač udělal pro nás cokoli.

Rozhodl jsem se tedy vytvořit dobrý základ pro jazyky, díky kterým jsem porozuměl pojmům obsaženým v knize, které jsem již zmínil

Dokážete to také ……

Na webu je tolik webových stránek, kde lze volně programovat programovací jazyky

Pokud tedy chcete, můžete procházet internet a porozumět tomu ………

Krok 3: Začněme

Než jsem začal psát Instructable, napadlo mě napsat něco takového:

  1. Lidé, kteří mají zkušenosti s kódováním
  2. Lidé bez jakéhokoli kódovacího pozadí

Takže si myslím, že jsem tu věc udělal bez chyb (doufejme).

Rozhodl jsem se tedy vytvořit chatovacího robota, který bude moci hovořit s uživatelem a může reagovat podle našeho rozhovoru.

Program (sada instrukcí) nemůže myslet sám. Má databázi (místo, kde byla uložena data) faktů a pravidel, která jsou prohledávána v době rozhovoru, aby poskytla nejlepší možnou odpověď, která je ve spojení s uživatelem.

Funguje to tak, že proces párování závisí na zadaných věcech, pouze ve výjimečných případech je celá věta přiřazena k úplné větě.

Krok 4: Jak to vlastně funguje?

Krok 1:

MAX zjistí, zda uživatel zadal nějaký nulový vstup. Pokud uživatel zadá vstup takovým způsobem, vezme skutečnost ze statické databáze, aby odpověděl.

Promiň ……

Zapomněl jsem říct,

Statická databáze: Místo, kde jsou uloženy vestavěné odpovědi. Odpovědi jako:

1. Když MAX nechápe, o čem uživatel mluví.

2. Když se uživatel opakuje.

3. Pro pozdravná prohlášení.

4. Když uživatel nic nezadá a jen stále mačká Enter.

Klíčové slovo: slova se zvláštním významem.

Krok 2:

Některé vestavěné odpovědi MAX dokáže snadno a snadno rozpoznat. Zjistí přítomnost jakékoli takové věty po identifikaci vstupu uživatele a zapamatuje si přidružené klíčové slovo.

Krok 3:

Pokud ani po fragmentaci dané věty není nalezena žádná vestavěná věta, MAX vyhledá konkrétní klíčové slovo a definuje kontext. Pokud není nalezen žádný kontext, je dalším cílem přimět uživatele, aby o tématu promyšleněji hovořil konkrétním způsobem.

Krok 4:

Ze statické databáze, o které jsme již hovořili, zachytí odpověď, která závisí na tom, o čem uživatel hovořil.

Krok 5:

Pokud existuje potřeba změnit slova, udělá to sama (například Převod MÉHO na VÁŠ atd. …)

Krok 5: Pojďme kódovat …………

Používám Turbo C IDE 3.0, protože toto je IDE [integrované vývojové prostředí]

Před kódováním se podívejme na strukturu ukázkového datového souboru.

MAX rozpoznává určitá klíčová slova.

Pokud jsou tato klíčová slova nalezena ve vstupu poskytnutém uživatelem, pak je z datového souboru vybrána odpovídající odpověď, která je vybrána a zobrazena na obrazovce.

Klíčové slovo je v datovém souboru od odpovědí odděleno tokenem @ KWD @.

Token je nejmenší součástí všech aspektů programování.

Tento token označuje, že další řádek je klíčové slovo a ne odpověď.

@ KWD@ AHOJ

AHOJ JAK SE MÁŠ

AHOJ ZLATO !

JSEM V POHODĚ

JAKÁ BYLA VAŠE PRÁCE?

KOLIK JE VÁM LET?

JÁ BUDU

UDĚLÁTE TO. VĚŘÍM TAKÉ…

BUDETE TAKOVÉ UDĚLAT?

Budete mi DŮVĚŘOVAT?

ANO

JSI SI JISTÁ ?

JAK SI MŮŽETE BÝT JISTÍ?

NE

Zdá se, že jste velmi pesimističtí.

NIKDY NEŘÍKEJ NE…

NIKDY NEŘÍKEJ NIKDY

NIKDY NEBUĎTE hrubý

NIKDY NENÍ ARROGANTNÍ !!!!

NIKDY NEŘEKNĚTE, ŽE TO NEMOHU

NIKDY NEBUĎTE OPTIMISTICKÝ

POČÍTAČ

VÍM, JAK PRACOVAT NA POČÍTAČI.

V současné době POUŽÍVÁTE POČÍTAČ. ŽE JO ?

Například „Hello“, z výše uvedeného slovníku, MAX poskytne jednu z následujících odpovědí:

Ahoj, JAK SE MÁŠ MILÉ!

JSEM V POHODĚ

JAKÁ BYLA VAŠE PRÁCE?

KOLIK JE VÁM LET?

Krok 6: Třídy

Jakmile je tato věc jasná, definujme nyní datové struktury, které budeme používat.

Vytváříme dvě třídy:

progstr - Slouží k ukládání informací souvisejících se vstupem uživatele.

resp - Toto se používá k ukládání informací o různých odpovědích

třída progstr {

veřejnost:

char userip [MAX_USER_INPUT];

klíčové slovo char [30];

int keyfound;

int keyno;

int nullip;

// konstruktor

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

}

} ip;

třída resp

{

int tot_resp;

int last_resp;

char odpovědi [MAX_RESP_NO] [MAX_RESP_LEN];

char slovo [MAX_KWD_LEN];

veřejnost:

// konstruktor

resp ()

{

tot_resp = 0;

last_resp = -1;

}

int getcount ()

{

vrátit last_resp;

}

neplatné addword (znak str [MAX_KWD_LEN])

{

strcpy (slovo, str);

}

char * getword ()

{

návratové slovo;

}

neplatné addresp (znak str [MAX_RESP_LEN])

{

strcpy (odpovídá [++ last_resp], str);

}

// definováno později

void display_resp (int num);

void quit_display_resp (int num);

};

Při pohledu na první třídu, Pole znaků userip slouží k uložení věty poskytnuté uživatelem.

Jiné klíčové slovo pole se používá k uložení klíčového slova, pokud existuje, nalezeného v tomto vstupu. Pokud je nalezeno klíčové slovo, vytvoříme int keyfound na 1 else, zůstane 0, protože je inicializováno na 0 v konstruktoru.

keyno ukládá číslo odpovídajícího klíče příslušného klíčového slova.

nullip udává, zda uživatel zadal jakýkoli nulový vstup, tj. pouze stiskne Enter, aniž by dělal cokoli jiného.

Pojďme nyní do druhé třídy, resp.

První datový člen tot_resp udává počet celkových odpovědí pro dané klíčové slovo.

Odpovědi jsou ve skutečnosti uloženy v odpovědích [MAX_RESP_NO] [MAX_RESP_LEN] a odpovídající klíčové slovo je uloženo ve slově pole.

Konstruktor: Používá se k inicializaci celkového počtu odpovědí na 0. Proč je last_resp inicializováno na -1, bude jasné, když se podíváte na funkci add_resp.

int getcount ():

Tato funkce slouží ke zjištění počtu odpovědí na dané klíčové slovo.

neplatné addword (znak str [MAX_KWD_LEN]):

Slouží k přidání klíčového slova.

char * getword ():

Slouží k vrácení klíčového slova pro konkrétní objekt třídy resp.

neplatná adresa (…):

Slouží k přidání odpovědi odpovídající danému klíčovému slovu.

neplatné display_resp (int):

Slouží k zobrazení odpovědi uživateli odpovídající danému indexovému číslu odpovědí. (ve skutečnosti to dělá víc než to!).

void quit_display_resp (int):

Rozdíl mezi touto funkcí a výše uvedenou funkcí je ten, že se používá na konci, když uživatel končí. Nevrací tedy výzvu uživateli.

Krok 7: Funkce

neplatné initialize_global ()

{

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

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

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

strcpy (trénink [1], "JSOU");

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

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

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

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

strcpy (wordin [4], „VY“);

strcpy (trénink [4], "JÁ");

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

strcpy (trénink [5], „VY“);

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

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

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

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

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

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

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

strcpy (wordout [9], "IVE");

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

strcpy (cvičení [10], „JSTE“);

strcpy (wordin [11], „JSTE“);

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

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

strcpy (trénink [12], "VY");

strcpy (wordin [13], „VY“);

strcpy (trénink [13], "JÁ");

}

Nyní napíšeme funkci pro zobrazení odpovědí uživateli. První příkaz if ve smyčce for se používá k úmyslné chybě při psaní, aby vypadal více lidsky;-). Jeden znak je náhodně vybrán pro chybu psaní. Zvláštní případy, jako je New Line a Backspace, jsou posuzovány samostatně. (Přemýšlejte proč?). Nyní představuji něco nového. Zvláštní znak - *. Char * představuje veškerý text nalezený PO identifikovaném klíčovém slovu a před jedním z následujících interpunkčních znamének.

Zvažte například vstup uživatele

AMIT> MŮŽU SE ZÍTRA ZPĚT INDOROVAT?

MAX> CO KDYŽ ZÍTRA NECHODETE INDOROVAT?

Podtržená část není uložena ve slovníku, ale je převzata z uživatelského vstupu. V souboru MAX. Dat tyto informace ukládáme jako

MOHU

CO KDYŽ NECHCETE *

Hvězda (*) žádá program, aby jednoduše zkopíroval vše, co je zadáno za klíčovým slovem (zde MŮŽU), v uživatelském vstupu. Doufám, že nyní je funkce * jako speciálního klíčového slova jasná. Podívejme se tedy na složitější případ.

AMIT> MŮŽU PŘEJÍT NA NÁKUP?

MAX> CO KDYŽ NECHODÍTE NAKUPOVAT?

Musíme také provést nějakou transformaci. Když přemýšlíme o transformaci, věta se rozdělí do následujících 3 částí:

  • Text před transpozičním slovem. (zde PŘEJÍT NA NAKUPOVÁNÍ)
  • Transponované klíčové slovo. (zde, VAŠE, místo MÉHO)
  • Klíčové slovo po provedení. (tady, já?)

Krok 8: Případy lze řešit do ………

Krok 9: Hledání klíčového slova ve vstupu uživatele

MAX_KEY udává počet klíčových slov v souboru DAT.

Zde jednoduše hledáme, zda je klíčové slovo přítomno ve vstupu uživatele.

Krok 10: Závěr

To je vše ………

Dokázal jsi to !!!!!!!

Myslím, že každý věcem rozuměl jasně …

Doporučuje: