Naive Bayes는 단어들의 등장 확률을 기반으로 문장의 클래스를 분류하는데, 이 과정이 마치 언어 모델처럼 작동한다는 점에서 클래스별 unigram language model로 해석할 수 있다.
Unigram 기반
Naive Bayes는 단어 하나하나를 독립된 feature로 보고 사용한다. 이건 곧 언어 모델에서의 unigram 방식과 같다.
텍스트의 모든 단어 사용
특정 단어 subset만 고르지 않고, 문장 안의 모든 단어를 사용해 확률을 계산한다.
클래스별로 따로 학습됨
Sarcastic과 Not Sarcastic처럼 각 클래스마다 따로 확률 분포를 학습한다.
→ 즉, 클래스 전용 언어 모델을 만든 것과 같다.
단어뿐 아니라 문장 전체 확률도 계산 가능
단어들이 독립이라고 가정하면, 문장 전체의 확률은 단어 확률의 곱으로 표현할 수 있다.
문장 S가 주어졌을 때, 클래스 ( c ) 에 대한 likelihood..
문장이 Sarcastic일 때 이 문장이 나올 확률은 얼마일까?
P(S | c): "클래스 c일 때, 문장 S가 등장할 확률"
문장 S의 전체 확률은 클래스 c일 때 각 단어가 등장할 확률을 전부 곱해서 계산..
이 수식은 결국 Naive Bayes의 핵심 가정인 독립성(naive assumption)을 바탕으로 한 것이다.
이후에 베이즈룰을 적용해서 P( c | S) 를 구함
Naive Bayes는 단어들의 확률을 통해 문장을 모델링하며, 클래스별 unigram 언어 모델처럼 동작한다. 단어들의 독립성을 가정하고, 문장 전체 확률도 계산할 수 있다.
간단한 데이터셋으로 문장이 sarcastic한지 아닌지를 분류하는 과정..
"Seoyeon told Mingyu she was soooo totally happy for him"
이 문장이 sarcastic인지 아닌지를 Naive Bayes로 분류..
각 클래스에 대해 등장하는 단어 수를 세고, Laplace smoothing을 적용해 확률을 계산한다.
이 과정을 테스트 문장에 등장하는 모든 단어에 대해 반복..
조건부 확률들을 모두 곱해 문장이 클래스 안에서 나올 확률을 계산
"Seoyeon told Mingyu she was soooo totally happy for him"
은 Not Sarcastic할 가능성이 더 높다..!
실제 사람들이 직접 라벨링 하는 작업 -> 데이터셋 구축..
다양한 지표를 통해 모델 성능 평가..
accuracy 만으로 평가하면 생기는 문제...
Precision
Recall
f1 score
positive
, negative
, neutral
noun
, verb
, adjective
, ...happy
, sad
, angry
, ...positive vs. not-positive
, negative vs. not-negative
, ...a
는 class1으로 예측했고 실제도 class1인 경우 → True Positiveb
, c
는 잘못 예측한 경우a / (a + b + c)
a / (a + d + g)
Macro Precision = (precision_class1 + precision_class2 + precision_class3) / 3
Precision = (a + e + i) / (a + e + i + b + c + d + f + g + h)
Recall = (a + e + i) / (a + e + i + d + g + b + h + c + f)
- Macroaveraging:
- 각 클래스의 성능을 개별적으로 계산해 단순 평균 → 클래스마다 동일한 비중.
- Microaveraging
- 전체 예측을 통합해 계산 → 데이터가 많은 클래스가 더 큰 영향.