2011/02/05 00:25 if (IR or NLP)
구글의 검색 랭킹 담당자인 Amit Singhal 은
"I’ve got no problem with a competitor developing an innovative algorithm. But copying is not innovation, in my book.”
이라고 말하며, 마이크로소프트의 Bing이 구글의 검색 결과를 배꼈다는 식으로 이야기를 했다.

참고 URL


구글의 주장은 Bing의 검색 결과가 구글의 검색 결과와 시차를 두고 비슷해 지는 것을 발견했다는 것이다. 구글은 이를 입증하기 위해서 실험을 진행하였는데, 그 방법은 이렇다.
100개의 가상의 쿼리를 만들고, 구글 검색 엔진이 그 쿼리와 전혀 관계가 없는 문서를 검색 결과로 출력하도록 만들었다. 한 예로, "hiybbprqag" 라는 존재하지도 않는 단어의 검색 결과로 그 단어가 나타나지도 않는 문서를 검색결과로 나오도록 꾸민 것이다.
그러고는 Internet Explorer 8에 Bing Toolbar를 설치하고 "구글 검색 엔진"에 그 가상의 쿼리를 입력하고, 구글의 검색 결과를 클릭했더니, 수주 후에 그 같은 검색 결과가 Bing의 검색 결과로 나오는게 딱 걸렸다는 스토리다.

얼핏 보면 Bing의 Cheating을 구글이 지혜롭게 잡아낸 것 처럼 보이지만, 뒤집어서 생각하면 Bing의 랭킹 알고리즘 중 하나를 간파한 구글이 어뷰징을 했다고도 볼 수 있다.

실제로 Bing은 구글의 주장을 부정하지는 않았다.
"Opt-in programs like the [Bing] toolbar help us with clickstream data, one of many input signals we and other search engines use to help rank sites."
구글 검색 결과를 클릭하는 클릭 스트림은 랭킹의 수많은 시그널 중 하나일 뿐이라는 것이다. 구글이 가상으로 만든 100개의 쿼리에는 아마 다른 시그널이 전혀 들어갈 여지가 없으므로, 구글의 검색 결과가 그대로 나온 것이라는 말이다. 진짜 쿼리에 대해서는 이런 클릭 스트림의 영향이 main이 아니라, 극히 일부분이라면 구글은 함정 수사의 결과를 과장하고 있는 것이다.
posted by 심보준
TAG 검색, 구글,

Trackback | http://blog.sragent.pe.kr/trackback/46 관련글 쓰기

댓글을 달아 주세요

  1. 2012/03/15 14:48  Addr Edit/Del Reply

    비밀댓글입니다

  2. 2012/03/21 18:22  Addr Edit/Del Reply

    비밀댓글입니다

  3. 2012/03/27 16:18  Addr Edit/Del Reply

    비밀댓글입니다

  4. 2012/04/05 18:07  Addr Edit/Del Reply

    비밀댓글입니다

2010/08/22 13:06 if (IR or NLP)
아래는 NLTK를 이용한 K-means 클러스터링 예제이다.

#!/usr/bin/python
# -*- coding: utf-8 -*-

from nltk import cluster
from nltk.cluster.util import *

# d0 = "김태호 탈세"
# d1 = "이주호 탈세"
# d2 = "신재민 위장전입 부동산투기"
# d3 = "진수희 탈세"
# d4 = "이현동 위장전입"
# d5 = "유정복 탈세"
# d6 = "이재훈 부동산투기"

# features = [김태호, 이주호, 신재민, 진수희, 이현동, 유정복, 이재훈, 탈세, 위장전입, 부동산투기]
d = [None] * 7 
d[0] = [1, 0, 0, 0, 0, 0, 0, 1, 0, 0]
d[1] = [0, 1, 0, 0, 0, 0, 0, 1, 0, 0]
d[2] = [0, 0, 1, 0, 0, 0, 0, 0, 1, 1]
d[3] = [0, 0, 0, 1, 0, 0, 0, 1, 0, 0]
d[4] = [0, 0, 0, 0, 1, 0, 0, 0, 1, 0]
d[5] = [0, 0, 0, 0, 0, 1, 0, 1, 0, 0]
d[6] = [0, 0, 0, 0, 0, 0, 1, 0, 0, 1]

vectors = [numpy.array(f) for f in d]
# 초기 mean vector = [탈세], [위장전입], [부동산투기]
means = [[0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]] 

