Though finite state machines can work for simple dialogue structures, more complex dialogues generated by them will come across as robotic.
For non-naive implementations you'll have to learn about a linguistics discipline called pragmatics, which deals with conversational semantics and context:
Me too I just discovered Chris Messina's definition of "conversational commerce", definition that I like.
About "personality":
Maybe some years ago we have called this just "user profiling".
In facts approach I suggested (modeling dialogs as a composition of state machines: http://www.github.com/solyaris/dialogs) is just a workflow framework indipendent by the personality/profiling implemenentation.
- On one side personality/profiling could be delegated to to some "inerithed class" (of what I defined as "elemental" dialogs).
- on the other side I'd delegate in the "interpret" method.
Let's consider the usual ecommerce workflow. This could be splitted in 2/3 successive dialogs:
1. compiling a shopping cart - dialog
2. setting the delivery address - dialog
3. setting the delivery time - dialog
So, by example, in the delivery address dialog, the chat bot (or "conversational agent") know the buyer person interacting (because he stored somewhere the buyer address in a previous "profiling" dialog ), so the chatbot could simply propose to use the stored address or submitting a new one.
Just to say, that, for business workflow, maybe the "personality" maybe is just a smart profiling.
isn't it ?
thank for your links!
generally speaking, I can't agree with your first statement :) and I anticipated my ignorance in linguistic topics :)
I'll investigate and study to understand about "pragmatic" and semantic understanding; thanks.
But let me do some more notes:
1. my raugh and crippled code proposal at http://www.github.com/solyaris/dialogs is to consider a "framework" where dialog are composed/nested as "elemental dialogs" (archetypes or "abstract classes") to be instantiated as subclasses, and of course there is not a real NLP.
The semantic understanding is "delegated" to an external engine (see the interpret() method).
2. In my modest opinion the BIG trade off is between a system that really do a semantic interpretation and a system tha quickly supply a service to a user (buyer) in a DETERMINISTIC/fast workflow.
Please let consider the usual example I propose: an ecommerce shopping: I call this a bussines service, that "have to" bring user to purchase something as goal, "as talking by phone" with the buyer (BTW I worked a bit on a proximity ecommerce project http://www.rosposhop.com, where buyer and seller live in the same area and know each other personally).
So the state-machines composistion I proposed is maybe naif but focus on a deterministic workflow, to achive some business goal/task.
To be pragmaticals:
There is some (open-source) NLP to already done to realize a "simple" task as a "ecommerce" text conversation" ?
I'm looking forward for it :)
There is a whole pile of interesting posts around building conversational services/bots.
Some interesting ones:
Sam Lessin: https://t.co/0ZFlBGPqpg Chris Messina: https://medium.com/@chrismessina/2016-will-be-the-year-of-co...
Matt Galligan: https://medium.com/@mg/the-graphical-user-interface-will-soo...
Clement Vouillon: https://medium.com/point-nine-news/software-bots-c56aeedcfec...
Ryan Block: https://medium.com/@ryan/bots-messaging-and-the-interface-vi...
I've also written a bunch of articles on how we tackle some of these problems at Converse AI here:
http://blog.converse.ai/introduction/an-introduction-to-conv...