Κωδικοποίηση μιας πλατφόρμας δημιουργών chatbot, Μέρος 1: Πώς να φτιάξετε μια χαζή chatbot

Πώς προσέγγισα την πρόκληση της δημιουργίας μέσω προγραμματισμού των "συνομιλιών".

Την περασμένη εβδομάδα αποφάσισα να δημιουργήσω μια εφαρμογή δημιουργίας bot. Ο στόχος ήταν (και εξακολουθεί να είναι, καθώς το έργο θα είναι έτοιμο την επόμενη εβδομάδα) να δημιουργήσει μια εφαρμογή που να χρησιμεύει ως πλατφόρμα για χρήστες όλων των επιπέδων για την κατασκευή απλών chatbots και φιλοξενίας τους στον ιστότοπό μου. Σε αυτό το διμηνιαίο blog post θα καλύψω τη διαδικασία μου και μερικές πολύτιμες πηγές για την οικοδόμηση μιας πλατφόρμας για bots - πρώτα ηλίθια, τότε, feature by feature, πιο έξυπνα. (Όταν γράφω ηλίθιοι, δεν εννοώ κουτσός ή κακό, τα chatbots μου είναι δροσερά, αλλά δεν είναι πολύ έξυπνα)

Τι κάνει ένα ελάχιστο βιώσιμο chatbot;

Με όλη την απλότητα, η εύρεση της σωστής απάντησης σε ένα μήνυμα περνάει όσο το δυνατόν περισσότερους ελέγχους προτού να προσφέρει τελικά την εφεδρική απάντηση: «Δεν καταλαβαίνω». Αποφάσισα να ακολουθήσω αυτή την προσέγγιση για να φτιάξω το chatbot μου. Με αυτόν τον τρόπο μπορώ να συνεχίσω να προσθέτω περισσότερα επίπεδα "το μήνυμα ταιριάζει με αυτό το κομμάτι των υλικών που το bot μου γνωρίζει" στο ελάχιστο κατάλληλο chatbot μου. Εδώ ήταν οι αρχικοί μου στόχοι:

  1. Οι χρήστες μπορούν να γράψουν τους δικούς τους διαλόγους. Ένας χρήστης μπορεί να προσθέσει "σκανδάλες", δηλαδή λέξεις ή προτάσεις, τις οποίες το bot τους θα απαντήσει. Θα είναι σε θέση να καθορίσουν μια σειρά από διαφορετικές απαντήσεις, όσες θέλουν. Εάν το bot είναι σε θέση να ταιριάζει με ένα ληφθέν μήνυμα σε αυτό που ενεργοποιεί, θα επιλέξει μια τυχαία απάντηση. Αυτό σχηματίζει τα "scripts" κάθε bot.
  2. Οι Μποτς θα είναι σε θέση να προσφέρουν γενικά σενάρια (όπως χαιρετισμούς και απαντήσεις σε συνηθισμένες ερωτήσεις) και εναλλακτικές απαντήσεις "Δεν καταλαβαίνω" εάν ο χρήστης επιλέξει να τις συμπεριλάβει
  3. Οι bots θα πρέπει να είναι αξιοπρεπείς στην κατανόηση του τι τους λέει ο χρήστης, ακόμα κι αν δεν είναι ακριβής ταύτιση με τους γνωστούς ενεργοποιητές.

Αυτά τα χαρακτηριστικά κάνουν τα bots μου "βασισμένα στην ανάκτηση", όπως περιγράφει αυτό το εξαιρετικό άρθρο. Τα μοντέλα συνομιλίας που βασίζονται στην ανάκτηση είναι πιο εύκολα υλοποιήσιμα, καθώς χρησιμοποιούν ένα αποθετήριο προκαθορισμένων απαντήσεων και ορισμένους κανόνες για να τους επιλέξουν. Η άλλη επιλογή θα ήταν να οικοδομήσουμε chatbots που θα μπορούσαν να δημιουργήσουν τις δικές τους απαντήσεις, αλλά αυτή η προσέγγιση θα ήταν πολύ πιο χρονοβόρα και θα ήταν επιρρεπής σε γραμματικά λάθη. Θα ήταν ασαφές για μένα πώς να προσφέρω στους χρήστες την ευκαιρία να γράψουν αυτά τα bots με τις προσαρμοσμένες εισόδους τους.

Οικοδόμηση του οικοδόμου bot

