문서 분류(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
        • Logistic regression
        • Neural networks
        • k-Nearest Neighbors
        • ...

+ Recent posts