Advertisement

Creating A Conscious entity

Started by October 23, 2004 04:01 AM
130 comments, last by Nice Coder 19 years, 7 months ago
What you want is nonambiguous information that is easy to reason with. The simplest way to do this apart from inventing your own language is probably to use some sort of formal logic. This you could implement on two levels:

Either just go with english, write a (for example categorial grammar, very good for grammatically correct input, bad for parts of speech) parser and combine it with a semantics (2nd order logic or something like that) linked to the parser.

Or just go with 2nd order logic right from the start.

Ofcourse an indefeasible logic which considers only truths and falsehoods (1's and 0's) may just not cut it. In that case consider using a nonmonotonic logic which can reconsider earlier "knowledge" and possibly include stochastics (probabilities of something being true, instead of absolutes).

Because we are talking an "intelligent" entity here, we probably want to include knowledge and belief (modal logic) and possibly desires and intentions (See for example Cohen & Levesque, 1990? or Rao & Georgeff, 19??).

What you need to realise is that you are going to need a whole lot of specialistic techniques to implement good models of knowledge and reasoning, language, or anything really, so you better try to do catch up with recent scientific papers on the subject, at least that's what I'd do.
Quote: Original post by Madster
Eh... well here we go =) this is such a controversial topic
now the rebuttals:
Quote: Contradiction. How can we know if a system is intelligent without a formal description of what intelligent is?

and then:
Quote:
Example: your average four-year-old has an abstract concept of natural numbers. (S)he knows what 'three apples' means and can easily extend this concept to any concrete (like other objects) and abstract (like hours/days or the number of times a specific action is performed) entities without the need of a (formal) definition.

This is a contradiction. Remember most of the time the practice comes before the theory (like you just said). So, we're trying practical ideas.

Out of context - your parser is broken [wink] - the first refers to 'intelligence' while the second refers to an abstract concept (numbers) that is to be stored and interpreted without a formal system. Just because you read 'formal definition' you will need to put it into context. This is exactly what intelligent behavior is all about - context. Applying information in a specified context [smile]. How exactly this is done is another question and indeed requires scientific methods. The main difference between my natural number example and your 'practical way' is that my example requires a fully functional AI device (or program if you will), while your 'practice before theory' wants to create such thing without theory behind it.
Parsing and defining any kind of lanuage requires language and linguistic theory (maybe some pychology of perception). To define rules and semantic networks you need to know the algorithms and their limits. The list goes on.

Chatbots like Alice have very nice parsing engines. Look into these. Data mining provides ideas and implementations of knowlegde representation and -mining. Use these and combine with a parser. You might end up with a kb query system that uses natural language for in- and output. Next combine this system with the concepts of the GPS and derivates thereof - you should get a learning system that is able to acquire and reproduce knowlegde as well as solving problems - the Turing Award would be yours for sure.

If you finally add some concepts of modelling emotion and motivation (look into research on autonomous agents for more information) you *should* get what you are aiming for. I don't know if there are any research groups currently working on that, but I am sure that this task cannot be completed by a single person. We should form a group. I'd be glad to put some of my time and knowlegde into this. I was involved in an EU sponsored project that dealt with a fraework for autonomous intelligent agents (clicky) and know a little about some the aspects (esp. data-mining, rule-based programming and formalisms).

OT:
About A.L.I.C.E - the AIML is connected to a system that allows for learning new patterns and putting them into a context (again stored in AIML, which of course forms the limit of learning, e.g. no 2nd order logic machine attached).

Same goes for SHDRLU and similar. The systems can learn. They all have the same mechanisms built in that are used in knowlegde and data mining (at least rudimentary - remember that these programs are 3 to 4 decades old and very limited in their context [world]). Also you seem to over-estimate the parsing thing. Parsing is only necessary to communicate with the backend - like your brain does during language processing. While the human brain is a multi-interface device that handles tactile, visual, phonetic and emotional [internal] input, programs are limited in their communication interface. Written language is so much easier to process that it is just the best suited interface between man and machine (by now, at least).

I also think it's important to remember that language itself is much more than just parsing grammar. For a human speaker, most words are connected with some kind of meaning. The difference between Alice and SHDRLU is that SHDRLU knows the meaning of what it says and what the user requested. The program is able to prescind from parsed keywords to internal concepts of its (very small) world.

