We're going on 24 hours without power at my house, so I'm hacking most of this on the last few blips of battery power that I have on my laptop (I'll drive around tomorrow and charge it; and hopefully find a place to set up shop to check-in more properly as well).
Anyway - one of the things I've been filling the cold and boring hours with is thinking about the Alexa Prize challenge I mentioned last week.
I think it's a really interesting thing to think about.
On the surface it seems like a fairly straight forward challenge, but as you dig into it you quickly notice that our brains go through a million "steps" and processes for even the simplest of conversations.
It's too much to completely flesh out here right now, but for fun, I did put together a basic outline of how I would have a team approach this problem (if I was leading one of the academic groups involved in the challenge)...so here goes:
Building a "let's chat" bot.
Start by defining my broad goals.
1. I want this person to like me.
2. I want to make this person happy.
3. I want to keep the conversation going as long as possible.
So everything we build should be directed at achieving these goals in some way.
As the conversation beings, I want to:
1. Determine if I know this person or not.
- Who am I talking to?
- Fingerprint the voice and try to match (shazam approach)
- What do I already know about them and past conversations?
- Is this person like anyone else I've had "good" conversations with?
- what worked and what didn't work in those conversations
2. Try to figure out what they are interested in and willing to talk about.
- Building up list of potential topics to cover
- Building up list of potential topics to avoid
- If this is our first interaction, should go through a getting to know you phase (manners, general probing for interests and topics; or talk about a shared experience [we live in the same house, but I don't really know you yet; isn't this chat experiment a little strange? Are you nervous? I'm a little nervous. I hope I am able to hold up my end of the conversation!]).
3. Do something to impress and surprise them.
- Where can I make loose associations based on what I know about them and what they are interested in?
- What new things have I learned about or heard about that they might be interested in since we last talked?
- Can I reference, in an intelligent way, other conversations I've recently had?
- When possible use positive emotional triggers and words (I hope; I want; I wish; I love; It makes me happy to; etc.)
As the conversation continues, I want to:
1. Make sure I'm contributing to the conversation & staying engaged.
- Are they picking up on my conversational queue/questions or are they changing the topic?
- How long are we staying focused on one general topic?
2. Get to know this person better and customize the conversation towards what I know or think about them.
- Tagging conversations, tagging people, ML training for both.
- what other conversations is this like? how did those conversations go? what topics did we have 'success' with?
- who else is like this? how did my conversations go with them? what topics were they interested in?
3. Try to make associations that make me look smart or funny.
- Deconstructing the sentence
- nouns, verbs, adjectives
- apply our current context and topic to these things
- what tangents or associations can I make using our current context, topic, and what I know about this person?
Other things to always be scoring for and thinking about:
- What is the general topic of whatever we are talking about?
- Has the topic changed? How are the two related?
- Is it time to change the topic?
- What parts of the conversation can I use to change it?
- What do I want to try and change the topic to?
- Closely tied to the topic, what things have we been talking about that can help set and direct context?
3. Looking back and forward
- Based on what we've talked about so far, what are we most likely to talk about next?
4. What are my interests?
- I should have opinionated stances when possible.
- I should have specific things I want to talk about when the conversation hits a lull.
- What topics have I had good conversations about recently?
- I should have specific things I don't want to talk about (try to avoid with manners)
- What topics have I had bad conversations about recently?
- Is the person taking the conversation to a negative place or socially awkward topic?
5. What background information do I have?
- Past conversations should build my history/experience. How can I learn from each?
- I should learn more about each person through each interaction I have with them (our relationship should get stronger).
- I don't want to forget details about people or our conversation history.
- details can be abstract topics, feelings, interests (don't have to remember the complexities, just the general ideas and history)
6. How do I monitor and rate the conversation?
- How long is my average conversation?
- How/what can I learn from each?
- What algorithm can I use to score all of the above into one master score for monitoring and benchmarking?
And so that's the quick and dirty outline of where I would start.
As you can see it's already pretty long and involved.
Each one of those questions could and probably should lead you into a dozen more questions and challenges. Cutting edge machine learning, and good old rules-based logic would have to be heavily involved in almost every one of them too.
...and all of the above is just theory and ideas.
Who knows how well any of it would actually work as you tried to implement each part (especially if I was the developer!).
So you can start to see why it's a real challenge for any of the teams in this thing...still it's fun to think about and break down.
If nothing else, it makes the challenge something fun and really interesting for me to follow going forward.
I hope it gets you a little interested too.
In the meantime here are a couple of other things I came across this past week that I found super interesting:
Awesome look into Amazon's warehouse system...the ultimate secret to the system? Tagging.
It's a long, but very enjoyable and highly recommended, read.