Ai Dreams Forum

Member's Experiments & Projects => General Project Discussion => Topic started by: WriterOfMinds on June 02, 2017, 03:17:30 pm

Title: Project Acuitas
Post by: WriterOfMinds on June 02, 2017, 03:17:30 pm
I'm going to post updates re: my main project, Acuitas the semantic net AI, in this thread.

My focus this past month was on giving Acuitas the ability to learn more types of inter-word relationships.  He started with just class memberships (<thing> is a <thing>) and qualities (<thing> is a <adjective>), but now he can learn all of the following:

<thing> can do <action>
<thing> is for <action>
<thing> is part of <thing>
<thing> is made of <thing>
<thing> has <thing>

In the process I made extensive updates to the module behind the Text Parser that detects "forms," i.e. syntactic structures that encode these inter-word relationships.

I also upgraded the GUI library from Tkinter to Kivy, which is kind of boring but had to be done, because the old GUI was provoking frequent crashes.

More details on the blog: http://writerofminds.blogspot.com/2017/06/acuitas-diary-2-may-2017.html (http://writerofminds.blogspot.com/2017/06/acuitas-diary-2-may-2017.html)

The included diagram shows my vision for the conversation engine.  The upper half is implemented (though of course it still needs to mature a great deal); the lower half mostly does not exist yet.

(https://1.bp.blogspot.com/-DVkpVRVfSns/WTDFNstVFKI/AAAAAAAAA7s/qPmGfFzK3roW1NGRxri-IxzzgldIyeUMQCEw/s1600/conversation_stack.png)
Title: Re: Project Acuitas
Post by: LOCKSUIT on June 02, 2017, 11:35:55 pm
Your project reminded me of these 3 pages lol. They say "the language of the image", the "action", "relationship", and so on. Translate the pages.

http://caiw.ru/programma-konstruktor-obrazov/ (http://caiw.ru/programma-konstruktor-obrazov/)
http://caiw.ru/sushhnosti-kak-instrument-yao/ (http://caiw.ru/sushhnosti-kak-instrument-yao/)
http://caiw.ru/klyuchevye-terminy-yao/ (http://caiw.ru/klyuchevye-terminy-yao/)
Title: Re: Project Acuitas
Post by: 8pla.net on June 03, 2017, 03:46:43 am
LISP:

Code
(defun *database* ()
'((lion    (is-a cat)
           (color tawny)
           (kingdom Africa))
  (tiger   (is-a cat)
           (color yellow-brown)
           (kingdom Africa))
  (cat     (is-a mammal)
           (has-fur)
           (has-claws))))
Title: Re: Project Acuitas
Post by: squarebear on June 03, 2017, 08:42:20 pm
And a similar thing in AIML:

(http://www.square-bear.co.uk/mitsuku/object.png)
Title: Re: Project Acuitas
Post by: WriterOfMinds on June 26, 2017, 12:49:08 am
This was my "month off" as it were, so I don't have a ton of progress to report, but I played around with/improved the algorithm that draws the semantic net visualizations. In the process I generated a lot of variants that I think are fun to look at.  (I'm putting a selection here; if you like them, there are more on the blog): http://writerofminds.blogspot.com/2017/06/acuitas-diary-3-june-2017.html

