Original Post
Hello,
My name is Jacco Bikker, I'm pretty new to this forum. I am the author of WinAlice, a C++ version of Dr. Wallace's 'ALICE', with various extensions, such as moods.
Usually I'm busy with mobile games and 3D stuff, but every now and then I want to create a virtual companion, or electronic offspring, or whatever, you know what I mean.
My latest piece of software is an interpreter based on ideas used in ALICE: I believe natural language is merely a way to communicate, it encapsulates information in a way that is compatible with human means of data transport (esp. voice) while at the same time it's (almost) versatile enough to represent the thoughts that humans want to transfer. In this picture, language itself has nothing to do with intelligence, it merely is a link between two intelligent beings. The link itself can probably be simulated by a machine. This would open up the possibility of communication between a man and a machine, in a way that is most natural to the human.
So I have been focussing at extracting information from language. My most recent attempt uses patterns and templates, like ALICE: Patterns to classify input sentences, templates to generate replies. ALICE uses wildcards, like DOS: * and ? for multiple or single characters. My pattern matcher uses much more complex syntax: Multiple wildcards can be used, optional parts, and selections, as well as if statements and variables (both regular and stacks). The template processor is even more versatile and supports reprocessing of (parts of) the input sentence, based on variables etcetera. It can even handle loops this way.
So now I have this cool interpreter (I'll gladly post more detailed info if anyone cares, I'm even willing to share the source code), but I need a goal for it. I found that ALICE is ultimately a toy, as it does not persue any other goal than entertaining the user, or avoiding being detected as a artificial entity. Yesterday I found the goal.
It's natural for a new being to be curious. So I want to make a curious entity. I want the software to check input sentences for words that it doesn't know yet, and I want it to ask questions about them. Things require definitions, actions require 'why' questions. I think a bot asking lots of questions would already be a huge improvement over the current situation, but it might get a bit too much, so I would also like the bot to look for information online: It could look up information using google, scan acquired text for more facts, and so on. The text it finds could very well contain things that it doesn't understand, and taht way, talking about a car one day could result in a question about airbags the next day.
Of course it needs to store all this information. I would like to store information using a 'mind map'; every item would have links to an arbitrary number of other items. Every link is a relation of a certain type: 'has a', 'is a', 'knows' and so on. A relation can be unidirectional or bidirectional. A relation can have a weight. An item should have extra data attached too: The number of times the user used the data in the item, the source of the data in the item, the thrustworthyness of the data in the item and so on. This way, looking for new answers can start at items that are interesting, but not yet clear.
Well that was a big rant.
I'm quite enthousiastic about the idea myself, but I would like to hear opinions: Am I mentioning things that can't be done, do you have interesting additions?
Right now, I have the pattern matcher, but that's it. I don't have the time to generate the 10.000 patterns for it that it probably needs for decent chatter, like ALICE. I think I found a good substitite for it, as the bot I just described would require relatively few patterns.
OK, fire away.
- Jacco (a.k.a. "The Phantom").
[edited by - phantomus on March 10, 2004 3:38:35 PM]
<- Cow Soft, free software I''ve made