• Announcements

Archived

This topic is now archived and is closed to further replies.

Conversational AI

48 posts in this topic

0

Share on other sites
www.bik5.com/winalice.htm
It's my best shot at conversational AI yet.

[edited by - phantomus on March 10, 2004 3:34:04 PM]
0

Share on other sites
Am I being really stupid or is the thing you want to impliment a neural network - I suggest you look into them!
0

Share on other sites
No definitely not. Basically I want to create software that gathers definitions of things (how''s that called in english?) and other relations. It does so by detecting undefined words in user input, and actively asking about these words. Besides that, it does autonomous research by looking up these words on the internet. I intend to abuse Google for this, and I expect that Google will serve my software with rather large texts. These texts can be scanned using the same pattern matching to find more things that need definitions. The cool thing is that these things will usually be related to the original item.

The ideal role of the user in this process is that of a ''mentor'': The user answers questions that Google can''t answer, and affirms found data. In return, the user has a sensible conversation with a very curious entity. The conversation will be different every day, and it won''t be limited to a build-in dataset.
0

Share on other sites
Visit

http://www.20q.net/

I''m not sure if this is the idea you were thinking of. This keeps relationships about things. Kind of neat.

Will
0

Share on other sites
Interesting. It seems to me that the biggest difficulty here will be organizing the data, though I can''t really help

<- Cow Soft, free software I''ve made
"Gay marriage will encourage people to be gay, in the same way that hanging around tall people will make you tall." - Grizwald
0

Share on other sites
You might want to look into semantic nets. They''re basically a graph which defines relationships between different words to allow the AI to make connections between different objects.

James
0

Share on other sites
Is this not just a roundabout way of getting the user to generate the patterns instead of the programmers? The more users would equal more realistic chatter?

"definitions of things " -> facts?
0

Share on other sites
Hi, Jacco.
My name is Marco, I´m from Brazil and I always think that Alice sucks. A "entity" that does not have inteligence, have no future.
I think that Artificial Inteligence is possible. And I mean INTELIGENCE, with real learning... Not that minimal "inteligence" we put in our simple games.
I dreammed, for a while, to make a chatbot really smart. So I start to think and write down a document. When I realize that it could be a life-time project, I gave a break. I have some ideas, and I think that many of them matches with yours.
I will re-open this document and discuss some point, specially the way of making data storage. For now I just like to register my interest.
Marco.
0

Share on other sites
a-i.com have some nice things going on

[edited by - Jolle on March 10, 2004 5:22:54 PM]
0

Share on other sites
Actually, there is a reason that ALICE doesnt ask a lot of questions of the end user that immediately has any effect on its own personaity, or whatever. This is because as soon as a user finds out that they are talking to a bot, they tend to feed it garbage to see how it responds. It would take an extremely advanced bot to handle user input in that way without becoming worthless as an entity by devouring massive amounts of nonsense. You would probably have to have the bot ''test'' the user for truthfulness by occasionally asking questions that it knows the answer to, and/or applying varying degrees of certainty to answers, by asking the same question of multiple users.

Experienced ALICE botmasters take a different route. Since you know you can''t rely on the accuracy of user-level input, ALICE collects previously unknown information and stores it in a ''targetting'' database. Most information gleamed is only immediately represented in conversations with the user that provided the input. Then in a private targetting session with the botmaster, ALICE presents the information to the botmaster, and the botmaster provides appropriate responses or symbolic reductions, which are then integrated into the global knowledge base that is interfaced by all users. This helps keep information relatively accurate, and tuned to the overall personality of the bot.

Many of the same pitfalls apply to using Google. On an average query, you will get a handful of results that are relative to what you are searching for, and several thousand or million results that have absolutely nothing to do with it, or distort acceptable definitions immensely.

Having been down that particular road, I would personally suggest that you use more focused and targetted resources. Instead of using Google, use WordNet/Webster/OED dictionary databases, thesaurus, almanacs, etc. Choose resources that keep information in a uniformly structured way, and ones that are acceptably accurate. One thing that I did with my foray into extending ALICE was to interface her with the CIA World Factbook. Granted that is not a 100% reliable source, it is reasonably accurate and covers a wide range of information about countries in a well structured format.