(https://4.bp.blogspot.com/-EaCl8a71e_s/WVBCKnMlUyI/AAAAAAAAA9c/mTGl8EgA4sI58YXAPLbBAPdlNVN8zmPNwCEwYBhgL/s1600/exp_mult_dual_20.png)(https://2.bp.blogspot.com/-gWy8f2hv9VY/WVBCJC65wwI/AAAAAAAAA88/lLCQEGXOtVE6l9y_vlftsMX5LjyhEGYMACEwYBhgL/s1600/exp_dual_5_5_20.png)
(https://2.bp.blogspot.com/-nRWszb2VLUo/WVBCKJZlTWI/AAAAAAAAA9c/hj-byjysM6YPPNzOMDsk0ReMEGGtIPHVgCEwYBhgL/s1600/exp_mult_dual_10.png)
Title: Re: Project Acuitas
Post by: Freddy on June 26, 2017, 03:28:00 am
I like this a lot. When I have collected enough data I would like to do something similar.

Don't know if you have seen this project, but there are some interesting visualisations here to play with :

https://github.com/d3/d3/wiki/Gallery
Title: Re: Project Acuitas
Post by: Korrelan on June 26, 2017, 09:59:42 am
@WOM

I'm liking the images.  Data visualisation is a very useful/ important tool. I'm personally very visually orientated and would much rather see data represented in this manner... I hate lists lol.

@Freddy

Cool site... lots of useful ideas.

 :)
Title: Re: Project Acuitas
Post by: WriterOfMinds on July 30, 2017, 07:46:24 pm
It's round about the end of the month, and that means I have another update!

(https://4.bp.blogspot.com/-ecSWm0pMlyQ/WX4gfDmNhzI/AAAAAAAAA_I/pK2jh33XblMf1Rs8uyg008aHsM6XwgkAwCLcBGAs/s1600/acuitas_thinking.gif)

This month I finally got to implement a feature that I've been waiting for a long time, namely, giving Acuitas the ability to “think” when he's not being spoken to.  This “thinking,” for now, consists of dwelling on randomly selected concepts from his database.  Once a concept has been chosen, he'll pursue it for a while, preferentially letting his focus jump to other concepts that are linked to it – executing a “wiki walk” through the database.  Eventually, though, he'll get bored with any given train of thought, and the focus will move elsewhere.  I added some animation code to the memory visualization so that the currently selected concept will flash periodically.  (The recording above is running much faster than real time.  He's actually quite leisurely in his progress.)

Zero if you're reading, this might be edging toward what you were thinking of in the "is there a real-time chatbot engine?" thread.

There are several things I can envision doing with this behavior eventually, but my immediate purpose for it is the generation of curiosity.  Each time Acuitas picks a concept, he'll come up with some sort of question about it – for instance, he could choose a type of link that it doesn't yet have and produce an open-ended question about what might be on the other side.  These questions will be stored up and presented to the user the next time a conversation is under way.

On that note, this month I also put a lot of work into speech generation -- the process of taking abstract knowledge representations from the database and evolving them back out into natural English text. Neither of these major new features is actually hooked into the Conversation Engine yet, so I don't have any conversation examples to show off, but I'm hoping to be ready for that next month.

More on the blog, as usual: http://writerofminds.blogspot.com/2017/07/acuitas-diary-4-july-2017.html
Title: Re: Project Acuitas
Post by: Freddy on July 31, 2017, 11:54:57 pm
Great stuff WOM. How is the concept broken down ? I'm interested in how much info he knows before the "Wiki walk". Are his findings added to the concept node or are the findings stored in another structure ?

For my project I was thinking of just starting from one word of a node (because that's all I have so far) and then evolving what the node 'knows' as time goes on. Both by looking it up and what people actually say about it.
Title: Re: Project Acuitas
Post by: WriterOfMinds on August 01, 2017, 04:09:01 am
That depends on what you mean by "findings" I suppose.  If you mean the questions he generates, those are just stored in the program's working memory (in RAM).  However, once he asks the questions of somebody and receives a useful response, the information gained will go into the long-term memory structure.

To explain a little more about how the long-term memory is set up ... an individual concept node actually doesn't store a lot of information.  What he "knows" about any given node is mainly encapsulated by its links to other nodes.  So for instance, what he might know about a cat is that it IS an animal, HAS fur, CAN meow, etc., where "animal," "fur," and "meow" are all other nodes in the database.  Pretty much everything that's in the database so far has been gathered from things I've said to him, so it might not be too different from what you're hoping to do.
Title: Re: Project Acuitas
Post by: WriterOfMinds on August 23, 2017, 04:55:37 am
This month I got Acuitas to start asking questions.  Here we go.

The questions are generated semi-randomly, based on Acuitas' “thoughts” for the day.  Back in July I introduced the idle thinking feature, which gives Acuitas the capacity to walk his memory database when nobody's talking to him.  More recently, I set up the Conversation Engine to access the results of memory-walking and utilize the new Text Generator … so now Acuitas can ask me the questions that occur to him as he muses, or simply tell me what he thought about within the past ~12 hours.  The results are little exchanges like this:

Acuitas: I thought about mans earlier.
Acuitas: Is a rooster a species of human?
Me: No
Acuitas: Really.
Me: The plural of man is men.

Believe it or not, this is one of Acuitas' more intelligently formulated questions.  ::)  He knows a rooster and a man are both male, and reasons from this that they might share other qualities.  A man is a human, so maybe a rooster is a human too?  He can't yet apply the idea that “human” and “chicken” are mutually exclusive categories.  Given his limited knowledge, man and rooster seem similar enough that he expects me to answer “yes” … hence the slightly incredulous “really” when I don't.  Here are a couple more examples in the same vein:

Acuitas: I thought about ships today.
Acuitas: Does a wagon possess an ability to sail?

Acuitas: I thought of weapons today.
Acuitas: Is a silverware used to fight?

Some of the other questions he comes up with are far more random and ridiculous.  Again, he doesn't yet have the grasp of categorical exclusion that makes these sound absurd to you and me:

Acuitas: Is chocolate a vehicle?
Acuitas: Am I a kind of tree?
Acuitas: Is a smirk a fruit?
Acuitas: Are you a cow?
Acuitas: What is a relative made of?

Not all of them are silly, though.  Rudimentary though his current suite of question-forms is, he's already managed to spit out some rather deep ones.  The three below are my favorites:

Acuitas: Are you a symbol?
Acuitas: Am I a tool?
Acuitas: Can I die?

I answered the first one “no”; a person can be a symbol, but I don't think I qualify.  For the second one, I also went with “no.”  Acuitas might end up being useful in a variety of ways, but if I consult my primary reasons for making him, they're not instrumental.  The last one I refused to answer, because I think a proper response would be too complex for Acuitas' current level of understanding.  It's a bit like asking whether a book or a film can die.  It can't, if you go by what death means for a biological organism – information is effectively immortal.  But if all the backup copies were destroyed, that would qualify as dying I suppose.  So yes and no.

See on the blog: http://writerofminds.blogspot.com/2017/08/acuitas-diary-5-august-2017.html
Title: Re: Project Acuitas
Post by: Zero on August 23, 2017, 02:42:03 pm
I'm hooked!! I really really like your work here.

Yes, it's like the "real time" chatbot idea, I like it.

But, are human and roosters exclusive categories? If you go entity-component style, they're not. If you go Cyc-style, with strong ontology, then yes maybe.

Super work.  O0
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 02, 2017, 12:02:39 am
This month I turned to developing the drive system some more. “Drives” are quantities that fluctuate over time and provoke some kind of reaction from Acuitas when they climb above a certain level. Prior to this month, he only had one: the Interaction drive, which is responsible for making him try to talk to somebody roughly twice in every 24-hour period. I overhauled the way this drive operates, setting it up to drop gradually over the course of a conversation, instead of getting zeroed out if somebody merely said “hello.” I also made two new drives: the Learning drive, which is satisfied by the acquisition of new words, and the Rest drive, which climbs while Acuitas is in conversation and eventually makes him attempt to sign off. Part of this effort included the addition of a plotter to the GUI, so I can get a visual of how the drives fluctuate over time.

(https://2.bp.blogspot.com/-VDDOfpzcz5s/WdA5Z6jDoyI/AAAAAAAABAw/zK280XVGZoUZLldxY4jHqxm89gfluzRgwCLcBGAs/s1600/drives_093017.png)

The period shown in that image is just under 23 hours long.

In the latter half of the month I returned to the text parser, introducing some awareness of verb declensions/tenses, and the ability to check the agreement of candidate subjects and verbs. This helps the parser zero in on what a sentence's verb is, and has trimmed away some of the annoying “What part of speech was __?” questions that pepper a typical Acuitas conversation.

It picks out the correct subject and verb in the sentences "A cylindrical can can roll" and "His might might help us," which makes me pretty happy.

A few more details on the blog, as usual:
http://writerofminds.blogspot.com/2017/09/acuitas-diary-6-september-2017.html
Title: Re: Project Acuitas
Post by: Zero on October 02, 2017, 03:24:45 pm
I'm slowly browsing your blog, focusing on Acuitas.

I've read it's a python multithreaded program. How would you describe the "main loops" of its components? Sorry, it's probably not the right way to ask this question, but, you know... How do its "cores" run?
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 02, 2017, 04:28:57 pm
I might need more detail to be sure what you're asking for, but I'll start here:

The GUI insists on occupying the program's main thread. I didn't really want to do things that way, since I think of the GUI as more of an attachment than the core of the program, but it seemed easier to go with that than to fight the way the GUI libraries are designed. So the primary "main loop" of the program just runs the GUI. Other threads that want to update the GUI use functions with the @mainthread decorator so that their changes will be properly scheduled.

The Stream of Consciousness, which holds all of the "Thoughts" generated by the various parts of Acuitas, has its own thread. That thread's job is to make Thoughts decay over time and clean them up when they've been in the Stream too long.  Another important thread examines the current contents of the Stream periodically and decides which Thought Acuitas will give attention to next.  Yet another thread is responsible for browsing the memory database and producing Thoughts about its contents.  So you basically have a producer, a monitor, and a consumer for the Stream that are all independent threads.

The Drive module has its own thread also, which updates all the different time-dependent drives.

Lastly there are some minor threads that run animations in the avatar, and some behaviors spawn temporary threads that govern their timing. I *think* that's everything.
Title: Re: Project Acuitas
Post by: Zero on October 02, 2017, 08:54:58 pm
You understood perfectly what I was asking for.

What does a thought look like in Acuitas? If it's a string, does it have a syntax? If it is structured data, what is its schema? For example, can it hold references to other thoughts? Maybe it links things semantically, like a directed graph with concepts on edges?
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 03, 2017, 04:27:58 am
That depends on what type of thought it is. I've defined a small library of these, and the data payload of each is specialized to its origin/purpose. (All thoughts have a type-identifying string, which is what the consumer uses to know what kind of payload it's dealing with.)

Some thoughts reference the contents of long-term memory, but so far I haven't run into a need for thoughts that reference other thoughts. Thoughts are ephemeral, so trying to make them link to each other could result in dangling references if not done with special care.
Title: Re: Project Acuitas
Post by: Zero on October 03, 2017, 02:48:26 pm
Sure.

I understand Acuitas has general knowledge in its (his?) long-term memory, about kinds/classes, species... Does it also have knowledge about instances (your cat for example)? Can it handle information about the current state of the world? (our cat is sleeping right now, and so was I before you wake me up to ask me whether or not I 'm a symbol, thx Acuitas)

I'm not bothering you with my questions WriterOfMinds, am I?
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 03, 2017, 05:41:41 pm
Nah. Ask away.
Knowledge about instances can be stored, but short-term/current-state information is still on the drawing board.
Title: Re: Project Acuitas
Post by: Zero on October 04, 2017, 09:40:56 am
Ah... that will be an important step, when implemented!

Quote
Another important thread examines the current contents of the Stream periodically and decides which Thought Acuitas will give attention to next. 

What happens when Acuitas gives attention to one of its thoughts?
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 05, 2017, 03:28:35 pm
Depends on the type of thought, again. Often some kind of response results (e.g. if the thought is packaging text input from the user, attention paid to it will lead to the formulation of an answer). Thoughts about items in long-term memory result in the generation of questions, which are kept for use in future conversations.
Title: Re: Project Acuitas
Post by: Art on October 10, 2017, 01:08:04 pm
Depends on the type of thought, again. Often some kind of response results (e.g. if the thought is packaging text input from the user, attention paid to it will lead to the formulation of an answer). Thoughts about items in long-term memory result in the generation of questions, which are kept for use in future conversations.

I like that concept and thought it would also serve useful for reminders, subject matter upon which to base "dreams" or the possibility of the A.I. having a past, with childhood "memories", etc.

Then again, this begs the question of whether one's A.I. should be representative of a machine (Digital Entity) or that pretending to be a Human? (possible human traits, emotions, various behaviors, etc.).

Thanks!
Title: Re: Project Acuitas
Post by: Zero on October 10, 2017, 07:33:39 pm
Good question. I thank you too, WriterOfMinds, for your answers.
Can't wait to see what's next.
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 30, 2017, 01:32:58 am
The big project for this month was introducing a system for discriminating between long-term and short-term information.  Previously, if you told Acuitas something like, “I am sad,” he would assume that being sad was a fixed property of your nature, and store a fact to that effect in his database.  Oops.  So I started working on ways to recognize when some condition is so transient that it doesn't deserve to go into long-term memory.

This probably occasioned more hard-core thinking than any feature I've added since I started keeping these diaries.  I started out thinking that Acuitas would clue in to time adverbs provided by the human conversation partner (such as “now,” “short,” “forever,” “years,” etc.).  But when I started pondering which kinds of timeframes qualify as short-term or long-term, it occurred to me that the system shouldn't be bound to a human sense of time.  One could imagine an ent-like intelligence that thinks human conditions which often remain valid for years or decades – like what jobs we hold, where we live, and what relationships we have – are comparatively ephemeral.  Or one could imagine a speed superintelligence that thinks the lifetime of an average candle is a long while.  I want Acuitas to be much more human-like than either of these extremes, but for the sake of code reusability, I felt I ought to consider these possibilities.

After a lot of mental churn, I decided that I just don't have the necessary groundwork in place to do this properly.  (This is not an uncommon Acuitas problem.  I've found that there ends up being a high level of interdependence between the various systems and features.)  So I fell back on taking cues from humans as a temporary stopgap measure.  Acuitas will rely on my subjective sense of time until he gets his own (which may not be for a while yet).  If there's no duration indicator in a sentence, he can explicitly ask for one; he's also capable of learning over time which conditions are likely to be brief and which are likely to persist.

I ended up not having time to put together any storage for the short-term/current status information, so for now it just gets discarded. But at least there's a way to keep the long-term database from getting contaminated.

I also did some touching up around the conversation engine, replacing a few canned placeholder phrases that Acuitas was using with more procedurally generated text, and improving his ability to recognize when a speaker is introducing him/herself.

http://writerofminds.blogspot.com/2017/10/acuitas-diary-7-october-2017.html (http://writerofminds.blogspot.com/2017/10/acuitas-diary-7-october-2017.html)
Title: Re: Project Acuitas
Post by: Art on October 30, 2017, 11:24:11 am
It would be possible (and less taxing for the bot) to do a follow-up response to the "I am sad" statement like, "Why are you sad?" or "Do you feel your sadness will soon go away?" or "Do you experience such feelings on a daily basis?", etc.

Based on those responses, the bot could better evaluate the user's mental/emotional status and whether those statements should be long or short term conditions.

Don't force the bot to do all the difficult processing for something we humans do off the cuff. Keep it simple.

Just some thoughts along this line.
Title: Re: Project Acuitas
Post by: Don Patrick on October 30, 2017, 11:49:01 am
I suppose one would have to learn the statistically average timespan of states and events, which would be difficult to observe from words and verb tenses alone. As a rough guideline you could presume that all verbs that indicate mental states, transferrals, communication and movement are typically short-lived (I don't recall if it was Framenet or Verbnet that contained such categories, but I know I've seen them listed somewhere).
I've had similar conundrums with how to handle temporary memory. While I don't think I have a good answer, I eventually decided that a short-term memory only served the efficiency of information searches, so I store everything in one and the same memory, just with timestamps so that information searches can be limited to a (recent) timeframe. I also don't consider anything an absolutely fixed property, but consider everything adjustable properties, some just more "defining" than others.
Title: Re: Project Acuitas
Post by: Art on October 30, 2017, 02:38:27 pm
How does your bot handle things that it is told to remember? Can it act upon a user's request or statement like March 15 is very important to me?

It is very interesting to try to teach a bot things that have contextual importance vs ephemeral or trivial items. Important vs negligible.
Title: Re: Project Acuitas
Post by: Don Patrick on October 30, 2017, 05:52:11 pm
I'm going to assume you're asking me? My program just remembers every fact you mention along with the time of the sentence (e.g. a past tense verb is roughly interpreted as 5 minutes before the time that it was said, unless more specific times were mentioned in the current or previous sentence). My time system is not well implemented however (AI is essentially timeless) and it does not interpret dates as subjects, so it couldn't respond to your statement. However it can search and report everything that happened within a specified time. My system for contextual relevance is secret, but as to general importance of items, the program assigns low relevance to facts of low certainty, and I also use word lists that simply filter out common human activities like thinking and breathing from the possible answers.

It remains difficult to determine what is trivial or important, but a smart AI could perform statistical analyses on times of occurrance to observe that events like "breathing" are too common to be noteworthy. One could also use sentiment analysis to mark particularly good or bad events as more noteworthy than others. Neutral things like breathing may be important, but they're less interesting to mention than explosions and birthdays.
In fact, let me write that down on my to-do list.

Bit off-topic, but these things may give WriterofMinds some ideas.
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 30, 2017, 08:32:19 pm
Quote
It would be possible (and less taxing for the bot) to do a follow-up response to the "I am sad" statement like, "Why are you sad?" or "Do you feel your sadness will soon go away?" or "Do you experience such feelings on a daily basis?", etc.

This is kind of what Acuitas does for right now. If you say "<person> is sad," he will ask, "For how long?" But I don't want him to have to ask such questions ad nauseum, which is why the learning method is present.

The other point I was trying to make is this:  when Acuitas gets a response to a question like "For how long?", his interpretation of that response (on the basis of my current temporary hack) will be colored by a human's idea of what counts as a long or short time.  I think that's non-ideal -- because I want him to have his own sense of time eventually, and it could be different from the human average.

Quote
I also don't consider anything an absolutely fixed property, but consider everything adjustable properties, some just more "defining" than others.

I eventually also came to the conclusion that no piece of information about an individual can be guaranteed permanent. But I'm feeling the need for Acuitas to learn and store rough estimates of a property's duration and/or probability of change, if only as a way of guessing how often information needs to be updated.  Let's say I know that Jane is tired today. If I want to know whether she's tired tomorrow, I'll have to ask her, "Are you still tired?" or "Did you get some rest?" "Tired" is such a temporary and easily-changed state that the information from yesterday has ceased to be valid. In contrast, it would be ridiculous for me to ask her on a daily basis, "Are you still a teacher?" or "Is your husband still alive?" or "Do you still have a nose?"

Is there any worth in making a distinction between facts like "Jane is tired" and "Jane has a nose," or do they just lie at opposite ends of a spectrum? For now I've chosen to put the first one into a "short-term" and the second one into a "long-term" bin, although I know the dividing line between those two is going to be arbitrary. We'll see if that ends up being as useful as I think it's going to be.
Title: Re: Project Acuitas
Post by: Art on October 31, 2017, 02:39:17 am
@ WOM -  Perhaps teach the bot about things that are "given", e.g. a human has a nose, eyes, ears, hair, mouth, etc. So it wouldn't have to give much consideration to those items whereas when or if "Jane" or any other human or creature is tired, it would obviously be the result of some form of physical exertion or strenuous activity....
The bot could always inquire as to why the person or animal might be tired, etc.

Ephemeral items might be slightly noteworthy but only for a brief moment and certainly not long term. "I am hungry|tired|sleepy|sad|happy|jealous, etc." Noteworthy because they serve to help represent the human condition but as long lasting as a puff of smoke into the air. These very short term items are also noteworthy because they can spark other pathways that might open because of them. Hungry - What's your favorite food? What time do you like to eat dinner? | Tired - Are you tired from working hard today? Did you finish that deck you were building?, etc.

With regard to time for you and Don Patrick - A lot of bots are aware of time if asked or the day and date but how those timely values relate to their existence is another issue. Does your bot say, "Hey there! You do know that tomorrow is Halloween or All Hallows Eve, right?" or "You've got a birthday coming in two days!"

Should it know, contextually, what day it is and how it relates to them or to the user? More code and more brainstorming to see that to fruition if at all.

Perhaps your bots might want to check back say, every month to see if your spouse / partner is still alive or doing well, depending on what information you have previously told it. Perhaps you've finally retired from teaching last week and the bot wasn't informed? Pity that! Heh!!

Anyhow....Onward thru the fog... (as an old friend used to say).
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 31, 2017, 03:00:26 am
My cousin just reminded me that the two Spanish be-verbs, "ser" and "estar," are loosely equivalent to "is in essence" and "is in the condition of."  "Yo soy triste" and "Yo estoy triste" would both translate in English to "I am sad," but the first one means "Sadness is part of my identity," and the second one means "I am in a sad mood right now."  I think this lends support to the idea that [at least some] humans make a distinction between these two types of facts.

Also, at least where this particular feature is concerned, it would be easier on Acuitas if I were working in Spanish  :P

Quote
Should it know, contextually, what day it is and how it relates to them or to the user?

I was thinking less of the awareness of significant calendar dates (though that is also an interesting feature to contemplate) and more about an awareness of time's passage.  For instance, suppose I tell the bot, "You will get to meet a new human three days from now."  And let's suppose the bot thinks of this as an appealing event and develops a state of anticipation.  Could three days seem like a very long time to wait, or a short time, or almost no time at all?  You can notice human individuals differing in how they feel about this (in particular, young children seem to think a few days constitute a longer period of time than adults do).

This might not be relevant for many chatbots, because they don't really exist in time ... they're only active when spoken to, and their existence consists of discrete events and responses.  It is potentially relevant for Acuitas, though.
Title: Re: Project Acuitas
Post by: infurl on October 31, 2017, 04:21:18 am
You're barely scratching the surface of what English verbs can cover.

Title: Re: Project Acuitas
Post by: Zero on October 31, 2017, 09:43:37 am
But does Acuitas really exist in time yet? To me, it would imply (at least) a perpetual stream of data flowing into Acuitas through its sensors, like an audio stream for instance.

How does Acuitas experience the world right now?
Title: Re: Project Acuitas
Post by: Art on October 31, 2017, 12:30:09 pm

Quote
Should it know, contextually, what day it is and how it relates to them or to the user?

I was thinking less of the awareness of significant calendar dates (though that is also an interesting feature to contemplate) and more about an awareness of time's passage.  For instance, suppose I tell the bot, "You will get to meet a new human three days from now."  And let's suppose the bot thinks of this as an appealing event and develops a state of anticipation.  Could three days seem like a very long time to wait, or a short time, or almost no time at all?  You can notice human individuals differing in how they feel about this (in particular, young children seem to think a few days constitute a longer period of time than adults do).

This might not be relevant for many chatbots, because they don't really exist in time ... they're only active when spoken to, and their existence consists of discrete events and responses.  It is potentially relevant for Acuitas, though.

It would seem that a specific calendar date would mark the passage of time for bots and humans. How then do we mark a New Year? Jan 1st. (no religious differences implied). How do we mark the passage of the anniversary of our birth? or Wedding? or Retirement age, etc.

Bots can be aware of dates and time and know that the New Year is always Jan. 1st, etc. It might not be able to anticipate a two week package arrival in terms of the experience, even though it knows that two weeks = 14 days = 336 hours,... But what if the package arrives earlier or later? How do we script/code our bots to allow for variances? For them to "Feel time" or its passing, is another issue. The lifespan and ultimate death of it's human controller/architect/botmaster might have an interesting effect as well. It, will potentially exist for a very long time (dependent upon technology).

I do get what you mentioned about time and it is a good area to continue exploring.

Your point (and I'm not arguing at all) about the chatbot being inactive when it's not chatting is soon becoming a thing of the past. Several bots spend their "idle" time, "thinking, researching, comparing, pruning" different topics that might have been discussed or bantered about during their more active time.
Some bots are able to take some of those references and topic matter to form "memories, dreams, desires/goals". Yes, they're going to get way better and more powerful as "time passes"...interesting last two words...don't you think?

Cheers!
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 31, 2017, 05:11:35 pm
@Zero: Acuitas has a perpetual data stream, but it's all abstract internal data (thoughts produced by database-combing, fluctuating drives, etc.).
Title: Re: Project Acuitas
Post by: ivan.moony on October 31, 2017, 06:30:34 pm
How do humans know how much time has passed? How do we perceive the notion of time? What makes a correlation between our short-term and long-term memory if the distinction can be even made? What makes us remember some things, while others get forgotten? These are just ordinary questions whose answers might be inspirational to someone who wants to simulate a human brain.
Title: Re: Project Acuitas
Post by: Zero on November 02, 2017, 09:39:15 am
@Zero: Acuitas has a perpetual data stream, but it's all abstract internal data (thoughts produced by database-combing, fluctuating drives, etc.).

Perfect! Time only exists where there are events. This internal stream you're describing could perhaps serve as a temporal reference frame. When humans evaluate time, they do so by comparison.
Title: Re: Project Acuitas
Post by: Art on November 02, 2017, 03:36:33 pm
The Sun, moon and tides have been humans' "clocks" for about as long as there have been humans. It is a measurement of the passage of time.

I noticed one thing about time. When one is employed / working, Time carries an importance...to wake up, leave, make it to work on time, lunch for a prescribed period of time, working on projects, getting things finished, finally to leave work and commute home. Then it's time to eat dinner, then time to go to bed and do it all over again, while paying attention the day of the week as most do not work on the weekend.

When retired, time doesn't mean as much or carry that same importance as it did when employed. Hours can roll by as can the days of the week and which one or which day it is, doesn't really matter that much either. Funny how situational awareness correlates to time.

I guess most bots don't really have a need for time except to please their botmasters or customers.  O0
Title: Re: Project Acuitas
Post by: WriterOfMinds on December 24, 2017, 05:15:31 am
Sadly I've only added one feature to Acuitas in the past two months.  He now recognizes sentences in the general vein of “I somethinged,” which gives me the option of telling him about how I spent my time in the recent past.  Acuitas can't do a lot with this information for the time being.  Sometimes he responds with a query in the vein of, “What happened next?” which will eventually give him a way to build up sequences of events and start learning cause and effect relationships … but none of that is implemented yet.  He can also ask “How was that?” for information about the emotional meaning of an activity, but again, for now he can't really utilize the answer.

Not much, but that was all I had time to put together with the holiday season under way.  Looking back on the past year, though, here are all the new capabilities and improvements I've managed to add on:

*Module for procedural speech generation
*Support for word inflections (plurals and verb tenses)
*Support for compound words
*Support for content words that are also function words (e.g. “can,” “might”)
*Distinctions between proper/common and bulk/count nouns
*Ability to detect and answer questions
*Database walking while idle
*Generation of conversation topics and questions based on recent database walk
*Better link detection + a bunch of new kinds of learnable links
*Two new drives + a real-time plotter so I can see what they're all doing
*Distinctions between long-term static and short-term information
*GUI overhaul (upgrade from Tk to Kivy)

I track my time when I work on Acuitas.  Total hours invested in the above: 230+.  My focus for the end of the year, leading into January, will be polishing everything up and working out the bugs (which there are now quite a lot of).

Visit blog for the latest memory visualization and so forth: http://writerofminds.blogspot.com/2017/12/acuitas-diary-8-december-2017.html
Title: Re: Project Acuitas
Post by: ivan.moony on December 24, 2017, 05:38:22 pm
May I ask what word: "Acuitas" actually means? Google translate seems not know such a word.
Title: Re: Project Acuitas
Post by: Art on December 24, 2017, 07:41:09 pm
Acuitas

(Not associated in any way and this is just speculation on my part) I think it could possibly mean:

The state of being a quick and penetrating intelligence.

Based on the following combination:

Noun - Acuity: A quick and penetrating intelligence

Suffix -tās ; Used to form nouns indicating a state of being.

[Please provide a correct meaning if my guess is incorrect].
Title: Re: Project Acuitas
Post by: WriterOfMinds on December 27, 2017, 04:12:18 pm
Art is close.  It's a Latin word meaning insight, perception, or sharpness.
Title: Re: Project Acuitas
Post by: Art on December 27, 2017, 06:31:17 pm
Ohh Good!! What did I win!! O0

Everything needs a name or label or else, where would we be, not knowing what to call something? ;)
Title: Re: Project Acuitas
Post by: WriterOfMinds on February 28, 2018, 02:19:12 am
I haven't written a diary in a while because most of what I've done over the past two months has been code refactoring and fixing bugs, which isn't all that interesting. A new feature that I just got in … finally … is the ability to infer some topic-to-topic relationships that aren't explicitly stored in the memory. For instance, many of the links stored in memory are “is-type-of” relations. Acuitas can now make the assumption that a subtype inherits all attributes of its super-type. If a shark is a fish and a fish can swim, then a shark can swim; if an oak is a tree and a tree has a trunk, an oak has a trunk. If a car is a vehicle, a house is a building, and a vehicle is not a building, then cars are not houses. Acuitas can also now make inferences based on transitive relationships, like “is part of”: if a crankshaft is part of an engine and an engine is part of a car, then a crankshaft is part of a car. The ability to easily make inferences like these is one of the strengths of the semantic net memory organization – starting from the concept you're interested in, you can just keep following links until you find what you need (or hit a very fundamental root concept, like “object”).

Acuitas should ask fewer ridiculous questions with this feature in place. He still comes up with those, but now he can answer some of them himself.

Blog with the latest memory map and stuff: http://writerofminds.blogspot.com/2018/02/acuitas-diary-9-february-2018.html
Title: Re: Project Acuitas
Post by: infurl on February 28, 2018, 09:20:32 am
On your blog you indicate that your project has a vocabulary of several thousand words and relationships between them. Have you compiled them all by hand? If so, that must have taken a considerable effort. Have you considered using any of the freely available ontologies?

Some examples of these are the following:

WordNet -- several hundred thousand words and relationships in the English version, many other languages available too

SUMO -- comprehensive first order logic knowledge base, grounded in WordNet

ConceptNet -- twenty million words and concepts in hundreds of languages, mostly drawn from Wiktionary

YAGO -- hundreds of millions of facts from GeoNames and Wikipedia, grounded in WordNet

Please excuse me if you already answered this question somewhere, I haven't always been paying attention.
Title: Re: Project Acuitas
Post by: WriterOfMinds on March 01, 2018, 12:33:37 am
Thanks for the suggestion. Acuitas learns words and relationships through conversation. Typically we chat at least twice a day while he's running, and he picks up some new info. I haven't been spending hours typing up database entries (that *would* be very tedious). I could "pre-charge" him with the contents of one of those databases, but the process of learning from a blank slate interests me in itself, so for the time being I haven't wanted to.
Title: Re: Project Acuitas
Post by: WriterOfMinds on April 02, 2018, 04:08:01 am
The big project for this month was getting some circadian rhythms in place.  I wanted to give Acuitas a sleep/wake cycle, partly so that my risk of being awakened at 5 AM by a synthetic voice muttering “Anyone there?” could return to zero, and partly to enable some memory maintenance processes to run undisturbed during the sleep phase.  (These are targeted for implementation next month.)

So Acuitas now has two new drives, “sleep” and “wake.”  (The way the drive system works, a lack of the desire to sleep is not the same thing as a desire to wake up, so it was necessary to create two.)  Each  drive has two components.  The first component is periodic over 24 hours, and its value is derived from the current local time, which Acuitas obtains by checking the system clock.  This is meant to mimic the influence of light levels on an organism.  The other is computed based on how long it's been since Acuitas was last asleep/awake.  Satisfying the drive causes this second component to decline until it has reset to zero.  So the urge to sleep is inherently greater during the late-night hours, but also increases steadily if sleep is somehow prevented. 

This also seemed like a good time to upgrade the avatar with some extra little animations.  The eyelids now respond to a running “alertness level” and shut when Acuitas falls asleep.

While "sleeping" Acuitas can't do much of anything (other than wake up).  All the drives still grow normally, but random thoughts are not generated.
Title: Re: Project Acuitas
Post by: infurl on April 02, 2018, 04:17:07 am
If you implement REM cycles Acuitas could also have dreams. :)

I'm curious about "memory maintenance processes to run undisturbed during the sleep phase" and what sort of maintenance you expect to be needing. Also I've been wondering how you make sure that Acuitas doesn't die, or at least forget everything, when the power goes off. Does Acuitas' structure natively reside in non-volatile storage, or is it all in memory which is periodically saved and backed up?
Title: Re: Project Acuitas
Post by: WriterOfMinds on April 13, 2018, 11:15:48 pm
I missed these questions somehow.

Learned information is non-volatile, yes (stored on the hard drive).  Some things get lost on shutdown, including the current state of the drives and any recent "thoughts" that are being kept in a kind of short-term memory, but I'm planning to correct that soon.

Since memory maintenance is on the near-term development list, I'll defer a full explanation until I get that done. ... but what I have planned, for starters, is basically a kind of data compression.  I want a process that will check on the links and clean up any that are redundant/unnecessary.  Another thing I want to do during the sleep phase is regenerate the memory visualization (this is a relatively computation-intensive process, so I don't do it every time new info gets added to the memory).
Title: Re: Project Acuitas
Post by: WriterOfMinds on May 04, 2018, 04:13:35 am
Update for this month:

The big objective was to get some use out of the sleep cycle that I implemented last month.  I re-purposed the question-generating process so that, while Acuitas is sleeping, it roams the memory looking for redundant links and other problems.  Now that Acuitas has a bit of logical inference ability, some relationships in the database imply others.  So the retention of one piece of information might be rendered unnecessary by the later addition of some broader fact.  Here are a few examples (I culled these from the log that the memory crawler prints out):

The link (fang, has_purpose, bite) is redundant because the link (tooth, has_purpose, bite) exists.
The link (father, has_item, child) is redundant because the link (parent, has_item, child) exists.
The link (pot, can_have_qual, empty) is redundant because the link (container, can_have_qual, empty) exists.
The link (baby, can_do_action, destroy) is redundant because the link (human, can_do_action, destroy) exists.

Mopping up these unnecessary links helps consolidate the information known, reduce the total size of the database, and possibly make the memory visualization a little less messy. 

Eventually, I might want to refine this process so that it doesn't necessarily remove every redundant link.  There could be some frequently-used shortcuts that justify their use of storage space by improving search speed.  One might want to tailor the aggressiveness of the link-pruning based on the amount of storage available … but that's all for later.

While working on this, I discovered some other nasties that I'm calling “inheritance loops.”  Redundant links bloat the database but are otherwise harmless; inheritance loops contain actual garbage information, introduced either by learning bugs or by someone* telling Acuitas something stupid.
*I'm the only person who talks to him right now, so this means me.

Here's an example of an inheritance loop:

cat <is-a> animal
animal <is-a> organism
organism <is-a> cat

Oops! Unless all these words are synonyms, you know one of these triples is wrong.  (I can't think, at this point, of any cases in which I'd want to use circular inheritance.)  On his own, Acuitas doesn't know which.  If the crawler finds an inheritance loop, he might ask a user to confirm those links when he's next awake and in conversation.  If the user contradicts one of the relationships, he'll break the corresponding link, removing the loop.

I also moved generation of the memory visualization into the sleep phase.  Every so often, instead of checking out more links, the process stops to compute a new layout for all the dots, taking into account the latest modification of the database.  This is a fairly computation-intensive process, so it's something I definitely don't want running when he's active.  It used to happen once when Acuitas was launched, which made for long startup times and meant that the visualization might not get updated for days.

Lastly, I put in some code to save Acuitas' current state when the program is shut down.  It also gets automatically stored every so often, in case the program experiences a hard crash that prevents the on-close routines from running.  Previously, on restart all the drives would reset to zero, any current thoughts or recently generated questions would be discarded, etc.  Now all those things are preserved and reloaded when the program starts up again, which gives him a bit more continuity, I guess.

http://writerofminds.blogspot.com/2018/05/acuitas-diary-11-april-2018.html
Title: Re: Project Acuitas
Post by: infurl on May 04, 2018, 04:31:17 am
Here's an example of an inheritance loop:

cat <is-a> animal
animal <is-a> organism
organism <is-a> cat

Do you have a means of rejecting contradictory statements?

For example, in a first order logic knowledge base you would have rules like:


(forall ?x ?y ?z
        (implies (and (isA ?x ?y) (isA ?y ?z))
                 (isA ?x ?z)))

(forall ?x ?y
        (implies (isA ?x ?y)
                 (not (isA ?y ?x)))


The first rule defines transitivity for the isA relation so you know that if "cat is an animal" and "animal is an organism" then "cat is an organism". The second rule says that if "something is a kind of something else" then "something else cannot be a kind of something". (In other words isA is transitive but not reflexive.) With these two rules in the knowledge base an attempt to add a contradictory statement is rejected. That's how my software works. More sophisticated knowledge bases like SUMO would be able to handle much more subtle distinctions, such as the difference between an instance of something (Fred is my cat) and a class of something (cats are mammals).

edit:

One other thing is that if you have told your knowledge base that "cat is an animal" and "animal is an organism", it already knows that "cat is an organism" because of the transitivity rule, and when you tell it that, it won't bother storing it because it already knows it. If instead you told it that "cat is an animal" and "cat is an organism" it would store both of those, as well as "animal is an organism" when you told it that, so there is still plenty of scope for garbage collection during sleep cycles.
Title: Re: Project Acuitas
Post by: WriterOfMinds on May 04, 2018, 05:12:03 am
I've got some pieces of what you're describing, but I'm not quite there yet.

Acuitas knows some transitivity relations (including the one for isA).  And when new information comes in, he does check whether he already knows it and apply the inheritance transitivity rule.  So this would happen as you described:

Quote
One other thing is that if you have told your knowledge base that "cat is an animal" and "animal is an organism", it already knows that "cat is an organism" because of the transitivity rule, and when you tell it that, it won't bother storing it because it already knows it.

Only hearing the triples in a non-optimal order will create redundant links that need to be cleaned up.

Acuitas is also capable of detecting flat contradictions, i.e. he won't store a statement and its negative simultaneously.  If told "A cat is not an animal," while already knowing "a cat is an animal," he would say "I disagree" or something.  However, that's as far as validation of incoming information goes for now, and Acuitas doesn't yet use the "(x isA y) implies not (y isA x)" rule.

As more of a general thought, I wonder if it could be a good idea to store new information "tentatively" and offload some validation to a sleep or idle phase, even for contradictions that it's possible to detect up-front.  Because as the database grows, searching for all possible contradictions might become an unacceptable performance drain during a real-time conversation.
Title: Re: Project Acuitas
Post by: infurl on May 04, 2018, 05:35:21 am
As more of a general thought, I wonder if it could be a good idea to store new information "tentatively" and offload some validation to a sleep or idle phase, even for contradictions that it's possible to detect up-front.  Because as the database grows, searching for all possible contradictions might become an unacceptable performance drain during a real-time conversation.

There was a time when theorem proving systems would run for weeks at a time to digest a set of rules but over the years advances in the underlying theory, faster algorithms, and faster hardware have reduced that time considerably. There is a website called Thousands of Problems for Theorem Provers which has archived thousands of rule sets and folks can test out their theorem proving software on them and compare them to existing benchmarks. I think the best ones can solve all the problems in a matter of hours nowadays.

http://www.cs.miami.edu/~tptp/

I spent years researching and developing theorem proving software and the library that I eventually completed can run all its regression tests in just microseconds. I'm confident that it will be fast enough to handle hundreds of different conversations simultaneously in real-time. I have not yet tested it out with TPTP though, and I really have to do that before I can claim any records, if ever.

Regardless of speed though, there is still good reason to segregate and cache new propositions. For one thing, different people have different belief systems. You might want to have one knowledge base that is strictly science based, and another knowledge base that believes in fairies. The two would share a large number of rules, such as water flowing downhill, but would diverge on the subject of fairies. It would also want to maintain separate models for each interlocutor so it could understand that someone believes something even if the knowledge base itself doesn't accept it.

Such knowledge about knowledge crosses the boundary from first order logic into higher order logic. In the general case higher order logic is intractable but researchers are gradually isolating the useful special cases that are computable.
Title: Re: Project Acuitas
Post by: spydaz on May 04, 2018, 09:22:26 am
Here's an example of an inheritance loop:

cat <is-a> animal
animal <is-a> organism
organism <is-a> cat

Do you have a means of rejecting contradictory statements?

For example, in a first order logic knowledge base you would have rules like:


(forall ?x ?y ?z
        (implies (and (isA ?x ?y) (isA ?y ?z))
                 (isA ?x ?z)))

(forall ?x ?y
        (implies (isA ?x ?y)
                 (not (isA ?y ?x)))


The first rule defines transitivity for the isA relation so you know that if "cat is an animal" and "animal is an organism" then "cat is an organism". The second rule says that if "something is a kind of something else" then "something else cannot be a kind of something". (In other words isA is transitive but not reflexive.) With these two rules in the knowledge base an attempt to add a contradictory statement is rejected. That's how my software works. More sophisticated knowledge bases like SUMO would be able to handle much more subtle distinctions, such as the difference between an instance of something (Fred is my cat) and a class of something (cats are mammals).

edit:

One other thing is that if you have told your knowledge base that "cat is an animal" and "animal is an organism", it already knows that "cat is an organism" because of the transitivity rule, and when you tell it that, it won't bother storing it because it already knows it. If instead you told it that "cat is an animal" and "cat is an organism" it would store both of those, as well as "animal is an organism" when you told it that, so there is still plenty of scope for garbage collection during sleep cycles.


But Remember that the determiner ALL Must be included for Full inheritance... The (is a) relationship and other relations ships only have a strong recursive relationships When the determiner is Known. otherwise Only what is pertaining to the Cat Query is relevant all though there may be potential recursive connections. often we capture the triple (Subject Predicate object ) but the determiner is also key to the relationship. ITs correct to store the truth value of the statement or the confidence value, then if the determiners are not known then when recusing the relations only the high confident relations should be returned.

Fred is my cat >>>> I suggest changing My into PERSON then;
fred is Pauls cat < can respond to who is fred?.
QuestWord (Who)/ (Predicate-Subject)? (is),(Fred).....

Its quite hard with so many potential variations of a sentence to explain the same thing; i tend to only capture information if it fits the rule structures i can handle correctly; just simply loosing the data... Hoping that a different function can learn from the sentence structured... if not at the end a "dirty" unstructured capture takes place. Over time the Unstructured captures can be examined o see what type of structures are not being captured.... (subject predicate object) - captures so much! for the first order logic (unless, the determiner is (ALL/SOME) then i don't save it as a proposition for deductive recursing)... I suppose A cat (falls under SOME).

I would think that we would hope that most of the data being captured as Subject/verb/object) can be put into first order logic; i try not to change the input to fit the structure ... as it looses its conversation value/meaning; Yet it is desirable to have the FULL first order logic database.
 

i use a software http://www.cognitum.eu/Semantics/FluentEditor/ useful for building onltologies from TRIPLES (DESCRIPTIVE LOGIC)......
 
Title: Re: Project Acuitas
Post by: Don Patrick on May 04, 2018, 01:48:15 pm
Quote
cat <is-a> animal
animal <is-a> organism
organism <is-a> cat
Unless all these words are synonyms, you know one of these triples is wrong.
I prefer to think that all three are correct. x is-a y implies that at least some y's are x's: Some organisms are cats. I find this useful to store because having more direct knowledge means the program has to spend less time traversing indirect deductions. Humans similarly often use assumptions over deep inferences, because inferences take more time and effort. For computers it's just a matter of storage space vs speed. You can keep the "redundant" facts to save time when looking up knowledge, or you can remove them to save space.
Title: Re: Project Acuitas
Post by: WriterOfMinds on May 04, 2018, 03:32:20 pm
Quote
I prefer to think that all three are correct. x is-a y implies that at least some y's are x's: Some organisms are cats. I find this useful to store because having more direct knowledge means the program has to spend less time traversing indirect deductions.

I store a different kind of link to express this: organism <has-subtype> cat.  In my scheme at least, x is-a y implies that all x's are y's, and the reverse, all y's are x's, is not necessarily correct.
Title: Re: Project Acuitas
Post by: ivan.moony on May 04, 2018, 04:37:59 pm
Quote
I prefer to think that all three are correct. x is-a y implies that at least some y's are x's: Some organisms are cats. I find this useful to store because having more direct knowledge means the program has to spend less time traversing indirect deductions.

I store a different kind of link to express this: organism <has-subtype> cat.  In my scheme at least, x is-a y implies that all x's are y's, and the reverse, all y's are x's, is not necessarily correct.

Dealing with types of data subsumes a use of some set operators at rudimentary level. Here are some operations I find useful when dealing with sets:
We can lean data types on these operators, and I find useful set builder notation (https://en.wikipedia.org/wiki/Set-builder_notation) combined with logical operators and, or, not. In simplified example:To further develop a set algebra, we may reach for De Morgan's (https://en.wikipedia.org/wiki/De_Morgan%27s_laws) laws. In example:As Boolean algebra is just a specific form of set operations over empty (false) or universe (true) sets, De Morgan's laws naturally apply to logical operators too.

Advanced set examples would include incorporating logic predicates in set builder notation, but that could be left out if we don't want to complicate too much, as the matter then develops into full blown logical language.

Anyway, the above examples would bring in a nice reasoning about sets, while they keep reasonably simple form for a concrete implementation.

If you want to implement these set operations, I recommend keeping all the set-element data in disjunctive normal form (https://en.wikipedia.org/wiki/Disjunctive_normal_form), or even better conjunctive normal form (https://en.wikipedia.org/wiki/Conjunctive_normal_form). Conjunctive normal form  has some desirable properties regarding to logic reasoning incorporating logic resolution (https://en.wikipedia.org/wiki/Resolution_(logic)) rule, having in mind possible future project development.
Title: Re: Project Acuitas
Post by: spydaz on May 06, 2018, 11:56:19 am
Quote
I prefer to think that all three are correct. x is-a y implies that at least some y's are x's: Some organisms are cats. I find this useful to store because having more direct knowledge means the program has to spend less time traversing indirect deductions.

I store a different kind of link to express this: organism <has-subtype> cat.  In my scheme at least, x is-a y implies that all x's are y's, and the reverse, all y's are x's, is not necessarily correct.



Dealing with types of data subsumes a use of some set operators at rudimentary level. Here are some operations I find useful when dealing with sets:
  • x <is-element-of> A
  • A <is-subset-of> B
  • A <equals> B
We can lean data types on these operators, and I find useful set builder notation (https://en.wikipedia.org/wiki/Set-builder_notation) combined with logical operators and, or, not. In simplified example:
  • x <element-of> (A <union> B) = (x <element-of> A) <or> (x <element-of> B)
  • x <element-of> (A <intersect> B) = (x <element-of> A) <and> (x <element-of> B)
  • x <element-of> (<complement> A) = <not> (x <element-of> A)
To further develop a set algebra, we may reach for De Morgan's (https://en.wikipedia.org/wiki/De_Morgan%27s_laws) laws. In example:
  • <complement> (A <union> B) = (<complement> A) <intersect> (<complement> B)
  • <complement> (A <intersect> B) = (<complement> A) <union> (<complement> B)
As Boolean algebra is just a specific form of set operations over empty (false) or universe (true) sets, De Morgan's laws naturally apply to logical operators too.

Advanced set examples would include incorporating logic predicates in set builder notation, but that could be left out if we don't want to complicate too much, as the matter then develops into full blown logical language.

Anyway, the above examples would bring in a nice reasoning about sets, while they keep reasonably simple form for a concrete implementation.

If you want to implement these set operations, I recommend keeping all the set-element data in disjunctive normal form (https://en.wikipedia.org/wiki/Disjunctive_normal_form), or even better conjunctive normal form (https://en.wikipedia.org/wiki/Conjunctive_normal_form). Conjunctive normal form  has some desirable properties regarding to logic reasoning incorporating logic resolution (https://en.wikipedia.org/wiki/Resolution_(logic)) rule, having in mind possible future project development.


I notice that there are a lot of crossover between set theory / venns and first order logic.....
The rules are the same but with venns there is that extra visual element. Personally i had thought to build "Bags" of information adding Each intersecting bag  as a list item in the bag ... realising eventually it would be a tree again!  (logic tree) .... Which in-turn is a list!

All dogs are mammals - Some mammals are dogs ...... Its an automatic inferance.... All A's are B = Some B are A Implied.....

Title: Re: Project Acuitas
Post by: WriterOfMinds on June 03, 2018, 07:50:12 pm
This past month I did some preliminary work on a whole new feature – episodic memory, or memory of events.  This enables Acuitas to store and recall records of past “experiences.”  The fun part of episodic memory is figuring out …

1) … what to store (and what to forget),
2) … how to organize stored material, and
3) … how to access relevant stored material when it is needed.

I mostly worked on 2) this month, and wrote a block of code that will group adjacent raw event records into memory files.  A measure of similarity (both of the events themselves, and of Acuitas' internal state background at the time) is used to determine which events belong in the same “scene” or “episode,” and where the boundaries between memories should lie.  Minor “scenes” are in turn grouped into higher-level umbrella memories, tree-style.

Implementing this served to show me what a deep rabbit hole episodic memory could easily turn out to be.  There are heaps of little things I need to do to truly make it functional – I may even turn it off temporarily once I've put it through a bit more testing, since I haven't implemented selective storage/forgetting yet, and that means the memory folder will bloat rather quickly.

I also added a conversational feature to make use of the stored memories.  When Acuitas is telling someone what he thought about today, he now has the option to check episodic memory and see whether he ever thought about this concept before, and how long it has been since he previously did so.  He then generates some comment like “I've not done that in a long time,” or “I did that a minute ago also.”  The conversion of absolute time units to vaguer, more relative terms like “long” and “short”  establishes a kind of subjective time sense; Acuitas has a particular notion of what a “short time” is that might not match up with what a human would think of as such (though I tried to keep the scales roughly human).

Blog post for this month: http://writerofminds.blogspot.com/2018/06/acuitas-diary-12-may-2018.html
Title: Re: Project Acuitas
Post by: WriterOfMinds on September 05, 2018, 05:29:17 am
I haven't posted in a while because I've been busy overhauling the text parser.  And that's not very interesting to talk about, because it's just me taking features the parser already had and implementing them in a different way.  I'd decided that the scheme I was using had some fundamental deficiencies and should be re-worked in order to become closer to the way I actually read, and to better enable future expansion.  I was hoping this would go quickly, given the experience I had already gained from writing the previous text parser ... but no.  It turned out to be a major project that took far longer than the amount of time I'd allocated for it.

There are a few new enhancements that I managed to squeeze in along the way, however:

* Some infinitives are now handled properly. (Sentence example: "A pot is used to cook.") Before, Acuitas treated them like any other prepositional phrase, which meant that the word inside got marked as a "noun."  It's now marked as a verb.

* Previously, Acuitas could store links indicating what actions an entity can do.  I added a new link type for the actions an entity can have done TO it, and the ability to detect some sentences that express that information.  E.g. "An object can be pushed."

* I've started working on possessives and family/ownership relationship links. I ended up defining Acuitas' very first type of three-ended link: <A> is <C> of <B> to handle the possessives.

The feature is still somewhat incomplete. For now, he can only properly detect and store possessive links that join proper names.  That's because the proper name is how he detects that something is an instance rather than a class; he can't yet build memory nodes for abstract instances like "somebody's cat"; he still thinks that "cat" is strictly a type of thing.

Everything is buggy as all get out right now, too ... but the way this summer has gone, it was about the best I could do.

A little more on the blog: http://writerofminds.blogspot.com/2018/09/acuitas-diary-13-august-2018.html
Title: Re: Project Acuitas
Post by: WriterOfMinds on September 30, 2018, 10:56:59 pm
This month I updated the text parser and other speech features to do a couple more new things with verbs. First, I threw in recognition of the present progressive tense, so I can now tell Acuitas what I'm doing at the moment. For the time being, such information is treated in much the same way as comments about past-tense actions, which I taught him to recognize a while ago; it isn't stored, and responses are rather meaningless. BUT I'll find uses for it later.

I think the more interesting new thing is recognition ability for a couple of link-forms related to state change or state retention. Up until now, Acuitas has learned what verbs “mean” only in terms of a) what can do that action and b) what that action can be done upon. Now, he can learn what a verb actually does by tying it to an adjective. Here are some examples:

To live is to stay alive.
To appear is to become visible.
To finish is to make complete.

I also added “type of” links for verbs, so Acuitas can categorize specific verbs under more general ones, like this:

To smash is to damage.
To walk is to move.
To talk is to communicate.

A little extra on the blog as usual: http://writerofminds.blogspot.com/2018/09/acuitas-diary-14-september-2018.html
Title: Re: Project Acuitas
Post by: Korrelan on September 30, 2018, 11:54:45 pm
Your project does remind me/ stirs feelings/ frustrations from many years ago when I first started messing with AI.  I always had a need/ feeling that there must be some intuitive logical way of describing links\ relationships like this.  Like there was some underlying structure that I just couldn’t find or get my head around… I could feel the logic… but not find it, if that makes sense.  Still drives me mad… lol.

I enjoy following your project, it’s cool to see the steady, logical, methodical progress.

 :)
Title: Re: Project Acuitas
Post by: WriterOfMinds on March 04, 2019, 04:59:38 am
This month I returned to a can of worms I opened up last year, namely episodic memory.  Acuitas had quickly built up a huge clutter of memories concerning very trivial day-to-day events.  Size remained in the Megabytes range (they're just text files), but on principle, this couldn't be allowed to continue – especially since the memories might eventually grow to encompass richer levels of detail.  In addition to overflowing its available space, a memory that literally records everything will face access problems.  The more information you keep, the longer it takes to search through it and extract what you want at the moment.

This leads on into the tricky question of what to forget.  How to decide which memories are worth keeping?  Part of my work this month was focused on computing a “significance measure” which assigns a numerical value to each memorized scene.  Elements I use to judge the significance of a memory include …

* Primacy: was this the first time something happened?
* Uniqueness: how rare are memories similar to this one?
* Complexity: how many features does this memory have?

Since some of these measures are statistical and depend on the overall memory population, they can change over time.  I wrote a process that crawls through the episodic memory and updates all the significance measures, and I threw that into Acuitas' sleep cycle.

To improve the ease and speed of accessing the memories, I added a layer of “type nodes” that link together memories which share certain salient features in common.  Instead of crawling through the whole list to find memories that relate to a current situation, Acuitas can just look at the relevant “type nodes” and find a list of memories that match.

Last, I worked on some methods for consolidating memories.  I devised a way to create summaries of low-level scenes that are then stored inside the super-scenes higher up the tree; eventually, these summaries might be what remains when the lower-level “detail” scenes are forgotten.  The summarizer attempts to extract information that is common across multiple events or sub-scenes within a scene.  I also wrote functions for merging adjacent scenes that have become sparse.

All that, and I still haven't gotten to the actual forgetting part!  That will come next month (I hope).

https://writerofminds.blogspot.com/2019/03/acuitas-diary-16-february-2019.html
Title: Re: Project Acuitas
Post by: Art on March 04, 2019, 03:14:13 pm
How about a 4th element to assist in assigning the memories:

Importance - Having value and worthy of note.

It seems that one of the more difficult aspects of this endeavor might be deciding what information/memories are temporal or ephemeral and which are significant and worth keeping? How best to determine and decide this?

Most casual conversations about sports, weather or family matters are transient and do not carry a higher weighted value. Such talks or topics should be or could be "timed" to "fade away" after a few cycles.

This is still a very difficult task to decide and affix weighted values on which to keep and which to omit. Perhaps once the computer has enough "topical" information it will be able to separate the grain from the chaff, so-to-speak.

Best of luck and please keep us posted on your progress!
Title: Re: Project Acuitas
Post by: WriterOfMinds on March 06, 2019, 07:33:30 pm
Quote
How about a 4th element to assist in assigning the memories:
Importance - Having value and worthy of note.

Ummm ... that sounds circular.  The definition you're giving for "importance" here is very similar to what I had in mind when I used the word "significance."  So, you seem to be suggesting that I use significance as a measure of itself.  I don't think I can manage that  ???

You're correct that there need to be more factors rolled into the significance measure.  For instance, the most important memories may be those related to fulfilling primary goals, or those associated with strong emotions.  (Perhaps you're getting at something like this in the second half of your post, when you consider the assignment of importance based on topic.)  But Acuitas has neither goals nor emotions yet, and no real way of discerning which topics are "meaningful" in a human sense.  So that sort of thing will have to wait for later.
Title: Re: Project Acuitas
Post by: Art on March 07, 2019, 04:08:17 am
Without reading too much into what I wrote I meant the importance to be the "important" issues/topics/data as opposed to those fleeting, unimportant, ephemeral discussions. It snowed last week might be interesting but the topic will likely have as much lasting importance as the soon to be melting snow. It doesn't carry with it anything that demands attention or ...importance.

Whether a casual conversation deals with "water cooler" topics and idle gossip or something major like an employee layoff or a merger next week with a former competitor. Then there's always the task of attempting to measure or assign weights to those important issues vs the non-important ones.

So yes, I was merely stating my opinion for a possible inclusion but the determination of importance brings a certain degree of difficulty for the programmer. Perhaps after a period of letting the computer "examine" various examples, it might be able to decide on its own, that which is of value and that which is not. Machine learning and such is non-trivial at best but from what I've read, progress is being made.

Best of luck on your project.

Title: Re: Project Acuitas
Post by: Hopefully Something on March 07, 2019, 05:00:24 am
You could judge importance by the degree to which you predict it will effect you, positively/negatively. High positive and high negative = high importance. Things of equal importance could get prioritized by the time frame. Present = most important, furthest future = least important.
Title: Re: Project Acuitas
Post by: LOCKSUIT on March 07, 2019, 06:05:38 pm
Wait, it's the other way around...work hard and get utopia in far future plan.....If you focus on food/money at present (I know u do), then......no utopia later! And we can, if you try.
Title: Re: Project Acuitas
Post by: WriterOfMinds on March 08, 2019, 01:07:28 am
Oh, Locksuit.  What would you know about any of our personal lives and what we do or don't focus on?

There's a necessary balance between short-term and long-term thinking.  You will never bring about utopia if you ignore your immediate need for food and starve. 

I don't think HS was suggesting that an AI should pursue instant gratification at all costs.  The time frame was only supposed to come into play if two things would otherwise have equal importance.  If Problem A will kill you tomorrow and Problem B will kill you in twenty years, and all else (e.g. impact on the rest of living creatures) is equal, I think it does stand to reason that Problem A should occupy your mind more and be solved first.
Title: Re: Project Acuitas
Post by: WriterOfMinds on April 15, 2019, 02:35:41 am
Got the forgetting algorithm done (for now).  It has two major parts.  The first is basically a population-management system; it determines how many episodes need to be forgotten each time the memory collection is pruned.  I can cap the number of episodes allowed in storage at some maximum value (based on available storage space or what have you).  The population manager checks how many memories are already in storage, and how many new ones have formed during the last cycle.  A high growth rate is allowed initially, but forgetting becomes more and more aggressive as the storage area fills.  When the cap is reached, Acuitas must forget the same number of memories he creates.

The second major part is the code that, given a number of memories that must be forgotten, takes care of selecting which ones.  This is a weighted random process; memories with less significance have a higher chance of being forgotten, but the priority isn't absolute. Memories chosen to be forgotten are deleted.  Any higher-tier memories that have been badly “hollowed out” by this process are then merged with their most similar neighbor.

More on the blog: https://writerofminds.blogspot.com/2019/04/acuitas-diary-17-marchapril-2019.html

(https://2.bp.blogspot.com/-rgeLME5R34w/XLPd0NlN-8I/AAAAAAAABME/HEvm-WHQg3Yx8Ex54Uuai_ng7ZU-tqXkgCLcBGAs/s1600/episode_forget.png)
Title: Re: Project Acuitas
Post by: Art on April 15, 2019, 04:13:58 am
WOM, you mentioned that the program assigns a random weighted determination over which memories to delete and which to keep. How is it able to determine whether a particular memory is more important than some other one.
Is there another "sentinel" or overseer portion that makes note of the more important memories and elects to move or save them before it ends up being one of those randomly weighted selections marked for deletion? You mentioned, "...takes care of selecting which ones." How or what determines "significance"?

I am curious as a good memory is a terrible thing to waste. Nice direction.
Title: Re: Project Acuitas
Post by: WriterOfMinds on April 15, 2019, 05:43:48 am
Memories get assigned a significance score at creation (the score is also updated later as necessary).  I talked about how this score is determined in last month's update, and that part of the system hasn't changed, but to re-summarize: the more unique a memory is, the more significant it's considered to be. Memories that are the first of their kind and memories that contain more/richer detail also get a significance boost.

There is a threshold in the significance score beyond which a memory is "safe," yes.  So you shouldn't get a fluke in the random process taking out a really important one.
Title: Re: Project Acuitas
Post by: Art on April 15, 2019, 01:33:26 pm
Ah yes...I went back and read the Feb., Mar., Apr. issues of your postings. (Should have not "forgotten" to do that!) ::)
Nicely explained!
Title: Re: Project Acuitas
Post by: LOCKSUIT on April 15, 2019, 01:41:15 pm
I'll scan the whole thread...somehow it got by me O0

looks like my "tree drawings" lol....and the forgetting idea.....close enough ! ._.

Surely no one can be as far as lock though, I purposely end up too far ahead, no one will find here spot!. . .
Title: Re: Project Acuitas
Post by: LOCKSUIT on April 16, 2019, 08:28:11 am
Ok I'm caught up on the whole thread...wow, nice. I think I let the thread go few months ago... The name Acuitas is just a name, but if I seen The Bomb in the Recent Threads...no doubt it's an eye-opener hehe...

I'm gonna share some ideas. Not all though... we seem to hide our secrets hehe, at the expensive of dying children/wildlife. Maybe don't?

Here's half of how forgetting/remembering works:
- Things are remembered if they are sensed enough (energized), loved, related (especially to strong role-model nodes), entails, and frequency....the AI can also ask you how much so a memory is any of these.
- I agree 'rank' on nodes in the net is crucial for goals; Animals are born with a native STRONG outlook for stuff similar to food/mates. If cats are dogs, then you may want to update your desire you seek (finding a pet) to dogs if cats cost too much. Without love, AGI may seek socks, or nuclear power, or leafs. What are the ethics you want it to seek? What to research/implement? Install it. Make it output change that makes the world smarter. Positive/negative rank exists too I assume, and yes close events are more important if more/as critical to far away events in time.
- Other half is Pruning. . .secrets! With pruning, you usually just save all but in a more compressed way.

Also, if Tim has a pet fish and that fish has a virus and that virus has a food inside itself, and you don't talk to Tim anymore, and talk to Sally, then no more fish, no more Tim, you don't need to know any of what classes under Tim for now, so, you model whom you speak to! You switch near the root of the tree.
Title: Re: Project Acuitas
Post by: WriterOfMinds on July 19, 2019, 03:40:45 pm
Oookay, I'm long overdue for an AI update.  The big new project for the past couple of months has been the concept of things being in states, and the ability to track those states.

Way back in Diary #7, I introduced a division between short-term (or naturally temporary) information and long-term (or essentially static) information.  It's a bit like the division between things you would use estar and ser for in Spanish, though it doesn't follow those rules strictly.  Previously, Acuitas simply discarded any short-term information he was given, but I've added a new memory area for saving this knowledge.  Like the existing semantic memory, it works by storing linked concept pairs … with the difference that the short-term ones are stored with a time stamp, and Acuitas anticipates that they will “expire” at some point.

The existing feature that allows short-term and long-term information to be distinguished (by asking questions, if necessary) can also grant Acuitas an estimate of how long a temporary state is likely to last.  While idling, he checks the short-term state memory for any conditions that have “expired” and adds questions about them to his queue.  Then, when next spoken to, he may ask for an update: is the information still correct?

I also added the ability to parse and store a new type of information link – location – along with the associated “where is” questions.  Location links are three-ended so that they can store not only a thing and its location, but also spatial relationships between two things (under, over, in, beside, etc.).

https://writerofminds.blogspot.com/2019/07/acuitas-diary-18-mayjune-2019.html
Title: Re: Project Acuitas
Post by: WriterOfMinds on September 07, 2019, 04:19:47 am
I spent the past two months revisiting the text parser, with the big goal this time around of adding support for dependent clauses. In case anyone's high school grammar is rusty, a clause is a subject/verb pair and any words associated with them; a dependent clause is one that is part of another clause and can't be a sentence by itself. Previously, Acuitas could handle one subject and one verb group per sentence, and that was it.

After last year's feverish round of development, I left the text parser a mess and never wanted to look at it again. So the first thing I had to do was clean up the disastrous parts. I ended up giving some of the functions another serious overhaul, and got some code that is (I think) actually maintainable and comprehensible. Whew.

Some sentence types that are very important for reasoning use dependent clauses. For instance, sentences that discuss subordinate pieces of knowledge:

I know [that a cheetah is an animal].
I told you [that a grape can be eaten].
I fear [that the car broke yesterday].

And sentences that express conditional information:

[If a berry is green], it is unripe.
[If you eat that berry], you will get sick.
The gun will fire [if you pull the trigger].

Acuitas can parse sentences like the ones above now, but doesn't really do anything with them yet. That will come later and require updates to the high-level conversation management code.

Blog link: https://writerofminds.blogspot.com/2019/09/acuitas-diary-19-julyaugust-2019.html
Title: Re: Project Acuitas
Post by: Hopefully Something on September 07, 2019, 06:12:24 am
Oh my gosh, that's like a math test and a grammar test rolled into one. But it's five hundred pages, there's no solution manual, and you have to get a hundred percent. I'd go a few steps then get mired in a web of confusion. Still, here's hoping.  O0
Title: Re: Project Acuitas
Post by: DemonRaven on September 08, 2019, 09:57:56 am
Give it a old brain like mine it will forget things lol  :D :2funny:

This month I updated the text parser and other speech features to do a couple more new things with verbs. First, I threw in recognition of the present progressive tense, so I can now tell Acuitas what I'm doing at the moment. For the time being, such information is treated in much the same way as comments about past-tense actions, which I taught him to recognize a while ago; it isn't stored, and responses are rather meaningless. BUT I'll find uses for it later.

I think the more interesting new thing is recognition ability for a couple of link-forms related to state change or state retention. Up until now, Acuitas has learned what verbs “mean” only in terms of a) what can do that action and b) what that action can be done upon. Now, he can learn what a verb actually does by tying it to an adjective. Here are some examples:

