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 below is
running much faster than real time. He's actually quite leisurely in his
progress.)
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.
Which leads me into the next thing I
put a lot of work into this month, namely, the code to start
supporting the bottom half of this diagram: speech generation.
Up until now, Acuitas has said very few
things, and they've all been very formulaic … but my goal was
always something beyond pre-formed sentences stored in a database.
The new module I started on this month accepts inputs in the sort of
abstract form that Acuitas stores in his database, then procedurally
generates both questions and statements in natural English. Verbs
are conjugated and plurals are matched correctly, articles are
automatically added to nouns that need them, etc. Some words in the
original sentence skeleton might get replaced with a random choice of
synonym.
Visualization of Acuitas' concept-layer memory, 07/29/17 |
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.
Code base: 7527 lines
Words known: 1095
Concept-layer links: 1917