Aika is a Java library that automatically extracts and annotates semantic information into text. In case this information is ambiguous, Aika will generate several hypothetical interpretations concerning the meaning of the text and pick the most likely one. The Aika algorithm is based on various ideas and approaches from the field of AI such as artificial neural networks, frequent pattern mining and logic based expert systems. It can be applied to a broad spectrum of text analysis task and combines these concepts in a single algorithm.
Aika allows to model linguistic concepts like words, word meanings (entities), categories (e.g. person name, city), grammatical word types and so on as neurons in a neural network. By choosing appropriate synapse weights, these neurons can take on different functions within the network. For instance neurons whose synapse weights are chosen to mimic a logical AND can be used to match an exact phrase. On the other hand neurons with an OR characteristic can be used to connect large lists of word entity neurons to determine a category like 'city' or 'profession'.
Aika is based on non-monotonic logic, meaning that it first draws tentative conclusions only. In other words, Aika is able to generate multiple mutually exclusive interpretations of a word, phrase, or sentence, and select the most likely interpretation. For example a neuron representing a specific meaning of a given word can be linked through a negatively weighted synapse to a neuron representing an alternative meaning of this word. In this case these neurons would exclude each other. Such synapses might even be cyclic. Aika can resolve such recurrent feedback links by making tentative assumptions and performing a search for the highest ranking interpretation.
In contrast to conventional neural networks, Aika propagates activation objects through its network, not just activation values. These activation objects refer to a specific text segment and a given interpretation.
Aika consists of two layers. The neural layer, containing all the neurons and continuously weighted synapses and underneath that the discrete logic layer, containing a boolean representation of all the neurons. The logic layer uses a frequent pattern lattice to efficiently store the individual logic nodes. This architecture allows Aika to process extremely large networks in which only neurons that are activated by a logic node need to compute their weighted sum and their activation value. This means that the fast majority of neurons stays inactive during the processing of a given text.
To prevent that the whole network needs to stay in memory during processing, Aika uses the provider pattern to suspend individual neurons or logic nodes to an external storage like a mongo database.
One of the first use cases implemented with Aika is named entity recognition (NER). For this case, lists of forenames, surnames, cities, professions, company names and common words have been translated into a weighted neural network. These lists are partially overlapping because many surnames are also city names, professions or common words. In addition some common knowledge rules were added, such as forenames often precede surnames or articles rarely precede city names in German (e.g. 'die Halle' does not mean the city Halle, but the noun 'Halle'). These rules can arbitrarily depend on each other and thus form a network through which activations can be propagated. Aika is able to accurately recognize named entities within texts and predict the correct meaning of the name.
Aika is implemented in Java and made available as an open source free software library under the Apache 2 license.