is it all i am all it is

a one-sided conversation about me

to you.

Emote / Emoter

Last updated on March 5th, 2017


Emote / Emoter was created (or, is in the process of being created) as part of my undergraduate thesis at Parsons School of Design. The other part of my thesis is Eden, an interactive fiction game I'm building around Emoter.

I had originally wanted to create a wearable product intergrated with a talking AI, and while looking at all the existing chatbot solutions, I felt dissatisfied. I felt that chatbots should have some way to comprehend messages for some higher meaning, as an actual human mind would. Naturally, empathy seemed like a great way to answer for that higher meaning.

A chatbot with emotional intelligence could not only be able to narrow down schemas in its knowledge database to give more specific, accurate answers, but the bot could also then decipher and understand the emotional context of texts that aren't similar to anything in its training.

I looked to intergrate a sentiment analyzer with my bot. I tried a few solutions, and again, felt dissatisfied with them all, including Watson's Tone Analyzer (which, as the name states, is for analyzing the tone of how text comes off, not actually how the person is feeling). Again, I began creating my own, with the help of several open-source libraries.

Both Emote and Emoter can be run offline. Emoter and Emote have both been open-sourced, and are included together in the source code.

Emote was written in Python and uses the TextBlob / NLTK, NumPy, SciPy, pandas, and scikit-learn libraries to build a probabilistic sentiment analyzer for 26 different classifications. These classifications have been divided into 13 pairs of opposites, and are designed to be grouped together to create tone clusters that can then encompass more values as well as decrease false positives. Based off these tone clusters, a further 10 additional tone classifications are derived, allowing for 36 different tones to be detected.

A flowchart detailing an early version of Emote's software architecture.

Emote has a web interface built in Flask and with Bootstrap.

Emote has a mass analysis feature for analyzing CSV data.

Emoter is a basic but functional chatbot platform intergrated with Emote (also in Python), in order to give chatbot agents the ability to empathize with users and give back emotionally appropriate responses. Emoter agents thus can operate on a "higher level of thinking", by first categorizing messages and then choosing specific, interchangable "conversations" (lists of text responses) to respond from based on certain emotional tones. Within these conversations, Emoter looks for matching text in its database and compares it with the user input on a sliding threshold, outputting the corresponding response if the threshold is met.

A flowchart detailing an early version of a blank Emoter chatbot agent.

Emoter's website was created with three.js and SemanticUI. The globe displays quotes that have been classified according to Emote.

A demo 'Emoter agent' with a persona of a fitness coach.

In Emoter's training data, values can be passed after the matching input-response pair, and checked for before Emoter gives out a response. In my interactive fiction game Eden, I used this to allow for a branching narrative to continue driven by the mechanic of talking to a mysterious character in the game. The Emoter bot was able to keep track of whether or not certain things were said by the user previously, and how often each thing was said. Thus, Emoter has a basic short-term memory in store, so that the bots can carry out an intelligent, coherent conversation (as opposed to Cleverbot, which cannot carry on with the same conversation).