Showing posts with label SeMap. Show all posts
Showing posts with label SeMap. Show all posts

Tuesday, December 21, 2010

Work done in the period of November 20th – December 3rd

Within this period I managed to serialize the whole drools rules file as a Knowledge Base Object, and observed a significant improvement (approximately 10s) but still far less than the execution time of the current RelEx2Frame. Also that serialization needed JVM stack size to be increased to 2MB. Still we felt that the performance is not up to the requirement so we decided to split the drools rules file according to 100 rules per file basis and Nisansa did that task. Danaja came up with a design which is focused on applying concurrency and parallelism for the RelEx2Frame system, and was accepted by all the members of the team as the basic design which will be altered and improved after further analysis.

In the current RelEx2Frame there is a significant limitation of the concepts or the words that are detected. Statistical learning methods can be used to reduce this limitation. One approach is to use an existing application and the other would be to implement statistical learner. Google Sets [1] is one of the existing applications that we are considering. During this period I have implemented an application which accesses Google Sets and generate new set of words for a given combination of words (<4). I have used an existing library called ‘XGoogle’ [2] written in Python programming language which provides an interface to access Google Sets. Since I was not familiar with Python, I had to learn Python and which I successfully managed to do. We will keep the results came out from this application and will compare with the results from our statistical learner to choose the most appropriate set of words.

Preparing the design document was the major work that we had done during this period, since it was due on 3rd December. All of us contributed to the design document in several ways and I contributed by writing design constraints, design decisions and designing rule learning component. Design constraints part involved basically three sub sections, namely Operating Environment, End-user Environment and Performance Requirements. Design decisions consisted with major decisions, some of which were already taken and others yet to be taken. Programming language selection, rule engine selection, caching knowledge bases, statistical learning of concepts and selecting the best suited data mining algorithm were the main design considerations discussed there.

Designing the rule learner was the most challenging task to me. I read many documents [3-5] on existing rule learners, existing rule induction algorithms, data mining techniques etc.  After considerable amount of literature survey I came up with the architecture for the statistical rule learner using data mining techniques, which will be altered and improved as it requires. Chamilka reviewed it and made few suggestions.

We were successfully managed to submit the design document on 3rd of December.
  

[1] “Google sets labs,” [Online]. Available: http://labs.google.com/sets
[2] “XGoogle,” [Online]. Available: http://www.catonmat.net/blog/python-library-for-google-sets
[3] K. Mhashilkar. “Data Mining Technology,” [Online]. Available: http://www.executionmih.com/data-mining/technology-architecture-application-frontend.php
[4] J. Grzymala-Busse, “Three strategies to rule induction from data with numerical attributes,” presented at the International Workshop on Rough Sets in Knowledge Discovery (RSKD 2003), associated with the European Joint Conferences on Theory and Practice of Software 2003, Warsaw, Poland, April 5–13, 2003.
[5] “Rule Learner,” [Online]. Available: http://openrules.com/RuleLearner.htm

Work done in the period of 6th to 19th of November

During this period my main task was to integrate the converted Drools Rules to the RelEx source code. For that first I just created a Drools State-full Knowledge session which creates the Knowledge Base based on the converted Drools Rules file. At the first debugging time, I got hell of errors, which is some what expected since we had not done any debugging of created Drools rules before that moment. So I started to look into each and every error thrown. Few errors among hundreds of errors are noted below.

Import statement was missing from the drools rules file: I altered the RuleConverter code such that it adds that.
There were lot of typos found in the RelEx2Frame hand written rule file, which mislead our RuleConverter to generate malformed rules: I debugged and edited the hand written rule file as needed.
Once I made the Drools to create the KnowledgeBase successfully, I started to debug the methods used inside the Drools rules which were implemented by Danaja and Nisansa. They didn't have a way to debug there method earlier, so we expected few bugs from those methods. I found few bugs in one of the methods (which is the tricky method), and successfully fixed those bugs, and got the rules to work.
Then I found out that currently we were not outputting the given sentence related output but only the rule. So I went ahead and implemented that functionality. It needed few changes in the Drools rules file (i.e. RuleConverter) and also in few methods in the RelEx2Frame. While doing this I observed that the 'then' part of the rule is not get executed suddenly after the activation of a rule. I had a discussion about this behaviour in Rules Users List mailing list and got to know the following:
“ In the rete algorithm the agenda is a list of activated rules who's actions are eligible to fire. The "first" one on the list is selected, it's action is fired, and the agenda might change as a result. "First" is in quotes because the agenda list is sorted by conflict resolution rules.”
So I altered the code a bit such that it solves this issue as well.

I did few tests with the new Rule Engine, and found out it takes ages (10-15mins) to display the resulted frame outputs. I raised this issue in front of my group mates and made the point that a possible approach of caching which I have seen in few mailing list discussions.

Further I edited the existing RelEx build.xml file such that it adds necessary Drools related executables to the classpath before compiling the source code.