Οι απλοί στόχοι μεταφράζονται καλά σε πραγματικά αυξητικά τεχνικά χαρακτηριστικά. Η πλατφόρμα scripting, την οποία έχω εφαρμόσει με το React, είναι βασικά μια δυναμική μορφή που αναπτύσσεται και συρρικνώνεται από την επιλογή του χρήστη. Δεν υπάρχει όριο στον αριθμό των ενεργοποιήσεων ή των απαντήσεων που μπορείτε να προσθέσετε. Στη φάση scripting, οι χρήστες μπορούν να δοκιμάσουν τα bots τους και στη συνέχεια να τα αποθηκεύσουν μόλις ικανοποιηθούν με τα σενάρια τους. Θα μπορούν να επεξεργαστούν το bot, να συνομιλήσουν μαζί του ή να μοιραστούν έναν σύνδεσμο με οποιονδήποτε για να συζητήσουν με το bot, καθώς φιλοξενούνται στον ιστότοπό μου. Κάθε μήνυμα που λαμβάνει το bot, αποστέλλεται στην backbone του Ruby on Rails, όπου μια διαδικασία αντιστοίχισης προσπαθεί να βρει τη σωστή απάντηση και την στέλνει στο front-end (χρήστη).

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

Αφού επιλέξω τη βασική λογική που θα πρέπει να εφαρμόσουν όλα τα bots μου, έχω ρυθμίσει σε προεπιλεγμένες ενεργοποιήσεις και απαντήσεις σε δέσμες ενεργειών. Στην πλατφόρμα script bot-frontend, οι χρήστες θα μπορούν να συμμετέχουν σε μικρά προεπιλεγμένα σενάρια, όπως χαιρετισμούς, αποχαιρετισμούς, εύκολες ερωτήσεις (π.χ. "πώς είσαι;") και υπαρξιακά ερωτήματα (π.χ. "τι είσαι;"). Τα bots πήγαν ελαφρώς λιγότερο ανόητα μετά από αυτή την απλή προσθήκη.

Απλά προεπιλεγμένα σενάρια

Ασαφής συμβολοσειρά που ταιριάζει για τη νίκη

Το τελευταίο βήμα για τον ηλίθιο κατασκευαστή bot μου ήταν να εφαρμόσει "ασαφές string matching". Υπάρχει ένα καταπληκτικό κόσμημα ρουμπίνι και βιβλιοθήκη γι 'αυτό. Αντί να συγκρίνουμε εάν string1 == string2, η ταιριαστή σύζευξη χορδών υπολογίζει την απόσταση μεταξύ δύο συμβολοσειρών. Το κόσμημα χρησιμοποιεί τον αλγόριθμο απόστασης Jaro-Winkler για να επιστρέψει μια τιμή μεταξύ 0 και 1 για να αντιπροσωπεύει την ομοιότητα μεταξύ των συμβολοσειρών. 1 σημαίνει ότι οι λέξεις είναι οι ίδιες, 0 σημαίνει ότι δεν είναι καθόλου παρόμοιες. Έβαλα το προκαθορισμένο όριο αντιστοίχισης των bots μου στο 0,8, επειδή φαινόταν να έχει παρελθόν τυπογραφικά λάθη ή επιπλέον λέξεις πλήρωσης, ενώ δεν λείπουν πλήρως σημαντικές διαφορές. Η εκκίνηση μιας παράστασης σύγκρισης ήταν εύκολη (fuzzy_match = FuzzyStringMatch :: JaroWinkler.create (: μητρική)) και έτσι τη χρησιμοποίησε.

Χρησιμοποιώντας το gem

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

1) αντιστοιχεί στα σενάρια του χρήστη

2) προεπιλεγμένες αντιστοιχίσεις σεναρίων

3) βρείτε ενδείξεις από προηγούμενη συνομιλία (δεν έχουν ακόμη εφαρμοστεί)

Τα τρία βασικά χαρακτηριστικά μαζί πήραν τα bots σε αρκετά ικανοποιητικό επίπεδο. Ήμουν ευτυχής που βλέπω ότι τα bots μου δεν ήταν πολύ ενοχλημένα από τα typos, ήξεραν να δίνουν προτεραιότητα στα scripts του χρήστη και ήξεραν να προσφέρουν προεπιλεγμένες απαντήσεις σε ορισμένα κοινά μηνύματα. Έχω πειραματιστεί με βασικές και αρχάριους φιλικές εφαρμογές μηχανικής μάθησης για να προσθέσω επιπλέον κατανόηση στον οικοδόμο bot μου, το οποίο θα τεκμηριώσω για το επόμενο μέρος αυτού του blog post.