Eerste ervaringen bij het bouwen van een chatbot

Posted on: 08/11/2017 by: Bert Vanhalst

Chatbots zijn tegenwoordig erg "in". Veel organisaties denken na over de introductie van een chatbot in het kader van klantenondersteuning en er wordt druk geëxperimenteerd. Ook wij zijn aan de slag gegaan met chatbot technologie om na te gaan wat het inhoudt om een chatbot te bouwen. In deze blog delen we onze eerste ervaringen.

De case

Vandaag heeft de RSZ al een aanwezigheid op Facebook in het kader van studentenarbeid (Student@Work): er is een Facebook pagina waar interessante berichten worden gepost over studentenarbeid en waar je een chatbericht kan sturen. Die berichten worden manueel afgehandeld door medewerkers van de RSZ. Hoewel men de vragen die via dit kanaal worden gestuurd goed tracht op te volgen, kan er toch wat tijd over gaan eer er een antwoord teruggestuurd wordt. We vonden het interessant om na te gaan of er automatisch kan geantwoord worden op vragen over studentenarbeid. De belangrijkste meerwaarde die hiermee beoogd wordt is dat een student onmiddellijk een antwoord krijgt op zijn of haar vraag en dit 24 op 7.

Het bouwen van de chatbot

Als basis vertrekken we vanuit de beschikbare FAQ's waar algemene vragen over studentenarbeid beantwoord worden: 3 Word/Excel bestanden met FAQ's over zowel inhoudelijke als technische thema's. Deze vraag/antwoord-paren dienden we eerst bij te werken: de drie bestanden werden geconsolideerd tot één bestand, bepaalde antwoorden werden ingekort, bepaalde vragen werden opgesplitst, de formattering werd weggelaten.

Vervolgens kunnen we dit bestand als input gebruiken om een chatbot te bouwen. In eerste instantie zijn we aan de slag gegaan met QnA Maker, een tool van Microsoft die toelaat om een FAQ heel eenvoudig om te vormen tot een chatbot. Het volstaat om een bestand met FAQ's te uploaden (of een URL naar een pagina met FAQ's op te geven) en als resultaat krijg je een API die op basis van een vraag het meest relevante antwoord teruggeeft. Spijtig genoeg moeten we constateren dat er vaak verkeerde antwoorden teruggegeven worden, waardoor we op zoek zijn gegaan naar een alternatief platform. Eerder hadden we al testen uitgevoerd met API.ai (tegenwoordig heet dit Dialogflow) in het kader van een integratie met Google Assistant. De ondersteuning voor machine learning, de techniek die gebruikt wordt om natuurlijke taal te verwerken, is hier echter nog niet beschikbaar in het Nederlands, dus moeten we ook Dialogflow aan de kant schuiven.

Uiteindelijk zijn we terecht gekomen bij IBM Watson Conversation waar Nederlands wel ondersteund wordt, weliswaar in beta. Een kernconcept bij Watson Conversation is een intentie (intent): een vraag van een gebruiker of een doel dat hij/zij wil bereiken. In ons geval komt elke vraag uit de FAQ-lijst overeen met één intent. De vragen en intents kunnen geïmporteerd worden vanuit een CSV bestand, de antwoorden niet. De enige mogelijkheid om antwoorden te importeren is om een volledig JSON bestand te importeren met zowel de vragen, intents als de antwoorden. In ons geval hebben we de antwoorden manueel ingegeven en één op één gekoppeld aan de intents.

Watson Conversation steunt op machine learning om het meest relevante antwoord terug te geven. Dat gebeurt op basis van een model dat getraind wordt met voorbeeldzinnen. Hoe meer voorbeeldzinnen, hoe accurater de bot kan antwoorden. Daarom is het cruciaal om veel relevante voorbeeldzinnen te voeden aan het systeem. Idealiter zijn dit vragen zoals ze geformuleerd worden door echte gebruikers. Aangezien studenten al vragen kunnen stellen via de Facebook pagina, email of een webformulier, gebruiken we momenteel deze input om de chatbot te trainen. Dit trainingsproces is cruciaal om de kwaliteit van een chatbot te verbeteren. Het moet niet gezien worden als een eenmalige operatie, maar dit dient een continue verbetering te zijn op basis van reële vragen en feedback van eindgebruikers.

Integratie in Facebook Messenger

De bot werd geïntegreerd in Facebook Messenger via het Botkit framework dat toelaat om te publiceren naar meerdere kanalen (Messenger, Slack, etc.) Het eindresultaat is een chatbot waar een vraag beantwoord wordt met het meest passende antwoord indien de betrouwbaarheidsscore die Watson Conversation teruggeeft boven een bepaalde drempel ligt (50%). Ligt de betrouwbaarheidsscore onder die drempel, dan wordt er geantwoord dat de vraag niet goed begrepen werd en worden er andere kanalen gesuggereerd (email of de Facebook pagina) waar een menselijke medewerker de vraag zal beantwoorden. Als uitbreiding zou hier ook overgeschakeld kunnen worden naar live chat als bijkomend kanaal.

Als een gebruiker aan de slag gaat met de chatbot in Messenger wordt er een introductieboodschap gegeven. Daarin wordt geschetst wat je als gebruiker kan verwachten van de bot. Naast het stellen van een vraag in vrije tekst wordt er ook de mogelijkheid gegeven om het contingent op te vragen via een knop die leidt naar de bestaande webtoepassing van Student@work. Het contingent is het resterend aantal uur dat je mag werken tegen verminderde sociale bijdragen; als jobstudent heb je zo 475 uur per jaar. Technisch gebeurt dit via een webview zodat het lijkt alsof men de Messenger omgeving niet verlaat. Het toevoegen van een knop voor het opvragen van de resterende uren zet deze topvraag extra in de verf.

Hoewel Watson Conversation technisch de mogelijkheid biedt om complexere dialogen op te stellen, worden vervolgvragen momenteel niet ondersteund in de bot. Het in rekening brengen van vervolgvragen zou de bot een heel pak intuïtiever en gebruiksvriendelijker maken, maar tegelijkertijd complexer om te bouwen.

Conclusie

De eerste ervaringen met het bouwen van een chatbot zijn al bij al positief. Een eerste versie is voorzien met een redelijke effort. Maar daar moet aan toegevoegd worden dat de chatbot nog niet publiek toegankelijk is en we dus nog niet volledig kunnen oordelen of de chatbot een kwalitatief goed antwoord kan bieden op vragen van échte eindgebruikers. De nodige aandacht dient dan ook nog uit te gaan naar het capteren van feedback van gebruikers zodat de chatbot continu kan verbeterd worden.