Hello , thanks for the answer.
If fact i just trying to know what Hal is doing, because i plan to write my own AI, between expert system and pure AI.
I got already several ideas on that that i can expose to you.
My goal is to have a dumb system, able to learn fast, so you do not need to write extension to it, since they will build by themself. At the end the AI should be able to write its own code.
I will probably need
clean input-->make dictionary, create symbolic code
natural language parser
including
grammar checker ?
spell checker (at least) correcting elementary mispelling
dictionary of synonyms to reduce every word to a basic element.(noun, verb, adjective...)
The goal is to create for each sentence a "card" with predefined questions, and have a maximum of answers.
for example:
Who is speaking (indexed name i.e. John987)--->so we can link to his card.
are we speaking of somebody (undefined, computer, interlocutor (special tagged name), somebody else (name))
are we speaking of something (undefined, what(name))
what is the intention (should be basic answer , like begin,stop, go)
what is the time (undefined, futur, past,never, always,now, date and/or time )
what is the size (undefined, relative to:...(small,big,long, short,same as))
what is the quantity(undefined, defined number) we can estimate later ...
how it looks like.
what is the temperature (undefined, cold, hot)
what is the location (undefined, everywhere, nowhere, here, location (specified as name , distance, coordinates)
Is it an happy or a sad event (scale from 1 to 10), probably relative to other reference to other event related to the subject.
what is the cost in energy (scale from 1 to 10)
what is the cost in money? (amount) we can evaluate later if it is expensive or not (or money can be considered as energy)
list like
list dislike
fuzzy definitions (like futur, past, somewhere) should be replaced asap with coordinates.
definitions that belongs to another card will be transferred, the ones that belong only to the session are kept.
(for example we can learn that John987 is american, it belong to his card, but if john987 is sad, this belong
to the local session, since it can change very fast. But we could accept to create a temporary entry to the john987 card
to help other people reading his card to understand that last info indicates that john was sad. this would include the time
of observation, so we can evaluate if the info is still relevant.
card could be any length, and contains any relevant information, as long it is directly/indirectly linked to the owner of the card and filled with information from another card.
for example we implicitly know that john987 has a mother (because indirectly he is human) . . So if john987 's mother is mentionned, it will be added to his card (parent: [Mary1276 , mother]? and a card for Mary1276 will be created with a field that says parent : [john987,son]. As long we just chat about john987, we just need to know his mother's name. If we need more (if she is still living) we can consult Mary1276's card. if no information is found we can ask.
terms used to answer question are either direct (hard coded definition in dictionary)? or by reference to another card.
for example john is a human (direct), but Barry is a Labrador-->dog-->animal (sequence of two card+1 direct definition).
So we can dig for more info if needed. (but most of time we do not need)
each answer can link to multiple other cards (if for example we speak about a group of people)
each new information can temporarily create a card, after a while, card without enough info will be discarder.
the goal is not to create many card, but to create lots of links between cards.(neuronal system)
all element should be defined from positive values (states like life and death are ok, but unhappy or sad is just a negative wording for only one positive state =happy).
some word are negative in their meaning like "lost" so "lost" is the negative of "found"
we will keep only positive terms (we keep "found") and translate "lost" as "-found"
basically it will help to cut the concept to know at least into half.
we will not make assumption ,just use relative quantification is allowed. nothing is good or bad, it can be faster, hotter, liked by somebody or hated by somebody else.(list found in the card of each subject).
make dictionary
1- to simplify text and get logic (replace with low level synonyms)
2- help to build hypothesis (getting intention) or rejecting concept.
example is=equal(=)
no, not, don't do not, can= neg(-)
finish, close , die, stop, abort, cancel, error, quit, exit, shut down, abandon, loose =stop
can, will, want, would = action
then "user can not shut down pc" = "user action -stop object"? user has an action he can not stop = problem detected.
every synonym to "lost" will be translated directly to "-found" so we do not need an antonym dictionary.
but we need a relational action dictionary.
"search" should be logically linked to "find" (bidirectional in that case)
the best efficency will by rejecting question or open sentence.
each transaction must possibly give an input or an output so we can feed the reasonning.
every word must be reduced to an usefull element, with linked information.
user=human, man, women, account, etc..
PC,=machine, computer etc..
it is not necessary to have all synonyms in each word, but enough cross-relation must exist
so eventually the "brain" can dig to get more path to search for.
Pc-->computer-->machine-->power-->electricity
eventually we will feed a seed (some synonyms) to a word and the brain should be able to
reinforce definition of each word, when it prooves to be ok.
PC-->electricity , skipping machine and power
because power could contain gasoline, steam, sun, gaz as synonym that are not relevant for PC.
each word will be stored as is, so human reading will be possible. it should not impact performance and
allow to modify a definition of one concept without influencing the other ones (breaking links).
when the brain find a new word, it will ask for definition and build a new entry if needed or just put as synonym
into a "base" word.
for example "fuel" will go in petrol if exist.
if not it can ask for another definition or just create fuel=synonym of petrol.
later if it discover that fuel or petrol is synonym of gasoline, the definition will be deleted and the 2 words
moved into gasoline.
we then need to define some rules to give sens to words.
for example rule "petrol do not mix with water" or "petrol -mix water" or "petrol+water=bad"
(here 'mix' is reduced to 'add' or '+'? so -+ shows a contradiction or a problem or a bad intention)
same for "user can not shut down the PC"
reduced to "user -stop PC". the verb "can" here make the difference between the user simply do not wanting to stop pc.
we need to create a notation for the concept of "want, desire" and "can, action"
Here you have to understand that every negative term is translated to positive terms.
in that case we consider "stop" as positive because it is a state (or else it would be translated in something positive).
so we still get the -+ reduction that shows a problem or bad intention.
Start is not directly the contrary of Stop.
both term are STATES, and states are positive. not bad , not good, they just are...
we will need a rule to define the fact that Stop=-Start, because you need an action to pass from
that state to another. that is why we want to avoid the creation of antonyms, because we could
create implicite rules (passing from a synonym to an antonym) and we loose control of
the meaning of things, like ending up for "starting a machine is good, stopping it is bad"
Ok it is very fuzzy to read, but it is bit like in my mind for instance.
I wrote a VB program to reduce a 45000 word dictionary to 12000, so it looks there are not so many word
to handle.