NLP

감정분석 (naive bayes classifier, 나이브 베이즈 분류기)

안녕진 2022. 10. 2. 22:47
개인 공부 목적의 포스팅입니다. 잘못된 정보가 있다면 댓글 남겨주시면 수정하도록 하겠습니다.
감사합니다.

 

💡 주제 설명

감정분석 (naive bayes classifier, 나이브 베이즈 분류기)

 


📌 배경

수식이 어떤 과정으로 도출되는지 궁금했다.

 


🔍 과정

  • 감정분석의 목표, 감정분석 무엇인가?
하고싶은 일
 : "문장"이 주어졌을 때, 그 문장이 긍정인가 부정인 확률을 구하기

주어진 정보
 : 여러 데이터들 (문장과 문장의 긍/부정 데이터(1/0))

"문장"
 : 결국 어떤 단어들로 이루어진다. 단어의 연속


하고싶은 일을 다시 표현하자면, 어떤 단어들이 주어졌을 때 그 것이 긍정인가 부정인가 확률을 구하는 것이다.

 

  • 간단한 예시 (한 단어가 관측되었을 때, 그 단어가 긍정 혹은 부정인 조건부 확률)
한 단어가 관측되었을 때(E) 그 단어가 긍/부정(H)일 조건부 확률 $P(H|E)$을 베이즈 정리를 이용하여 나타내면 아래와 같다.
$$
P(H|E) = \cfrac{ P(E|H) \times P(H) }{ P(E) }
$$
이렇게 베이즈 정리를 이용하여,
- 단어의 빈도 $P(E)$
- 전체 데이터의 긍정or부정 확률 $P(H)$
- 긍정or부정일 때 그 단어가 관측되었을 확률 $P(E|H)$
을 이용하여, 한 단어가 관측되었을 때 그 단어가 긍정or부정인 확률을 구할 수 있게 되었다.

 

  • "문장(여러 단어)"이 주어졌을 때, 긍/부정일 확률
"어떤 단어들($E_n$)"이 주어졌을 때 "긍정or부정(H)인 확률 $P(H|E_1, \dots)$" (조건부 확률)을 구하는 것이다.
베이즈 정리를 이용하여 풀어보면 아래와 같다.
$$
P(H | E_1, E_2, \dots, E_n ) = \cfrac{ P(E_1, E_2, \dots, E_n | H) \times P(H) }{ P(E_1, E_2, \dots, E_n) }
$$

실제로는 각 단어의 발생 확률이 "독립적이지 않다".
하지만 논의를 간단하게 하기 위해, 각 단어의 발생 확률이 독립적이라고 가정하게 된다면 "독립"이라는 성질 덕분에 아래와 같이 표현할 수 있다.
$$
P(H|E_1, E_2, \dots, E_n) = \cfrac{ P(E_1 | H) \times P(E_2 | H) \times \cdots \times P(E_n | H) \times P(H) }{ P(E_1) \times P(E_2) \times \cdots \times P(E_n) }
$$


추가적으로 단순히 긍/부정만을 파악하기 위해 분모를 생략할 수 있다.
내가 이해한 과정은 아래와 같다

한 문장에 관해 긍정/부정일 확률을 계산해보면 아래와 같다.
$$
P(H=긍정|E_1, E_2, \dots, E_n) = \cfrac{ P(E_1 | H=긍정) \times P(E_2 | H=긍정) \times \cdots \times P(E_n | H=긍정) \times P(H=긍정) }{ P(E_1) \times P(E_2) \times \cdots \times P(E_n) }
$$
$$
P(H=부정|E_1, E_2, \dots, E_n) = \cfrac{ P(E_1 | H=부정) \times P(E_2 | H=부정) \times \cdots \times P(E_n | H=부정) \times P(H=부정) }{ P(E_1) \times P(E_2) \times \cdots \times P(E_n) }
$$
같은 문장이기 때문에, 단어들의 모임이 같다는 것을 알 수 있다.
따라서 대소비교를 위해서는 분모를 생략할 수 있다는 것도 알 수 있다.

 

  • 결론
긍정/부정을 판단하기 위해
$P(E_1 | H=긍정) \times P(E_2 | H=긍정) \times \cdots \times P(E_n | H=긍정) \times P(H=긍정)$
$P(E_1 | H=부정) \times P(E_2 | H=부정) \times \cdots \times P(E_n | H=부정) \times P(H=부정)$
위의 둘만 비교하면 된다.

더 이해하기 쉽게 풀어 쓰자면 $P(E_i|H) = \cfrac{ P(E_i \cap H) }{ P(H) }$이므로,
$\displaystyle P(H=긍정) \times \prod_{i=1}^n \cfrac{ P(E_i \cap H=긍정) }{ P(H=긍정) }$
$\displaystyle P(H=부정) \times \prod_{i=1}^n \cfrac{ P(E_i \cap H=부정) }{ P(H=부정) }$
이 둘만 비교해서 더 큰 것을 결론으로 내리면 된다.

더 더 이해하기 쉽게 한글로 풀어 쓰자면
$$
\displaystyle \frac{\text{긍정 문장의 수}}{\text{전체 문장의 수 (데이터의 수)}} \times \prod_{i=1}^n \cfrac{ \frac{\text{긍정인 문장이면서 특정 단어(i)가 사용된 문장의 수}}{\text{전체 문장의 수}} }{ \frac{\text{긍정 문장의 수}}{\text{전체 문장의 수 (데이터의 수)}} }
$$
$$
\displaystyle \frac{\text{부정 문장의 수}}{\text{전체 문장의 수 (데이터의 수)}} \times \prod_{i=1}^n \cfrac{ \frac{\text{부정인 문장이면서 특정 단어(i)가 사용된 문장의 수}}{\text{전체 문장의 수}} }{ \frac{\text{부정 문장의 수}}{\text{전체 문장의 수 (데이터의 수)}} }
$$
위 둘만 비교하면 긍정인지 부정인지 쉽게 알 수 있다.

 

  • 추가로..
확률은 1보다 작거나 같다.
따라서 위 수식으로는 1보다 작은 숫자를 계속 곱하다 결국 값이 0이 되는 문제가 발생할 수 있다.
(컴퓨터 실수 표현의 한계 때문에)

이를 해결하기 위해 log를 취해서 곱셈을 덧셈으로 바꿔줄 수 있다.
이는 따로 다루지 않겠다.