Πίνακας περιεχομένων:

Βοηθός ενεργοποιημένης φωνής - MAX: 10 βήματα
Βοηθός ενεργοποιημένης φωνής - MAX: 10 βήματα

Βίντεο: Βοηθός ενεργοποιημένης φωνής - MAX: 10 βήματα

Βίντεο: Βοηθός ενεργοποιημένης φωνής - MAX: 10 βήματα
Βίντεο: 2+1 τρόποι για μεταφορά ΟΛΩΝ ΤΩΝ φωτογραφιών από το Iphone στον υπολογιστή μας ΑΜΕΣΑ 2024, Ιούλιος
Anonim
Βοηθός ενεργοποιημένης φωνής - MAX
Βοηθός ενεργοποιημένης φωνής - MAX

Γεια σε αυτό το Instructable πρόκειται να μιλήσω για το πώς να φτιάξω ένα chat-bot MAX (ονομάστηκα !!!)

Με κάποια εφαρμογή μπορείτε να κάνετε αυτό το φωνητικό chatbot ελεγχόμενο ή με τη χρήση διαφόρων λογισμικών μπορείτε να το κάνετε ως φωνητικό βοηθό. Εγώ εδώ δεν πρόκειται να μιλήσω για αυτό, αφού ο καθένας μπορεί πραγματικά να κάνει αυτήν την εφαρμογή εύκολα.

Οπότε όλοι με στηρίζετε ……

Το πρώτο μου εκπαιδευτικό !!!!!!!

Αίσθημα νεύρου για το τι πρόκειται να συμβεί …………….

Βήμα 1: Γνωριμία με τον Διαγωνισμό

Γνωριμία με τον Διαγωνισμό
Γνωριμία με τον Διαγωνισμό
Γνωριμία με τον Διαγωνισμό
Γνωριμία με τον Διαγωνισμό

Γεια σας μηχανικοί και σχεδιαστές ……..

Εγώ ο ίδιος ένας φοιτητής Πληροφορικής λατρεύει να παίζει παιχνίδι και πάντα εμπνέεται στους υπολογιστές. Μιλώντας εν συντομία μου αρέσει να γνωρίζω πώς λειτουργούν όλα αυτά τα πράγματα που υπάρχουν σήμερα. Έτσι, ως λόγος συνέχισα να ψάχνω, να γκουγκλάρω (στο παρελθόν χρησιμοποιούσα και το Yahoo !!! !!!) για αναζήτηση και εκμάθηση των πραγμάτων.

Έτσι μια μέρα ήρθα μπροστά στην οθόνη του Instructables. Πραγματικά με διασκέδασε μέσω διαφόρων έργων με ποικίλες ιδέες για διάφορες πτυχές. Στη συνέχεια, από εκείνη την ημέρα συνεχίζω να το παρακολουθώ. Η σελίδα του διαγωνισμού με διασκέδασε πραγματικά τόσο για τα βραβεία όσο και για τα έργα που έχουν υποβληθεί από διάφορους ανθρώπους γύρω από κόσμος.

Η ΦΩΝΗ ΕΝΕΡΓΟΠΟΙΗΜΕΝΗ ΠΡΟΚΛΗΣΗ είναι η πρώτη μου πλατφόρμα όσον αφορά τη συγγραφή ενός οδηγού.

Τα βραβεία με διασκέδασαν πολύ (Ναι !!! Πάρα πολύ ……..).

Επίσης, θα ήθελα να μοιραστώ τις γνώσεις μου στον τομέα των Υπολογιστών και της τεχνολογίας σε άλλους σχετικά με το πώς λειτουργούν πραγματικά διάφορα πράγματα.

Σε αυτό το Instructable σας δείχνω πώς να φτιάξετε τον δικό σας βοηθό ενεργοποιημένης φωνής.

Δεδομένου ότι είναι το πρώτο μου εκπαιδευτικό, μπορεί να υπάρχουν τόσα πολλά λάθη (αν και νομίζω ότι όλα αυτά έχουν διορθωθεί), γι 'αυτό συγχωρέστε το.

