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.” It is distinct from his previous learning
abilities, which all concerned the storage and recall of more
universal meanings and facts (semantic memory).
Saving a raw event log to the hard
drive is easy enough to do, but not especially useful. Retrieving
any particular event from such a dump of unsorted, uncurated
information would quickly become problematic. 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.
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).
Here's the obligatory memory map visualization (semantic only). I
think I need to adjust the parameters and let things cluster closer
to the largest nodes.
Code base: 11250 lines
Words known: 2157 (approx.)
Concept-layer links: 6138