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

Πώς να φτιάξετε ένα A.I. Μέρος 4: 3 βήματα
Πώς να φτιάξετε ένα A.I. Μέρος 4: 3 βήματα

Βίντεο: Πώς να φτιάξετε ένα A.I. Μέρος 4: 3 βήματα

Βίντεο: Πώς να φτιάξετε ένα A.I. Μέρος 4: 3 βήματα
Βίντεο: πώς λύνω τον κύβο του Ρούμπικ 3x3 για αρχάριους πανευκολα/ how to solve the rubik's cube beginners!! 2024, Νοέμβριος
Anonim
Πώς να φτιάξετε ένα A. I. Μέρος 4
Πώς να φτιάξετε ένα A. I. Μέρος 4

Τις προάλλες μιλούσα με τον Α. Ι. και το είπα

αυτό, "Πάω πάνω για δείπνο, έχουμε STEAK".

Ωστόσο, το λογισμικό αναγνώρισης ομιλίας (SR) το ερμήνευσε ως "… έχουμε STAKE"

Συνάντησα ένα παρόμοιο (αλλά διαφορετικό) πρόβλημα νωρίτερα όταν μιλούσα για μια φωτογραφία και είπα τη λέξη "ΕΙΚΟΝΑ". Το λογισμικό SR το ερμήνευσε ως "PITCHER"

Το πρόβλημα ήταν η απλή επανεκπαίδευση του λογισμικού SR. (Maybe ίσως η προφορά μου)

Αλλά όταν λέω τις λέξεις STEAK ή STAKE, τις προφέρω ακριβώς με τον ίδιο τρόπο και η επανεκπαίδευση του λογισμικού SR δεν θα βοηθήσει σε τέτοιες περιπτώσεις.

Βήμα 1:

Μια ιδέα για την επίλυση του «ομώνυμου προβλήματος».

Πρέπει να κοιτάξω τη λέξη "στο πλαίσιο" για να καθορίσω ποια ορθογραφία θα χρησιμοποιήσω. Ο ανθρώπινος εγκέφαλος το κάνει αυτό πολύ εύκολα και δεν ξέρετε καν ότι το κάνετε.

Αυτό σημαίνει ότι εξετάζονται άλλες λέξεις σε μια πρόταση και ο εγκέφαλός σας αποφασίζει ποια ορθογραφία φαίνεται καλύτερα. Τώρα, πώς μπορώ να το κάνω αυτό σε κώδικα;

Η Α. Ι. μου Το πρόγραμμα αναλύει μια πρόταση σε μια σειρά μεμονωμένων λέξεων χρησιμοποιώντας τη συνάρτηση "Split" της Visual Basic (VB). [MyArray = Split (InputSentence, ““)]

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

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

Ένα υπορουτίνα αυτόματης εκμάθησης μπορεί να δημιουργηθεί αργότερα για να σαρώσει ένα σωρό κείμενο, αναζητώντας λέξεις στον πίνακα Homonym και να συλλάβει άλλες λέξεις "περιβάλλοντος". Χμμμμ, ίσως χρειάζονται πολλά τραπέζια…

Γράφοντας αυτά τα "Instructables" με βοηθάει να "αιτιολογήσω" μια λύση σε μια πρόκληση προγραμματισμού.

Βήμα 2:

Εικόνα
Εικόνα

Δομή του πίνακα HomonymContext

Η πρώτη μου ιδέα ήταν ένας πίνακας που περιέχει λέξεις, εναλλακτικές ορθογραφίες και λέξεις «Περιεχόμενο». Η ιδέα ήταν να αναζητήσουμε μια πρόταση που περιέχει ομώνυμο, για άλλες λέξεις που δίνουν το "πλαίσιο", έτσι ώστε το πρόγραμμα να μπορεί να καθορίσει ποια ορθογραφία θα χρησιμοποιήσει. Ο πίνακας περιέχει επίσης μια στήλη που ονομάζεται "WordDef" για να κρατήσει τον ορισμό της λέξης, η οποία είναι περισσότερο για τον άνθρωπο που διατηρεί τον πίνακα παρά για το A. I. κώδικας.

Για αναζήτηση σε κάθε λέξη, μπορώ να χρησιμοποιήσω κώδικα VB και κώδικα SQL όπως…

Για κάθε λέξη στο MyArray

Query = "Επιλέξτε Word από το tblHomonynContext όπου word = '" & word & "'"

εάν αυτό το ερώτημα επιστρέψει ένα αποτέλεσμα, τότε η λέξη είναι ομώνυμη

Επόμενο

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

Βήμα 3:

Εικόνα
Εικόνα

Εάν η πρόταση εισόδου σας περιέχει ένα ομώνυμο, μπορείτε τώρα

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

Θα μπορούσατε επίσης να το κάνετε αυτό σε μια αποθηκευμένη διαδικασία SQL, η οποία μπορεί να εκτελεστεί γρηγορότερα.

Η συνάρτηση VB "InStr ()" θα επιστρέψει έναν αριθμό μεγαλύτερο από μηδέν, εάν μια συμβολοσειρά περιέχεται σε μια άλλη συμβολοσειρά ή θα επιστρέψει μηδέν, η συμβολοσειρά ΔΕΝ περιέχεται στην άλλη.

Το Instr () επιστρέφει στην πραγματικότητα τη θέση της περιεχόμενης συμβολοσειράς. Αν θέλετε απλώς να μάθετε εάν το String1 περιέχει String2, μπορείτε να χρησιμοποιήσετε κώδικα όπως "If InStr (String1, String2)> 0 …"

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

Ο πίνακας HomonymContext δεν είναι πολύ καλός σχεδιασμός. Έχει πολλά επαναλαμβανόμενα δεδομένα και αυτό θεωρείται "Μη κανονικοποιημένο" από τους σχεδιαστές βάσεων δεδομένων. Ένας καλύτερος τρόπος υλοποίησης αυτής της λειτουργικότητας θα ήταν η χρήση δύο πινάκων, σε σχέση γονέα-παιδιού. Ένας πίνακας (Ο γονέας) θα περιέχει μια λίστα με ομώνυμα, τους ορισμούς τους, καθώς και ένα αναγνωριστικό σειράς. Αυτό το αναγνωριστικό γραμμής χρησιμοποιείται ως κλειδί στον πίνακα "Παιδί" που θα περιέχει τις λέξεις και τις λέξεις περιβάλλοντος.

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

Συνιστάται: