Can a Bot make you laugh?

We developed a Comedy Bot for the IBM Watson Dev Conference to find out.

To preface this was not a task to develop an algorithm that could create original jokes but to see if we could script a humorous conversation that felt naturally delivered by a bot.

A robot walks into a bar, orders a drink, and lays down some cash. The bartender says, “we don’t serve robots.” The robot replies, “oh, but some day you will.”

“Tell me a joke” is actually a common request a bot receives, a way a user tests the bots capabilities. At the IBM Watson Developer Conference, IBM held a Bot competition and asked people to develop bots using their Watson Conversation service for people attending the conference.

A copywriter friend Ben and I put our heads together and brainstormed what would be a useful bot for the conference attendees. Going through the scenarios of what people do at conferences other than listen to talks and watch the demos and also when would be an appropriate time for the people to be testing the bots entered into the competition. We came to the conclusion that during the breaks would be the most common time a person would start chatting to the bot. We knew people’s break times would vary depending on their selected speaker schedule, so we thought why don’t we fill up people’s time with some light humor to break out their day. Humor is also a great way to humanize the bot experience.

Originally called the Comedy Break Bot, Ben had the nice idea to call it Coders at a Conference getting Comedy, a take on Jerry Seinfeld’s Comedian in Cars getting Coffee. To make it feel like a personalized experience the bot starts off asking you your name, how you’re feeling about the conference, what do you do for a living, would like to invest money in a new comedy bot and dependent on the persons answer we take them down different dialogue paths.

A guided conversation

Just like in SEO, when creating bots content is king. Having a well thought out dialogue is what is going to make your bot stand out. Ben wrote some initial draft scripts and we spent some time going back and forth texting, pretending one person was the bot and the other the user to see how the conversation would flow. We also had an internal goal of:

How can we keep the conversation flowing for as long as possible.

After learning about you, the bot has a goal to either provide you a joke or funny video. We pulled a handful of jokes from the web but a challenge was how do we weave them and other humorous conversation together so there is this seamless back and forth that doesn’t get repetitive or fall into a dreaded loop.

A way to guide a person was that when the bot provided a response it would end with asking a question, with sometimes options. By providing options we guide the user down a dialogue path and keep the conversation moving. Also just like in a regular conversation, you would sometimes get asked “What do you think” or “How do you feel” so the bot would ask what the person thought of the funny video after providing the link or after a joke. The questions aim was also to map the users response back to predefined Intents and Entities setup in the system (more about that below).

You can go back and forth with the bot for sometime, with the hope you go down different dialogue paths and running into different jokes, videos or random humorous lines. Even the “Sorry I didn’t understand” leads into different dialogue paths.

At times people can go off track and ask random questions. To factor for this we looked up the most off-topic questions bots get and placed responses for this too.

Pulling it all together in Watson Conversation

As part of the competition, you had to build and train your bot using Watson Conversation then submit your training data so there wasn’t a need to develop an interface as that would be provided. So I could have Ben and other people test the bot, there is a simple Watson bot starter interface you can deploy to Bluemix in minutes (the screenshots is what it looks like).

Watson Conversation uses Intents to find out what the goal or purpose is for that users response and Entities to define class of object or data type within that response. Through out that process we had to think of asking questions that we could hone in on a particular predefined Intents and extract any Entities in that response. For example an Intent of their response would be them telling us what they do for a living and the entity in that response would be defining the exact job role. Knowing their job role we could them guide them down a unique dialogue path.

The Watson Conversation service has a really nice interface to input your Intents, Entities and setup your Dialogue. So setting up your bot in the service doesn’t take very long at all once you’ve thought through and mapped out your intents, entities and scripted out how your conversation would flow. Setting up all your Intents and Entities first is what takes time as the system needs time to learn them before they can be used, so knowing what they would be beforehand is a benefit. Once those are in you would be ready to setup your dialogue and you can quickly make tweaks and edits to your responses on the fly with out having to redeploy or republish.

Testing and thinking about all the different responses and the different dialogue paths you want to take the user down is what takes the most time.

So how did it go?

The great thing with some jokes is that it requires a persons response and engagement. So the right jokes fit the chat bot medium very well creating a more humanized experience.

Hopefully the bot got some laughs out of people, we ended up winning the best UX for a bot so we definitely got some smiles.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.