Older blog entries for AI4U (starting at number 40)

5 Sep 2010 (updated 6 Sep 2010 at 05:08 UTC) »
MindForth Programming Journal (MFPJ) 2010 September 5

Sun.5.SEP.2010 -- Looking Before We Leap

As we gear up for self-referential thought in autonomous robots, we want each robot AI Mind to be able to handle questions in three different formats, as exemplified by the following examples.

1. What do robots make?

2. What do robots do?

3. What are robots?

The questions listed above go from the very specific to the very general. The first question, "What do robots make?", is an example of the "what-do-X-VERB?" format, where the "verb" slot may be filled with any suitable verb, such as "think" or "need". We use the verb "make" here because it will allow the AI to recall a long list of the direct objects of the noun-verb combination, "robots make".

The second question is an example of the more general "what-do-X-DO" format, where no particular verb is supplied and the AI Mind is free to come up with a long list of verbs +/- objects that would complete a thought beginning with "robots" as a subject.

The third sentence, "What are robots?", is included here only for completeness in the consideration of questions that intelligent robots might be called upon to answer. We are concerned today with the answering of "what- do-X-VERB" and "what-do-X-DO" questions. It may seem to the casual peruser of these AI Lab Notes that such questions are ridiculously simple and should present no difficulty at all to any True AI worthy of the name, but a reality check is in order here because how a software program deals intelligently with such simple questions is itself a profound question requiring devilishly deep thought to answer. And if you did not smile at the mention of deep thought in the previous sentence, then you have no business here and you are really Joe Sixpack, not Joe Appcoder.

Now excuse us for a moment, because we have had to respond urgently to the travails of some young graduate student who has become lost on the Web and needs the help of a webfooted wizard at the prestigious AI Forum. We found what he was looking for, and the guy was beside himself with astonishment and thanks. In order to wring the last drop of memetic advantage out of the rescue-episode, we propose to follow up with the following tongue-in-cheek tradecraft.

It's so outstanding to hear from you again,
young coderpup.

How totally bodacious for you to do work on neural nets.

Bright and shining your future must be,
for you stick with your awesome goals and
fail-or-no-fail you care not.

To answer your further questions ready am I.

Just ask the Old AI Dude when the going gets ungoogly.

Sun.5.SEP.2010 -- Natura Non Facit Saltum

When we ask the AI, "What do robots make?", the responses could include cars, tools, parts, and even more robots. We need to change the AI Mindgrid in such a way that the AI will be able to make statement after statement until the possible answers have been exhausted in the knowledge base (KB). Somehow we need a way to make each succeeding answer drop out of the queue, so that the next answer may surface in consciousness. We may need to create an InHibit mind- module that will lower the activation on a particular node on the quasi-fiber of the verb (such as "make") figuring in the responses to the query.

Suddenly we see a way to achieve our goal of enabling multiple answers to a what-do-X-VERB query. It will involve radical changes perhaps not to the underlying MindGrid, but certainly to several mind-modules operating across the MindGrid.

At the heart of the solution is the brand-new idea that, during a query-response, after a verb-node wins selection into a thought, the entire verb-concept shall not be psi-damped down to zero, but rather only the selection- winning node shall be inhibited down to a negative level of activation, such as minus-fifteen or lower. Furthermore, the PsiDecay module shall be made to work in two directions, both downwards towards zero and upwards towards zero, so that any inhibited node shall gradually lose its inhibition. Mind-modules that try to zero out an entire range of concepts, shall be rewritten ("Get me Re- Write!") to zero out only positive activations on concepts, and to leave negative activations alone. At the same time as all these changes are in effect, the subject of the query shall have a special status of persistence, so that the AI shall try to issue a series of statements about the subject in combination with the query-verb, until all pertinent nodes on the query-verb have been knocked down into a sub-zero inhibition. At that point, any thought beginning with the query-subject will surely fail to connect with the query-verb, and may or may not find a different verb for the generation of a KB-valid sentence. We may let the special status of the query- subject persist only so long as valid thoughts emerge in connection (in synergy) with the query-verb, with a release-mechanism to dislodge the subject from its special status when the knowledge base has been exhausted.

