Probabilistic data-driven Development

내가 본 글에서는 ‘확률적 데이터 드리븐 개발(Probabilistic data-driven Development)’ 이라고 언급하고 있고 내가 에자일 개발방법론은 잘 모르지만 그가 쓴 글에서 이 방법이 궁극의 에자일 프로그램 개발 방법이라는 이야기까지 언급이 되어 있었다.

Peter Norvic이라는 구글 리서치 디렉터가 만는 100라인밖도 안되는 Spell Checker 프로그램을 보면 과연 그 말이 허언이 아님을 알 수 있다. 대신 그가 프로그램과 함께 제공하는 코퍼스 데이터가 꽤 된다. 하지만 이정도 만으로도 90%가 넘는 정확도를 자랑한다.
우리나라 SI에서 소프트웨어 단가 계산을 할때 코드 라인으로 계산을 하는것이 생각나는게 나만은 아닐거라 생각해 본다. 하긴 뭐 저 많은 코퍼스를 코드에 박아 넣어 버리면 돈은 되겠네..ㅎㅎ

얼마전에 기고한 월간 마이크로소프트웨어에 기고한 “오류 쿼리 분류기”도 역시 데이터에 기반한 프로그램의 일종이다. 물론 weka.jar에 기반을 해서 만들었지만 말이다. 역시 이 프로그램도 학습셋을 어떤것을 집어 넣느냐에 따라 다른 성격의 것이 될 것이다.

Peter Norvic의 글을 보고 있자면 진짜 인공지능을 전공한 사람답게 코딩을 하고 있고 문제를 푼다는 것을 절실히 느낄 수 있었다.
 
1.문제를 정의하고
2.확률 모델을 만들고.
3.후보들을 만들어 내고
4.그 후보들 사이에서 가장 확률이 높은 것을 정답으로 제안..

이 과정은 전에 형태소 분석기를 개발할 때와 같은 과정을 거친다. 물론 사전만을 사용해서 확률 모델을 만들기는 어려웠으나 웹 검색을 하고 있는 회사에서나 양질의 문서를 많이 가지고 있는 곳에서는 확률 모델을 사용하기가 더 쉬울 거라 생각해본다. 물론 형태소 분석기는 후보를 만들어 내는데 많은 코드 리소스가 들어가긴 하겠지만 말이다. 만일 체언 정도만 분류하는 정도라면 영어에 최적화된 프로그램에 코퍼스만 바꾸어 사용해도 높은 정확도가 얻어질 거라 생각한다.

사실 지금 하고 있는 일이 내가 사용하는 모델의 정확도를 올리는 작업인데, 초반에는 일반적인 관점과 같이 추가 코드를 작성하는데 큰 열성을 보였지만 그 접근 방법이 크게 효과가 없다는 것을 아는데는 오랜 시간이 걸리지 않았다. 따라서 지금은 데이터의 오류를 제거하고 양질의 코퍼스를 입력하는데 주력하고 있는 중이다.

손으로 코딩한 룰은 아주 자세히 문서화 하지 않는 이상 추후 유지 관리하기 복잡하다. 따라서 이런 복잡한 작업을 하는 서비스들은 데이터 기반한 것들로 만들어 두면 유지할 코드도 줄어들 뿐만 아니라 데이터만 동적으로 로딩해 주면 사용자의 구미에 맞게 프로그램이 자동으로 돌아가게 되는 장점이 있다. 

나도 이제 고민에 들어갈 시간이다.. 과연 어떻게 가장 효과적으로 가장 진짜같은 후보들을 데이터 기반으로 만들어 낼 것인가로…

CC BY-NC 4.0 Probabilistic data-driven Development by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.