We had few discussions on preparing the design document as well, again Chamilka took the lead and cooperated with others and divided separate parts among four of us.

Tuesday, November 23, 2010

Work done in the period of October 23rd – November 5th


I updated our external supervisor Dr. Ben Goertzel about our current progress on 25th of October.

I communicated with my group mates and completed the initial version of the SRS on 26th October. As requested from the course coordinator I uploaded that version to the Moodle on 29th October. After the project meeting with course coordinator, we thought of altering our SRS a bit, and agreed to again look into parts did in the SRS by each one of us and come up with an improved version by 1st of November. As discussed I made few small changes to the parts I had done in the SRS, and send them to Chamilka, for formatting tasks on 31st of October.

Meantime I had few chats going on with the OpenCog developers community, mainly with Dr. Joel Pitt, Jerad, and Linas, at the #opencog IRC channel, for better understanding of our requirements. Since our project idea came from Dr. Ben Goertzel, I thought to have a chat with him to get clarify few problems. I had a google chat with him on 1st of November and the points discussed were following.

Why the existing RelEx2Frame code is kind of hacky?
What if the introduction of a standard rule engine degrades the performance?
Is there a corpus that can be used for testing purposes?
For final presentation purposes is it possible to use the virtual dogs developed by OpenCog?

That discussion was really worth, and I shared the chat log in our mailing list.

I did a bit research on the generated drools rules after converting hand written rules using the Rule Converter developed by Danaja and Nisansa. To get clarified few things which I came across from those converted rules, I contacted the Drools community through their mailing list on 31st of October. There I had a discussion with a Drools developer called Wolfgang Laun and figured out few important facts that we should condider.

In Drools rule eval() function is the least efficient way of formulating a condition; none of the optimizations will work this way.
eval() cannot be used on the RHS, after 'then'. It is a wrapper for general
boolean expressions, to be used as a constraint in a Pattern.

I shared these with my group mates and did necessary modifications.

In this period I had taken up another task which is to integrate RelEx with Drools, using minimum number of dependencies needed to get Drools to work. I integrated a test class given by Drools into the successfully configured RelEx Eclipse Project Folder, and built it and find out the missing libraries (JAR files) and added them to the Java Build Path of the RelEx project. Following were the minimum JAR files needed from the Drools 'bin' folder for a successful build.

  • drools-core-5.1.1.jar
  • drools-compiler-5.1.1.jar
  • drools-api-5.1.1.jar
  • lib/antlr-runtime-3.1.3.jar
  • lib/ecj-3.5.1.jar
  • lib/mvel2-2.0.16.jar
  • lib/xstream-1.3.1.jar

Sunday, October 31, 2010

SeMap - final year project (9th - 22nd October)


On 9th of October I have created a new private mailing list in our sourceforge project account, nldex-devs, since that would be much easier platform for us to have our project discussions going on.  I added all my group members to the mailing list and made them aware about it and requested them to always use this mailing list for project based discussions.
Around 13th October we got few comments from our internal supervisor Dr. Shehan Perera, on our project proposal. We altered our proposal according to his suggestions.
I found few sample SRSs on 15th October, from our seniors and looked at them and discussed with the group members. We figured out the necessary parts for our project’s requirement specification, and divided parts among each of us. I took up the sections of Operating Environment, User Documentation, Assumptions and Dependencies, and went through few resources to find out what I need to write. I put up the basic draft of my parts on 17th October; in our mailing list so all my group members can review them. We planned to finish the SRS on 26th October.
Throughout this period I continued to read on Drools documentation. I had downloaded Drools examples projects and ran them in Eclipse IDE and play around to get familiar with its behaviour. Also I looked at a rule creation method in Drools, called Domain Specific Language (DSL) and will be continued to look at them in coming days as well.
I tried to setup the RelEx in the Eclipse IDE since as it will make our lives easier when dealing with RelEx code. So I successfully setup the RelEx source code in Eclipse IDE. Following are the steps I followed.
·        File --> New --> Java Project --> Create project from existing source --> specified the path to relex folder
·        Now an eclipse project will be created based on the existing project
·        Go to the project root in the Package Explorer in the IDE
·        Right click on it --> properties
·        Select "Java Build Path" --> Libraries --> add external jars, and add the following jar files and press ok.

·        gate.jar
-gate.jar can be found inside the bin folder
·        jwnl.jar
-jar file can be found inside the extracted folder
·        linkgrammar-4.7.0.jar
          -jar file can be found inside the extracted folder
·        opennlp-tools-1.4.3.jar
          -Go to the path of the folder from a terminal and run "ant" command
          -That will build the opennlp-tools-1.4.3.jar for you inside the "output" folder of the same directory.

·        Go to Project and un-tick "Build Automatically" in the menu strip of the IDE.
·        Then go to the project root in the Package Explorer in the IDE
·        Right click on it --> Build Project
·        This will build the RelEx source without any errors.