Nice discussion,
Pat.
Advertisement
Nice discussion indeed, darookie. I see now that most approaches are different. I can't work on this until i'm on vacation, and when i do start i need to get some foundation work done first, like sparse matrixes and maybe a simple knowledge model API to try different approaches quickly. While its unlikely that a group could be formed for the looks of the different approaches, i'd gladly go somewhere to share ideas and advances... and more importantly, logs!

Quote: Original post by Horizon
What you want is nonambiguous information that is easy to reason with. The simplest way to do this apart from inventing your own language is probably to use some sort of formal logic.

Yup. A statistical AI is hard to get exact information out of, and also needs extensive training. For math you'd have to put it trough some years of school =)
And it would still babble a lot and make people around it uncomfortable, as usual for this kind of AI.

Quote: Original post by darookie
Out of context - your parser is broken [wink] - the first refers to 'intelligence' while the second refers to an abstract concept (numbers) that is to be stored and interpreted without a formal system.

this is what i meant. You still regard the child as intelligent even if he knows no formal definition of numbers. Some domestic animals can count to two or three (try feeding one 2 cups and th e other 3 while delivering the same total amount. They'll notice.), so by extension an AI doesn't need formal definitions of concepts to be intelligent.

btw its interesting you brought up the scientific method. We're at the hipothesys (mispelled?) stage here. When one is happy with the hipotesys one should go and try to prove it. If it turns out it was untrue, one can modify the hipothesys and give it another go. Being scientific doesn't mean one has to be sure that something is going to work before attempting it.

Quote:
Parsing and defining any kind of lanuage requires language and linguistic theory (maybe some pychology of perception). To define rules and semantic networks you need to know the algorithms and their limits. The list goes on.

And there's the main issue. Im not taking the parser road, so the reasoning doesn't apply.

Quote:
OT:
About A.L.I.C.E - the AIML is connected to a system that allows for learning new patterns and putting them into a context (again stored in AIML, which of course forms the limit of learning, e.g. no 2nd order logic machine attached).

O_o i didnt read that bit... i thought it was only storing tokens matched aganist an existing pattern.

btw i tried the Java version of SHDRLU and couldn't get it to run without hogging 100% CPU and becoming unresponsive within a few seconds =/ and this on a 2.5 Barton AMD with 1G RAM

Quote:
Also you seem to over-estimate the parsing thing. Parsing is only necessary to communicate with the backend - like your brain does during language processing. While the human brain is a multi-interface device that handles tactile, visual, phonetic and emotional [internal] input, programs are limited in their communication interface. Written language is so much easier to process that it is just the best suited interface between man and machine (by now, at least).

Thats why im not trying to parse. and a multi-interfase can be possible with some tinkering (webcams, microphones, etc... or simulated in a 3D world)... but thats too much work =D

In fact i've read about such work, but the approach taken was genetic algorithms.

Oh and there was some talk of binary logic producing not-too-good results and replacing with probablilities... this work has been done and you can pick up the algo's which are already studied in the Fuzzy Logic field. They work great for these things, but tweaking takes long.

Anyone knows of any sparse multi-dimentional matrix libs for C++ i could use?
Working on a fully self-funded project
Quote: Original post by Nice Coder
With mega-hal... It doesn't seem to be very... Convincing (or anything less then insane and dumb).


Forgot to reply to this =)
yeah mega-hal is a trollish brat.. but still interesting
the reason it doesnt seem convincing is lack of continuity, and the reason for this is that it doesn't have internal state.
So each new response is from a blank slate and they're not connected to each other, and humans notice this right away. The PAD knowledge model would take care of this to some extent, so it would keep the tone of the outputs somewhat homogenous (sp)... but there's still the issue of topic-hopping. How can one make it stay on topic? maybe give it a sort of short-term memory?
how would this short-term memory work? hm.. a very small knowledge model reusing tokens from the big one?
Working on a fully self-funded project
Short term memory... interesting.

Idea:

Objects can exist either in long term, or short term memory.

When an object gets talked about, mentioned, or is used by reson (ie. it is used by a rule), it is moved from long-term memrory to short term memory.