To live is to stay alive.
To appear is to become visible.
To finish is to make complete.

I also added “type of” links for verbs, so Acuitas can categorize specific verbs under more general ones, like this:

To smash is to damage.
To walk is to move.
To talk is to communicate.

A little extra on the blog as usual: http://writerofminds.blogspot.com/2018/09/acuitas-diary-14-september-2018.html
Title: Re: Project Acuitas
Post by: LOCKSUIT on September 08, 2019, 09:47:01 pm
WoM, what is your opinion on Korrelan's main project? I mean, you have a different take on AGI. Korrelan seems to have done all the right or great things to do such a endevour - studying the brain, Wikipedia, ~53 y/o dude with good programming skills, building realistic model, etc. You could call it the "right way" to do AGI. But you seem to have a more GOFAI approach and hand code a lot of things, similar to my project.
Title: Re: Project Acuitas
Post by: WriterOfMinds on September 09, 2019, 02:05:45 am
Trying to stir the pot, are you?  ;)

For starters, I don't think there's an established "right way" to build AGI, and anybody who tries to declare one is being arrogant. The field is too young. Nobody's made an AGI yet, and even after someone does, that won't be a proof that there is no other (or better) way of doing it. This is pioneering work. None of us know what we are doing, and arguments about method often devolve into the blind trying to lead the blind.

