요즘에 한창 관심을 가지고 연구하고 있는것이 있다. 집단 지성(collective intelligence), 사회적 지성(social intelligence)과 온톨로지, 그리고 인공지능이다.
사람은 시각과 청각으로부터 대부분의 정보를 수집한다. 물론 이것외에 오감을 이용하지만, 사실 상대적으로 저 두가지에 크게 편중되어 있다고 한다. 저런 감각정보는 다른 감각정보보다 전달속도가 빠르기때문에, 우리가 촉감을 느끼고, 맛을 보고, 냄새를 맡기 전에 받아들여진다.
수많은 객체들이 놓여있는 어떤 한 특정공간에서 우리가 잠시 그 공간을 들여다보고 난뒤에 얼마의 시간이 지나고, 다시 그 공간을 기억을 했을때 정확히 그 공간상에 놓여있는 객체를 정확히 얼마나 기억할까? 언젠가 EBS 다큐멘터리에서 이런상황을 실험을 통해, 인간의 기억에 대한 실체가 어떠한가..를 보여준적이 있다. 사람은 자신이 좋아하는 것만 기억하고, 자기가 보려고 하는 것만 보려하고, 때로는 희미해진 기억들에 상상을 더해서 없는것을 만들어 내기도 한다. 만약에 로봇과 같은 기계가 사람과 같이 일정 시간이 지나면 저장되어있던 정보들이 희미해진다고 생각해보자. 어떤 사람은 기계가 그럴필요가 있겠느냐라고 생각할지도 모른다. 그렇다. 굳이 그럴필요는 없다. 하지만, 사람이 자신이 좋아하는 것만 기억하고 자기가 보려고 하는것만 기억한다는 것은 자신에게 중요하다고 생각하는 것만 머리에 저장하는 것을 의미한다. 따라서, 기계또한 모든 정보들을 분석하고 저장하는 것이 아니라, 시간이 지남에 따라서 희미해지는 것은 버리고, 중요한 정보만을 저장하자는 것이다. 사람처럼..... 이런 중요한 정보들을 네트워크라는 연결 통로를 통해서 일반화될 수 있는 knowledge를 만들고, 이 knowledge들을 궁극의 wisdom으로 만들어 내보자는 것이다. 사람이 아니라 기계 스스로가 알아서.....
나는 일단 사람과 같은 기억 매커니즘을 모델링하여 기계가 보는 시각정보를 사람과 같이 기억하게 하고, 인지하고 학습하게 만들고 싶다. 그래서 항상 염두에 두면서 생각하는 것이 Humanlike한가?를 따지는 것이다. 이 Humanlike라는 것이 인간의 근본적인 심리적 또는 물리적 반응(?), 작용(?)을 수학적으로 모델링하여 그와 유사한 결과를 보이도록 하기위해 만든것일 수도 있고, 전혀 인간과 관계없이 만들어졌지만 그 결과는 사람의 그것과 닮아서 humanlike하다라고 말할 수도 있을것 같다. 때로는 전자에서 힌트를 얻지만, 이 복잡한 인간계(system)를 부분적으로나마 모델링하기도 쉽지 않다고 생각한다...
anyway..
이러한 것을 만들기위해 가장먼저 필요한것이 기계가 scene understanding을 해야할 것이라는 것이다. 지금 보고 있는것이 무엇인지, 무엇을 의미하는지를 알아야 할 것이라는 말이다. 예를들어보면, 우리가 차를 타고 도로를 달리고 있다고 생각해보자.. 도로주변에는 길을 알려주는 표지판이 있다. 1km앞에서 오른쪽으로 가면 어느 방향으로 가고 하는 등등의... 우리가 표지판을 보고 1km후에 방향을 선택할 수 있는 것은, 단순히 글자나 방향기호를 인식해서가 아니다, 1km라는 글자와 '→' 와 같은 기호사이에 묵시적인 어떤 지시가 숨겨져 있다. 우리는 학습을 통해서 충분히 이해하고 있지만, 기계는 그러하지 못하다. 뭐 모든 상황을 학습 알고리즘을 통해 학습시켜놓으면 되지 않느냐 하겠지만, 물론 그러면 가능은 할테지만, 사람이 사는 모든 상황을 하나하나 학습 시키는것이 가능한 일일까? 의문이다... 그래서, 일차적으로 내가 풀고자 하는 문제는 바로 영상을 통해 묵시적으로 전달하려고 하는 의미를 유추해내는 방법을 찾는것이다..(혹시 이 글을 보고 있는 사람중에 이런 내용에 대해서 좋은 reference가 있다면 추천바랍니다.)
내 생각에는 일단은 들어온 영상에서 키(key)가 될 수 있는 것들을 추출해서 semantic word로 변환하는 과정이 필요할 것 같다. 영상에 내포된 의미단어들을 추출해 내는 것이다. 즉, 사람으로 따지면 영상을 있는 그대로 저장하지 않고, 본 사물의 이름이나 어떠한 특징만 기억하고 있는 형식이다... 의미를 추출해내는 방법은 몇가지가 있는것같다. 예를들면 'bag of visual word'를 통해서 제한된 단어들로 classify해서 유추해내는 등의.... 어쨋든 이런 방법을 통해서 단어들을 뽑아내고 그 단어의 의미를 알기위해서는 온톨로지와 같은 어떤 컴퓨터도 이해할 수 있는 dictionary가 필요한데...
1985년도부터 미 Prinston대학에서 만들어진 WordNet이라는 자연어 처리를 위한 영어 어휘의 대형 데이터베이스가 있다는 것을 알았다. 어휘들의 개념이나 동의어간에 관계가 잘 구성된 데이터베이스라고 한다. 이 데이터베이스를 이용해 보려고 한다.
내가 접근하고자 하는 방법이 맞는지 틀린지 아직은 모른다. 일단 가장 빨리 떠오르는 방법을 따라서 삽질을 해보는 것뿐.. 혹시 아는가... 삽집을 하려고 땅을 파는 순간에 금괴가 들어있는 상자를 발견할지...
어쨋든 이 WordNet을 사용하려고 하는 이유를 설명하기 위해 장황한 글을 적었는데, 논문을 검색해보니 목표는 다르지만 비슷하게 접근하여 어떤 다른 문제를 풀려고 시도한 논문들도 보인다. 이말은 가능성이 없는것은 아니라는 말일터... 영상에서 추출된 단어의 의미를 추출하기위한 좋은 자료가 될 수 있음은 분명한 것같다.
최근에 C++대신에 second language로 Python을 써볼려고 공부하고 있는데.. 사실 97년도였던가.. 98년도 였던가.. 대학때 교수가 python 언어를 배워놓으라고 했던말이 아직도 생각나는데, 지금에 와서야 이 python이라는 것이 이렇게 강력해질지 몰랐다. 그 당시에 python은 java와 함께 유연하지만 느린 인터프리터때문에 많이 사용될거 같지는 않았기 때문에...
이 WordNet을 설치하면 python에서 연동이 가능하다. pyWordNet을 설치하면 쉽게 쓸 수 있다. 버젼 문제이던가.. path설정 문제가 있긴하지만, path를 강제로 바꿔주면 문제될 것은 없다. 현재 Windows 7 + python 2.7.2 + pyWordNet + WordNet 2.1을 설치하여 쓰고 있다.
참고로, WordNet은 다양한 언어로 각 국가에서 만들어지기도 한다. 물론 한국어도 존재한다. 영어처럼 완전히 개방적이지 않은것 같지만.. Global WordNet Association(http://www.globalwordnet.org/)에서 확인 가능하다.
- pyWordNet은 http://osteele.com/projects/pywordnet/ 에서 다운로드 가능하고 example도 있다.
- WordNet은 C++ interface로 기본제공된다. (http://wordnet.princeton.edu/wordnet/)