Editing User:Sudeepam

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 15: Line 15:


:- I have been coding since my 6th standard and as such, I have developed a working knowledge of how programming problems should be approached.
:- I have been coding since my 6th standard and as such, I have developed a working knowledge of how programming problems should be approached.
:- My areas of interest are Machine Learning, Data Structures, and Algorithms.
:- My areas of interest are Machine Learning, Digital Signal processing, and Algorithms.
:- I learn Machine Learning through online resources such as open research papers, blogs, and MOOCs since my college does not offer a course on this subject till the final year.
:- I learn Machine Learning through online resources such as open research papers, blogs, and MOOCs since my college does not offer a course on this subject till the final year.
:- I have been coding for many years now, knowledge of Data Structures and Algorithms is something that I have gained through those years of practice and repeated attempts to optimize my code.
:- Digital Signal Processing is one of the core subjects of my major. I have been learning that, and related subjects, such as 'Basics of Signals and Systems' for an year now.
:- I have been coding for many years now, knowledge of Algorithms is something that I have gained through those years of practice and repeated attempts to optimize my code.
:- I will be taking a formal course on Algorithms in my next semester.


*'''Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so?'''
*'''Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so?'''
Line 58: Line 60:
* '''Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt.'''
* '''Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt.'''


:'''MATLAB m-scripts:''' I am highly experienced with MATLAB m-scripts. A lot of my coursework assignments involve making m-scripts. Those assignments, have even asked me to make my own implementations of inbuilt MATLAB functions and I have been using that experience to contribute to Octave-Forge signal package. In addition to this, I also implement machine learning in Octave and have gained further experience of m-scripts by doing that. If selected, for GSoC 2018, I will approach my project, with m-scripts and so I consider my experience to be a big plus point.
:- '''MATLAB m-scripts:''' I am highly experienced with MATLAB m-scripts. As I have said before, A lot of my coursework assignments involve making m-scripts. Those assignments, have even asked me to make my own implementations of inbuilt MATLAB functions and I have been using that experience to contribute to Octave-Forge signal package. In addition to this, I also implement machine learning in Octave and have gained further experience of m-scripts by doing that. If selected, for GSoC 2018, I will approach my project, with m-scripts and so I consider my experience to be a big plus point.


:'''C++:''' I am quite familiar with the C++ programming language and have used it for personal projects and problem solving.
:- '''C++:''' I am familiar with C++ but I have never made a formal project using it and I haven't been using it lately. The language will not be new to me and I can quickly revise it if required. I was taught C and C++ in my first year, in a course called "Software Development Fundamentals". At the time I decided to use C and not C++ for my project. I passed that subject with an 'A grade' is all I can currently say about my C++ experience.


:'''OpenGL and Qt:''' I have never used OpenGL before. I have n:- I will be taking a formal course on Algorithms in my next semester.ever used Qt either but I've seen some Qt code of my friends.
:- '''OpenGL and Qt:''' I have never used OpenGL before. I have never used Qt either but I've seen some Qt code of my friends.


*'''Please describe your experience with other programming languages.'''
* '''Please describe your experience with other programming languages.'''


:'''Python:''' I am proficient in Python. I use it as my go-to language for various tasks, mostly Machine Learning.
:- '''C:''' I am comfortable with C and have made a number of projects using it.


:'''C:''' I am comfortable with C and have made a number of projects using it.
:- '''JAVA:''' This was my first language, (well not exactly, my first language was BASIC), I have 4 years of experience with JAVA, but I haven't used it for making projects. I use this language mainly for problem solving (competitive programming) questions.


:'''JAVA:''' I have 4 years of experience with JAVA, but I haven't used it for making projects. I use this language primarily for problem solving (competitive programming) questions.
:- '''Python:''' I am familiar with the language but I still am learning to use it effectively. I am learning it so that I can use it for Machine Learning problems if required.