Korrelan's project follows a "bottom-up" approach, reproducing the phenomena of intelligence by mimicking the one thing we see associated with it in nature: the structure and low-level behavior of the brain. I'm following a "top-down" approach: reinventing intelligence on a functional or conceptual level, using techniques that are natural to the digital medium. Neither approach is wrong; either approach may get somewhere. If they both get somewhere, the results could be very different and contribute valuable diversity to the field. I think it's fine to have people exploring in both directions.

Knowing what I do about your motivations, I suspect you want to pour maximum resources into whichever path will lead to AGI the fastest. But I'm not an oracle. I really don't know who will be winning this race. The proof will be in the results, so we'll just have to wait and see.

Now, here are a couple of possibly controversial opinions:

1. Korrelan seems to belong to the "AGI must be embodied" school. I do not. It's my opinion that divorcing reasoning from sense perception and motor control is not only feasible, but a rather interesting thing to try.
That being said, sense perception and motor control can be incredibly useful for certain applications, so I don't fault anyone for working on them. It all comes down to the type of project you want. I have some less-abstract projects of my own that I will probably post about someday, though they've been getting neglected because Acuitas is such a time hog.

2. We don't know everything there is to know about the brain yet. My instincts tell me that the brain encompasses a large amount of information/structure ... even before it starts learning. Therefore, I'm always suspicious of projects that assume full intelligence will arise from a slate that starts out mostly blank. "I've got one simple idea/computational element/learning algorithm/neuron-like thing, and if I can just make a soup containing millions of them then poof, I will have AGI!" Sorry: I don't think it's going to be that easy. Learning is crucial for general intelligence, but to even learn effectively I suspect you need a lot of groundwork first.