k = 3 
clusterer = cluster.KMeansClusterer(k, euclidean_distance, initial_means=means)
clusters = clusterer.cluster(vectors, True, trace = False)

for i in xrange(len(clusters)) :
    print 'd[%d] = cluster %d' %  (i, clusters[i])

실행 결과
d[0] = cluster 0
d[1] = cluster 0
d[2] = cluster 1
d[3] = cluster 0
d[4] = cluster 1
d[5] = cluster 0
d[6] = cluster 2
posted by 심보준
TAG k-means, nltk

Trackback | http://blog.sragent.pe.kr/trackback/44 관련글 쓰기

댓글을 달아 주세요

  1. 근데, kmeans 속도 무지 쫌 저기하지 않아요? ^^;;

2010/08/01 19:59 분류없음
여름 휴가에 장모님이 계신 전라 북도 장수에 들릴 생각이다.
장모님을 모시고 갈만한 맛집을 찾아볼 생각으로 날린 쿼리가 '장수 맛집'.

네이버 블로그 장수 맛집 검색 결과
구글도 크게 다르지 않다.
'춘천 맛집' 검색 결과와 비교해 보면 위 결과가 얼마나 안 좋은 건지 알수 있다.

검색 아직 할일 마안쿠나~
posted by 심보준
TAG 검색

Trackback | http://blog.sragent.pe.kr/trackback/43 관련글 쓰기

댓글을 달아 주세요

  1. 조은경 2010/08/08 16:24  Addr Edit/Del Reply

    아하, 그런 건 다음/다음 지도/다음 로드뷰에서 검색하면 디게 잘 나와요 ㅎㅎㅎ

  2. 다음 블로그 검색 결과는... 이거 재밌는 걸 ^^ http://search.daum.net/search?w=blog&m=board&q=%C0%E5%BC%F6+%B8%C0%C1%FD&lpp=10

  3. ㅋㅋ 재미나군요. 그래서, 사람들이 컬렉션 골라서 글을 쓰나봅니다.
    글고, 흠흠.. 제목이 좀 ... '검색 아직 할일 마안쿠나~'로 했어야 하지 않나 하는 생각이.. ㅎㅎㅎ

2010/02/06 02:27 else

노무현 대통령의 업적 중 하나는 대한민국에서 대통령이 최고 권력자가 아니라는 사실을 새삼 알려주었다는 것이다.
아이러니컬하게도 노무현은 대통령이 되어서도 권력에 맞서 싸워야 했다.
좌파나 진보는 아니지만 개혁 진영이 10년이나 정치 권력을 잡았는데도 별로 변하지 않는 세상을 보면서, 그러면 대체 이 나라의 권력 구조는 어떻게 된건지 헷갈렸었었는데, 미디어 오늘 이정환 기자의 블로그에서 아래 글들을 읽어본 결과 나의 결론은

정치권력 < 언론권력 <<< 자본권력. 그 중에서도 삼성

첫번째 글 : 정치권력은 비판하면서 자본권력은 비판하지 못하는 이유

언론과 기업의 유착은 우리나라에만 있는 출입처 시스템의 영향이 크다. 경제부나 산업부 기자들은 아예 출입처 기자실로 출퇴근을 한다. 기업 기자실은 대부분 홍보실과 맞닿아 있는데 이곳에서 취재 지원과 통제가 동시에 이뤄진다. 기업 출입기자들은 기업이 제공해준 시설을 이용하면서 홍보 담당자들과 점심도 같이 먹고 저녁이면 술자리도 같이 하고 주말이면 함께 골프를 치면서 이를 취재의 연장으로 생각한다.

기자들은 스스로 부끄럽고, 갈등하고 그래서 언젠가는 바로 잡고야 말꺼야... 그런 생각을 할까? 글쎄 어디 그렇게 되겠나. 사회 생활이라는게 내 윗사람이 그러면 나도 그러고, 내 주위 사람들 다 그러면 그게 당연한 거지, 어찌 부끄럽겠나. 취재원이 기자들을 모아놓고 함께한 술자리에서 어쩌구하는 얘기가 기사에 떳떳하게 인용된 것도 한두번 본게 아니다. 게다가 기업과의 관계는 언론사이기 이전에 수익을 내서 직원들 월급을 줘야 하는 기업으로서 수익 모델이기도 하다.

