Hello everyone! And Good morning!
I’m actually researching on Chatterbots for my Master’s Degree and I was considering the options that I have available.
Naturally, AIML jumped out on the web searches, but I’m not sure this is the best option (and I’ll tell why later on this Topic).
First of all, let me explain a little about that Project:
Start of “the Project”
My field of study is the use of Computers in Education. Therefore, I’m interested in the development of a Chatterbot for Educational Purposes.
The main idea is that the user will be able to “TEACH” something to the bot.
There is no defined subject. The important part is that the user will set the theme.
The more complex and specialized that explanation is, more the bot will “understand”.
The bot will create a Knowledge Base with the explained subject, will convert it to a Predicate Logic and will update his Knowledge Base with the explained Propositions AND the Propositions that can be inferred using Predicate Logic.
With this project, I’m aiming the creation of a chatterbot that allows the user to explain his ideas and thought about anything, while the bot can help with his Construction of Knowledge, inferring new Propositions, questioning the Propositions said by the user and even linking URL from Articles about that theme, helping to direct the users studies.
The bot’s Knowledge (and therefore the AIML file) will be “blank” at start (not exatcly blank, but It won’t have useful information about the theme because… well, the bot don’t know the theme yet). The user will set the theme and will explain it. This way, I’ll need to “re-write” and reload the AIML file each and every interaction from my user.
A really simple example:
Let’s consider the user just started the chat:
-> User said: Can you tell me what are Rocks?
-> Bot: I don’t know that yet! What can you tell me about Rocks?
-> User said: Rocks are Human Beings.
-> Bot: Ok, I understood that! What can you tell me about Human Beings, then?
The bot is unnable to question the clearly wrong proposition, because he knows nothing of Rocks, nor Human Beings.
Let’s consider this:
-> User said: Can you tell me what are Rocks?
-> Bot said: I know that Rocks are Human Beings.
Now the bot knows that new concept. If I want to use AIML, I’ll need to understand the predicate logic (rocks—- ARE—> human beings) and I’ll need to create a new “category” tag on my AIML file and then reload it. If I don’t reload it, the bot will say “I don’t know that yet! What can you tell me about Rocks?”, since the file isn’t updated with the new proposition.
One last example, considering the User just started the chat:
-> User said: Can you tell me what are Rocks?
-> Bot: I don’t know that yet! What can you tell me about Rocks?
-> User said: Rocks are Human Beings.
-> Bot: Ok, I understood that! What can you tell me about Human Beings, then?
-> User said: Human Beings need to breath.
-> Bot: Ok, I understood that! What else do you know about Human Beings?
-> User said: Rocks can’t breath.
-> Bot: Ok, I understood that! What else do you know about Rocks?
-> User said: Can you tell me what are Rocks?
-> Bot: I know that Rocks can’t breathe! Can you tell me anything else?
-> User said: Rocks are Human Beings?
-> Bot said: No, they aren’t. You said that Human Beings need to breath, but Rocks can’t do it.
The user explained the opposite to the bot, but using Predicate Logic, the bot inferred that the user was wrong.
This may look simple now, with an empty Knowledge Base and simple “‘SOMETHING’ is ‘OTHER THING’” phrases, but this bot can become really smart with usage. The more you detail, the more complex the bot’s logic will become. As soon as he learns about one topic, he can even correct the user when he says something wrong, since his Knowledge Base will be kept. If another user start that bot now, It will already know about Rocks and Human Beings. You don’t need to teach him again.
Another important concept is the Backtracking. The bot not only told the user was wrong, but explained how he reached that conclusion. This is important to help the user. Only saying he is wrong (and not telling why) can be as much of a problem as not correcting him at all.
I’ll create another module where the bot will search for Cientific Articles to suggest. For example, instead of just saying that he was wrong (about Rocks being Human Beings), It can suggest a Cientific Article about the definition of Human Beings. This will certainly be helpful if the user is questioning If “THINGS” are Human Beings.
End of “the Project”
Ok. If you read everything, you’ve already understood the project, so I can ask:
Is AIML a good option for that project?
As you’ve seen, for each and every human interaction, I’ll need to:
1) Process the input
2) Transform the input into predicate logic and save it
3) Create a “category” tag on my AIML file, with the pattern typed and the template found (or inferred)
4) Reload the AIML file
5) Answer to the User
Not to mention that I’ll search for Articles on the Web (probably I’ll use Google Scholar Parser).
I know that I can load the AIML files multiple times, but that delay will be at least acceptable, considering it will happen EVERYTIME you type something?
Anyone that have enough experience can give me any advice about this?
If you don’t think AIML will be a good choice, can you suggest other options (and tell me why you’ve chosen it), please?
Thanks a lot for your time and help!
Best regards,
Bruno Gutierrez Ratto Clemente.