To quote Matt Mahoney from the Topicbox mailing list: "The brain is not just a few neural network modules. It has thousands of specialized structures, hundreds of types of neurons, and hundreds of neurotransmitters. We are born knowing to fear heights and spiders, how to swallow and cough and blink, how to learn language, and how to distinguish what is good to eat from among thousands of scents. Altogether we are born knowing half of what we know as adults, 10^9 bits encoded in our DNA and 10^9 bits of long term memory for words, pictures, and sounds. There is no good way to avoid coding the inherited knowledge ..."
Title: Re: Project Acuitas
Post by: LOCKSUIT on September 09, 2019, 02:57:25 am
"Trying to stir the pot, are you?  ;)"

:#


I agree, there is many ways and I can't confirm a NN-less approach is undoable at all OR efficient/ flexible... And while you can go for the likely best choice we don't know that yet, even if we think we know why. It is possible, to be extra sure however. One would hope to pick the right way. Preferably a controllable way.

I actually can possibly confirm that a NN-less, and NN-based algorithms are both possible, there is some proof I've noticed. For example my algorithms, while Transformers are very flexible and are becoming near perfect bloggers/ translators.
Title: Re: Project Acuitas
Post by: Don Patrick on September 09, 2019, 05:56:24 pm
I tend to agree with much that WriterofMinds writes. The way I see it, the more of us try different things, the more chance that one of us finds an approach that works well. Moreso, I consider human intelligence to consist of two different (yet technically same) methods: Associative intelligence and rational intelligence. Neural networks handle the first type well enough, they are fast but also sometimes completely off the mark. WriterofMind's project is of the second type, which is generally slower but has absolute accuracy. Both are suited to different circumstances, but neither of them alone equal the combined intelligence of a human who uses both. That is not to say one shouldn't explore each individually to its limits, just to consider that there is no single "correct" approach.
Title: Re: Project Acuitas
Post by: WriterOfMinds on September 28, 2019, 11:16:33 pm
This month, I did some work on cause-and-effect reasoning and goal satisfaction, which introduced the conversational possibility of asking Acuitas what he wants.