"산업부는 경제지의 꽃이면서도 매출에 가장 크게 기여하는 부서이기도 하다"고 털어놓았다. 이 기자는 "연차가 좀 되면 출입처에서 나오는 광고에 신경을 쓰지 않을 수 없는데 기자들끼리는 기획회의를 영업전략회의라고 부르며 자조적인 농담을 하기도 한다"...(전체 매출에서 구독료, 광고료를 제외한)사업매출은 기업들 협찬과 후원이 포함된다. 일부 언론사는 이 비율이 40%에 육박한다는 이야기도 나온다.

산업부 기자는 광고를 따오는 영업맨이라는 얘기다. 그 영업맨이 고객의 이야기를 기사로 쓴다. 또, 기업의 협찬과 후원 이야기도 나오는데, 불법적인 촌지가 아니라, 합법적인 것이다. 기사의 편집 방향에 결정적인 영향을 미칠 것이라는 것을 쉽게 예측해 볼 수 있다. 삼성의 LED TV와 현대의 소나타에 대한 찬사 가득찬 리뷰나, 불법 파업으로 인한 손실액이 자그마치 얼마 하는 기사가, 몇년 동안 알고 지낸 홍보실 형님이 기자실 아우한테 브리핑 한 내용일 수도 있으니 좀 달리 생각해 봐야 하지 않을까?

두번째 글 : 언론이 삼성에게 쩔쩔맬 수밖에 없는 이유

이 포스트에서는 기업이 특정 신문사에 광고를 밀어 주는 행태가 특히 눈에 띈다

삼성전자는 조중동에 각각 81건과 82건, 88건의 광고를 집행했는데 한겨레에는 단 1건도 집행하지 않았다. 매경과 한경, 한국일보에는 66건과 62건, 59건이 집행됐다. 삼성의 한겨레 '왕따'는 계열사 전반에서 발견된다. 한겨레는 삼성 계열사를 통틀어 지난해 그룹 광고와 삼성물산 광고 각각 1건씩을 게재하는데 그쳤다.

이쯤되면 삼성은 신문에 광고를 이용해 홍보를 하는 게 아니라, 광고 개재에 당근과 채찍 전략을 적용해 신문사를 포섭하고 있는게 아닌가 하는 생각이 들 정도다.

난 언론에 뭘 기대하기는 힘들다고 본다. 언론이 우리 고정 관념에 아직도 남아있는 것처럼 뭘 바로잡고, 용기있게 알리고 (물론 극소수 일부는 그럴수도 있다. 그 극소수는 참 심신이 힘들겠지) 그런 시절은 갔다. 분명히 갔다. 그 보다는 뉴스 생산, 배급 통로의 일부를 점유하고, 뉴스 콘텐츠를 이렇게 저렇게 이용해서 수익을 올리는 기업으로 생각하는게 맞다고 본다.(결정적 증거는 네이버 뉴스 캐스트!)
우리 대중의 시각이 바뀌는 것이 현실적인 대안이 아닐까.

아 빼먹을 뻔했다. 신문사들이 자발적으로 광고를 거부한다는 김용철 변호사의 책

posted by 심보준

Trackback | http://blog.sragent.pe.kr/trackback/42 관련글 쓰기

댓글을 달아 주세요

  1. 앗, 우리팀에 어떤 분 책상에 놓여 있던 책인데... 빌려서 읽어봐야겠군요. 흠흠.

2009/12/30 00:15 else if (개발)
리눅스에서 윈도우로 옮겼더니 돌지 않는 코드를 보고 알게 된 것이다.

아래와 같은 코드가 있다.
#include <stdio.h>
int main() {
    //1바이트 짜리 변수
    char c;
    FILE *fp;
    // 하필. 이런 값을 한번 넣어본다.
    c = 0x0a;
    fp = fopen("test.bin", "w");
    // 1 바이트를 쓴다.
    fwrite(&c, 1, sizeof(char), fp);
    fclose(fp);
    return 0;
}

위 코드를 windows에서 컴파일하고 실행하면 생성되는 test.bin 파일의 크기는?
놀랍게도 2바이트 짜리 파일이 생긴다. 왜그럴까...

해결은 fopen을 다음과 같이 수정하면 된다.
fp = fopen("test.bin", "wb");