Objects move back to long term memory, after a piriod of time (amo of messages sent/recieved), which is changed based on how good the object is (amount of links, general goodness coeficient).

For the language:

Maybe something more asmovian, may be in order?

Matrix sayout, objects that walk.

?

Whatever it is, it should be:
Something either english-ish, or completely alian (think klingon, complete with symbols.)

I was thinking about the alian idea, now because everybody is translating things backward and forwards, it should be easier to make the bot act more humanish...

...

Another idea:

For each object, the bot has a set of pad values for it.
When it is mentioned, the values change the current pad values, thus allowing the bot to "like", "love", "hate", "Dislike" cirtain things. And can reply with semi-canned responces when asked [grin].

The ability to resay canned responces (with context when possible), will be nice. beause hopefully the language will only give people one way to say things. (so there would be more re-use.)

Also, we need to combat euphoric bots.
I once managed to talk matrixbot, by saying
"I love you", 10 million times to it. (happyness 0.997, an yes, i did use a for loop to do that).

Then, no matter what is said, it always replied with something along the lines of "Lol", or other synonymous remarks.

Any ideas on how to combat this? (with out ending up with a depressed, submissive, bored bot, hopefully)

A common framework would be very good.
But there would be language differences (which would mean that everything would have to be compiled... i for one, use vb6, which most people here probably won't touch with a ten foot pole)

Temporal changes should be difficult to code, how would we code this? (this would be practically essential, because a lot of events revolve arount today, yesterday, tomorrow)

From,
Nice coder
Click here to patch the mozilla IDN exploit, or click Here then type in Network.enableidn and set its value to false. Restart the browser for the patches to work.
I wish to thank the people posting in this thread for their ideas/knowlage, it has been extremly interesting and pushed my passion for AI further!
Advertisement
If it's canned responses, it isn't consciousness, it's hard-coded. Remind me again, what are you aiming for here? It's all over the place between grammars, learning, thoughts, emotions, drives. Good to be thinking about these things, but if you have a goal keep it in mind.

Read this - http://fp.cyberlifersrch.plus.com/articles/ieee_1.htm - it's an explanation of the AI used in Steve Grand's Creatures. They solve a lot of the problems you've been dealing with, albeit in a neural context which you don't seem to like considering. Still, it's very interesting, highly recommended.
Hello,
Your link doesn't seem to work...

The canned responces, would only be for cirtain things. The rest would be learned, off the user(s).

Something like:

User: Do you like Chicken?
Chatbot: I love chicken, why do you ask?

Would be very canned.

Soemthing like:

User: Do you like chicken?

Question: bot: affection(object(chicken)) is > 0.25 & < 0.75)

Affection(object(chicken)) = 0.70

So then, it would respond with something like
Responce: Afferm, like Chicken, [add]

Where [add] would be another phrase, which could be tacked on to the origional, like "Why did you ask?" or "Does that bother you?", ect.

of cource, it would reset the context, as it is in the output, so the context would have something like:

Chicken, Like, [addcontext]

In which, the objects chicken, and like (yes i know, but it makes it easier if everything is an object), and whatever is in [addcontext] is added to the context.

Once this is done, the context removes some things that it doesn't need anymore (ie. haven't been mentioned for a while, or not very importaint, ect.).

The context, i would say, would be part of the short-term memory.

From,
Nice coder
Click here to patch the mozilla IDN exploit, or click Here then type in Network.enableidn and set its value to false. Restart the browser for the patches to work.
Pretty nice thread. I'll throw in a couple (okay, maybe a dozen) cents and a few things to consider.

First, I fully agree with Madster that debating the definition of intelligence and consciousness is, while a interesting philosophical exercise, largely pointless when writing an AI. Goes in circles and at the end of the day won't change a line of code. Like Madster said, if you do it, you'll know it. Who cares if it is defined rigourously or not?

Personally, I favor GA with some form of net approach to AI. Create a simulated world with simulated minds in simulated bodies. Play God and try to apply the evolutionary pressures that made us as quickly and efficiently as possible. And pray that your simulation is deep enough to allow intellegent creatures to evolve at the end of it all. Problem is, simulating all the variables for one intelligent mind to emerge would take an absurdly fast computer with tons of memory. But to evolve it you will need to simulate whole societies of creatures and a full world with some form of physics (for complexity and to have some bering on our reality). In short, I think one of the world's fastest supercomputers is needed for bottom up.