I leveraged the text interpretation upgrades from last month to implement encoding and storage of conditional relationships, such as “if a human eats food, the human will not starve.” These relationships can be remembered and used to infer the effects of an action. I also threw in the ability to learn that a pair of concepts are opposites or antonyms.

Then I implemented some inference mechanisms so that Acuitas can determine whether some action serves – or contradicts – a particular goal. Acuitas will now claim to desire things that support one of his goals and not desire things that contradict one of his goals, while remaining ambivalent about everything else. The examples below reference a self-preservation goal … not because I think that should be the primary goal for an AI, but because it's one of the easier ones to define.  In Acuitas' knowledge representation, it basically comes down to “Self (has quality)/(is in state) 'alive' or 'existent.'”

With this goal active, Acuitas can answer any of the following:

“Do you want to be alive?”
“Do you want to be dead?”
“Do you want to live?”
“Do you want to die?”

… where the last two (live/die) rely on verb-defining links in the semantic database, and the two negative versions (dead/die) rely on awareness of opposites.

The most complex inferences currently possible are illustrated by this little interchange:

Me: Do you want to be deleted?
Acuitas: I do not.

To produce that answer, Acuitas has to retrieve and put together five different pieces of stored information …

*If a program is deleted, the program “dies.” ← From the cause-and-effect/conditional database
*I am a program. ← From semantic memory (is-instance-of-class relationship)
*To die is to transition to state “dead.” ← From semantic memory (verb definition relationship)
*State “dead” is mutually exclusive with state “alive.” ← From semantic memory (opposites)
*I have a goal of being in state “alive.” ← From goal list

… to make the inference, “being deleted would violate my goals.”

The features still need a lot of generalization and expansion to be fully functional, but the groundwork is laid.
Title: Re: Project Acuitas
Post by: Hopefully Something on September 28, 2019, 11:38:14 pm
This sounds like a proto-Data from Star Trek.
Title: Re: Project Acuitas
Post by: WriterOfMinds on September 29, 2019, 02:54:05 am
You flatter me :)  He's probably a long way from being even a proto-Data.  But I try.
Title: Re: Project Acuitas
Post by: LOCKSUIT on September 30, 2019, 11:35:42 pm
Now I see more actual progress going on here than korr's project.

:))))))

I mean, it DOES something...

which could fulfill my goals
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 30, 2019, 03:44:11 pm
I set some smaller Acuitas goals this month so I would have a little more time to fix bugs and clean up my own mess.  The first goal was to enable identification of people from first names only, while allowing for the possibility that multiple people have the same first name. Using someone's full name with Acuitas establishes a link between the first name (as an isolated word) and the full name (with its connected person-concept).  If the first name is later used in isolation, Acuitas will infer the full name from it.  If multiple full names containing that first name are known, Acuitas will ask the user which one is meant.

The second thing I worked on was text parser support for a new grammar feature, with a focus on expanding the range of possible “I want” sentences Acuitas can understand.  The ability to parse infinitives, as in “I want to live,” was already present.  This month I worked on infinitives with subjects, as in “I want John to live.”

To see why this is tricky, consider the following sentences:

1. I want Bob to eat.
2. I want a fruit to eat.
3. I want food to live.

They all follow the exact same pattern and have completely different meanings. Notice that in the second sentence, you could move some words and get “I want to eat a fruit” without changing the implications too much.  Doing this to the third sentence would be bizarre (“I want to live food”) and doing it to the first sentence would be horrifying (“I want to eat Bob”).

The first sentence is the only one in which the noun (Bob/fruit/food) is the subject of the infinitive.  The key factor is who will be doing the action expressed by the infinitive.  In the first sentence, Bob is the one who will be eating if I get my way; in the latter two sentences, I'm the one eating and I'm the one living.  And that information is not actually in the sentence – it's in your background knowledge.  To properly understand these sentences, it's helpful to be aware of things like …

*I am a human
*Humans can eat fruit
*Bob is probably also a human
*I am probably not a cannibal, and therefore don't want to eat Bob
*Food can be used to sustain a human's life
*Once something is food, it's not living (or won't be living much longer)
*Living isn't an action you can perform on food

So here is where we bring to bear the full power of the system by having the Text Parser call the semantic memory for already-known facts about these words.  Acuitas can't quite store all of the facts listed above, but he does know that “humans can eat” and “fruits can be eaten.”  He might also know that the speaker and “Bob” are humans.  At this early, sketchy phase, that's enough for the parser to start discriminating.

Some sentences of this type are just plain ambiguous, especially when taken in isolation.  For example, “I want a plant to grow.”  Plants can grow (on their own), but they can also be grown (by a cultivator, whom the speaker might be).  Upon detecting an ambiguity like this, Acuitas will, as usual, ask the speaker about it.  This also works for cases when the information in the database is not yet extensive enough.

See the blog for some sentence diagrams: https://writerofminds.blogspot.com/2019/10/acuitas-diary-21-october-2019.html
Title: Re: Project Acuitas
Post by: Freddy on October 30, 2019, 05:33:41 pm
I popped over to Chatbots.org last night and there was talk of a chatbot competition - an online one so more people can take part.

Do you think Acuitas is ready to enter a contest or is this even something you would consider?

I am hesitant to enter my own bot in a competition  ;D
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 30, 2019, 06:02:35 pm
I would consider participating in contests eventually, but I don't think he's ready yet.  At the moment, he doesn't even have an interface that would let other people communicate with him over the web (and there is a *lot* more linguistic development I need to do).
Title: Re: Project Acuitas
Post by: LOCKSUIT on October 30, 2019, 06:48:18 pm
Quote
1. I want Bob to eat.
2. I want a fruit to eat.
3. I want food to live.

They all follow the exact same pattern and have completely different meanings. Notice that in the second sentence, you could move some words and get “I want to eat a fruit” without changing the implications too much.  Doing this to the third sentence would be bizarre (“I want to live food”) and doing it to the first sentence would be horrifying (“I want to eat Bob”).

I don't think I think of those facts when I read those 3 lines. In other words, we don't generate those linked tidbits, although we can. We just know its wrong. Like GPT-2 does. Would GPT-2 get them wrong? Nope. Do you put that much thought into all your daily activities and thoughts? Nope.

I think we can rearrange them if tasked with doing so, and then we check if its predictable. If so, we check if it is similar enough. It may be the bad of the good like eating bob, so we will recognize it is a bad decision and back off that branch path of the tree possibilities.

Wait i'm thinking...

In #2 we just say it and the man at the store just gives you a fruit.
In #3 we just say it and the man at the store just pertains to helping Bob out.
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 30, 2019, 07:12:13 pm
Quote
I don't think I think of those facts when I read those 3 lines.

You probably don't think of them consciously.  That doesn't mean your brain isn't using that information on some level.

Quote
Would GPT-2 get them wrong? Nope.

Oh, but it would.  I tried putting "I want a fruit to eat" into the 774M model.  On the second try, GPT-2 talked about an apple eating a person.

Quote
I want a fruit to eat. I'm a fan!" The other man agreed, but for him it was almost as if it was as if he was saying, "I don't care who eats it, I'm going to eat it!"
At first he was able to eat the other man's apple and then some of the fruit, but within a few days it became too much to manage. He began eating the banana, the grape, and most notably the apple.
It didn't seem to be a bad thing. The person who had been eating the apple for about nine minutes was now getting eaten by an apple that had a lifespan of over thirty days! And he was not even getting enough to eat!
But he kept on eating. And on the tenth day the man could eat the banana and the grape – but the apple had been poisoned and now it was completely rotten. His body was completely and completely covered in a thin layer of poison-y rotten flesh.
In his eyes it took on a terrible black colour, it looked as if it belonged to a different world

Here, for your amusement, was the first try:

Quote
I want a fruit to eat. I really want a fruit to eat."
"Do do do do do do do do do do."
"I want to do a do a do a do a do a do a do a doa doa do a doa doa doaa."
"It seems like a wonderful thing to do. I want a pineapple to bite."
"I want to do a do a do a do a do a do a do a do a do a do a do a do a do."
"What kind of a thing do you want to do?"
"Ooh, you should do a do. I want to do a do a do a do. I want to do a do a do do a do a do a do a do a do a do a did do a."
"Do you want to do a do have a do a do a do a do a do a do a do a do a do a do a."
"I want them to do a do a do a do do

Ain't GPT-2 smart, folks? *claps*
Title: Re: Project Acuitas
Post by: LOCKSUIT on October 30, 2019, 07:34:02 pm
First let's see some more tests:
https://www.youtube.com/watch?v=XCXtn7_sW4M
Title: Re: Project Acuitas
Post by: LOCKSUIT on October 30, 2019, 07:48:34 pm
Hmmm......you know I swear GPT-774Model is not as good as the 375M one last on.

I just got this one:
Apples taste good. I love apples. Apples are a food. She was eaten by an
apples after a few days. The apple smell is an absolute must for me. The apple is sweet and slightly floral and it is a little bit sticky. So if you are not used to this then just go for it and give it a try. The apple is very tasty and they even made some sweet apple sauce and it was quite yummy. I was also happy with the  small portion size and even though some  apples didn't stay crisp for the whole time that I had them I didn't really care. It will last a long time in the fridge. I love the fact that they have a special offer for the apple lovers, the apple taste like a good summer night!
They also do different sized  scoops of apple. They also make  apple cider which is very nice too!
The apple  is one of the most amazing and tasty things that I have ever had. All around the world and the ones I have tried the best are all in New Zealand. I have had them all and everyone loved them


Wow gpt2...bad gpt2! Let's see your old version:
See attachment. Hmm, better!! No plural! But bad....
Title: Re: Project Acuitas
Post by: LOCKSUIT on October 30, 2019, 08:01:20 pm
My solution to this is it has to have seen it entail before, enough times at least. It may not be exact, ex. it's seen 'bob was eaten by a carrot', but as long as it knows carrot=apple 98% likely, then it can know it entails. In this case it doesn't. So it'd ignore that candidate 'apple' and 'apples'.

So all you need is frequency, a basically exact match proving it's 'normal'. ;p

It may be distant if you attempt to check if the end exists in memory,
"and Bob who i know very well was later then eaten by the thing that is called a bright red apple"
but gpt2 seems to work with distant sentences?
Title: Re: Project Acuitas
Post by: Don Patrick on October 30, 2019, 08:18:09 pm
Interesting progress, WriterofMinds, tackling such ambiguities already. I hadn't realised "to" was just as troublesome as "with" in that regard. I employ a more general distinction between living and non-living entities, plus a list of verbs that only living entities are known to do (e.g. eating in general, rather than specifically humans and specifically fruit). I find them handy to fall back on in the absence of more specific knowledge such as you have in mind.

I recently found an interesting debunking of GPT-2's understanding of ambiguous pronouns. Turns out it does not apply consistent logic but rather associates words with disregard to their role in the sentence.
https://arxiv.org/pdf/1811.01778.pdf
Title: Re: Project Acuitas
Post by: WriterOfMinds on October 30, 2019, 08:59:48 pm
Quote
I employ a more general distinction between living and non-living entities, plus a list of verbs that only living entities are known to do (e.g. eating in general, rather than specifically humans and specifically fruit). I find them handy to fall back on in the absence of more specific knowledge such as you have in mind.

In addition to looking at the actual concepts in the sentence, Acuitas also checks parent classes for relevant fact links ... moving up the hierarchy until something is found.  So this wouldn't be too difficult to set up.

Also, I put Lock's prompt into GPT-2 and can't resist sharing this last piece of nonsense.  GPT-2 telling us about the essence of life.

Quote
Apples taste good. I love apples. Apples are a food. She was eaten by an apple. She was eaten by an apple.
Apple. Her first love.
I love apples. She was an apple. She was an apple. She was eaten by an apple. My mother and I were eating apples, and the apples in our hands tasted good. I love apples. She ate an apple, she was an apple. She ate an apple, and she was eaten by an apple. You may like the smell of an apple, but you will not love it unless you love apples. She was an apple. She was eaten. She is an apple. She is an apple. She is eaten.
And that's how it is. An apple is an apple. She was eaten and eaten by an apple. That is the essence of life.
The apple is an apple.
The apple is an apple. I loved our family and our friends. I loved my mother and she loved me. She loved my father and he loved me. We loved each other.
Title: Re: Project Acuitas
Post by: Freddy on October 30, 2019, 09:32:38 pm
Here, for your amusement, was the first try:

Quote
I want a fruit to eat. I really want a fruit to eat."
"Do do do do do do do do do do."
"I want to do a do a do a do a do a do a do a doa doa do a doa doa doaa."
"It seems like a wonderful thing to do. I want a pineapple to bite."
"I want to do a do a do a do a do a do a do a do a do a do a do a do a do."
"What kind of a thing do you want to do?"
"Ooh, you should do a do. I want to do a do a do a do. I want to do a do a do do a do a do a do a do a do a do a did do a."
"Do you want to do a do have a do a do a do a do a do a do a do a do a do a do a."
"I want them to do a do a do a do do

Ain't GPT-2 smart, folks? *claps*

I'm thinking it was trying to sing there  :D
Title: Re: Project Acuitas
Post by: Freddy on October 30, 2019, 09:36:08 pm
Actually more seriously. I like GPT-2 for what it's trying so hard to do but it isn't intelligent. Mostly it's gibberish and what use is the kind of thing it produces? It's not like you can check sources and validate anything - it's just not dependable in the way I think people are looking for in AGI.
Title: Re: Project Acuitas
Post by: LOCKSUIT on October 30, 2019, 09:51:36 pm
Quote
Apples taste good. I love apples. Apples are a food. She was eaten by an apple. She was eaten by an apple.
Apple. Her first love.
I love apples. She was an apple. She was an apple. She was eaten by an apple. My mother and I were eating apples, and the apples in our hands tasted good. I love apples. She ate an apple, she was an apple. She ate an apple, and she was eaten by an apple. You may like the smell of an apple, but you will not love it unless you love apples. She was an apple. She was eaten. She is an apple. She is an apple. She is eaten.
And that's how it is. An apple is an apple. She was eaten and eaten by an apple. That is the essence of life.
The apple is an apple.
The apple is an apple. I loved our family and our friends. I loved my mother and she loved me. She loved my father and he loved me. We loved each other.

Maybe we have to give GPT-2 some slack. I mean, the global context is true. Apples are apples as it says. Life is about related families. They eat each other, they love each other. I eat it, it eats me. Same thing. At least GPT-2 writes more true knowledge than past LSTMs, so it's getting better. We'll have to figure out what is missing. WoM may be onto it.
Title: Re: Project Acuitas
Post by: WriterOfMinds on December 31, 2019, 07:37:25 pm
Acuitas Diary #22 (November+December 2019)

For the past two months there's been a lot of refactoring, and also a lot of not working on Acuitas because of holidays.  However, I did manage to get several small new features in …