But generally speaking, it is my experience and that of many others that releasing a bot to learn from end users that are not bound to conversational rules requires a bot that is exceptionally advanced, and very well learned on distinguishing human concepts and demeanor (determining if something said is meant to be serious, or taken in jest, etc).

There are also a lot of legal ramifications if the information the bot learns from one user is to be shared with others. There have been cases where people have used publicly accessible chatbots to store and retrieve stolen credit card numbers, and things like that. Liability of botmasters for information dispersed by their bots is a pretty grey area in most countries, so it is something you definitely want to keep in mind.

At first you would probably want to limit it''s ''learning'' to a core set of users that you know you can trust to provide meaningful, accurate, and legal input.

Just some thoughts.

Peace
0

Share on other sites
quote:
Original post by Jolle
a-i.com have some nice things going on

[edited by - Jolle on March 10, 2004 5:22:54 PM]

Alan is evil. Particularly because my own beautiful bot gets confused whenever talking to Alan.

<- Cow Soft, free software I''ve made
"Gay marriage will encourage people to be gay, in the same way that hanging around tall people will make you tall." - Grizwald
0

Share on other sites
BTW, nice interface. I like the ''human typing''.

The AIML set in that download is missing the default category though, and any otherwise unmatched input crashes the program. (Saying ''duh'' for instance). If I add the default category to Defaults.aiml it works fine, with the little added quirps about making typos.

Peace
0

Share on other sites
RPGeezus: 20Q is interesting. Correct me if I''m wrong, but it looks like an expert system. By letting tons of people play it, it gathers knowledge. Making it successfull is probably a marketing issue though.

I want to make my software different in a couple of ways: 1. It should learn not just things (WorldLingo suggests the English word ''pronoun'', is that correct?) and their descriptions / abstractions, but also other relations: A monkey eats banana''s, this links monkeys and banana''s through the verb (WordLingo again) ''eating''. This should make the program ask "WHY does a monkey eat banana''s?" and: "What is a banana?", if it''s not yet in the vocabulary. Same for monkey. When it scans Google for the word ''Monkey'', it will probably find a document that describes their habitat, so a future question might be: "What is Africa?", and when you answer: "A country", it might reply with "Just like Holland?", while linking Africa to Holland and to the abstraction "country". I believe this goes beyond a normal expert system. It would allow for queries like "are banana''s and Holland related?", the answer would be: "Vaguely; Holland is a country, and Africa is a country, monkeys live in Africa and monkeys eat banana''s". Now that would be seriously cool, especially when it starts using links that you didn''t enter yourself.

cowsarenotevil: You are quite right, there''s going to be a ton of data, and it need to be accessed pretty quickly. I have help from an SQL guru, so that could improve things a bit. So far I use plain text files for the pattern code, and plain text files for vocabularies (used for the spellchecker at the moment). The new information records need a lot of info, so text files would not work anymore.

Marco: I''m very interested in your input. Tell me more.

Jack Sotac: No, it''s not just a way to generate patterns automatically, or by chatting. My primary goal is to make an entity with a purpose. I believe THAT is what should separate it from ALICE and all the other bots out there. It would also be the only type of chatbot that I would consider more than just a toy.

Krippy2k: Thanks for your suggestions. I think you are right that the bot should use thrusted sources. I want to tag gathered information with a figure indicating thrustworthyness; I would consider information from a mentor (known human) thrustworthy; WordNet/CIA/whatever quite thrustworthy; Google would require confirmation from the mentor before information is accepted. However, even bad information can lead to interesting new questions.

I do not intend to let the bot loose on the general public by the way. Initially, the bot will run on my machine, and gather information to a local database. If someone else runs the bot too, there will be a second local database. I imagine that I could tell the bot to merge with a known thrustworthy friend at a specific IP; that would be an acceptable way of distributing the information gathering. The merge could lead to interesting questions as some information is bound to conflict.

- Jacco.

0

Share on other sites
I''ll try to fix the default pattern for WinAlice, thanks for the suggestion. It''s old dusty software, but I think it does a better job than ALICE. Did you encounter cases in wich it returns to a previous topic? I''m particularly proud of that mechanism. It''s still a hiding tactic though.
0