즉, 원래 코드는 ascii 모드로 open 한 거고, 수정된 코드는 binary 모드로 open 한 것이다. ascii 모드로 열고 위 코드를 실행하면 0x0a 뒤에 0x0d 즉, carriage return이 붙고, 파일 크기가 2 byte가 된다. 이건 windows에서만 그런 거다. 파일을 읽기 위해 open 하고, fread를 사용할 때도 마찬가지로 주의를 해야 한다.

위 코드는 설명을 위해 간단히 만든 시나리오고, 실제로는 몇 메가짜리 바이너리 파일을 쓰는 코드였는데, 알고 나니 재밌지만 과정은 기억에 오래 남을 삽질이었다.
posted by 심보준

Trackback | http://blog.sragent.pe.kr/trackback/41 관련글 쓰기

댓글을 달아 주세요

  1. 배재현 2009/12/30 10:02  Addr Edit/Del Reply

    고생하셨군요 ㅋㅋ

  2. 우욱 2010/04/12 07:13  Addr Edit/Del Reply

    AS812에서 같이 놀던(?) 놈임돠

    구글링하다가 형 블로그가 구글 최상단에 떠버리는 사태가.. ㅋㅋ

    얼굴 못 뵌지 넘 오래~~

    잘 지내시나봐요. *^_^*

    다시 코딩하러 후다닥~

    • 심보준 2010/04/16 13:27  Addr Edit/Del

      종민인가? 반갑다^^ 흔적만 남기고 가버리면 어떡하나. 꼬리라도 남겨야지.

2009/12/05 16:47 else if (개발)
요새 회사에서 하는 일은 주로 파이썬으로 데이터 주무르는 노가다.

오늘 오랜만에 자바로 알고리즘 퀴즈를 풀었는데, 몇 줄 되지도 않는 코드가 컴파일 에러가 주루룩난다.

public class RSABreaker {
    // x < y
    public isSharePrime(int x, int y) {   ----> return 타입을 빼먹었다.
        for (int i = 2; i <= x; i++) {
            if (x % i == 0 && y % i == 0)
                return true         ----> 세미콜론을 빼먹었다.
        }
        return false;
    }
   
    public int decrypt(int e, int n, int b) {
        int m = 1;
        for (int i = 2; i < n; i++) {
            if !isSharePrime(i, n)    ----> if 문에 괄호를 빼먹었다.
                m++;
        }
        d = 1                ----> 자료형을 빼먹었다. 세미콜론을 또 안썼다.
        while ((d*e) % m != 1)
            d++             ---> 세미콜론을 자꾸 자꾸 빼먹는다.
        int res = 1;
        for (int i = 0; i < d; i++) {
            res = (res * b) % n;
        }
        return res;
    }
}

posted by 심보준

Trackback | http://blog.sragent.pe.kr/trackback/40 관련글 쓰기

댓글을 달아 주세요

  1. 음..그럼 계속 파이썬을 쓰세요~

    • 심보준 2009/12/06 00:31  Addr Edit/Del

      그러게요. 데이터 마사지 하는거 말고도 활용폭이 점점 넓어질거 같아요.

  2. 엔트로피의크기 2009/12/07 21:17  Addr Edit/Del Reply

    아하, 요샌 주로 파이썬을 쓰셨군요. 몽땅 파이썬 스타일 구문 에러네요^^

2009/11/01 22:50 else

아래는 한 대학강사가 모카페에 올린글이다.


오랜만에 글을 보냄니다.

이곳 델리는 낯 기온이 40도 입니다. 15년 전에 내가 어떻게 이곳에서 공부했을까? 스스로 대견했구나 생각을 해 봅니다.

 

우선 반가운 소식은 이곳 국책급 연구소(CRRID)와 우리 **대학교 정치학과 사이에 양해각서(MOU)를 채결하였습니다.

인도에서의 지역연구를 위한 좋은 발판을 마련하게 되었습니다.

개인적으로 양해각서 체결을 근거로 이곳 연구소의 도움으로 10월 부터 12월까지 현지조사 연구를 할 수 있게 되었습니다.

조사 지역은 인도의 서북쪽에 위치한 펀잡 주(state)입니다.

모두 28개 지역의 마을들을 30일간 다니면서 직접 대면 조사 방식으로

주민자치제도에 대한 심층적인 연구입니다.

 

한국국적의 연구자가 인도의 현지 조사를 하는 것은 처음 있는 일 입니다.