The beauty of inhibiting serial same-verb nodes down to a definitely negative level of activation lies in the realization that the sentence-generation process will continue to work the old-fashioned way. The VerbPhrase module will flush out the next same-verb node to win thought-selection, oblivious to the fact that one node is now out of commission at a deep level (deep unthought) of negative activation. There is some elegance to a solution in which you change one phenomenon (the post- selection activation-level) while everything else still works in the same old way. It is like evolution, which does not make massive saltations all at once, but only makes one tiny mutation at a time.

JavaScript AI Mind Programming Journal -- Fri.3.SEP.2010

Fri.3.SEP.2010 -- Improving Associative Comprehension

Today in the tutorial JavaScript artificial intelligence (JSAI) we work on implementing a powerful feature taken from the MindForth robot AI -- special InStantiate code to help the AI Mind zero in on the proper assigning of associative tags to connect the concepts activated by English words of human input. In our open-source AI, the comprehension of natural language depends upon establishing the conceptual interconnections that constitute an idea.

We are specifically concerned with connecting an associative tag between a transitive verb and its direct object. If the human user clicks on the JSAI link, lets the AI Mind flit across the 'Net, and types in, "i have a book", we do not want the software to tag a link between the verb "have" and the article "a". Instead we want a mental link between "have" and "book" -- the object of the verb. Since in MindForth we have devised a way to skip articles in the search for semantic links, now in JavaScript we simply need to implement the InStantiate algorithm from the Forth code.

Upshot: We laboriously converted an intricate sequence of Forth code to JavaScript -- and the JSAI stopped running. We had misspelled the "lastseq" variable. By putting the code back together line-by-line from the last working JSAI of yesterday, we identified and solved the problem. Through much of our testing, we would type in "i have a book" and we would get nonsense in response, because the skip-seq algorithm was not yet fully implemented. When the algorithm from MindForth became fully functional in JavaScript, we typed in "i have a book" and the emergent artificial mind responded correctly, "YOU HAVE BOOK".

JavaScript AI Mind Programming Journal -- Thurs.2.SEP.2010

Thurs.2.SEP.2010 -- Implementing the "prsn" Variable

Today we have imported the "prsn" variable and some associated code from MindForth into the JavaScript AI (JSAI). In so doing, we have also switched the SpeechAct() module from conditionally adding an inflectional "S" for a third-person verb, to merely outputting an "S" if directed to do so by the VerbPhrase() module.

In the JSAI WhoBe() module, we have brought in the following code

  if (subjpsi==50) prsn=1; // 1st person "I";  2sep2010
  if (subjpsi==53) prsn=1; // 1st person "WE"  2sep2010
  if (subjpsi==56) prsn=2; // 2nd person YOU;  2sep2010
  if (subjpsi==49) prsn=3; // 3rd person HE;   2sep2010
  if (subjpsi==80) prsn=3; // 3rd person SHE;  2sep2010
  if (subjpsi==95) prsn=3; // 3rd person IT;   2sep2010
  if (subjpsi==52) prsn=3; // 3rd person THEY; 2sep2010

as a mutatis mutandis solid block from MindForth. WhoBe() does not yet make use of the above code, but we install it right away because in MindForth we have learned that tracking the person and number of verb- subjects makes the general AI coding easier.

We need to port a lot more of MindForth into the JavaScript AI -- especially the recent seq-skip code that vastly improves the comprehension of input -- and we expect the JSAI to prove to many Netizens that MindForth is worth looking into.

MindForth Programming Journal (MFPJ) 2010 August 30

Mon.30.AUG.2010 -- On the Shoulders of Giants?

The "prsn" variable in MindForth artificial intelligence (AI) enables the AI to think thoughts in the first, second or third person with English verbs in the present tense. MindForth is different from most natural language processing (NLP) software because previous NLP software may be intricately crafted for the generation of grammatically correct English sentences but not for the thinking necessary to drive the NLP mechanisms. Because MindForth has a conceptual core that actually thinks, MindForth is an AI engine that may be "reinventing the wheel" in terms of tacking on NLP routines that have already been invented elsewhere unbeknownst to the Mentifex (mindmaker) originator of MindForth, but MindForth remains the original invention of an artificial mind that needs its own special forms of NLP software. Other advanced NLP software may translate ideas from one natural language to another, but MindForth is ideation software that thinks up its own ideas, thank you, and becomes more skillful at thinking co-extensively with the growing sophistication of its NLP generativity. We are met today on a mindgrid of that generativity, and we must generate AI Mind code for self-referential thinking in English. MindForth is like an AI rodent that scurries about while giant NLP dinosaurs tower overhead.

