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: [Select]
(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