개인적으로 기대가 큼니다...

 

이곳 델리에서 머무는 동안 잠시 한국의 정치 상황을 객관적으로 보면서 참 많은 생각을 갖게 됩니다.

인도의 정치 상황을 보면서 우리 체제가 갖고 있는 장점과 극복해야 할 점에 대해서 생각해 보았습니다.

 

"성찰과 모색" 이 번 여행을 통해서 얻게 된 화두였습니다.

앞만 보고 맹목적으로 달려가는 것 보나는 큰 일이든 작은 일이든

기초부터 튼튼히 쌓으면서 진지하고 성실하게 좀 느리더라도 함께 나아갈 수 있는 방법을 찾을 때라고 생각합니다.

 

포스코가 인도에서 13조를 쏫아 부으면서 돈으로 인도를 자신의 통제권으로 둘려고 했지만

결국 실패하는 상황을 보면서

돈으로 머든 하면 된다는 그 생각은 매우 잘못된 것이지요.

 

겸손하게 주변을 살피면서, 성찰과 모색의 시간이 필요한 것 같습니다.

그럼 우리 건강한 모습으로 수업시간에 만나요.

 

여러분들이 얼굴이 궁금해 지고 보고 싶어 짐니다.

그럼 잘 지내요.

인도 뉴델리,,


'글을 보냄니다', '낯 기온 40도', '보고 싶어 짐니다' 등등 맞춤법이 쩌는데, copy-paste 한 것이다.


자~ 그럼 이 글에 대한 조선일보의 보도를 한번 볼까?

링크 제목(anchor text) : 간첩 대학강사 과거글 인터넷 일파만파 

링크 클릭하면 나오는 기사 제목 : 17년간 간첩활동 벌인 대학강사.. "돈보다 겸손하게 주변 살펴야"

기사 원문


"간첩... 주변 살펴야." 정말 액기스만 잘 뽑았네.

17년간 공작금 6천만원 받은 대학강사 간첩이라. 비밀 아지트 전세값도 안되겠다. 간첩도 헝그리 정신이 필요한건가.



심심한데 짤방이나 하나 올려본다. 출처는 간첩 미니홈피 보다 위험한 국방부 홈페이지 :

http://www.mnd.go.kr/mndIntro_2009/map/index.jsp?topMenuNo=6&leftNum=15


posted by 심보준

Trackback | http://blog.sragent.pe.kr/trackback/39 관련글 쓰기

댓글을 달아 주세요

  1. 엔트로피의크기 2009/11/05 11:42  Addr Edit/Del Reply

    ㅍㅎㅎㅎㅎ

2009/10/26 11:17 else
내가 공식적으로 응원하는 팀은 두산이지만, 이번 한국시리즈 승부에서는 기아를 응원했었다. 12년동안 약팀으로 살아온 서러움이 보상받기를 바라는 마음 같은 것.
 
한국시리즈 7차전 9회말 끝내기 홈런이라니. 내가 이 장면을 TV로나마 본 사실이 정말 행운으로 느껴진다.
100번도 넘게 치뤄진 메이저리그 월드시리즈에도 7차전 끝내기 홈런은 딱 한번! 있었던 일이라고 한다.

SK 구원투수들은 많이 지쳐있었지만, 그래도 무너지지 않고 리드를 지켜 나갔지만, 결국 추격과 역전까지 허용하고 말았다. 기아는 뒤지고 있었고, 될듯 될듯하면서도 결정을 짓지 못하고, 경기에 뒤진채 초조하게 종반을 맞이했지만, 끈질기게 따라붙어 100년에 한번 나올까 말까한 드라마 같은 명승부를 만들어냈다.

기아 선수들 좋아서 울고 불고, SK 선수들도 축늘어진 어깨로 퇴장하며 울고, 나도 눈물이 찔끔 나와버렸네.

posted by 심보준

Trackback | http://blog.sragent.pe.kr/trackback/38 관련글 쓰기

댓글을 달아 주세요

2009/09/18 09:48 else
내 블로그 rss feed에서 몇 달전부터 올린 글이 포함 안되고 있다는 사실을 그저께서야  발견 하고서는
이건 무슨 버그야! 를 외치며 티스토리 고객 센터에 메일을 보냈는데. 오늘 답변이 왔다.

...환경 설정에서 발행 글만 rss로 공개하신다고 설정되어있습니다...