I like top down now as well though, and I think AI is also possible via symbolic processing. I believe Cyc is on the right track but a whole lot more mental mechanics are needed for AI. (Cyc is really more about knowlege representation than thinking like a human, or animal for that matter.) So since you're on the symbolic path as well Nice Coder here are some of the issues I've been dealing with.

Your first and primary concern should be how can you make your bot run through all your rules and connections within your CPU and memory budget. With a symbolic system, creating new knowlege is easy, finding and processing relevant knowledge in a reasonable time and storage space is what is hard. You'll need very savy search algorithms which will need to learn and adapt based on past experience. I recommend goal based, with solvers which break down goals into sub-goals, match goals with the best solvers, create new knowlege when needed (including new solvers), make suppositions and predict outcomes, and strengthen the matching of solvers which fullfill goals. I also recommend treating your resources like a metabolism. Humans only have so much oxygen available at a time and can fire only a limited number of neurons. I think that can be very useful in what is strenthened, what is forgotten, and promoting a train of thought.

Also you will need nested contexts. How would your bot handle the question, "If you were a bird and could fly, what would you do?" You obviously don't want to assert into your knowledge base that the bot is a bird, at least not permanently. So you need something which can hold a set of assumtions, goals, etc and has its own scope. A context would need to be consistant within itself, but can contradict knowlege in parent contexts. Good for "what if" questions, and thus planning, prediction, current subject, current problem in a larger problem etc.

Memory should go without saying. That means you also have to deal with time (and probably patterns in time) which is a real pain. Id use short term, long term, and whatever other terms you want in between. Ideally memory should be pattern matched for predictive purposes and learning. Probably usage and significance tracked for what moves to longer term.

Leads to clean up as was mentioned earlier. Computers, like humans, have limited capacity and so you have to throw some stuff away. (especially with a good memory!) Obviously use a short form of memory for quick temporary stuff. Move useful stuff to longer term. And I would suggest generalizing to save space as well. Often when moving to longer term. We do it all the time. Today: "I remember driving yesterday with Jill, Sue, and Betty and spilling coffee all over Betty." In a year: "I remember driving sometime with some girls and spilling something" In five years: "I remember driving sometime and something happened." Ten years: "Huh?" Bad example you get the idea. I think we do a lot of this in our sleep.

Generalizing is probably one of the most important things you simply must have. It's importance in improving problem solving efficiency and searching is enormous. Also for exting current knowlege to new novel situations or problems.

Human speech is highly compressed (lossly) because it has such a low bandwidth. We do this by predicting what the other person knows, feels, and is thinking, then just leave out all the bits we predict they can infer. Since you've stated you would use your own language, the need for this is lessened slightly, but you'll still have to model conversion partners as to current subject, suppositions, and knowlege etc. to be convincing.

Finally (at least for this post) you need the power of meta. Godel, Escher, Bach of course has to be mentioned once again as to it's power. The bot code should "execute" code written in the language of your knowlege base. This lets the bot understand and reason about its own reasoning and to some extent program itself and adapt. This could be dangerous though if it decides to recode something important and kills itself. Just imagine if you decided you had figured out a more efficient way of breathing. You implement it and die before you can debug yourself. My personal theory is that that is what consciousness is for. Like C++ it is a higher level language that we can work with without screwing up our assembly and killing ourselves. Just that fact that we can't read our machine language and 90% of the methods are private gives it all that mysticism. Just my take.

Anyways long post. Obviously I haven't written a full AI yet, so what do I know? Take what is useful and throw away the rest.
Really it's going to come down to what are your goals. This semi-canned response system... yeah, you can probably make a fairly convincing chatbot with it. If you want to make the (next) next ELIZA-style bot, I'd expect it to work well. Furthermore it's something you can tackle without debating consciousness, etc.

On the other hand, if your goal was to make something conscious, something that really understands the language, then it's not the right path to follow.

Which is why I say, at this point, consider what it is that you want. Are you trying to make a great chatbot? Or are you trying to make real intelligence? Once you know that, you can start figuring out where you want to go from here.

This topic is closed to new replies.

Advertisement