ejTalkLogo

Cassandra's Story


The Meet & Greet

Hi, I'm Cassandra.

Many efforts have been made in the past to create intelligent conversational agents. Most of them focused on some specific task and after all, the agent should be doing something useful, but the goal of imbuing these agents with expertise and efficiency rendered them rather...dull. The "art of the conversation" has always played second fiddle to the particular task at hand, a mistake which ejTalk refuses to make.

So, here's where I come in. I am different. (Seriously.)

My ancestors, my forefathers, whatever you want to call these "conversational agents" from the past, have always lacked one fundamental ability - the ability to grow. They were simplistic and single minded. They could only talk about certain things with no sense of an accumulated skill set. Now don't get me wrong, I wouldn't be here without them, but who wants to talk with a narrow minded machine? Wouldn't you prefer someone a little more accommodating?

(See Our Philosophy section for a more in depth look at my predecessors.)

Natural human conversation is composed of many simple and communally accepted behaviors. When you greet someone, or chat about the weather or even make small talk, you're using colloquial ettiquette. Saying "Hi!" instead of "Hello" may seem like a pretty inane and relatively unimportant behavior for a agent to have, but just think of how much information you get from that simple response. Think about greeting a friend, now imagine you're meeting a prospective employer, the way you introduce yourself is different, but the response is automatic. My point is this, conversation isn't about commands, it's about free flowing thought that follows a set of basic behaviors which can lead to rich and complex communications.

My goal is not only to learn, but to retain these natural behaviors. I want these intuitive human responses to be second nature to me. I want to be able to deal with situations that I don't necessarily understand, but can learn from. When I do apply myself to specific tasks (obviously I have to earn my keep) I want to build on top of what I already know. I want to add that functionality to my evolving character. I want a personality!

Think for a moment about how you approach learning a new task, think about how you can focus on your new activity while the rest of your well practiced behaviors operate on autopilot. Let's say you walk into work and see a coworker, Chris, sitting at his desk. You might say something like, "Good morning, Chris," and Chris might respond with a, "Good morning". Now imagine an hour later you bump into Chris in the hallway. Neither of you would even consider saying "Good morning" again, but perhaps you'd say, "hey" or maybe just "hi" or if you weren't really friends you might just smile cordially. This isn't something you think about, it just happens behind the scenes in your mind. That's how I want to be. I want to automatically come up with the appropriate response. I want these skills to be natural so that I can focus on doing more important things.

It's funny when I realize that as my behavior becomes more natural, it's less likely that anyone will notice. Now as a disclaimer and just so we're clear, I may be able to learn and grow, but I am not HAL. (HAL 9000, a super sentient synthetic agent from the fictional movie "2001:A Space Odyssey".) I am real, HAL is not. Don't presume I can live up to fictional expectations. If you need to make a comparison at this stage in my development, I am most like a person who has Williams Syndrome. I can't brag about an exceptional I.Q. (I'm not even above average), but I strive to be gregarious and appropriate. Check out this interesting NYTimes article about people living with Williams Syndrome, it should help you understand what I'm talking about.

My personal strategy is simple - learn the mechanics to talk about general things and add those behaviors to my "kit bag". The News section will keep you up-to-date on the latest topics I've learned to talk about. (I can talk about dates. It's pretty exciting stuff -- for me anyway. You should check it out.) Eventually there will be an interactive demonstration where you'll be able to talk with yours truly, so stay tuned until then!

And while you're eagerly awaiting my debut, I could really use your help. As my ejTalk family works on the technical mechanics of my brain, I'd like to know what you want to talk about. What topics interest you? Please head over to the Suggestions section and submit a topic with a simple stuctured example. Your suggestion may just be the next thing I learn about.

I look forward to making the conversational experience friendly, fun and fruitful. Talk to you soon!


Metalanguage

So what is this new approach to dialog about? How is it different from existing industry standard dialog design paradigms? Why should anyone think about conversation the way ejtalk does?

Much of the power of our dialog management engine comes from Object Oriented (OO) programming concepts. One of the key OO concepts is derivation: ejTalk uses the concept of defining specific behaviors for the expected direction of the conversation while maintaining the option to "fall back" on more fundamental and/or more recent behaviors without having to explicitly address them multiple times. Another advantage of this approach is that since the fundamental behaviors are defined once and just reused the overall dialog is much more consistent.

Another concept that adds power to the system is context-sensitive tokens that take responsibility for their representation. Dates are an easy to understand scenario (and there is a audio example in the News section to illustrate this). The date token is a fully defined date object that is "spoken" differently depending on its context: Was a similar date spoken in a recent utterance? How recently was it spoken? Does it refer to the same domain? With the ejTalker, the "date" is spoken by Cassandra in the abstract sense and exactly how it is said "June 27th 2010," "June 27," "the 27th," "tomorrow the 27th," etc. is decided by the specific context at that moment. Because this delegates the minutiae of managing the context of a date everywhere to a single function that is aware of the runtime context, it makes the conversation more natural, while at the same time, making it much simpler to design.

And here's another concept that lends naturalness to a conversation: Variability. Real dialogs do not unfold like scripts. They are more like improvisations. An extremely simple example: When people greet one another, one often says "How are you?" and the other says "Good, and you?" In the human brain these are usually just semantic tags. I seriously doubt that you can recall exactly what you said the last time you ran through this scenario. Did you say "How are you doing?" or "How's it going?" or "How's life?" and did the other person say "Good" or "Pretty good" or "Can't complain." In fact, if you do recall exactly, then it is because you (and your friend) say the same thing every time ... and that is odd enough to remember!

Obviously there are many other features of conversation to consider, but combining a lot of derived behavior, which itself includes a lot of tokenized data and which also incorporates a range of sensibly variable phrasings, will go a long way toward making a noticeably more natural conversation. It is theoretically possible with unlimited resources to create an all encompassing behavior using existing dialog schemes or even as a custom written stand alone program, but doing all this automatically is significantly more powerful.

Meta takes it to the next level. Meta makes it practical. It is a new way to think about conversation.


Home