Wednesday, June 20, 2007

Connotation explosions and activation spreading

Concepts never get activated alone. An active concept always calls up its associations, or connotations. I have written a little about connotation explosions, in the Elisa Effect, or in the ultimatum game. These explosions come from the psychological mechanism of activation spreading: active symbols spread activation to their neighboring nodes.

Think about a computer summing up some number to "2". Now consider this fragment from Goedel, Escher, Bach (p. 677-678):

"a machine that can pass the Turing test may well add as slowly as you or I do, and for similar reasons. It will represent the number 2 not just by the two bits "10", but as a full-fledged concept the way we do, replete with associations such as its homonyms 'too' and 'to', to the words "couple" and "deuce", a host of mental images such as dots on dominos, the shape of the numeral '2', the notions of alternations, evenness, oddness, and on and on... with all this extra baggage to carry around, an intelligent program will become quite slothful in its adding."
I can still remember reading this, around 10 years ago, in a restaurant in SJC, before going to the space research institute for a PhD seminar or something. I remember so vividly thinking about how genius this idea was, and how far from current technology it was (or seemed to be given the mainstream scientific journals; it would take me some months to find out that Doug's team was already working on it. In fact, that they had already developed Numbo, with some of this functionality.) It may not seem a grand idea, but to me it felt like such an enormously radical departure from what was going on in the mainstream.

So how should concepts spread activation? What should the classes look like? Here's a draft, which perhaps most FARG designs have used, in some form or other:

Tnode = class
Activation: TActivation;
Associations: Collection of Tnodes;
procedure spread_activation;

Collection could be an array, a list, or anything else. I think that this seems a natural way to go, with a node having a spread_activation method going through associated nodes. If the collection is hardcoded in the source of the node, this design is faulty. If you (or the system) add a new node to the conceptual network, you have to change the code of all nodes that should spread activation to it. Why should these nodes care at all about a new node? If we'll be designing next-generation technology able to construct fluid concepts on the spot, it must have the flexibility to do it without any intervention. I'm about to suggest that the best design here, for many reasons, is to use the observer pattern.