Share on other sites
Ok, lets have a sample of my thoughts :
The general idea is to create a chatbot that can respond to inputs, answering questions or formulating its own questions. It would also work on its datas, to generate new datas (logical conclusions). In a second step, i would like to give the bot some variations that could work like emotions. All the project is a great challenge, but this second step is really too big.

To do that I think in "Cells of Information" (or just CI´s). A CI could be a word, or a group of words, but it must have a meaning. A CI is nothing alone, but it have lots of links with others CI´s, what make the all thing work (I hope). A link could be weak or strong, and could be more or less truthfulness. Strong links make the bot reminds the CI´s linked, when some CI is activeted, in the other hand, a truth link is just more reliable. A weak link could be a a link between a knife and a cat, but this link will have high truthfulness if the link is of type of "smaller then" (just an example link).

A CI could also be represented in various languages. A language is also a CI.
Another specials CI´s is the "sources of informations" (or SI). Human is a SI. Knife its not. Babysitter is a SI. The bot must discover what CI could be a bot and what cannot, so give then crediability, in a specific matter.

I think also in algorithms to give life to all this storage data, like "expression making", "generalization", "reprocess of truthfulness", and others.

I´m not explaning all the things I´d wondered. And all the things that I´d wondered is far away from the necessary to make the bot. But I truly believes that I´m on the way. So you are. But... will we stay on the way or reach the goal some day ?

Finishing, if you didnt understand something, it could also be a reflex of my "poor english", so forgive me.

What do you think ?

0

Share on other sites
By the way, the last post was mine...
Marco.
0

Share on other sites
Try read Russell and Norvig, "Artificial Intellingence".
Ciao
0

Share on other sites
Jacco, I was a user of your EasyCE, and I still play with AliCE once in a while, I learned a lot studying the source.

I''ve often thought about having a conversation agent that "learned" rather than having hardcoded knowledge. The biggest problem with Alice is that it never retained knowledge. Your technique of jumping back to a previous topic was good, and made for some interesting conversations. But repeated or lengthy conversations could be frustrating since Alice wouldn''t remember information you had provided.

I like your idea of having a weighted network. I think about how my son is learning (2 years old). He sometimes asks what something is, but more often is just given information. He receives positive and feedback when he repeats correct information, and negative feedback when he states misinformation. Over time, he builds up associations with objects in his world and words and associations. If he gets positive feedback from multiple trusted sources (parents) he picks up new information faster than if he receives conflicting feedback, or feedback from only untrusted sources (television, people he doesn''t know, etc.)

So, I thought about having an agent that "knows" nothing, except how to parse a sentence, and ask simple questions. The very first conversation might look like this:

Human: Hello
Agent: What is ''Hello''?
Human: Hello is a greeting.
Agent: What is a ''greeting''?

Over time, and many conversations, the agent might learn something. The problem I ran into is at some point an basic set of knowledge needs to be available to the agent just to be able to parse the language. And some concepts are difficult to explain in a format the agent can parse and store in the network.

Anyway, those are some initial thoughts. Sorry for the length of the post. Good luck, I look forward to hearing more about it.

Geoff

