Apr
27
2010

Neural network designer 0.4

Finally, it’s time for a new release. Most of the changes are in the backend this time, though there are a few visual changes. So here goes:

What’s new

Designer and core
  • The storage system has been updated to a binary, flat file structure, which improves the operation speed image considerably in all areas. This essentially makes the core a true database system, which should be fairly easily scaled (see thesaurus demo project), even over multiple hardware systems (eventually).
  • I  have finally implemented the namespaces. These are currently maintained in the background, so you don’t need to worry about them. The only change you’ll notice, is an improved browser popup in the frame and flow editors (see image). Basically, the thesaurus, timers and all the project editors (with their entry points) are included and automatically updated.
  • The frame editor has been updated a bit cause the previous datagrid didn’t handle the custom namespace selection object. So back to listview for the frame elements (will be updated when the datagrid is fixed).
  • I have also added a new restriction type for frame elements: a custom filter, which allows you to do determine the filter result through code.
  • Support for modules has also been included, though not yet properly tested, so the imports will definitely not yet work.
  • The speed increase brought some more threading issues to light, I hope they are now solved, but one or two things can still pop up here or there.
  • Somehow, I managed to show the thesaurus in reversed order (so the view for the hypernyms was showing that of the hyponyms). While fixing that, I also tried to get it to work with an arbitrary number of elements (so you can also browse a huge thesaurus, the search hasn’t yet been updated though).
  • The thesaurus can now also be built automatically, based on the content of the database.
  • I have added a dialog to remove clusters that have no children, based on the ‘remove orphans’ dialog. This will probably grow out to a general purpose query window, but that’s for the next version.
  • New instructions (some were long overdue):
    • Substract: remove 1 or more neurons from a set, contained by a variable or global
    • Select: perform a filter on the content of a variable or global.
    • Remove Links In: removes all the incoming links of a neuron that have a specified meaning.
    • Remove links out: same as ‘Remove Links In’, but for the outgoing links. These 2 instructions allow you to do without an extra loop, which makes it all more thread save and faster.
    • GetAt: retrieves the neuron at a specified index in the content of a variable/global.
  • I have changed the parameters of the split instruction a little bit: I have removed the ‘result cluster’ which was originally used to retrieve the results of a split. This worked ok, but could cause problems when multiple users would be performing the exact same algorithm. The solution was to simply use the already existing ‘GetSplitResults’ function, which now also works after the split (and not just when the split is still running). This means that you manually need to clear the split result cache once you are done with it, otherwise the next split will give some bogus results.
  • I have also removed the possibility to assign a weight value to a single neuron. Instead you now assign it to the entire processor. This will assign it’s weight to all of it’s result values when it is done. This way, you can change the weight before you know the actual result.
  • Attached neurons are working.
  • some cosmetical touch-ups here and there.
  • Lots of other bug fixes.
AICI

The aici network demo is slowly starting to function. That is, it is beginning to record data into understandable structures. Though it’s still very early, so lots of stuff still goes wrong or hasn’t yet been implemented. Some fun responses guaranteed. Here are the major changes:

  • I’ve managed to simplify the flow recognition algorithm (while fixing some tough bugs), so no more synchronization points for the loops. The designer still allows to change this prop at the moment, but this will be removed soon.  Don’t worry about existing values, they are simply skipped, no longer used.
  • Some bugs in the frame recognition section have also been solved.
  • I have implemented a first version of the noun path resolver algorithm. This is used to understand statements like ‘my brother’s sister’, ‘I’, ‘my favorite car’, ‘sister in law’. This algorithm is also responsible for generating new ‘compound words’, like ‘brother in law’.
  • Compound words are recognized again, at different stages. Some compounds can’t be recognized yet (if they have verbs).
  • New frames:
    • Be-unknown noun: sentences with an agent, be verb and a possible noun. Example sentences: I am Jan. It is a cat. My name is Jan. I was Jan. It will be a cat. (preconditions: Jan and cat are not yet  in the network). The frame is triggered when it receives a sentence that might contain a noun, and there is an open question that can consume this value.
    • some more, to much to write all down.
  • If AICI knows several different synonyms for the same word, it will now mimic your preferred one. So if you just said ‘bye’, it will also say ‘bye’ next time. If you say ‘goodbye’ next, it will switch to this.
  • I have introduced the concept of ‘attributes’. These provide an extra step in the semantics stage. For instance, ‘color’ is an attribute. It’s possible values are: blue, red, black, white, green,… Color is a special attribute, since it changes meaning when applied to different types of subjects. For instance, the sentence: ‘I am blue’ usually means: ‘I am a bit down’. So that’s the semantic part: an attribute can inspect to who it is applied and, when needed, can change the attribute, the owner or the value. 

The latest release can be downloaded from here, or from the main menu.

Coming up

Next in line will be the editor views (finally). These are currently built using standard WPF controls (listboxes, treeviews,…), which are, well, not performing as desired: they generally can’t handle more than 2-300 items (if you can’t use virtualization) and, more importantly, have a hardcoded recursion limit that causes serious problems, primarily in the code editor. So I need some custom controls to get the speed and reliability up.

Before this though, I will be spending a little more time with AICI. The algorithms are beginning to work the way I want them to, so it’s time to complete the flows, in order to get a larger part of the English language parsed. And off course, I will be adding a bunch of new frames, actions and attributes.

tags: ,
posted in Updates by admin

Follow comments via the RSS Feed | Leave a comment | Trackback URL

Leave Your Comment

 
Powered by Wordpress and MySQL. Theme by openark.org