*'''Please describe your experience with being in a development team. ''Do you have experience working with open source or free projects?'' '''
* '''Please describe your experience with being in a development team. ''Do you have experience working with open source or free projects?'' '''


:-The only experience I have with working on open source and free projects is the experience that I have got by  
:-The only experience I have with working on open source and free projects is the experience that I have got by  
::a) contributing to some open source repositories on Github.
::a) contributing to some open source repositories on Github.
::b) contributing missing functions to the Octave-Forge Signal package.
::b) contributing missing functions to the Octave-Forge Signal package.
:I do have the experience of working on a few projects with a team but those were small projects and we never used version control systems while making them.
I do have the experience of working on a few projects with a team but those were small projects and we never used version control systems while making them.


*'''Please describe the biggest project you have written code for and what you learned by doing so. Also, describe your role in that project over time.'''
* '''Please describe the biggest project you have written code for and what you learned by doing so. Also, describe your role in that project over time.'''


:I'll assume that by 'biggest project', you mean the project which required me to play important roles and write a lot of code which required a lot of testing and debugging.
:-I'll assume that by 'biggest project', you mean the project which required me to play the most important roles and write a lot of code which required a lot of testing and debugging.
In this sense, my biggest project was that of making an Arduino and LDR Sensors based maze solver bot with a team of four. The bot would traverse a maze in a 'trial run' and store all the correct paths (A path that would not lead to a dead end) in its memory whenever it encountered a 'T like' condition in the maze (A condition when more that one choice of path was available). After that, in any subsequent run, the bot would traverse the maze using the stored path (which avoided dead ends) and therefore, solve the maze in a shorter amount of time.  


:In that sense, my biggest project was that of making an Arduino and LDR Sensors based maze solver bot with a team of four. The bot would traverse a maze in a 'trial run' and store all the correct paths (A path that would not lead to a dead end) in its memory whenever it encountered a 'T like' condition in the maze (A condition when more that one choice of path was available). After that, in any subsequent run, the bot would traverse the maze using the stored path (which avoided dead ends) and therefore, solve the maze in a shorter amount of time.
I was the team leader in this project and as the leader, my primary roles were to..
 
:I was the team leader in this project and as the leader, my primary roles were to..
::a) Give directions to the team in a way that every team member's individual skill-set could be taken into use.
::a) Give directions to the team in a way that every team member's individual skill-set could be taken into use.
::b) Boost the morale of the team whenever it seemed like the project would not get completed in time.
::b) Boost the morale of the team whenever it seemed like the project would not get completed in time.
:These were my primary roles as the leader. My technical role was to write the code or to make a 'functioning brain' of the bot. Roles of my team mates were to design the hardware, design testing tracks etc.
These were my primary roles as the leader. My technical role was to write the code or to make a 'functioning brain' of the bot. Roles of my team mates were to design the hardware, design testing tracks etc.


:Some soft skills I learned from this project were..
Some soft skills I learned from this project were..
::a) How to work with a team.
::a) How to work with a team.
::b) The roles and importance of a leader.
::b) The roles and importance of a leader.
:Some technical skills I learned were...
Some technical skills I learned were...
::a) Technicalities of Arduino, LDR Sensors, motor drivers etc.
::a) Technicalities of Arduino, LDR Sensors, motor drivers etc.
::b) Technicalities of writing an Arduino/C code.
::b) Technicalities of writing an Arduino/C code.


*'''Please state the commits and patches you already contributed to Octave.'''
* '''Please state the commits and patches you already contributed to Octave.'''
 
:Patch submissions...
::- I've contributed a patch for the db2pow[https://savannah.gnu.org/patch/?9587] function of the signal package.
::- I've contributed a patch for the pow2db[https://savannah.gnu.org/patch/?9589] function of the signal package.
::- I've contributed a patch for the modulate[https://savannah.gnu.org/patch/?9409] function of the signal package.
 
