Bygg Facebook Messenger Contextual ChatBot med TensorFlow och Keras

Låt oss bygga en Facebook Messenger chatbot som hjälper kunden att köpa blommorna. Vi kommer att använda TensorFlow med Keras i backend för att bygga chatbot. I frontend kommer vi att använda Facebook Messenger-appen.

Denna chatbot är baserad på det här fantastiska blogginlägget. När vi utformar botten kommer vi att använda den kontextuella konversationen med avsikter och motsvarande åtgärder.

Några exempel på samtal med bot:

Intents

När en användare interagerar med en bot kommer han att fråga vad som är hans avsikt eller fråga att använda chatbot. Till exempel när användaren frågar "Jag vill köpa en blomma" kan vi som människor förstå att användaren vill köpa en blomma och baserat på avsikten kommer botten att klassificera mönstren och svaret tillbaka till användaren. Om det inte finns något matchande mönster kommer botten att svara på att den inte kan förstå frågan och ber användaren att ge mer information.

I denna skrivning kommer vi att bygga en enkel chatbot som hjälper användaren att köpa en blomma.

Vi definierar avsikten i JSON-formatet med motsvarande tagg, mönster, svar och sammanhang som visas nedan.

Vi kommer att träna botten för att kunna upptäcka och klassificera avsikten med TensorFlow och Keras i den senare delen.

Konversationssammanhang

När avsikten matchas kan vi ställa in konversationssammanhang så att botten kommer att svara på användaren baserat på det aktuella sammanhanget.

I JSON-filen ovan definierar vi följande taggar:

  • context_set definieras för att ställa in konversationskontext när avsikten matchas. Om användaren till exempel frågar ”Jag vill köpa blommor” ställs konversationskonversionen ”buyflower” in. Kontextet återställs när användaren säger ”hej” eller alla hälsningsord som definieras i JSON-filen ovan.
  • context_filter-taggen ska bara köras när konversationens kontext är inställd. Till exempel om användaren frågar "ros" kommer botten bara att svara med "Rose är en härlig blomma!" när kontexten "buyflower" är inställd. Annars svarar botten inte på användaren.

Bygg modellen

Nu är den roliga delen !. Låt oss skapa en modell med TensorFlow och Keras.

Vi importerar nödvändiga bibliotek och beroenden.

Sedan importerar vi filen "intents.json" som vi har definierat tidigare.

Vi bearbetar och organiserar delarna i dokument, klasser och ord.

Ovanstående kod skapar en lista med dokument och varje dokument är en lista med stamade ord och är associerad med en avsikt (en klass).

35 dokument ['Hej'] ['Hur', 'är', 'du'] ['Är', 'någon', 'där', '?'] ['Hej'] ['Bra', 'dag' ] ['Bye'] ['Se', 'du', 'senare'] ['Farväl'] ['Tack'] ['Tack', 'du'] ['Det', "'s", "användbart '] [] [' Vad ',' timmar ',' är ',' du ',' öppen ','? '] [' Vad ',' är ',' din ',' timmar ','? '] ['När', 'är', 'du', 'öppen', '?'] ['Jag', 'skulle', 'gilla', 'till', 'köpa', 'blommor'] ['Jag' , 'vill', 'till', 'köpa', 'en', 'blomma'] ['Vad', 'är', 'den', 'blommorna', 'du', 'har', '?'] ['Vad', 'slag', 'av', 'blommor', 'är', 'där', '?'] ['Vad', 'gör', 'du', 'har', '?'] ['kredit', 'kort'] ['Gör', 'du', 'ta', 'kredit', 'kort', '?'] ['Gör', 'du', 'acceptera', 'Mastercard' , '?'] ['Är', 'du', 'kontanter', 'bara', '?'] ['Ros', 'blommor'] ['rosor'] ['ros'] ['tulpan', 'blommor'] ['tulpaner'] ['tulpan'] ['tusensköna', 'blommor'] ['tusensköna'] ['Är', 'du', 'öppen', 'idag', '?'] [ 'När', 'gör', 'du', 'öppen', 'idag', '?'] ['Vad', 'är', 'din', 'timmar', 'idag', '?']
11 klasser ["tusensköna", "blommor", "adjö", "hälsning", "timmar", "noanswer", "opentoday", "betalningar", "rose", "tack", "tulpan"]
47 unika stamade ord ["'s", "a", "acceiv", "anyon", "ar", "buy", "bye", "card", "cash", "credit", "daisy", 'dag', 'gör', 'flöde', 'bra', 'adjö', 'hav', 'hej', 'hjälp', 'hej', 'timme', 'hur', 'jag', 'är ',' snäll ',' lat ',' lik ',' mastercard ',' av ',' på ',' op ',' ros ',' se ',' tak ',' tack ',' det ', 'the', 'ther', 'to', 'today', 'tulpan', 'want', 'what', 'när', 'would', 'yo', 'you']

Vi kommer att skapa en påse med ord för dokumenten och meningarna så att den kan matas till modellen.

Vi blandar träningsdata och skapar tåg- och testlistan.

train_x är listan med tensor av siffror för stammade ord och train_y är listan med tensor av nummer för klasser. Exempel nedan:

train_x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] train_x längd: 47.
train_y = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] train_y length: 11.