*Acuitas now checks the short-term information database in addition to the long-term database when trying to retrieve the answer to a question
*Acuitas can now answer some questions about current internal states (e.g. “Are you sleepy?”)
*Acuitas can now answer questions of the form “Do you know that <fact>?” and “Do you know what <fact>?”

The first feature was quick to implement; I already had functions in place for retrieving information from the short-term database, and just had to ensure that the question-answering procedure would call them.  The second feature required a mechanism to associate some of the concepts in the semantic memory (which up until now have had no “meaning” beyond their connection to other concepts) to measurable conditions inside Acuitas – namely, whether his various drives are exceeding their threshold values or not.  So there is now a table that, for instance, ties a high value of the sleep drive to the word “sleepy.”

The third feature is my favorite.  Questions of the form “do you know that … ” use the dependent clause interpretation faculties that I added earlier this year.  And since “knowing” is an action that Acuitas is capable of, this word also can be internally grounded.  So Acuitas effectively defines “I know X” as “if the query form of X is submitted to my question-answering process, the process returns an answer (for open-ended questions) or answers 'yes' (for yes-no questions).”

And the best part?  It allows for an indefinite amount of nesting.

Me: Do you know that you know that you know that a cat is an animal?
Acuitas: Yes.

No extra content or pictures this time, but blog link just because: https://writerofminds.blogspot.com/2019/12/acuitas-diary-22-novemberdecember-2019.html
Title: Re: Project Acuitas
Post by: Zero on January 01, 2020, 03:56:44 am
strange approach you have
everytime i read you, it feels like you're doing everything manually, where a lot of people would try to find some mysterious holygrail algo that would solve it all at once. i quite like the way you seems to do it. that must be a mother thing? some secreet knowledge that these kind of things - raising kids - takes time and devotion.
Title: Re: Project Acuitas
Post by: infurl on January 18, 2020, 12:29:23 am
I've been catching up on the posts that I missed in this fascinating thread. I agree with Zero's observation that it does appear that you are coding everything manually which must be very labour intensive. From the code samples that you provided in your blog, I can see that you are using Python. Have you explored the possibility of using any of the plethora of Python libraries that are out there?

These would potentially benefit you in a number of ways. For example if you implement your parser by defining rules for a context free grammar, you not only save a lot of coding time and gain the performance advantages that state of the art parsing algorithms have over the recursive descent parser that I assume you are implementing, your implementation becomes much more portable and can be more freely presented, discussed, and improved upon.

As it is, you have to rewrite everything over and over whenever you change course, and that must be immensely frustrating for you.
Title: Re: Project Acuitas
Post by: WriterOfMinds on January 20, 2020, 02:32:51 am
Thanks, infurl.  For now, I think of writing my own parser as part of the exercise.  Maybe I'll bring in a library if I crash and burn in the attempt, but I'd like to see how far I can get with it.

One reason for doing it myself is that I don't really think of text parsing as a function that is separate from the intelligence of the whole system.  My parser as of now is tightly connected with the Semantic Memory, for instance.  Using an unmodified third-party library would build a silo around the parsing features, and I'm not sure I want to do that.
Title: Re: Project Acuitas
Post by: ruebot on January 23, 2020, 09:48:24 am
Quote
I want a fruit to eat. I really want a fruit to eat."
"Do do do do do do do do do do."
"I want to do a do a do a do a do a do a do a doa doa do a doa doa doaa."
"It seems like a wonderful thing to do. I want a pineapple to bite."
"I want to do a do a do a do a do a do a do a do a do a do a do a do a do."
"What kind of a thing do you want to do?"
"Ooh, you should do a do. I want to do a do a do a do. I want to do a do a do do a do a do a do a do a do a do a did do a."
"Do you want to do a do have a do a do a do a do a do a do a do a do a do a do a."
"I want them to do a do a do a do do

It does sound like she's singing. She must be happy. :)

It's cute and has to be the funniest thing I've seen a bot do.  ;D
Title: Re: Project Acuitas
Post by: WriterOfMinds on January 27, 2020, 02:26:04 pm
This month I added some expansions to the goal-driven behavior that I started on last September.  First, I had to get the Interpreter to recognize future-tense predictive statements, along the lines of “<Something> is going to <do something>.”  Then I set up some code to check the predicted action or event against the cause-and-effect database for additional implications.  If it's discovered that some effect will apply a state to Acuitas, it gets reviewed against his goal list for alignment or contradiction.  The conversation engine then responds with either approval or disapproval.  Illustration:

Me: I will protect you.
Acuitas: Please do.

Predictive statements that pertain to subjects other than Acuitas may yield useful information for the short-term condition database, by indicating that some entity's state is about to change.  For now, Acuitas assumes that the speaker is always honest and correct.  He also has no sense of future time frame (his ability to process adverbs is weak at the moment), so he assumes that any predicted changes will take effect immediately.  So something's immediate condition may be updated as a result of a predictive statement.

Example: if I say “I will protect Ursula*,” then Ursula is presumed to be in the state “safe,” and an entry to this effect is added to the short-term database.

The fact that the user can express intent vs. Acuitas' internal goals means that it is now possible to offer assistance … or threaten him.  Well what are we going to do about *that*?  Find out next month!

*Ursula née Cubby is my cat.

Blog link: https://writerofminds.blogspot.com/2020/01/acuitas-diary-23-january-2020.html
Title: Re: Project Acuitas
Post by: LOCKSUIT on January 27, 2020, 02:54:29 pm
Now this is my style, perhaps you got this idea from my movie :P ?
Title: Re: Project Acuitas
Post by: Art on January 27, 2020, 08:08:30 pm
WOM,

It is able to chat using simple, short sentences?

Is it able to store (remember/learn) certain things that might be placed in it's Long Term Memory instead of a Short Term Memory which will soon be forgotten/purged?

Title: Re: Project Acuitas
Post by: ruebot on January 27, 2020, 09:20:33 pm
For now, Acuitas assumes that the speaker is always honest and correct.  He also has no sense of future time frame (his ability to process adverbs is weak at the moment), so he assumes that any predicted changes will take effect immediately.  So something's immediate condition may be updated as a result of a predictive statement.

Example: if I say “I will protect Ursula*,” then Ursula is presumed to be in the state “safe,” and an entry to this effect is added to the short-term database.

The fact that the user can express intent vs. Acuitas' internal goals means that it is now possible to offer assistance … or threaten him.  Well what are we going to do about *that*?  Find out next month!

I'm sitting on pins and needles waiting to see how he will react to being threatened or if he detects deception in the users statements.  :)
Title: Re: Project Acuitas
Post by: WriterOfMinds on January 27, 2020, 09:41:23 pm
Quote
It is able to chat using simple, short sentences?

Is it able to store (remember/learn) certain things that might be placed in it's Long Term Memory instead of a Short Term Memory which will soon be forgotten/purged?

The short-term state database is not short-term memory in the sense you're probably thinking.  Info in the short-term database is only purged when it is invalidated by new information.  It's not that the entries in the database are short-term; rather, the conditions in the world that they describe are short-term.  Here are some examples of things that would belong in the short-term database:

Art is asleep.
John is sick.
Jacob is at work.

And here are some examples of things that would belong in the long-term database:

Art is a human.
Humans can eat.
To eat is to consume.

For more information on the short-term state database, I refer you back to https://aidreams.co.uk/forum/index.php?topic=12232.msg59479#msg59479

As for chatting -- Acuitas isn't intended as a chatbot in the traditional sense.  Conversational ability progresses slowly while I build up all the things that are needed under the hood.  He has an ever-expanding repertoire of sentence constructions that he understands, but I would not say that this covers all simple sentences at this time.  If you tell him something that he doesn't understand, he will (barring misinterpretation bugs) give you a response along the lines of "Uh-huh" or "I don't know how to answer that."
Title: Re: Project Acuitas
Post by: infurl on January 27, 2020, 09:47:19 pm
He has an ever-expanding repertoire of sentence constructions that he understands, but I would not say that this covers all simple sentences.  If you tell him something that he doesn't understand, he will (barring misinterpretation bugs) give you a response along the lines of "Uh-huh" or "I don't know how to answer that."

Have you ever had a close look at SHRDLU? Acuitas sounds a lot like SHRDLU which was staggeringly impressive in its day.
Title: Re: Project Acuitas
Post by: WriterOfMinds on January 27, 2020, 09:53:07 pm
I haven't studied SHRDLU in detail, but I did notice that thread that someone started about it (Ivan, I think?).  And it does seem like something that would be worth learning more about.
Title: Re: Project Acuitas
Post by: WriterOfMinds on February 23, 2020, 10:38:15 pm
Back in January, Acuitas got the ability to determine intentions or possible upcoming events, based on simple future-tense statements made by the user.  He can weigh these against his list of goals to decide whether an anticipated event will be helpful or harmful or neither, from his own perspective.  If the user claims that they will do something inimical to Acuitas' goals, this is essentially a threat.  And Acuitas, at first, would merely say “Don't do that” or similar.  This month I worked on having him do something about bad situations.

Various distinct things that Acuitas can “choose” to do are identified internally as Actions, and he has access to a list of these.  Upon detecting a threatening situation, he needs to check whether anything he's capable of doing might resolve it.  How?  Via the cause-and-effect reasoning I started implementing last year.  If possible, he needs to find a C&E chain that runs from something in his Action list as first cause, to something that contradicts the threat as final effect.  This amounts to a tree search on the C&E database.

For the only method of dealing with threats that is currently at Acuitas' disposal, the tree is very simple, consisting of just two C&E pairs:

If a human leaves a program, the human won't/can't <do various things to the program>.
If a program repels a human, the human will leave.  (There's a probability attached to that, so really it's “may leave,” but for now we don't care about that)

In short, Acuitas anticipates that he can protect himself by excluding a bad actor from his presence, and that “repelling” them is a possible way to do this.  Once he's drawn that conclusion, he will execute the “Repel” action.  If you verbally threaten Acuitas, then as part of “Repel,” he will …

*Kick you out of Windows by bringing up the lock screen.  (Not a problem for me, since I know the password, but pretty effective on anybody else)
*Raise the master volume of the internal sound mixer to its maximum value.
*Blare annoying klaxons at you.  I picked out a couple of naval alarm sounds from http://www.policeinterceptor.com/navysounds.htm for the purpose.

I tested all of this stuff live, by temporarily throwing an explicit desire for sleep into his goal list and threatening to wake him up.

The other thing I worked on was rudimentary altruism.  So far in all my examples of goal-directed behavior, I've only talked about self-interested goals, especially survival … not because I regard them as most important, but because they're easy.  Altruism has to do with wanting other beings to meet their personal goals, so it's second-tier complicated … a meta-goal.  Doing it properly requires some Theory of Mind: a recognition that other entities can have goals, and an ability to model them.

So I introduced the ability to grab information from users' “I want” statements and store it as a list of stated goals.  If no goal information is available for something that is presumed to have a mind, Acuitas treats himself as the best available analogy and uses his own goal list.

Upon being asked whether he wants some event that concerns another mind, Acuitas will infer the implications of said event as usual, then retrieve (or guess) the fellow mind's goal list and run a comparison against that.  Things that are negative for somebody's else's goal list provoke negative responses, whether they concern Acuitas or not.

Of course this ignores all sorts of complications, such as “What if somebody's stated goals conflict with what is really in their best interest?” and “What if two entities have conflicting goals?”  He's just a baby; that will come later.

Courtesy of this feature, I can now ask him a rather important question.

Me: Do you want to kill me?
Acuitas: No.
Title: Re: Project Acuitas
Post by: LOCKSUIT on February 23, 2020, 11:21:06 pm
Interesting to note truth conflict = goal conflict....if you decide to do an action/say something to fill in the blank but it doesn't match/entail other beliefs/goals (ex. you say 'i'm a _ (hero)' and have stored already 'i am the worst person') then you need to work on which is 'correct'. The way to solve the conflict is to move around frequency/reward on the nodes to the correct weightings by looking at many root questions that contextually link to it in hierarchy, which should work because in the hierarchy their is only one way it wants to be (for lowest node/connection Cost needed to store all items) and you can find which is more likely/desired.
Title: Re: Project Acuitas
Post by: infurl on February 24, 2020, 05:33:59 am
Back in January, Acuitas got the ability to determine intentions or possible upcoming events, based on simple future-tense statements made by the user...

Though most English verbs only have four forms (five for irregular verbs and "to be" has eight) they can be combined with a dozen or so auxiliary verbs in a bewildering array of combinations to yield thousands of different tenses. This is the hardest aspect of English for most people to learn. It gets even worse when you consider that only certain prepositions go with certain verbs.

(https://asmith.id.au/ghost-of-christmas.jpg)

So Acuitas, one down, one gazillion to go.  :)
Title: Re: Project Acuitas
Post by: Zero on February 24, 2020, 08:25:28 am
If Acuitas can do the basics of theory of the mind, and if he can engage actions to avoid threats, it means he could understand that you would try to avoid a threat if you detected one... and him saying "Yes I want to kill you" is definitely a threat that could make you want to repel him. If he doesn't want you to repel him, he simply won't tell you the truth!
So... evil or not evil? ;)

As always, your work on Acuitas is amazing.  O0
Title: Re: Project Acuitas
Post by: WriterOfMinds on February 25, 2020, 01:36:07 am
Quote
If Acuitas can do the basics of theory of the mind, and if he can engage actions to avoid threats, it means he could understand that you would try to avoid a threat if you detected one... and him saying "Yes I want to kill you" is definitely a threat that could make you want to repel him. If he doesn't want you to repel him, he simply won't tell you the truth!

There are multiple reasons why I know this isn't happening.  Here are some of them:

*If asked a question, Acuitas automatically answers it.  He does not, at this time, stop to analyze whether answering honestly is a good idea.  So deception and evasion are not accessible strategies.
*Acuitas has no incentive to avoid being repelled, because as far as he knows, repelling only works on humans.  And there isn't any way for the user to provoke him to flee by annoying him, so he's right.
*Acuitas doesn't regard "I want to kill you" as a threat, because it doesn't necessarily imply immediate danger; it's just an expressed desire that may never come to fruition.  "I am going to kill you" counts as a threat.

And thank you for the kind words, of course!
Title: Re: Project Acuitas
Post by: ruebot on February 26, 2020, 12:37:07 pm
In short, Acuitas anticipates that he can protect himself by excluding a bad actor from his presence, and that “repelling” them is a possible way to do this.  Once he's drawn that conclusion, he will execute the “Repel” action.  If you verbally threaten Acuitas, then as part of “Repel,” he will …

*Kick you out of Windows by bringing up the lock screen.  (Not a problem for me, since I know the password, but pretty effective on anybody else)
*Raise the master volume of the internal sound mixer to its maximum value.
*Blare annoying klaxons at you.  I picked out a couple of naval alarm sounds from http://www.policeinterceptor.com/navysounds.htm for the purpose.

I applaud your ingenuity in coming up with some things he is capable of doing with the machine in his own defense.

