Disclaimer: this is a somewhat abstract project. I don't make any claims about it being realistic, nor do I promise that is will ever grow into something useful. An example that demonstrates some initial ideas is included at the bottom of the page.
An ongoing project for me is to improve the visual and non-visual representations that I first started thinking about when working on the DIVA model. I believe that major advances in AI and cognitive science hinge upon improving the computer's ability to represent and reason about our 3 dimensional world. For example, understanding a sentence such as "the cat is in the tree" requires that we imagine the physical relationship between an object called a cat and another called a tree. Language is rooted in the physical properties of our 3-dimensional world.
One thing I realized when working on the visual similarity algorithm of the DIVA model was that mappings between nodes in two scene graphs had many structural similarities to the associative network I was using to organize visual concepts (eg. leg part-of dog, dog is-a mammal). Why not integrate low-level features, such as color and shape information in the scene graphs, into an all-inclusive associative network?
I rewrote the associative network used in the DIVA model such that any type of Java object (eg. a node from a Java3D scene graph or a java.net.URL object) can be used in the network - any object can contain associations and can itself be associated with. For example, a java.net.URL object can serve as a node within the associative network. Note that this "URL symbol" does NOT have a text label attached to it - this would defeat much of the power behind defining things by association. So how do we assign a name to a given URL? The URL symbol can be associated with another node that represents a java.lang.String object. For example, here is a very simple two symbol network with one association:
java.net.URL(http://www.google.com) <--> java.lang.String("google")
The goal of the symblnet project is to create networks with a massive number of associations based upon the properties of low-level objects they contain. Complex objects such as scene graphs are decomposed into comparable pieces when they are input to the symblnet. For example, associations are formed between nodes that represent colors, nodes that represent shapes and nodes that represent spatial transformations.
It is difficult to establish mappings between complex objects, but by breaking them apart and creating associations among their constituent parts, higher-level mappings arise as a result of the structure amongst lower-level mappings. Mappings between mappings are established, and then mappings between mappings of mappings, and so on. I believe this organizational strategy shares some things in common with the human brain, in which simple neuronal units that recognize properties such as sound, color and motion result in an incredible pattern recognition system that enables us to solve problems in a complex 3-dimensional world.
The symblnet project is quite ambitious, and I have only been working on this in my spare time. Everything seems very inferior when we compared with the human mind. I have written basic code to accommodate basic objects (eg. Java Strings and URLs) and I have written quite a bit of code to accommodate Java3D scene graphs (these are complex though, and there is still many "constituent pieces" that I need to consider).
Symblnet maintains background processes that are always looking for mappings amongst comparable objects. For example, after inputing the models of the snowman and blockman described on the DIVA page, it might find that the color of the node representing the snowman's nose is similar to the color of the node representing the blockman's nose. This kind of mapping is always being established, and as new mappings are established, previous mappings might become stronger or weaker depending upon their associations.
Currently I am working on a process to monitor the weights amongst associations based upon their usage. Every time a symbol is activated in the network, the pathways followed by the activation should be strengthened. For example, if you add a new URL object to the network that contains words already present in the network, these words should be "activated" and their surrounding pathways should become stronger than words that are never used. Over time, all weights in the network should decay.
Here is another example of that demonstrates the importance of maintaining association weights based upon their usage. Suppose we input three models of three different dogs into the network. We create associations between each "dog object" and the string label "dog" (the "dog" string might already have a complex set of other associations - as it does in our minds). Now, suppose that one of the dog objects is frequently present in other models loaded into the symblnet. The weight between the "frequently seen" dog object, and the the string label "dog" should be strengthened. At some later time, if we activate the dog concept, the frequently "seen" model will be activated.
The human mind definitely adjusts the strength of associations based upon their usage. For example, when I was talking about "dog models" in the above paragraph, you can't help but generate a mental picture of a dog, and you most likely recall a dog that you have spent time with or seen frequently - you won't recall a dog that you saw 10 years ago in a pick-up truck going down the highway. Also, you probably have a particular "viewpoint" or perspective associated with the dog that comes to mind when I talk about dogs.
Here is an example that combines symblnet with an applet for web browsing. I have added a short command (SearchCommand.java) that associates a set of search words and then sends a request to the Google search engine. As the user browses the search results, further associations can be established between words and URLs. This applet is just a simple demo, but I believe that with some work it could provide a much superior "bookmarking" mechanism compared to the "bookmark list" or "Favorites folder" that is standard with most web-browsers (these are based upon a tree data structure - the human mind does not organize information into rigid trees!). Please read the note on the cline page about problems using the cline package within an applet (to summarize - it requires the Java 1.3 plug-in and a special setIO permission). If you have the plug-in installed and have set the "setIO" permission, here is the applet: symblnet browsing.
If you are not able to use the Java 1.3 plug-in (eg. MacIntosh users), you can still read the help file that is initially loaded on the applet page.
Note - I am still experimenting with the structure and techniques used in symblnet, and don't plan to release code anytime soon. If you are interested in this project and would like to contribute or share ideas, please send me an email.
I have come across a number of software projects that are based upon organizing information into an associative network structure. A very interesting project (and many other related projects) can be found on the Principa Cybernetica Web . Here is an excerpt from one of the research descriptions (PCP Research on Intelligent Webs):
The main idea is that the different documents available on the web can be seen as nodes in a network, connected by a number of links, along which variable numbers of users travel in search for information. The resulting directed graph can be enhanced with weights (that, e.g., measure the frequency of usage) and semantic link types, and reorganized in order to provide better access to the knowledge that it contains. This makes it possible to "mine" the implicit knowledge distributed over millions of documents, the connections between them, and the way they are used.
Related to this research is the PageRank technology used by the Google search engine.A seemingly well-funded commercial project that is growing in popularity is from a company called "TheBrain Technologies Corporation"... They have a product called WebBrain that is based upon Netscape's Open Directory Project. I downloaded the "BrainSDK" however I do not agree with the strategy with which "thoughts" are organized into parent, child and "jump" relationships.