문서 분류(Text Classification)
- 문서 분류란?
- 텍스트를 입력으로 받아, 텍스트가 어떤 종류 범주에 속하는지 구분하는 작업
- Input
- a document - d
- a fixed set of classes - C={c_1, c_2, ..., c_J}
- Output
- a predicted class - c ∈ C
- 다양한 문서 분류 문제들 예시
- 문서 범주
- 주제 분류 (ex) 논문 주제 분류 - 컴퓨터(AI, 데이터베이스, 그래픽, 암호학, etc...))
- 이메일 스팸 분류
- 감성 분류 (ex) 영화 리뷰, 제품 리뷰, 정치 리뷰, 예측(선거 결과))
- 여러 측면이 있을 수 있지만 간단한 작업에 집중
- 감정적, 태도적, 성격적 측면
- 주어진 텍스트가 긍정적 태도를 보이고 있는지, 부정적 태도를 보이고 있는지.
- 여러 측면이 있을 수 있지만 간단한 작업에 집중
- 언어 분류 (영어? 한국어? 프랑스어?)
- 문서 분류 방법
- 규칙 기반 모델
- 단어들 조합을 사용한 규칙들 사용
- ex) spam : black-list-address OR ("dollars" AND "you have been selected")
- Precision(정확도)은 높지만 recall(예외적 상황 커버 힘듦)이 낮음
- Snorkel (규칙 기반 모델 + 머신러닝 모델)
- 각각 규칙을 'labeling function'으로 간주
- Graphical model 일종인 factor graph를 사용해 확률적 목표값을 생성하는 generative model
- 프로젝트 초기 labeled data가 부족하거나 클래스 정의 자체가 애매한 경우(하지만 규칙을 생성하는 것은 쉽다 가정)에 매우 유용한 방법
- 확률적 목표값이 생성된 후 딥모델 등 다양한 모델 사용 가능
- 단어들 조합을 사용한 규칙들 사용
- 지도학습
- Input
- a document - d
- a fixed set of classes - C={c_1, c_2, ..., c_J}
- A trasining set of m hand-labeled documents - (d_1, c_1), ...., (d_m, c_m)
- Output
- a learned classifier - γ : d -> c
- 다양한 모델 사용 가능
- Naive Bayes
- Naive Bayes 가정과 Bag of Words 표현에 기반한 간단한 모델
- Bag of Words - 가방 안에 단어를 담고 섞는다!
- 순서를 고려하지 않은 단어들의 집합 (단어의 빈도수만 고려)
- Naive Bayes 분류기
- 수식화
- P(c|d) = P(d|c)P(c) / P(d)
- 분모는 최적의 클래스를 찾는데 상관이 없는 부분이라 빼도 된다.
-
위 문제를 해결하기 위하여 다음과 같은 2가지 가정을 사용한다.
- Bag of Words 가정 : 위치는 확률에 영향을 주지 않는다.
- 조건부 독립(Conditional independence) 가정 : 클래스가 주어지면 속성들은 독립적이다.
- 가정들을 적용시킨 후의 수식
Naive Bayes 분류기는 입력값에 관한 선형 모델이다.
- 학습
- MLE (Maximum Likelihood Estimation)
- N_doc = 학습 데이터에 들어 있는 모든 문서의 수
- Zero 확률문제(단어가 한 번도 나오지 않았을 시 나타나는 문제)를 개선하기 위한 Leplacel(add-1) smoothing
- 모든 단어들의 최소 빈도를 1로 설정하는 굉장히 간단한 방법.
- 알고리즘
-
function TRAIN NAIVE BAYES(D, C) return log P(c) and log P(w|c) for each class c∈C #Calculate P(c) terms N_doc = number of documents in D N_c = number of documents from D in class c logprior[c] <- log(N_c / N_doc) V <- vocabulary of D bigdoc[c] <- append(d) for d∈D with class c for each word w in V # Calculate P(w|c) terms count(w,c) <- of occurrences of w in bigdoc[c] loglikelihood[w, c] <- log(count(w, c) + 1 / sigma_w'(count(w',c)+1)) return logprior, loglikelihood, V function TEST NAIVE BAYES(testdoc, logprior, loglikelihood, C, V) return best c for each class c∈C sum[c] <- logprior[c] for each position i in testdoc word <- testdoc[i] if word ∈ V sum[c] <- sum[c]+loglikelihood[word, c] return logprior, loglikelihood, V
-
- MLE (Maximum Likelihood Estimation)
- 수식화
- Logistic regression
- Neural networks
- k-Nearest Neighbors
- ...
- Naive Bayes
- Input
- 규칙 기반 모델
'AI > KDT 인공지능' 카테고리의 다른 글
[08/04] Visual Recognition : 물체인식, 전이학습기반 커스텀 영상인식, 영상기반 이물질 검출 (3) | 2021.08.04 |
---|---|
[07/30] NLP : 단어 임베딩 (0) | 2021.07.30 |
[07/28] NLP : 언어 모델 (0) | 2021.07.28 |
[07/27] NLP : 텍스트 전처리 (0) | 2021.07.28 |
[07/22] Spark 3 (0) | 2021.07.22 |