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

    2022. 10. 2.

    by. 안녕진

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

     

    💡 주제 설명

    감정분석 (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를 취해서 곱셈을 덧셈으로 바꿔줄 수 있다.
    이는 따로 다루지 않겠다.

    'NLP' 카테고리의 다른 글

    Attention 매커니즘 기본 구조 실습  (0) 2023.01.31
    cost function of Logistic Regression  (0) 2022.08.11
    Feature Scaling의 효과 (Loss 시각화) 실습  (0) 2022.07.29
    Feature scaling의 종류  (0) 2022.07.28
    Simple Linear Regression 실습  (0) 2022.07.27

    댓글