ΕΤΣΙ…

Ας ξεκινήσουμε το ταξίδι ……………………

Βήμα 2: Πού ήξερα για τα πράγματα;

Πού ήξερα για τα πράγματα
Πού ήξερα για τα πράγματα
Πού ήξερα για τα πράγματα
Πού ήξερα για τα πράγματα
Πού ήξερα για τα πράγματα
Πού ήξερα για τα πράγματα

Αυτή θα είναι μια σημαντική ερώτηση νομίζω ότι τα περισσότερα μυαλά σας έχουν περάσει ………

Έχω πολύ πάθος για την Τεχνητή Νοημοσύνη [AI] από το σχολείο μου, από αυτό έχω ψάξει πολύ αναζητώντας πόρους για να σπουδάσω και να αναπτύξω ένα μοντέλο μόνος μου.

Αρχικά ήταν πολύ δύσκολο (πραγματική κατάσταση) όπως κατάλαβα ήταν ένα πολύ μεγάλο θέμα που δεν είναι καθόλου εύκολο να χειριστεί.

Τα βιβλία που αναζητήθηκαν περιλαμβάνουν:

  1. Τεχνητή Νοημοσύνη Μια σύγχρονη προσέγγιση
  2. Artificial. Intelligence.in.the.21st. Century.2nd. Edition
  3. Βαθιά Μάθηση

Αυτά είναι πολύ καλά βιβλία (ναι σίγουρα) αλλά δεν είναι καθόλου εύκολο να κατανοήσουμε τα πράγματα που έχουν γραφτεί σε αυτό. Στη συνέχεια το κράτησα στο πλάι και προχωρώ στην αναζήτηση των πόρων που αφήνουν μια σύντομη ιδέα για το τι πραγματικά αντιπροσωπεύει και τρόπους για να προχωρήσουμε σε αυτό.

Στη συνέχεια, βρήκα ένα ενδιαφέρον γι 'αυτό. Μέσα από τις διακοπές μετά το σχολείο άρχισα να το μαθαίνω πιο βαθιά.

Εκείνη την εποχή έμαθα επίσης διάφορες γλώσσες προγραμματισμού (C ++, C, Python, Java….), Οι οποίες ήταν πολύ ενδιαφέρουσες.

Διαβάζοντας περισσότερα για το θέμα κατάλαβα ένα σημαντικό πράγμα ………………..

Οι γλώσσες προγραμματισμού ΕΙΝΑΙ Η ΒΑΣΙΚΗ ΓΙΑ ΚΑΘΕ ΔΙΑΔΙΚΑΣΙΑ ΜΑΘΗΣΗΣ ΜΗΧΑΝΗΜΑΤΟΣ

Η μηχανική μάθηση είναι η διαδικασία εφαρμογής της τεχνητής νοημοσύνης

Με μεγάλη κατανόηση για τις γλώσσες προγραμματισμού και διάφορα πράγματα που μπορούν να γίνουν ανάλογα με τον προγραμματιστή να κάνει έναν υπολογιστή να κάνει τα πάντα για εμάς.

Έτσι αποφάσισα να δημιουργήσω μια καλή βάση στις γλώσσες που με έκαναν να κατανοήσω τις έννοιες που παρέχονται στο βιβλίο που έχω ήδη αναφέρει

Μπορείς να το κάνεις κι εσύ ……

Υπάρχουν τόσοι πολλοί ιστότοποι στον ιστό για να διδάξουν ελεύθερα γλώσσες προγραμματισμού

Μπορείτε, λοιπόν, να σερφάρετε στο διαδίκτυο για να καταλάβετε περισσότερα αν θέλετε ………

Βήμα 3: Ας ξεκινήσουμε

Εγώ πριν ξεκινήσω να γράφω το Instructable σκέφτηκα να γράψω κάτι που θα μπορούσε να γίνει κατανοητό από:

  1. Άτομα που έχουν εμπειρία στην κωδικοποίηση
  2. Άτομα χωρίς κανένα υπόβαθρο κωδικοποίησης