Vårt nätverk består av en sekvens av fyra täta lager som är tätt anslutna. Det sista lagret är ett 11-vägs softmax-lager, vilket innebär att det kommer att returnera en matris med 11 sannolikhetspoäng. Kom ihåg att vi har 11 klasser: ["tusensköna", "blommor", "adjö", "hälsning", "timmar", "noanswer", "opentoday", "betalningar", "rose", "tack", "tulpan" ].

Vi sparar vår modell och laddar den i den senare delen när vi bygger gränssnittet till Facebook Messenger. Vi planerar också träning och valideringsnoggrannhet.

Vi skapar påsen med ord från den givna meningen (användarens inmatning) som vi gjorde tidigare.

Påse med ord

Slutligen skapar vi klassificeringen och svaret. På klassificeraren filtrerar vi resultatet som har poängen mer än tröskeln (0,65).

Bygg Facebook Messenger Bot

Vi skapar Facebook-sidan och Facebook-appen.

Skapa ditt Facebook-konto och skapa sidan. Jag har skapat en dummy-sida FlowerBot för detta ändamål.

Skapa Facebook-sidaFlowerBot Facebook-sida

Skapa Facebook Messenger-app

Logga in på https://developers.facebook.com för att skapa en ny app FlowerBot.

När du har skapat lägger du till en produkt, Messenger och klickar på Set Up.

Under Token Generation, välj FlowerBot-sida för att generera sidans åtkomsttoken. Notera det genererade tokenet, vi kommer att använda den här informationen när vi installerar Heroku-appen.

Vi kommer tillbaka hit igen för att ställa in webhooks.

Ladda sparad modell och skapa flaskapp

Vi laddar den sparade modellen som ska användas för förutsägelse.

model = load_model ('model_ChatBot.h5')
p = båge ("Jag skulle vilja köpa blommor", ord) d = len (p) f = len (dokument) -2 a = np.zeros ([f, d]) tot = np.vstack ((p, a)) resultat = model.predict (tot) [0]

Det förutsagda indexet är 1 från ingången "Jag skulle vilja köpa blommor" som är "blommorna" från klasserna:

['tusensköna', 'blommor', 'adjö', 'hälsning', 'timmar', 'noanswer', 'opentoday', 'betalningar', 'rose', 'tack', 'tulpan']

Skapa Flask-appen och verifiera token-funktionen verifiera () som kommer att användas för registrering av webhook på Facebook Messenger-appsidan.

Vi skapar funktionen webhook () för att bearbeta det inkommande meddelandet, klassificera / förutsäga meddelandet och svara tillbaka till användaren.

sender_id är den unika ID-adressen för Facebook Messenger-avsändare som interagerar med botten.

responseai = svar (meddelande_text, avsender_id) send_message (avsändare_id, responseai)

och vi skapar funktionen send_message () för att skicka svarmeddelandet tillbaka till användaren.

Värd för appen på Heroku

Skapa en mapp (för mitt fall är Chatbot) på din lokala enhet och kopiera all kod från min Git. Vi måste också kopiera intents.json och model_ChatBot.h5 till samma mapp. Mappstrukturen ska vara så här.

Ignorera bara .git-mappen just nu, den här mappen skapas när vi kör git-kommandona som jag kommer att beskriva inom kort.

Skapa Heroku gratis konto från http://heroku.com/ och kör följande kommandon:

git init git lägg till. git commit - meddelande "chatbot" heroku skapa git push heroku master

När du kör dessa kommandon för första gången kommer Heroku att installera nödvändiga bibliotek som definieras i kravet.txt

Kolv == 0.11.1 Jinja2 == 2.8 MarkupSafe == 0.23 Werkzeug == 0.11.10 klick == 6.6 gunicorn == 19.6.0 dess farliga == 0.24 förfrågningar == 2.10.0 nltk == 3.3 tensorflow == 1.7.0 keras == 2.1.5 numpy == 1.13.1 h5py == 2.7.0

Vi kommer att använda python-3.6.5 enligt definitionen i runtime.txt.

När du har kört kommandot "git push heroku master", om det inte finns något fel, får du meddelandet som liknar skärmbilden nedan.

Notera URL för herokuapp, för mitt fall är https://fdchatbot.herokuapp.com. Vi kommer att ange informationen i Webhook-inställningen på Facebook Messenger-appsidan.

Kör följande kommando för att ställa in PAGE_ACCESS_TOKEN. Få sidåtkomsttoken från det steg du gjorde tidigare.

heroku config: lägg till PAGE_ACCESS_TOKEN = din_page_token_here

Och kör följande kommando för att ställa in VERIFY_TOKEN. Vi kommer att använda my_flower_token. Du kan använda valfritt namn.

heroku config: lägg till VERIFY_TOKEN = my_flower_token

Du kan verifiera inställningen i Heroku Instrumentpanel Inställningar> Config Vars.

Ställa in webbhaken

Gå tillbaka till Facebook-utvecklingssidan och gå till din sida.

Klicka på Inställning av webhooks under Webhooks och ange följande information. Klicka på Verifiera och spara för att slutföra installationen.

Kontrollera om inställningen för Webhooks är korrekt konfigurerad. Du ser meddelandet "Komplett".

Välj sedan FlowerBot för att prenumerera på sidhändelserna.

Börja chatta med Bot

Öppna Facebook-sidan du skapade och klicka på Skicka meddelande för att börja chatta med din bot. Om installationen är korrekt får du svaret från botten.

Källkod

Alla nödvändiga koder inklusive modellen finns på min Git: https://github.com/ferrygun/FlowerBot

Det är allt vi behöver och tills nästa gång!