:Other small contributions...
:- I have also helped review the cconv[https://savannah.gnu.org/patch/?9570] function by suggesting a faster algorithm. My suggestion was considered and acted upon.
:- I have also helped by updating the signal package wiki page[https://wiki.octave.org/Signal_package#Missing_Functions] and bringing it up-to-date with the patch tracker. Discussions can be seen here [http://lists.gnu.org/archive/html/octave-maintainers/2018-03/msg00188.html].


:I have also coded a small implementation[https://github.com/Sudeepam97/Did_You_Mean] of the project I plan to work on[https://wiki.octave.org/Summer_of_Code_Project_Ideas#Command_line_suggestion_feature]. This is a rough implementation which has been done for demonstrative purposes only and needs a lot of work.
:- I've contributed a patch for the db2pow function of the signals package.
:- I've contributed a patch for the pow2db function of the signals package.
:- I have also helped review the cconv function by suggesting a faster algorithm. My suggestion had been considered and implemented.


== F: Feeling fine ==
== F: Feeling fine ==
Line 114: Line 108:


** '''IRC and mailing lists'''
** '''IRC and mailing lists'''
:: -I am comfortable with IRC and mailing lists.
:: -I only started using IRC after I decided to apply for GSoC and contribute to Octave. I hangout in the #Octave channel and I believe I understand how an IRC works. I have been using the mailing lists also and I am comfortable with them.


** '''Mercurial or other source code management systems'''
** '''Mercurial or other source code management systems'''
:: -I am comfortable with git and while submitting patches for Octave-Forge I have understood how Mercurial works. I understand how patches are contributed in the Octave community.
:: -I am comfortable with git and while submitting patches to Octave-Forge I have understood how Mercurial works. I understand how patches are contributed in the Octave community.


** '''Mediawiki or other wiki software'''
** '''Mediawiki or other wiki software'''
:: -I learned a little while writing this application and I feel comfortable using them.
:: -I learned a little while writing this application, I've used it no more than while writing this application.


** '''make, gcc, gdb or other development tools'''
** '''make, gcc, gdb or other development tools'''
Line 126: Line 120:


* '''What will make you actively stay in our community after this GSoC is over?'''
* '''What will make you actively stay in our community after this GSoC is over?'''
:: -There are many things that I would like to complete in/add to Octave. An example would be a signal package which is at par with MATLAB's signal toolbox. Things like these, and the fact that GNU Octave is such an important piece of software for me will make me stay in the community even after GSoC.
:: -There are many things that I would like to complete in/add to Octave. Those things, and the fact that Octave is such an important piece of software for me will make me stay in the community even after GSoC.


== O: Only out of interest ==
== O: Only out of interest ==
Line 166: Line 160:
* '''Did you select a task from our list of proposals and ideas? If yes, what task did you choose? Please describe what part of it you especially want to focus on if you can already provide this information.'''
* '''Did you select a task from our list of proposals and ideas? If yes, what task did you choose? Please describe what part of it you especially want to focus on if you can already provide this information.'''


::Yes, I have decided to work on the '''command line suggestion feature [https://savannah.gnu.org/bugs/?46881]'''.
::Yes, I have decided to work on the '''command line suggestion feature''' [https://savannah.gnu.org/bugs/?46881)]. This feature is essentially a complex, decision making problem and therefore, I will approach it with Neural Networks, made using Octave (m-scripts) itself.
 
::''My special focus would be to have a minimal trade-off between the accuracy and speed of the feature.'' Please look at the last and additional section of 'Project Description' for technical details. I would like to apologize for creating this extra part but it describes some of the important technicalities of this project and I believed that it should have been present.
 
*'''Please provide a rough estimated timeline for your work on the task.'''
 
:'''Preparations for the project (pre-community bonding)'''
::While this application is being reviewed, I have started working on a m-script which will be used to catch the most common spelling errors that the users make. This list of errors could then be...
 
:::-Uploaded to a secure server directly.
:::-Stored as a text file and we can ask the users to share this file with us.
 
:'''Community Bonding period'''
 
::I will use the community bonding period to...
 
:::-Persuade the community to use our data extraction script and help us collect training data. This can be done by discussing the benefits of a command line suggestion feature and sharing my current implementation (this is a small and imperfect model of what I plan to make please see the 'Project description' section) of this feature [https://github.com/Sudeepam97/Did_You_Mean].
 
:::-Ask the community to report issues with the m-script containing the current implementation. I’ll shift the current implementation to mercurial if required.
 
:::-Discuss how we should receive the data generated by the users, work on the approach, and start the collection of data.
 
:::-Organize the data as it is received and divide it to create proper, training, cross-validation, and test sets for the Neural Network.
 
:'''May, 14 – June, 10 (4 weeks)'''
 
::'''Week 1 (May, 14 – May, 21):''' I would not be able to do a lot of work in this week as I have my final examinations at this time. I’ll take this week as an extension of the community bonding period and use it to collect issues, collect more data and divide it into proper datasets.
::'''Week 2 and Week 3 (May, 21 – June, 3):''' Most of the code of the Neural Network would be identical to my current implementation and so I’ll start by making my current implementation bug free (Some known issues can be found here: [https://github.com/Sudeepam97/Did_You_Mean/issues]) and by coding it according to the Octave coding standards. I plan to keep the user data coming for these weeks also and so I’ll leave room for network parameters such as the number of hidden layers and the number of neurons per hidden layer because these are data dependent parameters. If all this work gets completed before the expected time, I’ll automatically move on to complete next week’s work.
::'''Week 4 (June, 4 – June, 10):''' By now we will have sufficient data, data from octave-online.net and from approximately 6 weeks of extraction script’s usage. I’ll quickly give a final look to the data and start training the Neural Network with it. I will choose appropriate values of the data dependent network parameters which, while keeping the speed of the Neural Network fast, would fit the learning parameters (weights) of the Neural Network to our data with a high level of accuracy. I would then measure the accuracy of the Network on cross validation and test sets and see how our network generalizes to unknown typographic errors. I will also write some additional tests for various m-scripts used.
 
::'''Phase 1 evaluations goal:''' A set of working neural network m-scripts, which could suggest corrections for typographic errors.
 
:'''June, 11 – July, 8 (4 weeks)'''
 
::'''Week 5 (June, 11 – June, 17):''' I’d like to take this week to work in close connection with the community and perform tests on the newly created m-scripts. Essentially, I’ll be asking the community to try out our m-scripts and see how they work for them. I will work on the issues pointed out by the community and by the mentors as they are reported and would try to make the m-scripts perfect in this week itself.
::'''Week 6 (June, 17 – June, 24):''' I’ll fix any remaining issues and proceed to discuss and understand how our Neural Network should be integrated with Octave. I’ll start working on integrating the network as soon as the approach is decided. It is worth mentioning here that we will merge a trained network with Octave and therefore the chances of our code being slow are eliminated.
::'''Week 7 – Week 8 (June, 25 – June, 8):''' I will integrate our neural network with Octave as discussed, and write, and perform tests to make sure that everything works the way it should. If this task gets completed earlier than expected, I’ll automatically move on to the next task.
 
:'''Phase 2 evaluations goal:''' A development version of Octave which has a command line suggestion feature (currently there will be no mechanism available to easily select the corrections suggested and easily enable/disable this feature).
 
:'''July, 9 – August, 5 (4 weeks):'''
 
::'''Week 9 (July, 9 – July, 15):''' The development version of Octave, with an inbuilt suggestion feature will be open for error reports. I’ll work on the issues as they are reported and also discuss what an easy enable/disable mechanism and the mechanism to easily select the corrections suggested should be like.
::'''Week 10 (July, 16 – July, 22):''' I’ll create the required mechanisms as discussed, write and perform tests, and push a development version with a complete command line suggestion feature.
::'''Week, 11 – Week, 12 (July, 23 – August, 5):''' I’ll work in close connection with the community, fix the issues that are reported, and ask for further suggestions on how the command line suggestion feature could be made better.
 
:'''Phase 3 evaluations goal:''' A development version of Octave with a complete and working command line suggestion feature, open to feedback and criticisms
 
== Project Description ==
 
Let me first describe the three kinds of Neural Networks that we can end up making (Depending on the training data available).
 
:'''A network trained with only the correct spellings of the inbuilt functions'''
This type of network would be very easy to make because only a list of all the existing functions of GNU Octave and no additional data will be required. With this approach, we would end up creating a Neural Network which would easily understand typographic errors caused due to letter substitutions and transportation of adjacent letters. In-fact, this network would understand multiple letter substitutions and transportations also and not only single letter substitutions or transportations. I say this with such confidence because I have already made a working neural network of this type [https://github.com/Sudeepam97/Did_You_Mean]. This network would however, perform poorly if an error is caused due to accidental inclusion or accidental deletion of letters.
 
:'''A network trained with the correct spellings of the functions and self created errors'''
This would be slightly harder to make but should give us an improved performance. I will create some misspellings of all the functions, by additional inclusion, deletion, substitution, and transportation of one or two letters and then add all these self created misspellings to the dataset which will be used to train the network. Such a network would understand what correct spellings and random typographic errors look like. It will easily understand substitutions and transportations like the previous network but would also be more accurate while predicting errors caused due to additions/deletions. However, it is worth mentioning here that we may create errors while creating errors. Because our training data will be modified randomly, although the chances are rare, the Neural Network may show uncertain behaviour.
 
:'''A network trained with the correct spellings of the functions and the most common typographic errors'''
To make this kind of Neural Network, we need to know what common typographic errors look like. With that goal in mind, I have already contacted the people behind octave-online.net [https://octave-online.net/] who say that they are happy to support the development of GNU Octave and have shared a list of top 1000 misspellings with me through email. However the users of octave-online.net are only one of the parts of the entire user group. For best results, we would require the involvement of the entire Octave community, which, also implies that it will be the hardest and the most fun Neural Network to make.
By creating a script that would be able to catch typographic errors and by asking the users of GNU Octave to use this script and share the most common spelling errors with us, and training the network on the dataset thus created, we’ll create a Neural Network which would understand what correct spellings and the most common typographic errors look like. Such a network would give good results, almost every-time and with all kinds of errors. This is because when our network knows what common errors are like, most of the times it would know the answer beforehand. For the remaining times, the network would be able to predict the correct answer.
 
I understand that using Neural Networks may seem like an overkill and that one could think about using traditional data structures like tries, or algorithms like 'edit distance' which are made for exactly these kinds of problems. However, I have chosen neural networks because, after due consideration, as described below, to me, neural networks look like the best solution to minimize the trade-off between speed and accuracy of the feature.
Edit distance, while being accurate, would be the slowest approach of the three, and tries, though fast, would not be able to generalize to unknown typographic errors. Neural networks, however, when trained with proper data, would be highly accurate, would generalize to unknown typographic errors, and because of the fact that ultimately '''a 'trained' Neural Network''' will be merged with core Octave, this approach will be fast as well. Another disadvantage when using tries that I'd like to mention is that, if, say, we are unable to arrange a sufficiently large list of common spelling errors, a trie would fail miserably, however, a neural network even in that case, would easily identify letter substitutions and transportations of adjacent letters.
 
At a later stage (possibly after GSoC), I could merge the data extraction script with Octave so that the performance of the Network could be improved with time. This could come with an easy disable feature, so that only the users who would like to share their spelling errors would do so.
Please note that all contributions to Octave may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Octave:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)