Sunday, October 4, 2009
Thinking Computers
With ORD really around the corner, I was thinking about ways to occupy myself, or 'self better' myself with this free time. With that thought, I suddenly had a ambitious idea to try a program Optical Character recognition program from scratch.Yes, I'm aware there are already such programs out there, plenty of it, but they are not perfect. And some of the better ones require payment. So I was thinking it would be a nice challenge to program one. Of course, the program's basic outline should be able to read my handwriting, input will be uploaded photos of my notes taken with a camera phone. The program should be able 'learn', interfacing itself to work with me, asking me what is the word or letter as it parses through the image, but it can only do this if it fails to find a match in a database(pulled from the internet).
As I was conceptualizing through this thing, I realised quite suddenly that this is a huge task to undertake. Computers simply do not work this way, because they don't 'think'. This job, if handed to a human to do, would be comparatively easy. For one, computers cannot recognise a pattern on their own. They can match one pattern against one they have already stored, exactly, 1 for 1. But they cannot recognise a foreign, new pattern. Take the most basic question crucial for my project, how would the computer recognize the presence of my handwriting? That is, how would the computer be able to differentiate the object from its background? You might say, that's absurdly easy, text would be written in a single coloured ink so just have the computer scan and extract pixels of certain color. But what if I want to write my stuff in different colored ink? What if I anyhow scribble the words in different orientations? What if the paper is ruled with lines (which would make the computer process of detecting edges a hard one)? For humans, differentiating background and object, is easy. A lot of everyday objects are movable, but background does not move, its a backdrop. After a while we learn which stuff are objects, and when we focus on the object of interest, everything else is background. For a 2D static picture, our experience with 3D carries over. We have stored a database of objects in our brain, and therefore is able to recognize objects. Therefore we need to teach the computer the symbols. Here we have a little snag, for humans, our eyes take in the full picture, and it is presumably processed by the brain as a whole. Our approach can be said to be holistic. But computers on the other hand, are reductionists. They take in pixel by pixel. In this, computers are slower than us.
The next thing, reducing an image to its component symbols. Especially important for a person like me who writes in cursive. If 2 symbols are overlapping, can the computer separate them out?
As I thought about this further, I realised something about our intelligence. We are intelligent because of our capability to recognise patterns. This is an ability closely tied to our compulsion to put everything in order, to classify. Alan Turing came up with the Turing test to test artificial intelligence. If such an artificial intelligence can hold a conversation with a human, and if that human is unable to differentiate whether it is an artificial intelligence speaking or a real human speaking, then the artificial intelligence would have passed the rest. But this test is really quite vague, I think. What sort of conversation should you hold? How is the weather today? Have you eaten? Questions the likes of these can have a pre-programmed answer in database. Questions should really include things that test its capability to organise and recognise patterns on its own. Everybody sees things differently, so the computer has to be able to explain its rule used to organise, or the rule that it derived from a pattern.
Pattern recognition is a pretty important thing, because it achieves data compression. A repeating lines of ones can be said as such, instead of writing out the infinite line of ones. This concept, cannot be conceived by any computer on their own now. Which is why, they are pretty dumb. But I am thinking, that maybe this is not so impossible after all. If we can teach computers to recognise and make new patterns based on existing ones, and expand their database through storing what they do not know, they may come closer to 'thinking' after all.




No comments yet