After a long period of absence, I’m back to announce the 0.2.5 version of the neuron-based data structure called NBDS. This project was introduced in december 2010 as a concept. After that, the development of NBDS still continued, so I wrote about my first implementation of NBDS concept in PHP. This post is about the improvements of NBDS for PHP. I will write about new features, ideas and some things that can be easily solved with NBDS.
After the last release of version 0.1.3 on github, version 0.2.5 will be the next official release. You can consult a few documents (in the docs folder or on the project page) to understand how NBDS works. Below you can find a list of new features and functionalities that were added to the NBDS:
The lookup/reverse lookup table was implemented in version 0.1.1 and works pretty well, when its set to ‘on’. After I’ve noticed that, I set this feature obligatory to ‘on’ and removed all on/off switches in the code. This will allow an easier handling and furthermore it improves the speed of NBDS.
Weight of axons
Since version 0.2.2 NBDS implements a new attribute for the Axon object. Inspired by nature where a synapse between neurons has an equivalent weight that points out the importance of a synapse. To make NBDS learnable, you need an element that learns. With this idea in mind, the following versions of NBDS will be learnable and you can train it with common training algorithms for neural networks.
In version 0.2.3 the aggregate() function was added to the Space object. It allows you to define a set of object IDs and run some operations on it. For instance <, <=, >=, ==, sum, mean, median and more. You get back all elements that are passing your aggregate test successfully. This function is very comportable for fast checks.
The callback() function is the latest feature. Introduced in version 0.2.3 it is able to run a user-written PHP function on some objects, that you have chosen before. This is a fast operation, when you want to do complex operations on a bunch of neurons or axons.
Ideas for the future
With the continuation of development of NBDS comes a few new possibilities and ideas. Two of these ideas were listed and explained below.
Learn to learn
NBDS was built as neural data structure. At the state of art, no one knows – with exception of the grandmother neuron phenomenon – where the concrete information is stored in the brain. NBDS should provide a simple approach to that, a computer model that stores flexible objects of information in a graph structure. With this feature you can use NBDS as a neural network, it can be trained and still used as a data structure – so a few more working areas can be served with NBDS.
Implementation in C++/Java
At first I’ve implemented NBDS in PHP. This was a good decision because PHP is a very flexible language (allowing associative arrays, simple object handling for instance in serialization). After a solid implementation (in PHP) with all ideas, coming features and documentation, the focus of NBDS development will change to a hard-coded language. At the moment of writing it is unclear whether I will use C++ or Java for this task. Recommendation with valuable arguments are very welcome.
Current project using NBDS (NBDS-SM)
At the moment I’m still working on a natural language processor (NLP) on cip-labs. This NLP operates with some rules for sentences. After parsing the input and finding sorts of sentences and expressions, the information will be searched on a semantic network. The semantic nework is realized with a NBDS system. It works very well because NBDS provides a bunch of functionalities to serve that problem. Moreover NBDS has some more advantages:
- Semantic network is a graph, NBDS too
- Flexible add and delete of operations for edges (Axon objects) and vertexes (Neuron object)
- Flexible attribute (key-value storage)
- Comfortable use of operations (select, selecti, route, neighbor, and other)
All in all, I’m really looking forward to continue the development and the realization of all ideas and concepts to improve the NBDS system. The next steps are the implementation of the ideas – mentioned above – and some more cool stuff that is already in the conceptional stage. I would like to get some feedback from you, so don’t hesitate to contact me.
Goto: project page