Έτσι νομίζω ότι έχω κάνει το πράγμα χωρίς λάθη (ελπίζω).

Έτσι, αποφάσισα να δημιουργήσω ένα bot συνομιλίας που μπορεί να μιλήσει με τον χρήστη και να μπορεί να ανταποκριθεί σύμφωνα με την ομιλία μας.

Το πρόγραμμα (σύνολο οδηγιών) δεν μπορεί να σκεφτεί από μόνο του. Διαθέτει μια βάση δεδομένων (ένα μέρος όπου έχουν αποθηκευτεί δεδομένα) γεγονότων και κανόνων, τα οποία αναζητούνται κατά τη στιγμή της συνομιλίας για να δώσουν την καλύτερη δυνατή απάντηση σε σχέση με τον χρήστη.

Λειτουργεί με διαδικασία αντιστοίχισης ανάλογα με τα στοιχεία που καταχωρήθηκαν, μόνο σε σπάνιες περιπτώσεις μια ολόκληρη πρόταση ταιριάζει με μια πλήρη πρόταση.

Βήμα 4: Πώς λειτουργεί στην πραγματικότητα;

Βήμα 1:

Το MAX ανακαλύπτει εάν ο χρήστης έχει δώσει μηδενική είσοδο. Εάν ο χρήστης, όταν παρέχεται είσοδος με τέτοιο τρόπο, χρειάζεται το γεγονός από τη στατική βάση δεδομένων για να απαντήσει.

Ω συγνώμη ……

Ξέχασα να πω,

Στατική βάση δεδομένων: Το μέρος όπου αποθηκεύονται οι ενσωματωμένες απαντήσεις. Απαντήσεις όπως:

1. Όταν η MAX δεν καταλαβαίνει τι μιλάει ο χρήστης.

2. Όταν ο χρήστης επαναλαμβάνεται.

3. Για δηλώσεις χαιρετισμού.

4. Όταν ο χρήστης δεν πληκτρολογεί τίποτα και συνεχίζει να πατάει Enter.

Λέξη -κλειδί: λέξεις που έχουν ιδιαίτερη σημασία.

Βήμα 2:

Υπάρχουν μερικές ενσωματωμένες απαντήσεις που η MAX μπορεί να αναγνωρίσει εύκολα και εύκολα. Βρίσκει την παρουσία οποιασδήποτε τέτοιας πρότασης μετά τον προσδιορισμό της εισόδου χρηστών και θυμάται τη σχετική λέξη -κλειδί.

Βήμα 3:

Εάν δεν υπάρχει ενσωματωμένη πρόταση ακόμη και μετά τον κατακερματισμό της δεδομένης πρότασης, τότε η MAX αναζητά τη συγκεκριμένη λέξη-κλειδί για να ορίσει το πλαίσιο. Εάν δεν βρεθεί κανένα πλαίσιο, ο επόμενος στόχος είναι να κάνει τον χρήστη να μιλήσει για το θέμα πιο σκόπιμα με συγκεκριμένο τρόπο.

Βήμα 4:

Από τη Στατική βάση δεδομένων για την οποία έχουμε ήδη μιλήσει, θα λάβει την απάντηση που εξαρτάται από το τι μίλησε ο χρήστης.

Βήμα 5:

Υπάρχει ανάγκη αλλαγής των λέξεων που θα το κάνει η ίδια (όπως μετατροπή του δικού μου σε δικό σας κλπ…).

Βήμα 5: Ας κωδικοποιήσουμε …………

Χρησιμοποιώ το Turbo C IDE 3.0 καθώς αυτό είναι το IDE [Integrated Developmental Environment]

Πριν από την κωδικοποίηση, ας δούμε τη δομή ενός δείγματος αρχείου δεδομένων.

Το MAX αναγνωρίζει ορισμένες λέξεις -κλειδιά.

Εάν αυτές οι λέξεις -κλειδιά βρίσκονται στην εισαγωγή που παρέχει ο χρήστης, τότε επιλέγεται μια αντίστοιχη απάντηση από το αρχείο δεδομένων και επιλέγεται και εμφανίζεται στην οθόνη.