헉스!
posted by 심보준

Trackback | http://blog.sragent.pe.kr/trackback/34 관련글 쓰기

댓글을 달아 주세요

2009/09/13 00:16 if (IR or NLP)
예를 들어,
설문 조사 결과 모든 소비자를 놓고 봤을 때 냉면을 좋아할 확률이 70%라고 하는데, 전체가 아니라 남자가 냉면을 좋아할 확률이 궁금해 졌다. 
"남자의 경우 냉면을 좋아할 확률은?"  

비슷한 예로,
"한국인의 경우 키가 180 이상일 확률은?"
"두산 베어스가 9회에 지고 있는 상황에서 경기에 이길 확률은?"
이렇게, 그냥 확률이 아니라, 어떤 조건하에서, 어떤 경우, 어떤 상황이 주어진(given이라고 읽는다) 상태에서의 확률이 조건부 확률(Conditional Probability)이다. 그리고, 식으로는

P(냉면이좋아 | 남자)

이렇게 쓴다.

통계 기반 언어처리에서 이 조건부 확률은 무수히 많이 쓰인다.
예를 들어, 문서 분류기(Document Classifier)에서는 다음과 같은 조건부 확률이 쓰인다.
문서에 구글, 야후라는 단어가 나타난 경우 그 문서의 카테고리가 IT일 확률은? 식으로는

P(Category=IT | 구글, 야후)


자, 그럼 본격적으로 저 확률을 계산을 해보겠다.
조건부 확률의 정의에 의해서,

P(Category=IT | 구글, 야후) = P(Category=IT, 구글, 야후) / P(구글, 야후)

이다.
식에서 분자 부분을 읽어보면,
Category=IT이고, 구글, 야후 라는 단어가 나올 확률이다. 용어로는 Joint Probability라고 한다. 우리말로는 잘 모르겠다. -.-;; 
난 사실 이 부분을 맨 처음 들었을 때, 조건부 확률과 Joint 확률의 의미 차이가 정말 마음에 와 닿지 않았다.
A가 주어진 경우, B이고 C일 확률(조건부 확률) 이랑,
A이고 B이고 C일 확률(Joint 확률) 이랑
뭐가 달라?
그런데, 저 위의 조건부 확률의 정의, 즉, 계산 방법을 곱씹어 보면 의미 차이가 조금씩 와 닿는다.
만일 전체 샘플이 1000개라고 하면, 1000개중에서 카테고리가 IT이고, 구글이랑 야후라는 단어가 나타나는 문서가 5개가 있다면 P(Category=IT, 구글, 야후) = 5/1000 = 0.005 이다.
만일 전체 샘플이 1000개 인데 그중에 야후, 구글이라는 단어가 나타나는 문서가 10개이고, 10개중에 카테고리가 IT인 문서가 5개 라면, P(Category=IT | 구글, 야후) = 5 / 10 = 0.5 이다.
구글, 야후가 나온 문서로 한정 지으면 카테고리가 IT일 확률은 0.5라는 얘기다. 참 쉽다. 정말?

자자, 이제 진짜 문서 분류 얘기를 해보자. 진짜 문서에 구글, 야후 처럼 달랑 두 단어 있는 문서를 만나는 행운이 과연얼마나 있을까? 실상은 이렇다.

P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어)

조건부 확률의 정의에 의해

P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어)
=  P(Category=IT, 구글, 야후, 네이버, 다음... 그외 수백 단어) / P(구글, 야후, 네이버, 다음, ... 그외 수백 단어)

말로 풀자면 이렇다. 우린 지금, 문서에 구글, 야후, 네이버, 다음, ... 그외 수백 단어가 나타난 상황하에서 문서의 카테고리가 IT인 확률을 알고 싶다.  정의에 의해서 샘플 중에서 구글, 야후, 네이버, 다음, ... 그외 수백단어가 똑같이 나온 문서들 중에서, 카테고리가 IT인 문서를 세보면 조건부 확률을 구할 수 있다.
그런데 과연, 샘플에
구글, 야후, 네이버, 다음, ... 그외 수백단어가 똑같이 나온 문서가 1개는 있을까? 있는게 이상하다. 결론! 조건부 확률 정의 식은 무용지물이다.

