not a personal website
not a portfolio
not a blog
Emote / Emoter
Last updated on February 22, 2018
How to Make a Digital Personality of Yourself Using Chatbots, Facebook, and Empathy
Emote / Emoter / Eden were all created during my undergraduate thesis at Parsons School of Design. I deployed Emoter in an anachronistic, interactive exhibit (seen below) at the Parson's 2017 BFA thesis show, with a personality that represents myself, created from parsing my archived messages on Facebook.
A poor sort of memory that only works backwards (2017)
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 and text files.
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 into data matrix after any input-response pair, and checked for before Emoter gives out a response. In my interactive fiction game prototype Eden, I used this to create a branching narrative driven by the mechanic of talking to the only other interactable character. 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 bots can be written with limited short-term "memory" features, so that they can continue speaking on the same conversations.
Finally, while developing Emoter, I became more fascinated with the idea of automatically generating digital personalities of individual people, specifically given their archived data on social media (inspired by Black Mirror's episode Be Right Back. I developed an algorithm to parse 70,000 of my Facebook messages (downloaded from their official service), to create a database Emoter could use that was specifically mined from my words. This project was deployed as an interactive exhibit in a gallery, and I wrote this post of my research and experiences in Chatbots Magazine.