Μια λέξη -κλειδί διαχωρίζεται στο αρχείο δεδομένων από τις απαντήσεις με το διακριτικό @ KWD @.

Το Token είναι το μικρότερο μέρος κάθε πτυχής προγραμματισμού.

Αυτό το διακριτικό υποδηλώνει ότι η επόμενη γραμμή είναι μια λέξη -κλειδί και όχι μια απάντηση.

@ KWD@ HELLO

ΓΕΙΑ ΠΩΣ ΕΙΣΑΙ

ΓΕΙΑ ΣΟΥ ΑΓΑΠΗΤΕ !

ΕΙΜΑΙ ΚΑΛΑ

ΠΩΣ ΗΤΑΝ Η ΔΟΥΛΕΙΑ ΣΑΣ;

ΠΟΣΟ ΧΡΟΝΩΝ ΕΙΣΑΙ?

ΘΑ

ΘΑ ΤΟ ΚΑΝΕΤΕ. ΤΟ ΠΙΣΤΕΥΩ ΚΑΙ…

ΘΑ ΜΠΟΡΕΙΤΕ ΝΑ ΤΟ ΚΑΝΕΤΕ;

ΘΑ ΜΕ ΠΙΣΤΕΥΕΙΣ;

ΝΑΙ

ΕΙΣΑΙ ΣΙΓΟΥΡΟΣ ?

ΠΩΣ ΜΠΟΡΕΙΤΕ ΝΑ ΕΙΣΤΕ ΣΙΓΟΥΡΟΣ;

ΟΧΙ

ΦΑΙΝΕΤΕ ΝΑ ΕΙΣΤΕ ΠΟΛΥ ΠΙΣΙΜΙΣΤΙΚΟΣ.

ΠΟΤΕ ΜΗ ΛΕΣ ΟΧΙ…

ΠΟΤΕ ΜΗΝ ΛΕΣ ΠΟΤΕ

ΠΟΤΕ ΝΑ ΜΗΝ ΑΓΕΝΕΙΣ

ΠΟΤΕ ΜΗΝ ΕΙΣΑΙ ΑΡΡΥΓΑΝΟΣ !!!!

ΠΟΤΕ ΠΟΤΕ ΔΕΝ ΜΠΟΡΩ ΝΑ ΤΟ ΚΑΝΩ ΑΥΤΟ

ΠΟΤΕ ΝΑ ΜΗΝ ΕΙΣΤΕ ΑΠΙΣΤΕΥΤΙΚΟΣ

ΥΠΟΛΟΓΙΣΤΗ

ΞΕΡΩ ΠΩΣ ΝΑ ΔΟΥΛΕΥΩ ΣΕ ΥΠΟΛΟΓΙΣΤΗ.

ΠΡΟΣΦΟΡΑ ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ ΥΠΟΛΟΓΙΣΤΗ. ΣΩΣΤΑ ?

Για παράδειγμα, «Γεια», από το παραπάνω λεξικό, το MAX θα δώσει μία από τις ακόλουθες απαντήσεις:

ΓΕΙΑ, ΠΩΣ ΕΙΣΑΙ ΑΓΑΠΗΜΕΝΑ!

ΕΙΜΑΙ ΚΑΛΑ

ΠΩΣ ΗΤΑΝ Η ΔΟΥΛΕΙΑ ΣΑΣ;

ΠΟΣΟ ΧΡΟΝΩΝ ΕΙΣΑΙ?

Βήμα 6: Μαθήματα

Μόλις αυτό το πράγμα είναι σαφές, ας ορίσουμε τώρα τις Δομές Δεδομένων που θα χρησιμοποιήσουμε.

Δημιουργούμε δύο τάξεις:

progstr - Χρησιμοποιείται για την αποθήκευση των σχετικών πληροφοριών εισόδου του χρήστη.

resp - Αυτό χρησιμοποιείται για την αποθήκευση των πληροφοριών σχετικά με τις διάφορες απαντήσεις

