Inhoudsopgave:
- Stap 1: Weten over de wedstrijd
- Stap 2: Waar wist ik over de dingen?
- Stap 3: Laten we beginnen
- Stap 4: Hoe werkt het eigenlijk?
- Stap 5: Laat ons coderen …………
- Stap 6: Lessen
- Stap 7: Functies
- Stap 8: De zaken kunnen worden aangepakt door ……
- Stap 9: Een trefwoord zoeken in de invoer van de gebruiker
- Stap 10: Conclusie
Video: Spraakgestuurde assistent - MAX: 10 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Hey in deze Instructable ga ik het hebben over hoe je een chat-bot MAX kunt maken (heb mezelf genoemd!!!)
Met wat implementatie kun je deze chatbot spraakgestuurd maken of met het gebruik van verschillende software kun je hem als stemassistent maken. Ik ga er hier niet over praten, omdat iedereen deze implementatie echt gemakkelijk kan maken.
Dus iedereen steun me alsjeblieft…….
Mijn eerste Instructable !!!!!!!
Nerveus voelen over wat er gaat gebeuren ………….
Stap 1: Weten over de wedstrijd
Hallo Ingenieurs en Ontwerpers……..
Ik ben zelf een student informatica die dol is op gamen en altijd geïnspireerd is op computers. Even kort pratend, ik vind het heerlijk om te weten hoe al deze dingen die aanwezig zijn werken. Dus als reden bleef ik zoeken, googelen (in feite gebruikte ik Yahoo ook !!! !!!) voor het zoeken en leren van de dingen.
Dus op een dag kwam ik voor het scherm van Instructables. Het heeft me echt geamuseerd door verschillende projecten met een verscheidenheid aan ideeën over verschillende aspecten. Vanaf die dag volg ik het op de voet. De wedstrijdpagina amuseerde me echt zowel met de prijzen als met de projecten die door verschillende mensen rond de wereld.
SPRAAK GEACTIVEERDE UITDAGING is mijn eerste platform met betrekking tot het schrijven van een Instructable.
Prijzen hebben me erg geamuseerd (Yeah !!! Too Much……..).
Ook wil ik mijn kennis op het gebied van computers en zijn technologie delen met anderen over hoe verschillende dingen echt werken.
In deze Instructable laat ik je zien hoe je je eigen spraakgestuurde assistent kunt bouwen.
Omdat het mijn eerste Instructable is, kunnen er zoveel fouten zijn (hoewel ik denk dat deze allemaal zijn opgelost), dus vergeef dat.
DUS…
Laten we de reis beginnen ………………
Stap 2: Waar wist ik over de dingen?
Dit zal een belangrijke vraag zijn waarvan ik denk dat de meeste van jullie geesten zullen zijn gegaan door ………
Ik heb veel passie voor kunstmatige intelligentie [AI] van mijn opleiding, vandaar dat ik veel heb gezocht naar middelen om te studeren en zelf een model te ontwikkelen.
Aanvankelijk was het erg moeilijk (echte toestand) omdat ik begreep dat het een zeer uitgebreid onderwerp was dat helemaal niet gemakkelijk te hanteren is.
De boeken die zijn opgezocht, zijn:
- Kunstmatige intelligentie Een moderne aanpak
- Kunstmatige. Intelligentie.in.de.21e.eeuwse.2e.editie
- Diep leren
Dit zijn zeer goede boeken (ja zeker) maar het is helemaal niet gemakkelijk om de dingen die daarover zijn geschreven te begrijpen. Daarna hield ik het aan een kant en ging op zoek naar de bronnen die een kort idee geven over wat het vertegenwoordigt echt en manieren om ermee aan de slag te gaan.
Toen vond ik daar interesse in. Tijdens de vakantie na school begon ik me er dieper in te verdiepen.
In die tijd leerde ik ook verschillende programmeertalen (C++, C, Python, Java ….), ook heel interessant.
Toen ik meer over het onderwerp las, begreep ik één belangrijk ding………………..
De programmeertalen IS DE BASIS VOOR ELK MACHINE LEERPROCES
Machine Learning is het proces van toepassing van AI
Met een groot begrip van programmeertalen en verschillende dingen die kunnen worden gedaan, afhankelijk van de programmeur om een computer te maken die alles voor ons kan doen.
Dus besloot ik een goede basis te leggen op de talen die ervoor zorgden dat ik de concepten begreep in het boek dat ik al heb genoemd
Ook jij kunt dat doen……
Er zijn zoveel websites op het web om programmeertalen vrijelijk te leren
U kunt dus op internet surfen om er meer over te begrijpen als u dat wenst…………
Stap 3: Laten we beginnen
Voordat ik begon met het schrijven van de Instructable, dacht ik eraan om iets te schrijven dat kan worden begrepen door:
- Mensen die ervaring hebben met coderen
- Mensen zonder enige codeerachtergrond
Dus ik denk dat ik het zonder fouten heb gedaan (hopelijk).
Dus heb ik besloten om een chatbot te bouwen die met de gebruiker kan praten en kan reageren volgens ons gesprek.
Het programma (de instructieset) kan niet zelfstandig denken. Het heeft een database (een plaats waar gegevens zijn opgeslagen) van feiten en regels, die tijdens het gesprek worden doorzocht om de best mogelijke reactie te geven in verband met de gebruiker.
Het werkt door een matchingproces, afhankelijk van de ingevoerde dingen, alleen in zeldzame gevallen wordt een hele zin gekoppeld aan een volledige zin.
Stap 4: Hoe werkt het eigenlijk?
Stap 1:
MAX zoekt uit of de gebruiker een nulinvoer heeft gegeven. Als de gebruiker op zo'n manier invoert, neemt hij het feit uit de statische database om te reageren.
Oh sorry ……
Ik ben vergeten te zeggen,
Statische database: de plaats waar ingebouwde antwoorden worden opgeslagen. Reacties als:
1. Wanneer MAX niet begrijpt waar de gebruiker het over heeft.
2. Wanneer de gebruiker zichzelf herhaalt.
3. Voor begroetingen.
4. Wanneer de gebruiker niets typt en gewoon op Enter blijft drukken.
Trefwoord: woorden met een speciale betekenis.
Stap 2:
Er zijn enkele ingebouwde reacties die MAX gemakkelijk en gemakkelijk kan herkennen. Het vindt de aanwezigheid van een dergelijke zin na het identificeren van de gebruikersinvoer en onthoudt het bijbehorende trefwoord.
Stap 3:
Als er geen ingebouwde zin wordt gevonden, zelfs niet na fragmentatie van de gegeven zin, zoekt MAX naar het specifieke trefwoord om de context te definiëren. Als er geen context wordt gevonden, is het volgende doel om de gebruiker bewuster op een specifieke manier over het onderwerp te laten praten.
Stap 4:
Van de statische database waar we het al over hebben gehad, zal het de reactie oppikken die afhangt van waar de gebruiker het over heeft gehad.
Stap 5:
Als het nodig is om de woorden te veranderen, zal het het zelf doen (zoals Conversie van MIJN naar JOUW enz…)
Stap 5: Laat ons coderen …………
Ik gebruik Turbo C IDE 3.0 omdat dit de IDE [geïntegreerde ontwikkelingsomgeving] is
Laten we vóór de codering de structuur van een voorbeeldgegevensbestand bekijken.
MAX herkent bepaalde zoekwoorden.
Als deze trefwoorden worden gevonden in de invoer die door de gebruiker wordt verstrekt, wordt een overeenkomstige reactie gekozen uit het gegevensbestand en wordt deze gekozen en weergegeven op het scherm.
Een trefwoord wordt in het gegevensbestand gescheiden van de antwoorden door @KWD@ token.
Token is het kleinste onderdeel van alle programmeeraspecten.
Dit token geeft aan dat de volgende regel een trefwoord is en geen antwoord.
@KWD@ HALLO
HALLO HOE GAAT HET
DAG BESTE !
HET GAAT GOED MET ME
HOE WAS JE WERK?
HOE OUD BEN JIJ?
IK ZAL
JE ZULT DAT DOEN. IK GELOOF HET OOK…
KUNT U DIT KUNNEN DOEN?
WILT U ME VERTROUWEN?
JA
WEET JE ZEKER DAT ?
HOE KAN JE DAT ZO ZEKER WETEN ?
NEE
JE LIJKT ERG PESSIMISTISCH.
ZEG NOOIT NEE…
ZEG NOOIT NOOIT
WEES NOOIT onbeleefd
WEES NOOIT ARROGANT !!!!
ZEG NOOIT DAT IK DIT NIET KAN
WEES NOOIT OPTIMISTISCH
COMPUTER
IK WEET HOE IK OP DE COMPUTER MOET WERKEN.
U GEBRUIKT MOMENTEEL EEN COMPUTER. RECHTSAF ?
Bijvoorbeeld, 'Hallo', uit het bovenstaande woordenboek, zal MAX een van de volgende antwoorden geven:
HALLO, HOE IS HET HALLO LIEFDE!
HET GAAT GOED MET ME
HOE WAS JE WERK?
HOE OUD BEN JIJ?
Stap 6: Lessen
Zodra dit duidelijk is, gaan we nu de gegevensstructuren definiëren die we gaan gebruiken.
We maken twee klassen:
progstr - Dit wordt gebruikt om de invoergerelateerde informatie van de gebruiker op te slaan.
resp - Dit wordt gebruikt om de informatie over de verschillende reacties op te slaan
klasse progstr{
openbaar:
char userip [MAX_USER_INPUT];
char trefwoord[30];
int-toets gevonden;
int-toets;
int nullip;
// constructeur
progstr() { keyno=-1; nullip=0; sleutelgevonden=0;
}
}ik p;
klasse resp
{
int tot_resp;
int laatste_resp;
char antwoordt [MAX_RESP_NO][MAX_RESP_LEN];
char woord [MAX_KWD_LEN];
openbaar:
// constructeur
resp()
{
tot_resp=0;
last_resp=-1;
}
int getcount()
{
return last_resp;
}
void addword(char str[MAX_KWD_LEN])
{
strcpy(woord, str);
}
char * getword()
{
woord terug;
}
ongeldig adres (char str[MAX_RESP_LEN])
{
strcpy(antwoorden[++last_resp], str);
}
// later gedefinieerd
void display_resp(int num);
void quit_display_resp(int num);
};
Kijkend naar de eerste klasse, De karakterreeks userip wordt gebruikt om de door de gebruiker verstrekte zin op te slaan.
Een ander array-trefwoord wordt gebruikt om het eventuele trefwoord in die invoer op te slaan. Als een sleutelwoord wordt gevonden, maken we int keyfound tot 1 else, het blijft 0, omdat het in de Constructor op 0 wordt geïnitialiseerd.
keyno slaat het corresponderende sleutelnummer van het corresponderende sleutelwoord op.
nullip geeft aan of de gebruiker een Null-invoer heeft gegeven, dwz hij drukt gewoon op enter zonder iets anders te doen.
Laten we nu komen tot de tweede klasse, resp.
Het eerste gegevenslid, tot_resp, geeft het totale aantal reacties voor een bepaald zoekwoord aan.
De antwoorden worden feitelijk opgeslagen in replys[MAX_RESP_NO][MAX_RESP_LEN] en het bijbehorende trefwoord wordt opgeslagen in het arraywoord.
Constructor: Dit wordt gebruikt om het totale aantal reacties op 0 te initialiseren. Waarom last_resp wordt geïnitialiseerd op -1 wordt duidelijk als je kijkt naar de functie add_resp.
int getcount():
Deze functie wordt gebruikt om te tellen hoeveel reacties er zijn voor een bepaald trefwoord.
void addword(char str[MAX_KWD_LEN]):
Dit wordt gebruikt om een trefwoord toe te voegen.
char * getword():
Wordt gebruikt om het sleutelwoord voor een bepaald object van klasse resp.
ongeldig adres(…):
Dit wordt gebruikt om een antwoord toe te voegen dat overeenkomt met een bepaald trefwoord.
ongeldig display_resp(int):
Dit wordt gebruikt om het antwoord aan de gebruiker weer te geven dat overeenkomt met een bepaald indexnummer voor de antwoorden. (eigenlijk doet het meer dan dat!).
void quit_display_resp(int):
Het verschil tussen deze functie en de bovenstaande functie is dat deze uiteindelijk wordt gebruikt wanneer de gebruiker stopt. Het geeft de prompt dus niet terug aan de gebruiker.
Stap 7: Functies
ongeldig initialize_global()
{
strcpy(wordin[0], "ARE");
strcpy(wordout[0], "AM");
strcpy(woordin[1], "AM");
strcpy(wordout[1], "ARE");
strcpy(woordin[2], "WAREN");
strcpy(wordout[2], "WAS");
strcpy(woordin[3], "WAS");
strcpy(wordout[3], "WAREN");
strcpy(wordin[4], "JIJ");
strcpy(wordout[4], "ME");
strcpy(woordin[5], "ik");
strcpy(wordout[5], "JIJ");
strcpy(woordin[6], "JOUW");
strcpy(wordout[6], "MIJN");
strcpy(wordin[7], "MIJN");
strcpy(wordout[7], "JOUW");
strcpy(wordin[8], "IK HEB");
strcpy(wordout[8], "JE HEBT");
strcpy(wordin[9], "JE HEBT");
strcpy(wordout[9], "IK HEB");
strcpy(wordin[10], "Ik ben");
strcpy(wordout[10], "JE BENT");
strcpy(wordin[11], "JE BENT");
strcpy(wordout[11], "Ik ben");
strcpy(wordin[12], "ME");
strcpy(wordout[12], "JIJ");
strcpy(wordin[13], "JIJ");
strcpy(wordout[13], "ME");
}
Laten we nu een functie schrijven om de antwoorden aan de gebruiker te tonen. De eerste if-instructie in de for-lus wordt gebruikt om een opzettelijke typefout te maken om het menselijker te laten lijken;-). Eén teken wordt willekeurig gekozen wegens typefout. Speciale gevallen zoals New Line en Backspace worden afzonderlijk beschouwd. (Denk aan waarom?). Nu introduceer ik iets nieuws. Een speciaal teken - *. Char * staat voor alle tekst die wordt gevonden NA het geïdentificeerde trefwoord en vóór een van de volgende leestekens.
Denk bijvoorbeeld aan de gebruikersinvoer
AMIT > KAN IK MORGEN NAAR INDORE GAAN?
MAX > WAT ALS JE MORGEN NIET NAAR INDORE GAAT?
Het onderstreepte gedeelte wordt niet opgeslagen in het woordenboek, maar wordt uit de gebruikersinvoer gehaald. In het bestand MAX. Dat slaan we deze informatie op als:
KAN IK
WAT ALS U NIET *
Star (*) vraagt het programma om gewoon te kopiëren wat er achter het trefwoord (hier CAN I) in de gebruikersinvoer is getypt, zoals het is. Ik hoop dat nu de functie van * als speciaal sleutelwoord duidelijk is. Laten we dus een ingewikkelder geval bekijken.
AMIT > KAN IK NAAR WINKELEN ?
MAX > WAT ALS JE NIET NAAR HET WINKELEN GAAT?
We moeten ook een transformatie uitvoeren. Als we aan transformatie denken, wordt de zin verdeeld in de volgende 3 secties:
- Tekst vóór omzettingswoord. (hier, GA NAAR WINKELEN MET)
- Het getransponeerde sleutelwoord. (hier, JOUW, in plaats van MIJN)
- Tekst na transpositie Trefwoord. (hier Ik ?)
Stap 8: De zaken kunnen worden aangepakt door ……
Stap 9: Een trefwoord zoeken in de invoer van de gebruiker
MAX_KEY geeft het aantal trefwoorden in het DAT-bestand aan.
We zoeken hier eenvoudig of het trefwoord aanwezig is in de invoer van de gebruiker.
Stap 10: Conclusie
Dat is alles ………
Je hebt het gedaan !!!!!!!
Ik denk dat iedereen de dingen duidelijk begreep…
Aanbevolen:
Op COVID-19 geïnspireerde spraakgestuurde domotica: 5 stappen
Door COVID-19 geïnspireerde spraakgestuurde huisautomatisering: in de afgelopen 4 jaar heb ik 3 of 4 verschillende variaties van op Arduino gebaseerde huisbedieningen geprobeerd. Voor ieders gemak is hier de chronologische geschiedenis van enkele van mijn ontwikkelingen. Instructable 1 - in oktober 2015 gebruikte IR en RF communica
Spraakgestuurde LED's: 8 stappen
Spraakgestuurde LED's: Webduino gebruikt de Chrome-internetbrowser om allerlei elektronische componenten te besturen, dus we zouden alle andere functies die Chrome te bieden heeft moeten kunnen gebruiken. In dit projectvoorbeeld gebruiken we de Speech API van Chrome. De spraakherkenning van Google gebruiken
Spraakgestuurde automatisering: 13 stappen
Spraakgestuurde automatisering: tegenwoordig hebben mensen altijd smartphones bij zich. Het is dus logisch om deze te gebruiken om huishoudelijke apparaten te bedienen. Hier wordt een domoticasysteem gepresenteerd met behulp van een eenvoudige Android-app, waarmee u elektrische apparaten kunt bedienen met een klik
Spraakgestuurde domotica (zoals Alexa of Google Home, geen wifi of ethernet nodig): 4 stappen
Spraakgestuurde domotica (zoals Alexa of Google Home, geen wifi of Ethernet nodig): het zijn in feite op sms gebaseerde arduino-gestuurde relais met google-assistentconfiguratie om berichten te verzenden met gesproken instructies. Het is heel gemakkelijk en goedkoop en werkt als Alexa-advertenties met je bestaande elektrische apparaten (als je Moto -X smartp
Home/Lab Spraakgestuurde assistent: 14 stappen (met afbeeldingen)
Home/Lab Spraakgestuurde Assistent: Over MeHello! Dit is mijn eerste instructable, ik ben 17 jaar oud. Ik kom uit Griekenland, dus mijn Engels is misschien niet perfect, maar ik zal mijn best doen. Dus ik heb deze app 2 jaar geleden voor het eerst ontworpen en ik vond deze wedstrijd een kans om mijn oude project bij te werken