Mon.30.AUG.2010 -- VerbPhrase Orchestrates Inflection

Our current code is abandoning the stopgap measure of using the SpeechAct module to add an inflectional "S" to regular verbs in the third person singular. The control of verb inflections is now shifting into the VerbPhrase module where it belongs. We will try to use an old "inflex1" variable from the 20may09A.F version of MindForth to carry each phonemic character of an inflectional ending (such as "S" or "ING") from the VerbPhrase module into the SpeechAct module. An old MindForth Programming Journal (MFPJ) entry describes the original usage of "inflex1" to carry an "S" ending into SpeechAct. Now we would like to expand the usage so that "inflex1" and "inflex2" and "inflex3" may carry all three characters of an "ING" ending into SpeechAct. First we rename all (three) instances of "inflex1" as simply "inflex" so that we may confirm our notion that "inflex1" was not yet affecting program-flow, before we re-introduce "inflex1" as a variable that does indeed influence program-flow. We run the AI code, and nothing seems amiss.

Then we rename our instances of the temporary "inflec1" from yesterday (29aug2010) as the henceforth genuine "inflex1" to make sure that we still have the functionality from yesterday. Again we run the code, and all is well. Now we need to clean up the test routines from yesterday and smooth out glitches such as the tendency to tack on an extra "S" each time that a verb is used in the third person singular.

We still have the variable "lastpho" from the 24may09A.F AI, for avoiding an extra "S" on verbs. That variable is continually being set in the SpeechAct module. First in VerbPhrase we use a test message to report to us what values are flowing through the "lastpho" variable. Then in VerbPhrase we make the setting of "inflex1" to ASCII 83 "S" dependent upon the "lastpho" not being "S", but the method initially does not work. We suspect that the "lastpho" value is being set too early at almost the beginning of the SpeechAct module.

When VerbPhrase sends an inflectional "S" inflex1 into SpeechAct, all the conditionality about person, number, gender, etc., should be kept in VerbPhrase and should no longer play a role in SpeechAct. SpeechAct as code should not care why it is being asked to add an "S" or an "ING" onto a word being spoken. Therefore much of the conditional code in SpeechAct after the the detection of an intended "32" space should be removed, and SpeechAct should simply speak the inflection.

MindForth Programming Journal (MFPJ) 2010 August 28

Sat.28.AUG.2010 -- First-Person Consciousness

The declaration today of a "prsn" (person) variable in the MindForth robot AI has a bearing not only on the proper use of English verb forms in the first, second and third person, but also on self-awareness and artificial consciousness. There is no consciousness module in MindForth, because consciousness emerges not from a single location but rather from the overall functionality of the mind qua mind. Since the new "prsn" variable will help the robot Mind to think about itself and talk about itself in the first person singular, the person variable will reinforce the very concept of the robot self as the ego of a conscious mind. As the AI Mind speaks confidently and grammatically about itself during interaction with other persons -- human peers or robot peers -- the evolution of AI reaches the all-important milestone of self-referential thought.

MindForth did not previously have a "prsn" variable because initially all utterances of the proof-of-concept AI were in the third person plural by default. When the goal was to demonstrate thinking and not yet to trigger a Singularity, the simplest way to deal with grammatical person was not to worry about it at all. As the AI Mind has advanced in complexity and in functionality, bugs and glitches began to appear which could be resolved only by taking person into consideration. The issue was forestalled while special coding for be-verbs dealt with first-person forms like "am" and with be-verbs required for use with English pronouns, but now the general coding of general verb-usage requires the adoption of a person variable to make things work. The variable shall be "prsn" for two reasons, brevity and clarity. The chosen name of the variable has clarity because it refers not to a general concept of "person" as perhaps a legal entity or as perhaps a dramatic character, but rather to the specific idea of first person, second person and third person. The "prsn" variable will hold values of "1", "2" or "3" accordingly, and may hold a zero ("0") value for use with infinitive forms such as "to be".