It''''s a simple choice, really. Get busy livin'''' or get busy dyin''''.
0

Share on other sites
As far as I can see, Marco, Geoff and I are describing more or less the same data structure. I believe it''s the same way that Cyc is storing data (check www.opencyc.org), wich is basically a database of concepts and relations between the concepts. By adding things like thrustworthyness of data the data can be gathered from both ''secure'' sources and ''insecure'' sources.

I believe storing data this way is quite natural, it almost looks like a neural network (so it''s probably good ). The system will probably even ''forget'' data, if there are only a few links to other items, just like our own memory does. Perhaps data could even age.

So the problem is, how do I (we?) fill this database? I believe Cyc is fed with data without using natural language, but I think in this case, the system should be fed data using ''normal'' conversations.

This indeed requires basic knowledge to extract data from input. Basically, we need to be able to do proper ''part of speech'' tagging. I did some research, and it looks like the best English part of speech taggers still can''t do much better than 75%, wich could mean that the software would regulary ask about a noun that is actually a verb.

I think this problem can be circumvented by initially limiting the number of ''correct sentences''; instead of allowing some random conversation from wich the software extracts new data, a fixed set of sentences could be used. This makes the conversation less interesting, obviously, but over time, the patterns can be made more generic. But the software will be learning much earlier than that. Things like learning through the internet could be added at an even later stage. The limited set of patterns probably wouldn''t even need part of speech tagging, while more generic conversation handling requires even more complex algorithms, like anaphora resolution.

Basic patterns:

''a(n) * is a(n) *'' (a dog is an animal ==> DOG = ANIMAL)
''what is a(n) *?'' (what is a dog?)
''is a(n) * a(n) *?'' (is a dog an animal?)

''* [verb] *'' (cats eat mice ==> CAT EAT MICE)
(where [verb] is a build-in list of verbs, or something more intelligent)

I think this could lead to some results pretty quickly.

- Jacco.

0

Share on other sites
Here's a sketch of the memory class definition:

class CI{public:   enum   {      NOUN = 1,      PERSON,      COMPANY,      CITY,      COUNTRY   };protected:   char* m_Name;   int m_Type;   Link** m_Link;   int m_NrLinks;   int m_Credibility;   int m_Interest;   Date m_Creation;   char* m_Source;};

I believe this can store pretty much anything you might want to know about a piece of information at a later time. Some notes: Obviously, for names I could simply link all names to an CI labeled 'name', but that might be a bit impractical, so I think it's more efficient to store the type of common things like persons, companies etc in the m_Type field for fast lookup. Maybe it's too early for optimizations and special cases, but I couldn't resist.

Source is a string describing the source of information. This can be an IP address for merged data, a user name for locally acquired data, or a http link for online gathered info.

Here's a sketch of the Link class:

class Link{public:   enum   {       IS = 1,       HAS,       WANTS,       NEEDS,       KNOWS,       IS_RELATED_TO,       BIDIRECTIONAL = 1024   };protected:   char* m_Description;   CI* m_CI;   int m_Type;   int m_Strength;   Date m_Creation;};

The link can be made bidirectional by OR'ing in the 'BIDIRECTIONAL' flag. There will be probably more types needed, but there's always the generic relation 'IS_RELATED_TO'. The m_Description field is used for 'why' questions, but it will often be NULL. It can be filled when the user enters something like: 'The monkey eats a nut because he is hungry', 'because he is hungry' would be stored in the unidirectional 'IS_RELATED_TO' link between monkey and nut. If the user would just have said 'The monkey eats a nut', the same information could have been acquired using a 'why?' question.

I'm still brainstorming, so if you have suggestions, let me know.

O and Marco, I stole your CI thing.

- Jacco.

[edited by - phantomus on March 13, 2004 3:56:53 AM]
0

Share on other sites
It seems to be turning into something like BrainHat. Check it out if you haven't. You might get more ideas. Remember to let it have cause and effect relations between concepts as well.

U: "Water freezes when it's cold" -> Cause:"Cold", Effect:"Freeze".
U: "Ice is frozen water"*1
U: "There's ice on the water"
B: "Oh, it's cold!"

See BrainHat for a VERY impressive example.

EDIT: *1 Forgot an assertion(?)

[edited by - frostburn on March 13, 2004 4:33:11 AM]
0

Share on other sites
Yes, that''s definitely very cool. Much better than what I''ve seen before. Initially, I was wondering why this didn''t win any Loebner contests, but that''s only logical: The thing reasons very well but the generated text is ''weird''.

The cause and effect stuff is very cool, I have to think a bit about that.

One thing I don''t understand: Why does BrainHat limit itself by demanding hierarchic structures?

And one other thing that BrainHat doesn''t seem to be able to cope with: Time. The plans I have so far can''t handle time either, but in our human brains, it mixes fine with all the other stuff. I wonder how one would handle that. Information like: ''Yesterday I saw the nice lady in church''. It would be nice if the program would be able to link time (yesterday) and the weekly interval (church) to a person (the nice lady), but I have no idea how that could be done.
0

Share on other sites
Hmm, this is exactly what I had in mind. Looks like someone was faster.
0

Share on other sites
This is an interesting thread. I''m currently involved in a project like this, which I''ll probably write more about and leave a link in a day or two. Nice work!
0