Today I’m launching Emoj, an API that can interpret emotion from a text based conversation. Understanding how someone is feeling in the moment is relatively easy when we talk to other people face to face. When we communicate through text messages, understanding emotion can be difficult. When it comes to communicating with robots, or even just software in general, it’s extremely difficult for the machine to truly understand us. But it doesn’t have to be this way! Context is key in order to build a great bot or conversational assistant. Understanding how someone is feeling is crucial to delivering personalized and humanized conversations.
My journey to launching Emoj goes back about 8 months, when I started building Joy. Joy makes it easy to track and analyze your mental health just by having a conversation. I quickly realized that to do this effectively, detecting emotion from messages would be important. While Joy could simply ask you to manually select how you’re feeling from a list, the act of having this conversation is valuable (whether it’s with a bot like Joy or with a real human). This means that someone can tell Joy that they had a really long day at work and Joy will detect that this person is likely feeling stressed out.
Initially, I used various APIs and packages to help Joy understand and interpret emotion from a text-based conversation. While this allowed me to move quick, the accuracy of these APIs and detection algorithms was underwhelming. They were only accurate in detecting emotion around 67% of the time. The more I researched the topic, the more I realized that this inaccuracy made sense. While I was looking for analysis on short messages (sometimes a single word), these algorithms were trained on things like novels, movie reviews, and other longer form texts.
I started to search for replacements and improvements to these APIs and services. No company or individual was really doing this (well), or at least nobody that was offering it as a standalone service to others. Why? Because nobody has the right data to do it. Meanwhile, I was slowly but surely starting to build up a collection of conversational data, with each message having an associated emotion as confirmed by the end user.
Eventually, I had had enough with the inaccuracy and growing costs of the various APIs and started to build my own emotional classification model. I was now sitting on a gold mine — thousands of conversations stored (anonymously) and labeled with emotions to use as training data. Using this unique dataset, alongside some well known and relatively simple machine learning algorithms, I trained a model that will detect emotion from a text conversation with about 85% accuracy. There’s nothing proprietary about these training algorithms themselves, but because these algorithms are only as good as the data they’re trained on, collecting the right dataset is often the most important part.
I’ve now been using this home grown classification model for Joy for the past few months and improving it as I go. As Joy continues to have conversations, the Emoj classifier algorithms will continue to get smarter and improve their accuracy. It’s nowhere near perfect, and this is definitely just the beginning, but it’s pretty damn cool (and useful) if I do say so myself. 😁
I’m excited to let others use and build on top of Emoj to add emotional intelligence into their bots, assistants, and conversational platforms. Joy is one use case, but there are tons of other great products out there that can benefit from understanding how a customer is feeling at any given moment. Context is often key to building a great experience. Now, anyone can use Emoj to gain emotional context to enable magical experiences that delight customers and solve problems.