τάξη progstr {

δημόσιο:

char userip [MAX_USER_INPUT];

λέξη -κλειδί char [30];

int keyfound?

int keyno;

int nullip?

// κατασκευαστής

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

}

} ip;

ανταπόκριση τάξης

{

int tot_resp;

int last_resp;

απαντήσεις κάρτας [MAX_RESP_NO] [MAX_RESP_LEN];

char word [MAX_KWD_LEN];

δημόσιο:

// κατασκευαστής

resp ()

{

tot_resp = 0;

last_resp = -1;

}

int getcount ()

{

επιστροφή last_resp?

}

άκυρη προσθήκη λέξης (char str [MAX_KWD_LEN])

{

strcpy (λέξη, str);

}

char * getword ()

{

επιστροφή λέξης?

}

void addresp (char str [MAX_RESP_LEN])

{

strcpy (απαντά [++ last_resp], str);

}

// ορίστηκε αργότερα

void display_resp (int num);

void quit_display_resp (int num);

};

Κοιτάζοντας την πρώτη τάξη, Ο χρήστης του πίνακα χαρακτήρων χρησιμοποιείται για την αποθήκευση της πρότασης που παρέχεται από τον χρήστη.

Μια άλλη λέξη -κλειδί πίνακα χρησιμοποιείται για την αποθήκευση της λέξης -κλειδιού, εάν υπάρχει, που βρίσκεται σε αυτήν την είσοδο. Εάν βρεθεί μια λέξη -κλειδί, κάνουμε int keyfound σε 1 άλλη, παραμένει 0, καθώς αρχικοποιείται στο 0 στον Κατασκευαστή.

Το keyno αποθηκεύει τον αντίστοιχο αριθμό κλειδιού της αντίστοιχης λέξης -κλειδιού.

Το nullip υποδεικνύει εάν ο χρήστης έχει δώσει οποιαδήποτε μηδενική είσοδο, δηλαδή, απλώς πατά το enter χωρίς να κάνει τίποτα άλλο.

Ας έρθουμε τώρα στη δεύτερη τάξη, αντίστοιχα.

Το πρώτο μέλος δεδομένων, tot_resp υποδεικνύει τον αριθμό των συνολικών απαντήσεων για μια δεδομένη λέξη -κλειδί.

Οι απαντήσεις αποθηκεύονται στην πραγματικότητα στις απαντήσεις [MAX_RESP_NO] [MAX_RESP_LEN] και η αντίστοιχη λέξη -κλειδί αποθηκεύεται στη λέξη πίνακα.

Κατασκευαστής: Χρησιμοποιείται για την αρχικοποίηση του συνολικού αριθμού απαντήσεων στο 0. Γιατί το last_resp εκκινείται σε -1, θα είναι σαφές όταν κοιτάξετε τη συνάρτηση add_resp.

int getcount ():

Αυτή η συνάρτηση χρησιμοποιείται για να μετρήσει πόσες απαντήσεις υπάρχουν για μια δεδομένη λέξη -κλειδί.

άκυρο addword (char str [MAX_KWD_LEN]):

Αυτό χρησιμοποιείται για την προσθήκη μιας λέξης -κλειδιού.

char * getword ():

Χρησιμοποιείται για την επιστροφή της λέξης -κλειδιού για ένα συγκεκριμένο αντικείμενο κλάσης resp.

void addresp (…):

Αυτό χρησιμοποιείται για να προσθέσετε μια απάντηση που αντιστοιχεί σε μια δεδομένη λέξη -κλειδί.

void display_resp (int):

Αυτό χρησιμοποιείται για την εμφάνιση της απόκρισης στο χρήστη που αντιστοιχεί σε έναν δεδομένο αριθμό ευρετηρίου για τις απαντήσεις. (στην πραγματικότητα κάνει περισσότερα από αυτό!).

void quit_display_resp (int):

Η διαφορά μεταξύ αυτής της λειτουργίας και της παραπάνω συνάρτησης είναι ότι χρησιμοποιείται στο τέλος όταν ο χρήστης τερματίζει. Έτσι, δεν επιστρέφει την προτροπή στον χρήστη.

