Language Model(1) - Bayesian Theorem 부터 Naive Bayes까지

2019. 2. 3. 20:34Udacity Nanodegree/Natural Language Processing

아래 본문은 Text Classification을 위한 Bayes Theorem과 기존에 사용되는 분류 알고리즘인 Naive Bayes에 대해서 다룹니다.

Bayesian Theorem

Bayesian에 대해 알아보기 전, 일단 한가지 예시로 시작해보자.

회사 동료 중 Alex와 Brenda라는 사람이 있다. 이 둘은 같은 부서에서 일하지만 매일 출근하지는 않는다. (일단 이 예시에서는 Alex와 Brenda는 무단결근 하지 않는다 라고 가정하자) Alex는 한달 중 75%를 출근하고, Brenda는 한달 중 25%를 출근한다. 이 둘은 종종 붉은색 옷을 입는다. Alex는 평균적으로 5일 중 2일정도(40%)의 빈도로 붉은색 옷을 입고 출근했었고, Brenda는 5일 중 3일정도(60%)의 빈도로 붉은색 옷을 입고 출근했었다.

하루는 당신이 회사에서 일하고 있는데, 회사 창 밖으로 저 멀리에서 어떤 사람이 출근하고 있는 것을 목격했다. 누군지는 잘 모르겠지만, 붉은색 옷을 입고 있다는 것 정도는 확인이 된다. 여기서 출근할 만한 사람이 Alex와 Brenda 둘밖에 생각나지 않는다고 하면, 당신이 보고있는 사람은 Alex와 Brenda 둘중 누구일까? Bayes Theorem은 바로 이런 때 필요한 문제이다.

하나씩 따져보자. 일단 당신은 Alex와 Brenda가 출근하는 확률을 알고있다. (Alex 75%, Brenda 25%) 그렇다면 당신이 보고있는 사람이 Alex일 확률과 Brenda일 확률을 알고있는 것이다.


여기서 새로운 정보가 주어진다. 당신이 보고있는 사람이 붉은색 옷을 입고있다는 것이다. 그렇다면 당신이 창밖으로 보고있는 사람이 Alex일 경우가 75%, Brenda일 경우가 25%인 것은 여전히 동일하게 추측할 수 있을까? 그것은 아닐 것이다. 왜냐면 새로운 정보를 얻음으로써 (붉은색 옷을 입고있다) 이에 대한 정보를 감안할 수 있게 되었기 때문이다. 상식적으로 생각해봐도 아무것도 모를때보다 옷 색깔에 대한 정보를 얻음으로써 당신이 보고있는 사람이 Brenda일 확률이 조금 더 올라갔을 것이라는 생각을 해볼 수 있다.


기본적인 개념에 대한 감이 잡혔다면 하나씩 경우의 수를 따져보자.

  1. Alex가 출근하며 붉은 옷을 입고 있을 확률: 0.75(출근할 확률) * 0.4(붉은색 옷을 입을 확률) = 0.3

  2. Alex가 출근하며 붉은 옷을 입고 있지 않을 확률: 0.75 * 0.6 = 0.45

  3. Brenda가 출근하며 붉은 옷을 입고 있을 확률: 0.25 * 0.6 = 0.15

  4. Brenda가 출근하며 붉은 옷을 입고 있지 않을 확률: 0.25 * 0.4 = 0.1

여기서 각각의 확률을 더하면 1이 아닌 것을 확인할 수 있다. 즉, 각 경우가 일어날 확률은 독립적이다.


하지만 우리는 당신이 보고 있는 사람이 붉은색 옷을 입고 있다는 사실을 알고 있다. 이는 당신이 보고 있는 사람이 붉은색 옷을 입고 있을 확률에 대해 전혀 고려하지 않아도 된다는 뜻이다. 따라서 경우의 수 중에서 2번과 4번은 고려하지 않아도 된다.

그렇다면 여기서 고려할 확률은 두가지가 남는다. Alex가 출근하며 붉은 옷을 입고 있을 확률인 0.3, 그리고 Brenda가 출근하며 붉은 옷을 입고 있을 확률인 0.15. 이렇게 두가지만 고려하면 된다. 이렇게 고려할 경우, 다음과 같은 방식으로 확률을 다시 낼 수 있다.


붉은색 옷을 입은 사람이 Alex일 확률: 0.3 / (0.3 + 0.15) = 0.6666.... (2/3)

붉은색 옷을 입은 사람이 Brenda일 확률: 0.15 / (0.3 + 0.15) = 0.3333.... (1/3)


그렇다면 각각의 확률(0.3, 0.1)이 어떻게 계산되었는지 다시 돌아가보자.


일단 붉은 옷을 입은 사람이 Alex일 확률은 P(A)(Alex가 출근할 확률)과 P(R|A)(출근한 Alex가 붉은 옷을 입었던 확률)을 곱한 결과였다. 수식으로 나타내면,

P(A) * P(R|A) 가 될 것이다.

또한 붉은 옷을 입은 사람이 Brenda일 확률은 P(B)(Brenda가 출근할 확률)과 P(R|B)(출근한 Brenda가 붉은 옷을 입었던 확률)을 곱한 결과였다. 이를 다시 수식으로 나타내면,

P(B) * P(R|B) 가 될 것이다.




그렇다면 붉은 옷을 입었다는 확률을 기준으로 Normalize시켜주면 각각의 확률이 나오는 것이다.


이렇게 기본적인 정보가 주어지고(Prior) 추가적인 정보를 감안한 확률(Posterior)을 구하는 문제를 풀고자 하는 것이 바로 Bayesian Theorem이 하고자 하는 바이다.


Naïve Bayes

자 그럼 수식을 다시 살펴보자. 위의 기본 수식을 살펴보면, P(A|R)을 계산할 때, P(A)와 P(R|A)를 곱하고 붉은 옷일 확률 전체에 대한 부분인 P(R) 부분은 P(A)*P(R|A) + P(B)*P(R|B)이다. 그리고 마찬가지로 P(B|R)을 계산할 때는 P(B)*P(R|B)에 P(A)*P(R|A) + P(B)P(R|B)를 나눠준다.

잘 살펴보면 붉은 옷일 확률 전체에 대한 부분은
P(R) = P(A)P(R|A) + P(B)P(R|B)로,
두 확률에 대해 모두 동일하다. 그리고 두 공식을 다시 살펴보자면,
P(A|R) = P(A)P(R|A) / P(R)
P(B|R) = P(B)P(R|B) / P(R)
로 두 수식 모두 고정된 분모를 가지게 된다. 따라서 P(R)을 생략하게 된다고 하더라도 P(A|R)과 P(B|R)을 비교하는데는 크게 무리가 없을 것이다. 바로 이러한 점을 감안한 방식이 Naïve Bayes방식이다.


위 공식을 다시 살펴보자. 원래 어떤 이메일이 스팸메일인가 아닌가를 판별하기 위해서는 다음 3가지가 필요하다.

  1. 'easy'와 'money'라는 단어가 들어간 이메일일지의 확률 = P('easy', 'money')

  2. 스팸메일이 'easy'와 'money'라는 단어가 들어갈 확률 = P('easy', 'money' | SPAM)

  3. 이메일이 스팸메일일 확률 = P(SPAM)

여기서 P('easy', 'money')는 스팸메일의 확률과 일반메일의 확률을 계산할때 공통적으로 쓰이는 부분이므로 생략해도 둘의 확률을 비교하는데는 큰 무리가 없는 것이다. 이것은 여러개의 확률을 비교할 경우도 동일하다.