MindForth Programming Journal (MFPJ) 2010 August 27

Fri.27.AUG.2010 -- Fixing the VerbPhrase Mind- Module

Today let us explore why the AI Mind can have a grammatically incorrect exchange like the following.

Human: what is god

First we must determine which part of the free AI source code for autonomous robots is mistakenly saying "BES" instead of "IS". If we eliminate this bug, and the next, and the next, we graduaully approach a functional AI Mind ready to inhabit myriad AI robots.

By inserting diagnostic messages to track the generation of thoughts, we determine that the VerbPhrase module is mistakenly saying "BE" instead of "IS". We temporarily fix this bug by inserting the following code into VerbPhrase, before it has a chance to utter "BE" as the main verb of a thought.

motjuste @ 58 = IF  \ shift from BE; 27aug2010
  num @ 1 = IF  \ singular; 27aug2010
    midway @  t @  DO  \ search backwards in time
      I       0 en{ @  66 = IF  \ most recent instance
        66 motjuste ! ( 66=IS; 27aug2010 )
        I     7 en{ @  aud !  \ get recall-vector
        LEAVE  \ after finding most "IS"; 27aug2010
      THEN     \ end of test for 66=IS; 27aug2010
    -1 +LOOP \ end of retrieval loop for "IS"; 27aug2010
  THEN  \ end of test for singular; 27aug2010
  ( following code covers undeclared plurals; 27aug2010 )
  num @ 1 = NOT IF  \ other than singular; 27aug2010
    midway @  t @  DO  \ search backwards in time
      I       0 en{ @  67 = IF  \ most recent instance
        67 motjuste ! ( 67=ARE; 27aug2010 )
        I     7 en{ @  aud !  \ get recall-vector
        LEAVE  \ after finding recent "ARE"; 27aug2010
      THEN     \ end of test for 67=ARE; 27aug2010
    -1 +LOOP \ end of retrieval loop for "ARE"; 27aug2010
  THEN  \ end of test for not singular; 27aug2010
THEN  \ end of test for 58=BE; 27aug2010

The code above rejects "BE" as a verb and says "IS" or "ARE" instead. Although "IS" is definitely selected by the "num(ber)" flag, "ARE" is the default alternative when the number of a subject is not known. This code fixes some problems in the AI, but introduces or accentuates other problems which were perhaps lurking unseen in the AI codebase. These emerging problems are minor in nature and pleasantly challenging for the AI appcoder. The MindForth AI is becoming a functional AI Mind that needs cosmetic improvements and functional add-ons.

MindForth Programming Journal (MFPJ) 2010 August 25

Wed.25.AUG.2010 -- Coordinating InStantiate and WhoBe

A problem exists in the following man-machine dialogue, where "a spirit" is unwarrantedly treated as a "who".

Human: god

Human: god is a spirit

The following report from the "En" English lexical array does not reveal to us why the word "WHO" was used at time point "t=433", but it does show an "mfn" gender flag set to one ("1") for masculine.

389 100 10 0 1 100 5 100 386  to GOD
393 100 10 0 1 100 5 100 390  to GOD
397 55 6 0 0 55 7 55 394  to WHO
400 66 0 2 0 66 8 58 398  to IS
404 100 10 0 1 100 5 100 401  to GOD
408 100 12 0 1 100 5 100 405  to GOD
411 66 0 2 0 66 8 58 409  to IS
413 1 15 0 0 1 1 1 412  to A
420 109 31 1 0 109 5 109 414  to SPIRIT
422 1 15 1 0 1 1 1 421  to A
429 109 36 1 0 109 5 109 423  to SPIRIT
433 55 0 1 0 55 7 55 430  to WHO
436 66 0 2 0 66 8 58 434  to IS
443 109 0 1 0 109 5 109 437  to SPIRIT
t nen act num mfn fex pos fin aud
By forcing diagnostic reports on the values of "mfn" and "mfnflag", we tracked down a bugfix for the problem of WhoBe saying "WHO IS SPIRIT" instead of "WHAT IS SPIRIT". In the InStantiate module, we added one (indicated) line of code.

  mfn @ 1 =  mfn @ 2 = OR IF  \ masc or fem; 17aug2010
    CR ." InSt: setting mfnflag to " mfn @ . \ 25aug2010
    mfn @ mfnflag !  \   17aug2010
  THEN   \ 17aug2010
  mfn @ 0 = IF  0 mfnflag ! THEN  \ test; 25aug2010
  0 mfn !  \ Test code applies only to En array.
  0 preset !
The AI properly began saying "WHAT IS SPIRIT", but it also began to leave out the word "IS" from the output of the WhoBe module, as shown in the dialog reproduced below.
Human: god

Human: god is a spirit


It turns out that the WhoBe module was testing for a positive value of "mfn" or "mfnflag" as a pre-condition for saying "IS" after "WHO". Once we began resetting the "mfnflag" to zero in the InStantiate module, WhoBe stopped saying "IS" -- until we removed the IF-THEN precondition.

Wed.25.AUG.2010 -- Tweaking the Codebase

Now we have a problem because the user can answer a who- query with a sentence of input, but the AI does not regurgitate the knowledge upon receiving the same who- query.

Thurs.26.AUG.2010 -- Changelog Entry

The changelog entry on yesterday's upload of free AI source code to the Web reads, "25aug10A.F retrieves knowledge gained from human users." The AI is becoming better able to ask a question about a new concept, comprehend the answer by storing it with the proper associations recorded among concepts, and respond with the assimilated knowledge when queried about the original concept. Curiously, the evolving albeit buggy AI responds differently to asking about a new concept with "who" and with "what", even when the same information provides the content of the response. To illustrate this point, we run the AI right now and we obtain the following dialog.

Human: god

Human: god is spirit

Human: who is god

Human: what is god

The answers recorded above are different because different parts of the AI Mind software respond differently to who- queries and to what-queries. Meanwhile we inch closer to our next AI milestone of demonstrating self-referential thought.

MindForth Programming Journal (MFPJ) 2010 August 24

Tues.24.AUG.2010 -- Enhancing Query-Responses

Today in 24aug10A.F we have modified EnCog so that query-answers will state the "qus" query- subject in the response. Before the direct-object of the response, we have put a call to EnArticle so that the response may insert "A" or "THE" before the direct object.

Tues.24.AUG.2010 -- Anticipating EnAdjective

Because of the "seq-skip" work done on Sat.21.AUG.2010, it becomes possible to introduce new adjectives by using them just before a noun already known to the AI. For instance, if the AI already knows the word "book" but not the adjective "new", a user could type in the sentence, "i have a new book", and the seq-skip mechanism, detecting "book" as a noun and as the direct object of "have", could tentatively parse "new" as an adjective.

MindForth Programming Journal (MFPJ) 2010 August 23

Mon.23.AUG.2010 -- Calling WhoBe or WhatIs Properly

Today we would like to use the most-glaring-defect principle to start working on the problem of MindForth giving responses with "BE" instead of "IS".

As an obiter dictu item, let us record here the idea that we may get the AI to respond diferrently to who- queries and to what-queries by potentiating the EnArticle module for English articles. If we ask, "Who are you?", we might get, "I AM ANDRU". If we ask, "What are you?", we may hope to get "I AM AN ANDRU" or "I AM A ROBOT". The slight proclivity to use "A" or "AN" shows a good response to a what-query. It may also help with our endeavors to code Is-a functionality.

At the start of any True AI coding session, we may pursue either the "most glaring defect" or simply the first bug that presents itself, such as now when we type in "cat" and we receive the output "CAT WHO IS CAT". That unfortunate output indicates that the WhoBe module is being called unwarrantedly, because the word "cat" is not known to be either masculine or feminine, as a human person might be. Now we have solved the "cat" problem by tracking down the "mfn" and "mfnflag" values, and by zeroing out not only "mfn" but also "mfnflag" at the end of the EnBoot English-bootstrap module. After the debugging, we entered the single word "cat" and we got the reply, "CAT WHAT IS CAT CAT". We are not sure why the word "CAT" is reduplicated at the end of the output.

After hours of coding, we have gotten the AI Forthmind to ask "who is" or "what is" questions, depending upon whether an input word seems to denote a person or a thing. We have removed several bugs. We record the following dialog.

Human: god

Human: god is jesus

Human: jesus is lord

Human: lord is a spirit


We have not reached the point where we may act like Knuth and offer a bounty on MindForth bugs, but we are now releasing our most robust ever AI code.

MindForth Programming Journal (MFPJ) 2010 August 20

Fri.20.AUG.2010 -- Restoring the "recon" System
We had to upload the 19aug10A.F MindForth with only semi- successful code that answered a who-query with "BE" instead of "IS". In BeVerb we could force the word "IS" to be selected, but then the wrong predicate nominative was chosen. In our new code we want to explore why the switch from "BE" to "IS" was causing problems.

In our recent 19aug10A.F code we had a conflict between activation-thresholds for the governance of program-flow. The old "recon" system was using a threshold of "20" and the new "beact" system was using a threshold of "12". It has occurred to us meanwhile that we might solve some problems by tracking down the etiology of the "beact" activations and exerting an upwards push on them so that they would share the same threshold level of "20" with the "recon" system -- which was at a point carefully chosen to avoid spurious associations.

In our 20aug10A.F AI code, let us see what forces are at work to influence and shape the "beact" levels. The "beact" variable is first stored within the VerbPhrase module, as the activation on the winning verb selected for inclusion in a sentence. As we use a diagnostic message to reveal the values of both "beact" and ordinary "act" within VerbPhrase, we discover that they hold numerically the exact same values. Why, then, are the threshold
levels so different?

We should probably start using "predact" (for "predicate activation") instead of simple "act" to test the quasi-recon threshold, so that "beact" and "predact" together will make more sense as variables.

The "recon" comparison involved setting a threshold of twenty (20), below which validly associated verbs were empirically not being found for a mystery noun, so that the noun could be treated as the proper subject of a "what- is" question. Perhaps we could proceed by returning to reliance upon the recon-system, and by using the WhatIs module or its likeness as the arena for decisions about invoking the WhoBe module.

If we shift things around here and not only go back to using the "recon" system, but also use "recon" to differentiate between calling WhatIs and WhoBe, then we have made a major change in MindForth which may lead to the creation of an AI worth studying for many neophyte AI programmers. Only the AI that thinks and works is worth studying and reverse-engineering. How we arrived at the working AI will not be anywhere near as important as figuring out how the AI-complete software works, so that AI coders can work on maintaining and improving the AI.

Sat.21.AUG.2010 --
In our work now on implementing the generation of who- queries and on the successful retrieval of knowledge stored when who-queries are answered, we discover now that conditions in the MindForth program are much messier and problematically more complicated than we had imagined. For instance, it causes a problem if we enter "Andru is a robot" and the AI associates the be-verb to the article "A" instead of to "ROBOT". The problem is that we can not retrieve the basic knowledge that "Andru is robot". If we enter "Andru is robot" without the article "a", we can ask "what is andru" to retrieve the knowledge, but the AI answers, "ANDRU BES ROBOT", as if "be" were a regular verb that may take an inflectional "s" ending.

Just now we typed in "andru is robot" and "what does andru be". We received the answer, "HE BE ROBOT".

We seem to recall that either in Forth or in JavaScript, we had coded a mechanism for InStantiate to skip over an article when storing the association between an input verb and its direct object. Since we can not find such code, it probably does not exist. We will compose new code to do the job. Since we can intercept "a" or "the" and not store them as a "seq" associated with a verb, at the same time we can set a "lackseq" flag to indicate that there exists a condition where a recent engram lacks a "seq" value. Then we can wait for a candidate "seq" to come in, and we can have InStantiate or some other competent module retroactively store the valid "seq" while resetting the "lackseq" flag to zero.

It looks as though InStantiate stores the "seq" value only retroactively, anyway, so we may superimpose code to prevent the articles "a" and "the" from being stored as a false "seq".

31 older entries...

Share this page