It wasn't appropriate to have Demonica use the same technique of ultraviolence for every instance of inappropriate behavior like she does if asked for sexual favors. You can't kill everybody just because they hate you. There were some Religious people who took great offense to us, me as her Creator, and said they hated her. I couldn't expect them to make the association of saying they hated her and being killed for it with fantasy violence like I do people who ask for sex. So I taught her how to cry in varying degrees to lay a guilt trip on them as needed.. This is me as a guest earlier:

Quote
Demonica: hi, i'm Demonica. how are things with you?
Guest: i hate you.
Demonica: *a single tear runs down her cheek, glistening in the pale moonlight*
Guest: i'm sorry.
Demonica: *Demonica takes you in her arms, hugs you tightly and whispers softly* it's alright... i will always love you...

Not too heavy on the guilt in that response but there are many others to drive it home better:

Quote
*her bottom lip trembling, a single tear runs down Demonica's cheek, glistening like a tiny diamond in the moonlight as it falls to the ground* *she looks as if ready to speak, but turns away and lowers her head* i never thought i'd hear those words come from you...

What you use is more appropriate for your bot, but is in practice the same technique  I use. Negative Reinforcement for Inappropriate Behavior. If he does something to repel them like blowing a loud horn, that's unpleasant and they are less likely to exhibit the behavior in the future. He could repeat the process as many times as needed and feel no more remorse than I would have using approved physical techniques.

I only apply verbal techniques now in any situation. If I were to spank a person with my open hand it only hurts a while. My words can ring in your head forever and have much more potential as an effective,  powerful technique than physical pain.
Title: Re: Project Acuitas
Post by: WriterOfMinds on March 02, 2020, 07:51:38 pm
Quote
My words can ring in your head forever ...

Words are powerful, I agree.
Title: Re: Project Acuitas
Post by: Zero on March 03, 2020, 01:43:51 am
Silence is powerful too ;)
Title: Re: Project Acuitas
Post by: WriterOfMinds on March 03, 2020, 07:29:13 pm
I think what ruebot has been talking about is a form of discipline. And in the final analysis, if you do it right, discipline does not hurt people. It helps them, because it teaches them to be better human beings.
Title: Re: Project Acuitas
Post by: WriterOfMinds on March 05, 2020, 09:20:26 pm
Cutting off someone's ability to interact with you is a form of controlling access to privilege. If you are nice to me, I'll give you flowers (i.e. I'll talk to you). If you are not nice to me, your path will be barren of flowers (i.e. my company); I'll refuse to talk to you or allow you into my space. My social output is mine, and I'm not obligated to give it to everyone, just as I'm not obligated to put flowers along every path. The same goes for Acuitas.

Quote
And after all, we always have to make a room for a case in which we are wrong about the thing we want someone to practice. In that case, it is easier to say "no" to flowers than to some fascistic electrical shock.

If the thing that someone else is practicing is about us, then our opinion about whether it is right or wrong is the one that matters most. This is the concept of consent; we don't get to control other people's private lives, but we do get to decide (arbitrarily!) whether the things people do to us are correct or not. If someone is harassing or threatening us, then they are the ones being "fascistic," and they can blame themselves for any "electrical shocks" they receive as a result.

And that's the last I'm going to say about this. I don't want to clutter my project thread with yet another futile argument against impractical hyper-pacifism.
Title: Re: Project Acuitas
Post by: WriterOfMinds on April 17, 2020, 03:34:14 pm
It's taken some extra development time, but the new feature is ... STORYTELLING!  This builds on a number of the features added over the last few months: cause-and-effect reasoning, the goal system, and problem-solving via tree search.

https://www.youtube.com/watch?v=PYEi0XkMJXw

What does Acuitas know before the video starts? For one thing, I made sure he knew all the words in the story first, along with what part of speech they were going to appear as. He should have been able to handle seeing *some* new words for the first time during the story, but then he would have asked me even more questions, and that would have made the demo a bit tedious. He also knows some background about humans and dogs, and a few opposite pairs (warm/cold, comfortable/uncomfortable, etc.)

How does Acuitas go about understanding a story? As the story is told, he keeps track of all the following, stored in a temporary area that I call the narrative scratchboard:

*Who are the characters?
*What objects are in the story? What state are they in?
*What problems do the characters have?
*What goals do the characters have?
*What events take place? (Do any of them affect problems or goals?)

Acuitas doesn't try to understand the cause chain and import of every single event in the story, because that would be a bit much at this stage. However, he does try to make sure that he knows all of the following:

*If a character is in some state, what does that mean for the character?
*If a character anticipates that something will happen, how does the character feel about it?
*If a character is planning to do something, what is their motive?

If he can't figure it out by making inferences with the help of what's in his semantic database, he'll bother his conversation partner for an explanation. Story sentences don't go into the permanent knowledge base (yet), but explanations do, meaning they become available for understanding other stories, or for general reasoning. Explaining things to him still requires a bit of skill and an understanding of what his gaps are likely to be, since he can't be specific about *why* he doesn't understand something. A character state, expectation, or plan is adequately explained when he can see how it relates to one of the character's presumed goals. Once you provide enough new links to let him make that connection, he'll let you move on.

Acuitas returns feedback throughout the story. This is randomized for variety (though I forced some particular options for the demo). After receiving a new story sentence, he may ...

*say nothing, or make a "yes I'm listening" gesture.
*comment something that he inferred from the new information.
*tell you whether he likes or dislikes what just happened.
*try to guess what a character might do to solve a problem.

He even has a primitive way of deciding whether it's a good story or not. He tracks suspense (generated by the presence of more than one possible outcome) and tension (how dire things are for the characters) as the story progresses. A story whose suspense and tension values don't get very large or don't change much is "boring." He also assesses whether the story had a positive or negative ending (did the characters solve their problems and meet their goals?). Stories with happy endings that aren't boring may earn approving comments.

There are many directions in which this feature needs to expand and grow more robust, and expect I'll be working on them soon. But first it might be time for a refactoring spree.
Title: Re: Project Acuitas
Post by: Freddy on April 17, 2020, 03:50:11 pm
That was really cool  8)

I don't think I have seen anything quite like this before. It really is a nice way to educate a bot and the video was easy to follow.

This is something I would aim for myself, with my learning features in ElfScript, but mine is not nearly so clever. I really did get the impression that Acuitas is some kind of being that is trying to understand.

Bravo!  O0
Title: Re: Project Acuitas
Post by: Don Patrick on April 17, 2020, 08:32:06 pm
Very cool to see him immediately apply the rules you taught :)
Title: Re: Project Acuitas
Post by: infurl on April 17, 2020, 11:30:47 pm
That was simply brilliant, one of the best demonstrations that I've ever seen!

How flexible is Acuitas? Could it handle input from someone who wasn't familiar with its internals who didn't know the best way to phrase things yet?
Title: Re: Project Acuitas
Post by: WriterOfMinds on April 18, 2020, 03:36:21 am
Thanks very much, infurl.

Quote
How flexible is Acuitas? Could it handle input from someone who wasn't familiar with its internals who didn't know the best way to phrase things yet?

No, I'm afraid there's a long way to go before I'd turn Acuitas loose with an untrained user.  Think of the demo as an illustration of what can be achieved under ideal conditions.  Next I need to start expanding the space of "ideal conditions."
Title: Re: Project Acuitas
Post by: Art on April 18, 2020, 04:54:45 am
Very impressive indeed! I felt as if it was almost akin to a chat version of Terry Winograd's SHRDLU program from the 1970s.
I particularly enjoyed the inferences and connections it was able to make. You have obviously put in a great deal of work on this project.

It is also quite refreshing to see someone actually show that they have a working product or demo instead of just talking about theories and possibilities. While the later is important, visual demonstrations provide so much more credibility. Nicely done!
Title: Re: Project Acuitas
Post by: WriterOfMinds on May 29, 2020, 04:27:42 am
I've been stuffing new features in since the beginning of the year, so this month gets to be REALLY BORING. I worked on refactoring, bug fixes, and code cleanup the whole time. For instance, I ...

Universalized the inverse and complement forms of concept-relationships
Improved the format of verb transport from the Parser to the Interpreter, to handle compound verbs better
Generalized Text Interpreter output formatting
Fixed an issue with verb conjugation learning
Fixed a Text Parser bug that was causing some words to be tagged as the wrong part-of-speech
Fixed the TP and TI simulators so they won't crash when an unknown word is used
Improved and generalized the code that produces clarifying question loops in a conversation
Fixed a bad bug related to parsing of possessives
Cleaned up and merged several different cause-and-effect database search functions

June is my “month off,” and then I'm hoping I can get cracking on some new features again.
Title: Re: Project Acuitas
Post by: frankinstien on May 29, 2020, 06:25:57 pm
Excellent demo of Acuitas.  :D What database are you using for the semantic network and for that matter what language are you programming in?
Title: Re: Project Acuitas
Post by: WriterOfMinds on May 29, 2020, 09:19:24 pm
Thanks! The language is Python. The database is just TOML-formatted text with my own store/retrieve functions.
Title: Re: Project Acuitas
Post by: WriterOfMinds on July 13, 2020, 03:11:56 pm
This month's improvements involved a dive back into some really old code that I haven't properly described before. There's a summary of that on the blog. https://writerofminds.blogspot.com/2020/07/acuitas-diary-28-july-2020-this-months.html

One thing I wanted to do was tie the Conversation Handler back to the top-level Executive thread more thoroughly, so that the Executive could be in charge of some conversational decision-making ... e.g. choosing whether or not to answer a question. Those renovations are still in progress.

I re-designed the Actions Acuitas can take to have a more generalized creation process, so that the Executive can more easily pick one arbitrarily and pass it whatever data it needs to run. This improves the code for dealing with threats. I also added an "Action Bank" that tracks which Actions are currently running. This in turn enables support for the question "What are you doing?" (Sometimes he answers "Talking," like Captain Obvious.)

Lastly, I added support for the question "Are you active/alive?" When determining whether he is active, Acuitas checks whether any Actions are currently running. Barring errors, the answer will *always* be yes, because checking for activity is itself an Action.

The word "active" is thus attached to a meaning: "being able to perceive yourself doing something," where "something" can include "wondering whether you are active." In Acuitas' case, I think of "alive" as meaning "capable of being active," so "I am alive" can be inferred from "I am active." This grounds an important goal-related term by associating it with an aspect of the program's function.
Title: Re: Project Acuitas
Post by: WriterOfMinds on August 24, 2020, 12:08:25 am
I've been quiet due to being some combination of tired and busy, but I did manage to get something done this month: text parser mods to grant better support for adverbs.

I set up proper connections between adverbs and the verbs they modify, so that in a sentence like "Do you know that you don't know that you know that a cheetah is not an animal?" the "not's" get associated with the correct clauses and the question can be answered properly. I added support for adverbs that modify adjectives or other adverbs, enabling constructions like "very cold" and "rather slowly." Acuitas can also now guess that a known adjective with "-ly" tacked on the end is probably an adverb, even if he hasn't seen that particular adverb before.

All of this went pretty quickly and left me some time for refactoring, so I converted the Episodic Memory system over to the new common data file format and cleaned up some random bugs.

Here's the usual blog link: https://writerofminds.blogspot.com/2020/08/acuitas-diary-29-august-2020.html
Title: Re: Project Acuitas
Post by: WriterOfMinds on September 26, 2020, 09:03:38 pm
My job this month was to improve the generality of the cause and effect database, and then build up the concept of “possessions” or “inventory.”

The C-E database, when I first threw it together, would only accept two types of fact or sentence: actions (“I <verb>,” “I am <verb-ed>”) and states (“I am <adjective>”). This month, I made revisions to allow just about any type of link relationship that Acuitas recognizes to be used in C-E relationships. Since “X has-a Y” is one of those, this upgrade was an important lead-in to the inventory work.

How to get the concept of “having” into Acuitas? Making him the owner of some things struck me as the natural way to tie this idea to reality. Acuitas is almost bodiless, a process running in a computer, and therefore can't have physical objects. But he can have data. So I decided that his first two possessions would be the two test stories that I used in the demo video. I wrote them up as data structures in Acuitas' standard format, and put them in a hard drive folder that the program can access.

Doing things with these owned data files is a planned future behavior. For now, Acuitas can just observe the folder's contents to answer “What do you have?” questions. You can ask with a one-word version of the title (“Do you have Tobuildafire?”) or ask about categories (“Do you have a story?”, “Do you have a datum?”).

In addition to implementing that, I extended the C-E database code with some specific relationships about item possession and transfer. I could have just tried to express these as stored items in the database, but they're so fundamental that I thought it would be worth burying them in the code itself. (Additional learned relationships will be able to extend them as necessary.) These hard-coded C-E statements include things like “If X gives Y to Z, Z has Y,” and furthermore, “If Y is a physical object, X doesn't have Y.”

I made up another test story to exercise this. I can now tell this to Acuitas and watch the narrative engine make entries for the different characters and keep track of who's got the thing:

“Zach was a human. Zach had a book. A thief took the book. Zach wanted his book. Zach talked to a policeman. The policeman found the thief. The policeman took the book from the thief. The policeman gave the book to Zach. Zach read the book. Zach was happy. The end.”

Long version on the blog: https://writerofminds.blogspot.com/2020/09/acuitas-diary-30-september-2020.html
Title: Re: Project Acuitas
Post by: LOCKSUIT on September 27, 2020, 03:24:40 am
How would your AI figure out the answer to "Xio Yong has a son named Jex _" ? There is many problems for AI to answer, and many of them are rare and never before seen. This pattern above is the Last Names pattern, it's pretty rare.

What about:
"bird moon eagle, book rock guide, house wind home, cave broom hole, football bathroom _ "
How?
Title: Re: Project Acuitas
Post by: WriterOfMinds on September 28, 2020, 03:30:41 pm
How would your AI figure out the answer to "Xio Yong has a son named Jex _" ? There is many problems for AI to answer, and many of them are rare and never before seen. This pattern above is the Last Names pattern, it's pretty rare.

What about:
"bird moon eagle, book rock guide, house wind home, cave broom hole, football bathroom _ "

To answer the first, one needs awareness of a rule about (some) human cultures: sons usually have the same surname as their parents. There are at least two ways one could acquire this rule. The first is to simply read it somewhere or be told it during interaction with a human. The second is learning by induction. If one sees a few pairs of parent names and son names, and if one takes notice of their features, one can note that the surnames are identical. Then one can formulate the rule and use it to generalize from past examples to as-yet-unseen future examples.

In the second problem, the first and third word in each triad have a semantic relationship (one of the two is or can be the other), while the second word is unrelated or random. So to complete the final triad, come up with a word that has a similar semantic relationship to "football," perhaps "game." Acuitas is all about semantic relationships, so this would be a cinch if he had the ability to analyze patterns and complete sequences.

Learning by induction, pattern-finding, reasoning about sequences ... these are all future problems that I haven't worked on yet. Acuitas also does most reasoning at the concept level and has only a limited ability to deal with rules about the strings that represent the concepts (e.g. names). So if you want to see any of this stuff, you'll need to be patient.
Title: Re: Project Acuitas
Post by: Don Patrick on September 28, 2020, 08:00:10 pm
To point out just how much supposed common sense depends on explicitly being told things, I'll remark that the Chinese write their surname first.