Βήμα 7: Λειτουργίες

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

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

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

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

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

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

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

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

strcpy (wordin [8], "IVE");

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

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

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

strcpy (wordin [10], "I'm");

strcpy (wordout [10], "YOU'RE");

strcpy (wordin [11], "YOU'RE");

strcpy (wordout [11], "I'm");

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

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

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

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

}

Ας γράψουμε τώρα μια συνάρτηση για την εμφάνιση των απαντήσεων στον χρήστη. Η πρώτη πρόταση if στον βρόχο for χρησιμοποιείται για να κάνει ένα σκόπιμο λάθος πληκτρολόγησης για να φαίνεται πιο ανθρώπινο;-). Ένας χαρακτήρας επιλέγεται τυχαία για σφάλμα πληκτρολόγησης. Ειδικές περιπτώσεις όπως New Line και Backspace εξετάζονται ξεχωριστά. (Σκέψου γιατί;). Τώρα παρουσιάζω κάτι νέο. Ένας ιδιαίτερος χαρακτήρας - *. Το Char * αντιπροσωπεύει όλο το κείμενο που βρέθηκε ΜΕΤΑ την προσδιορισμένη λέξη -κλειδί και πριν από ένα από τα ακόλουθα σημεία στίξης.

Για παράδειγμα, λάβετε υπόψη την είσοδο του χρήστη

AMIT> ΜΠΟΡΩ ΝΑ ΠΑΩ ΑΥΡΙΟ;

MAX> ΤΙ ΑΝ ΔΕΝ ΠΗΓΑΙΝΕΤΕ ΣΤΟΝ ΑΥΡΙΟ;

Το υπογραμμισμένο τμήμα δεν αποθηκεύεται στο λεξικό, αλλά λαμβάνεται από την είσοδο του χρήστη. Στο αρχείο MAX. Dat, αποθηκεύουμε αυτές τις πληροφορίες ως

ΜΠΟΡΩ

ΤΙ ΑΝ ΔΕΝ ΚΑΝΕΙΣ *

Το Star (*) ζητά από το πρόγραμμα να αντιγράψει απλώς ό, τι πληκτρολογείται μετά τη λέξη -κλειδί (εδώ CAN I) στην είσοδο του χρήστη, όπως είναι. Ελπίζω ότι τώρα η λειτουργία του * ως ειδικής λέξης -κλειδιού είναι σαφής. Ας δούμε λοιπόν μια πιο περίπλοκη περίπτωση.

AMIT> ΜΠΟΡΩ ΝΑ ΠΑΩ ΑΓΟΡΑ;

MAX> ΤΙ ΑΝ ΔΕΝ ΠΑΤΕ ΣΕ ΑΓΟΡΑ;

Πρέπει επίσης να κάνουμε κάποια μεταμόρφωση. Όταν σκεφτόμαστε τον μετασχηματισμό, η πρόταση χωρίζεται στις ακόλουθες 3 ενότητες:

  • Κείμενο πριν από τη μεταφορά λέξης. (εδώ, ΠΗΓΑΙΝΕΤΕ ΣΤΙΣ ΑΓΟΡΕΣ)
  • Η λέξη -κλειδί Transposed. (εδώ, ΣΑΣ, στη θέση του ΔΙΚΟΥ ΜΟΥ)
  • Κείμενο μετά τη μεταφορά λέξης -κλειδιού. (εδώ εγώ ?)

Βήμα 8: Οι περιπτώσεις μπορούν να αντιμετωπιστούν μέχρι ………

Βήμα 9: Αναζήτηση λέξης -κλειδιού στην είσοδο του χρήστη

MAX_KEY υποδεικνύει τον αριθμό των λέξεων -κλειδιών στο αρχείο DAT.

Εμείς εδώ απλά αναζητάμε αν η λέξη -κλειδί υπάρχει στην Εισαγωγή χρήστη.

Βήμα 10: Συμπέρασμα

Αυτό είναι όλο ………

Το έκανες !!!!!!!

Νομίζω ότι όλοι κατάλαβαν τα πράγματα καθαρά ……

Συνιστάται: