Hi all! author here.
It make sense to implement chatbots dialogs where each dialog is implemented as a finite state machine ? Good idea or a naif-robotic approach ?
BTW, please consider: 1:https://github.com/solyaris/dialogs as a VERY VERY DRAFT / proof-of-concept 2:I'm a bad (Ruby) programmer. 3:I'm not a NLP expert. 4:please tolerate my long story/bad English.
Contributes/Collabroations on the open source project, are very welcome: a:comment here. b:email me (prefereed at first glance. giorgio.robino@gmail.com). c:open issues on github (perfect for share nd persistence).
years ago I studied a bit AIML and also recently I see that Ruby language implementation is a bit obsolete.
My feeling is that AIML are not maintained / growing, but the principal point I a bit discarderd AIML is that it seems to me not faiseable to do a "deterministic" workflow (just let consider the e-commerce purchasing workflow I described in my project http://www.github.com/solyaris/dialogs)
That's an AIML alternative that seems a bit better (no XML!), but I do not yet understood if I can do with rivescript a "simple" ecommerce "script" worflow I explained in my comments and on the github doc. I have to investigate.
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 :)
BTW, please consider: 1:https://github.com/solyaris/dialogs as a VERY VERY DRAFT / proof-of-concept 2:I'm a bad (Ruby) programmer. 3:I'm not a NLP expert. 4:please tolerate my long story/bad English.
Contributes/Collabroations on the open source project, are very welcome: a:comment here. b:email me (prefereed at first glance. giorgio.robino@gmail.com). c:open issues on github (perfect for share nd persistence).
Have a good reading. Thanks. giorgio http://www.twitter.com/solyarisoftware