Innehållsförteckning:
- Steg 1: Att veta om tävlingen
- Steg 2: Var visste jag om sakerna?
- Steg 3: Låt oss börja
- Steg 4: Hur fungerar det egentligen?
- Steg 5: Låt oss koda …………
- Steg 6: Klasser
- Steg 7: Funktioner
- Steg 8: Ärendena kan hanteras av ………
- Steg 9: Söka efter ett nyckelord i användarens inmatning
- Steg 10: Slutsats
Video: Röstaktiverad assistent - MAX: 10 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Hej i den här instruktionsboken ska jag prata om hur man gör en chat-bot MAX (namngav mig själv !!!)
Med viss implementering kan du göra denna chatbot röststyrd eller med användning av olika program kan du göra det som en röstassistent. Jag här kommer inte att prata om det eftersom alla verkligen kan göra denna implementering enkelt.
Så alla snälla stöd mig …….
Min första instruerbara !!!!!!!
Känner mig nervös för vad som kommer att hända …………….
Steg 1: Att veta om tävlingen
Hej ingenjörer och designers ……..
Själv är jag en datavetenskapstudent som älskar att spela spel och alltid inspirerad av datorer. Pratar kort jag älskar att veta hur alla dessa saker i nutid fungerar. Så som en anledning fortsatte jag leta och googla (jag brukade också använda Yahoo !!! !!!) för att söka och lära sig sakerna.
Så en dag kom jag före skärmen på Instructables. Det roade mig verkligen genom olika projekt med en mängd olika idéer om olika aspekter. Sedan från den dagen fortsätter jag med det. Tävlingssidan roade mig verkligen både med priserna och de projekt som har skickats in av olika personer runt om i värld.
RÖSTAKTIVERAD UTMANING är min första plattform när det gäller att skriva en instruerbar.
Priser roade mig mycket (Ja !!! För mycket ……..).
Jag vill också dela min kunskap inom datorer och dess teknik till andra om hur olika saker faktiskt fungerar.
I denna instruerbara visar jag dig hur du bygger din egen röstaktiverade assistent.
Eftersom det är min första instruerbara kan det finnas så många misstag (även om jag tror att alla dessa har åtgärdats), så förlåt för det.
SÅ….
Låt oss börja resan ………………
Steg 2: Var visste jag om sakerna?
Det här kommer att vara en viktig fråga som jag tror att de flesta av er kan ha gått igenom ………..
Jag har en stor passion för artificiell intelligens [AI] från min skolgång, därifrån har jag letat mycket efter resurser för att studera och utveckla en modell på egen hand.
Inledningsvis var det mycket svårt (sant skick) som jag förstod att det var ett mycket stort ämne som inte alls är lätt att hantera.
Böckerna som tittade upp inkluderar:
- Artificiell intelligens Ett modernt tillvägagångssätt
- Artificiell. Intelligens.i.21st. Century.2nd. Edition
- Djup lärning
Det här är väldigt bra böcker (ja visst) men det är inte alls lätt att förstå de saker som har skrivits om det. Sedan höll jag det vid en sida och fortsatte att leta efter resurserna som ger upp en kort uppfattning om vad det verkligen representerar och sätt att komma tillrätta med det.
Sedan fick jag ett intresse för det. Genom semestern efter skolan började jag lära mig mer om det.
På den tiden lärde jag mig också olika programmeringsspråk (C ++, C, Python, Java …), vilket också var mycket intressant.
När jag läste mer om ämnet förstod jag en viktig sak ………………..
Programmeringsspråken ÄR GRUNDLÄGGANDE FÖR ALLA MASKINLÄRNINGSPROCESSER
Maskininlärning är processen för tillämpning av AI
Med stor förståelse för programmeringsspråk och olika saker som kan göras beroende på programmeraren för att få en dator att göra vad som helst för oss.
Så jag bestämde mig för att skapa en bra bas på språken som fick mig att förstå begreppen i boken som jag redan har nämnt
Det kan du också göra ………
Det finns så många webbplatser på webben för att lära programmeringsspråk fritt
Så du kan surfa på internet för att förstå mer om det om du vill ……….
Steg 3: Låt oss börja
Jag innan jag började skriva Instructable tänkte jag skriva något sådant som kan förstås av:
- Människor som har erfarenhet av kodning
- Människor utan kodande bakgrund
Så jag tror att jag har gjort saken utan några misstag (förhoppningsvis).
Så jag har bestämt mig för att bygga en chattbot som kan prata med användaren och kan svara enligt vårt samtal.
Programmet (uppsättning instruktioner) kan inte tänka på egen hand. Den har en databas (en plats där data har lagrats) med fakta och regler, som söks vid samtalstidpunkten för att ge bästa möjliga svar som gör i samband med användaren.
Det fungerar genom att matcha processen beroende på saker som skrivits in, bara i sällsynta fall matchas en hel mening över till en komplett mening.
Steg 4: Hur fungerar det egentligen?
Steg 1:
MAX tar reda på om användaren har gett null inmatning. Om användaren vid inmatning på ett sådant sätt tar det faktum från den statiska databasen för att svara.
Åh förlåt …….
Jag glömde säga
Statisk databas: Platsen där inbyggda svar lagras. Svar som:
1. När MAX inte förstår vad användaren talar om.
2. När användaren upprepar sig själv.
3. För hälsningsuttalanden.
4. När användaren inte skriver något och bara fortsätter att trycka på Enter.
Nyckelord: ord med särskild betydelse.
Steg 2:
Det finns några inbyggda svar som MAX kan känna igen enkelt och enkelt. Den finner närvaron av en sådan mening efter att ha identifierat användarens inmatning och kommer ihåg det associerade sökordet.
Steg 3:
Om ingen inbyggd mening hittas även efter fragmentering av den givna meningen, söker MAX efter det specifika sökordet för att definiera sammanhanget. Om inget sammanhang hittas är det nästa mål att få användaren att prata om ämnet mer avsiktligt på ett specifikt sätt.
Steg 4:
Från den statiska databasen som vi redan har pratat om kommer den att hämta svaret som beror på vad användaren har pratat om.
Steg 5:
Jag, det finns något behov av att ändra orden, det kommer att göra det själv (t.ex. konvertering av MY till DIN osv …)
Steg 5: Låt oss koda …………
Jag använder Turbo C IDE 3.0 eftersom detta är IDE [Integrerad utvecklingsmiljö]
Låt oss se strukturen för en exempeldatafil före kodningen.
MAX känner igen vissa sökord.
Om dessa nyckelord finns i inmatningen från användaren, väljs ett motsvarande svar från datafilen och väljs upp och visas på skärmen.
Ett nyckelord separeras i datafilen från svaren med @ KWD @ token.
Token är en minsta del av alla programmeringsaspekter.
Denna token anger att nästa rad är ett sökord och inte ett svar.
@ KWD@ HEJ
HEJ HUR MÅR DU
HEJ MIN KÄRA !
JAG MÅR BRA
HUR VAR DITT JOBB?
HUR GAMMAL ÄR DU?
JAG SKA
DU SKA GÖRA DET. JAG TROR DET FÖR …
KOMMER DU ATT GÖRA DET?
SKA DU LITA PÅ MIG?
JA
ÄR DU SÄKER ?
HUR KAN DU VARA SÄKER?
NEJ
DU verkar vara väldigt pessimistisk.
SÄG ALDRIG NEJ…
SÄG ALDRIG ALDRIG
VAR ALDRIG RUDE
VAR ALDRIG ARROGANT !!!!
SIG ALDRIG att jag inte kan göra det här
VAR ALDRIG OPTIMISTISK
DATOR
JAG VET HUR ATT ARBETA PÅ DATOR.
DU ANVÄNDER NU EN DATOR. HÖGER ?
Till exempel "Hej", från ordlistan ovan, kommer MAX att ge ett av följande svar:
HEJ, HUR ÄR DUHELLO kära!
JAG MÅR BRA
HUR VAR DITT JOBB?
HUR GAMMAL ÄR DU?
Steg 6: Klasser
När det här är klart, låt oss nu definiera de datastrukturer som vi kommer att använda.
Vi skapar två klasser:
progstr - Detta används för att lagra användarens inmatningsrelaterade information.
resp - Detta används för att lagra informationen om de olika svaren
klassprogram {
offentlig:
char userip [MAX_USER_INPUT];
char sökord [30];
int keyfound;
int keyno;
int nullip;
// konstruktör
progstr () {keyno = -1; nullip = 0; nyckelfynd = 0;
}
} ip;
klass resp
{
int tot_resp;
int last_resp;
char svar [MAX_RESP_NO] [MAX_RESP_LEN];
teckenord [MAX_KWD_LEN];
offentlig:
// konstruktör
resp ()
{
tot_resp = 0;
last_resp = -1;
}
int getcount ()
{
returnera last_resp;
}
void addword (char str [MAX_KWD_LEN])
{
strcpy (ord, str);
}
char * getword ()
{
returord;
}
void addresp (char str [MAX_RESP_LEN])
{
strcpy (svarar [++ last_resp], str);
}
// definieras senare
void display_resp (int num);
void quit_display_resp (int num);
};
Tittar på första klass, Teckenuppsättningen userip används för att lagra meningen som tillhandahålls av användaren.
Ett annat array -nyckelord används för att lagra sökordet, om något, som finns i den ingången. Om ett nyckelord hittas gör vi int nyckel till 1 annat, det förblir 0, eftersom det initialiseras till 0 i konstruktören.
keyno lagrar motsvarande nyckelnummer för motsvarande sökord.
nullip indikerar om användaren har gett någon Null -ingång, dvs att han bara trycker på enter utan att göra något annat.
Låt oss nu komma till andra klass, resp.
Den första datamedlem, tot_resp anger antalet totala svar för ett givet sökord.
Svaren lagras faktiskt i svar [MAX_RESP_NO] [MAX_RESP_LEN] och motsvarande sökord lagras i matrisordet.
Konstruktör: Detta används för att initialisera det totala antalet svar till 0. Varför last_resp initialiseras till -1 kommer att framgå tydligt när du tittar på funktionen add_resp.
int getcount ():
Denna funktion används för att räkna hur många svar det finns för ett visst sökord.
void addword (char str [MAX_KWD_LEN]):
Detta används för att lägga till ett nyckelord.
char * getword ():
Används för att returnera nyckelordet för ett visst objekt av klass resp.
void addresp (…):
Detta används för att lägga till ett svar som motsvarar ett givet sökord.
void display_resp (int):
Detta används för att visa svaret till användaren som motsvarar ett givet indexnummer för svaren. (faktiskt gör det mer än så!).
void quit_display_resp (int):
Skillnaden mellan denna funktion och ovanstående funktion är att den används i slutändan när användaren slutar. Så det returnerar inte uppmaningen till användaren.
Steg 7: Funktioner
void initialize_global ()
{
strcpy (wordin [0], "ÄR");
strcpy (wordout [0], "AM");
strcpy (wordin [1], "AM");
strcpy (wordout [1], "ÄR");
strcpy (wordin [2], "WERE");
strcpy (wordout [2], "WAS");
strcpy (wordin [3], "WAS");
strcpy (wordout [3], "WERE");
strcpy (wordin [4], "DU");
strcpy (wordout [4], "ME");
strcpy (wordin [5], "I");
strcpy (wordout [5], "DU");
strcpy (wordin [6], "DIN");
strcpy (wordout [6], "MY");
strcpy (wordin [7], "MY");
strcpy (wordout [7], "DIN");
strcpy (wordin [8], "I'VE");
strcpy (wordout [8], "YOU'VE");
strcpy (wordin [9], "YOU'VE");
strcpy (wordout [9], "I'VE");
strcpy (wordin [10], "I'M");
strcpy (wordout [10], "DU ÄR");
strcpy (wordin [11], "DU ÄR");
strcpy (wordout [11], "I'M");
strcpy (wordin [12], "ME");
strcpy (wordout [12], "DU");
strcpy (wordin [13], "DU");
strcpy (wordout [13], "ME");
}
Låt oss nu skriva en funktion för att visa svaren för användaren. Den första if-satsen i for-loop används för att göra ett avsiktligt skrivfel för att få det att se mer mänskligt ut;-). Ett tecken väljs slumpmässigt för skrivfel. Specialfall som New Line och Backspace behandlas separat. (Tänk varför?). Nu presenterar jag något nytt. En speciell karaktär - *. Char * representerar all text som finns EFTER det identifierade sökordet, och före ett av följande skiljetecken.
Tänk till exempel på användarinmatningen
AMIT> KAN JAG GÅ TILL INDORE MORGON?
MAX> VAD OM DU INTE GÅR TILL INDORE MORGON?
Den understrukna delen lagras inte i ordlistan, utan den tas från användarinmatningen. I filen MAX. Dat lagrar vi denna information som
KAN JAG
VAD OM DU INTE GÖR *
Star (*) ber programmet att helt enkelt kopiera det som skrivs efter sökordet (här CAN I) i användarinmatningen, som det är. Jag hoppas att nu är funktionen * som ett speciellt nyckelord tydlig. Så, låt oss överväga ett mer komplicerat fall.
AMIT> KAN JAG GÅ TILL SHOPPING?
MAX> VAD OM DU INTE GÅR TILL SHOPPING?
Vi måste också utföra en viss omvandling. När vi tänker på transformation delas meningen upp i följande tre avsnitt:
- Text före transponering Word. (här, GÅ TILL ATT SHOPA MED)
- Sökordet Transposed. (här, DIN, istället för MIN)
- Text efter införlivande nyckelord. (här jag ?)
Steg 8: Ärendena kan hanteras av ………
Steg 9: Söka efter ett nyckelord i användarens inmatning
MAX_KEY anger antalet sökord i DAT -filen.
Vi söker här helt enkelt om nyckelordet finns i användarens inmatning.
Steg 10: Slutsats
Det är allt ………
Du har gjort det !!!!!!!!
Jag tror att alla förstod sakerna tydligt ……
Om någon tvivlar på något kan du gärna fråga
Rekommenderad:
RÖSTAKTIVERAD FACE MASK: 3 steg
RÖSTAKTIVERAD ANSIKTSMASK: NÅGRA MÅNADER TILLBAKA EN KÄNNAMNAD 'TYLER GLAIEL' GJORDE EN RÖSTAKTIVERAD ANSIKTSMASK SOM Gick VIRAL … EFTER ATT MÅNGA GJORDE DET MEN INGEN AV DEM GJORDE ALLA DETALJER NÖDVÄNDIGA FÖR DETS KOMPLET. TYLER HAR SJÄLV TAGT NER DIY -GUIDEEN OCH GITHUB CO
Röstaktiverad fjärrkontrollsknapp: 4 steg (med bilder)
Röstaktiverad fjärrkontrollsknapp: Om du har sett mina andra instruktioner vet du att vår son har muskeldystrofi. Detta är en del av ett projekt för att göra saker mer tillgängliga för honom. Vi har en dörr som manövreras av en garageportöppnare. Det här har varit fantastiskt i
Röstaktiverad BT: 3 steg (med bilder)
Röstaktiverad BT: Röststyrd hemautomation med Arduino: I det här projektet använder jag en röstfunktion för att styra hemenheter. Detta projekt är en del av min Home Automation -serie. Detta projekt är mycket lätt att använda i verkliga livet. Människor i alla åldrar kan styra
Röstaktiverad reläbrytare (Arduino): 6 steg (med bilder)
Röstaktiverad reläbrytare (Arduino): Hej alla! I det här projektet kommer jag att visa dig hur du implementerar röstkommandon för dina Arduino -projekt. Med röstkommandon visar jag dig hur du styr en reläomkopplingsmodul
Röstaktiverad RoBoT: 5 steg
Röstaktiverad RoBoT: Röststyrd robot med Arduino: Hej alla, jag hoppas att ni mår bra och mår bra. Idag ska vi starta projekt relaterade till robotik med Arduino. Idag ska vi prata om röststyrd robot med Arduino och Android