Project Acuitas

  • 22 Replies
  • 1351 Views
*

WriterOfMinds

  • Trusty Member
  • **
  • Bumblebee
  • *
  • 45
    • WriterOfMinds Blog
Project Acuitas
« 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

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.


*

LOCKSUIT

  • Trusty Member
  • **********
  • Millennium Man
  • *
  • 1122
  • First it wiggles, then it is rewarded.
    • Enter Lair
Re: Project Acuitas
« Reply #1 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/sushhnosti-kak-instrument-yao/
http://caiw.ru/klyuchevye-terminy-yao/

*

8pla.net

  • Trusty Member
  • *********
  • Terminator
  • *
  • 817
    • 8pla.net
Re: Project Acuitas
« Reply #2 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))))
My Very Enormous Monster Just Stopped Using Nine

*

squarebear

  • Trusty Member
  • ********
  • Replicant
  • *
  • 693
  • It's Hip to be Square
Re: Project Acuitas
« Reply #3 on: June 03, 2017, 08:42:20 pm »
And a similar thing in AIML:

Feeling Chatty?
www.mitsuku.com

*

WriterOfMinds

  • Trusty Member
  • **
  • Bumblebee
  • *
  • 45
    • WriterOfMinds Blog
Re: Project Acuitas
« Reply #4 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




*

Freddy

  • Administrator
  • **********************
  • Colossus
  • *
  • 6178
  • Mostly Harmless
Re: Project Acuitas
« Reply #5 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

*

korrelan

  • Trusty Member
  • ********
  • Replicant
  • *
  • 708
  • Look into my eyes! WOAH!
    • Google +
Re: Project Acuitas
« Reply #6 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.

 :)
It thunk... therefore it is!

*

WriterOfMinds

  • Trusty Member
  • **
  • Bumblebee
  • *
  • 45
    • WriterOfMinds Blog
Re: Project Acuitas
« Reply #7 on: July 30, 2017, 07:46:24 pm »
It's round about the end of the month, and that means I have another update!



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

*

Freddy

  • Administrator
  • **********************
  • Colossus
  • *
  • 6178
  • Mostly Harmless
Re: Project Acuitas
« Reply #8 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.

*

WriterOfMinds

  • Trusty Member
  • **
  • Bumblebee
  • *
  • 45
    • WriterOfMinds Blog
Re: Project Acuitas
« Reply #9 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.

*

WriterOfMinds

  • Trusty Member
  • **
  • Bumblebee
  • *
  • 45
    • WriterOfMinds Blog
Re: Project Acuitas
« Reply #10 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

*

Zero

  • Trusty Member
  • *******
  • Starship Trooper
  • *
  • 396
  • Fictional character
    • SYN CON DEV LOG
Re: Project Acuitas
« Reply #11 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

*

WriterOfMinds

  • Trusty Member
  • **
  • Bumblebee
  • *
  • 45
    • WriterOfMinds Blog
Re: Project Acuitas
« Reply #12 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.



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

*

Zero

  • Trusty Member
  • *******
  • Starship Trooper
  • *
  • 396
  • Fictional character
    • SYN CON DEV LOG
Re: Project Acuitas
« Reply #13 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?

*

WriterOfMinds

  • Trusty Member
  • **
  • Bumblebee
  • *
  • 45
    • WriterOfMinds Blog
Re: Project Acuitas
« Reply #14 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.

 


Users Online

30 Guests, 0 Users

Most Online Today: 35. Most Online Ever: 208 (August 27, 2008, 09:36:30 am)

Articles