이 시점에서 어디서 주워들은 독립가정을 들이 미는 사람이 있을 법하다. 그러니까, 정의식의 분자에 독립가정을 적용하면, 즉, '각 단어의 출현은 서로 아무 인과 관계가 없어' 라고 가정하면, 각 단어 출현 확률의 곱으로 바꿀 수 있다 뭐 이런거 말이다. 그렇게 해볼까?

P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어) 
=  P(Category=IT, 구글, 야후, 네이버, 다음... 그외 수백 단어) / P(구글, 야후, 네이버, 다음, ... 그외 수백 단어)
=  P(Category = IT) x P(구글) x P(야후) x P(네이버) x P(다음) x P(... 그외 수백 단어) / P(구글) x P(야후) x P(네이버) x P(다음) x P(... 그외 수백 단어)
= 약분하면 --> P(Category = IT)
결론 : P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어) = P(Category = IT) --> 조건이 있으나 없으나 확률은 똑같다는 모순에 도달!

응? 결국 저 독립가정의 결론은 수백 단어가 나오든 수천 단어가 나오든 '카테고리가 IT일 확률은 그냥 카테고리가 IT일 확률이다.' 라는 가정을 해버렸다는 뜻이다. 이 가정은 옳지 않다. 문맥을 보고 카테고리를 결정하려고 하는게 애초의 목적이니까.

그래서, 필요한게 Bayesian Rule이다. Bayesian Rule에 의하면

P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어)
= P(Category=IT) x P(구글, 야후, 네이버, 다음, ..., 그외 수백 단어 | Category=IT) / P(구글) x P(야후) x P(네이버) x P(다음) x P(... 그외 수백 단어)

 
로 쓸 수 있다. 여기서 두번째 확률
P(구글, 야후, 네이버, 다음, ..., 그외 수백 단어 | Category=IT) 은 구할 수 있나? 즉, 샘플에서 Category=IT인 문서들 중에서 구글, 야후, 네이버, 다음, ..., 그외 수백 단어가 똑같이 나오는 문서는 몇개? 역시나 샘플에는 수백개의 단어가 똑같이 나오는 문서는 없을 것이니 이거 역시 불가!
하지만, 여기서 저 위에서 처럼 어설프지 않은 제대로 된 독립가정을 할 수 있는데 이름하여 '조건부 독립(Conditional Independence)' 가정이다. 말로 풀어 쓰자면 이렇다.

Category가 IT인 조건 아래에서는 구글, 야후, 네이버, 다음, 그외 수백 단어의 출현은 독립적인 사건이라고 가정한다. 이걸 식으로 쓰면

P(구글, 야후, 네이버, 다음, ..., 그외 수백 단어 | Category=IT)
= P(구글|Category=IT) x P(야후|Category=IT) x P(네이버|Category=IT) x P(다음|Category=IT) x ...  x P(그외 수백 단어|Category=IT)

이다. P(구글|Category=IT) 는 샘플에서 (구글이란 단어가 있는 문서 수 / 카테고리가 IT인 문서 수)로 확률을 구하면 된다.

최종적으로 Naive Bayes Classifier는 이런 확률 계산을 모든 카테고리에 대해서 해본 다음 확률이 제일 높은 카테고리를 선택하게 된다. 마지막 정리는 뽀대나게 수식 편집기로.
세번째 줄에서 네번째 줄로 넘어 갈때 분모가 사라진 이유는 여기서는 argmax 카테고리 c를 구하는게 목적이므로, 모든 카테고리에서 같은 값인 분모는 생략해 버린 것이다.

posted by 심보준

Trackback | http://blog.sragent.pe.kr/trackback/33 관련글 쓰기

댓글을 달아 주세요

  1. 엔트로피의크기 2009/09/17 10:31  Addr Edit/Del Reply

    joint probability는 결합확률이라고 불리더라고요.
    글고, Ctegory가 뭡니까? ㅋㅋ Category 오타.
    conditional independence가 가정되는 이유는 대개 계산복잡도가 커지니까 문제를 단순히 하기위해서라고 합니다.
    근데요, smoothing parameter도 중요할걸요? ㅋㅋ

  2. 허걱. 하필 그림에서 오타야.

  3. 강석진 2009/11/06 11:01  Addr Edit/Del Reply

    너무 좋은 내용이라서 rkamin.egloos.com 으로 퍼갑니다. 지우시길 원하시면 지우겠습니다.

prev 1 2 3 4 next