* Weekly nlp 6에 해당하는 내용

 

본문 링크: https://jiho-ml.com/weekly-nlp-6/

 

Week 6 - 박 대리, 얘네 문서들 주제별로 분류해오게

오늘은 박 대리를 도와 문서 분류를 자동으로 처리할 수 있나 document(text) classification에 대해 공부를 해보겠습니다.

jiho-ml.com

 

Binary Classification

이분법

 

Linear Regression

  • ML에서 가장 간단한 모델
  • 여러 개의 (x, y) 데이터가 주어졌을 때, 가장 잘맞는 직선을 찾는 알고리즘
  • 보통 y는 scalar, x는 n차원 벡터

x가 1차원일 때

하지만 Linear Regressiong은 classification이 아니고 숫자를 예측하는 회귀(regression) 모델임

--> sigmoid(logistic) function을 사용하면 classifcation 모델로 만들 수 있음

 

Sigmoid Function

sigmoid function

  • 0 <= f(x) <= 1, for any x
    • 그렇기 때문에 linear regression을 sigmoid와 함께 쓴다면 binary classification 모델로 바꿀 수 있음 --> Logistic Regression Classifier

 

 

학습에 어떤 데이터가 필요할까

e.g. 영화 리뷰 긍정(y=1), 부정(y=0) 문장 분류 데이터 --> sentiment analysis (감성 분석)

("정말 재밌게 본 영화. 스토리도 연출도 정말 대박!", 1)‌‌
("배우들이 연기를 너무 잘하는데? 두 번 봐도 좋음.", 1)‌‌
("올해 최고의 작품!", 1)‌‌
("나는 그냥 별로. 졸다가 나왔다.", 0)‌‌
("도대체 이 뻔한 스토리는...", 0)‌‌
("정말 돈 아깝다. 인생 최악의 영화.", 0)
  • x = 숫자가 아니고 문자열(string)임
  • logistic regression 모델은 x가 n차원의 벡터여야 학습시킬 수 있음

  • string을 벡터로 만드는 것 --> vectorization
  • tf-idf BoW vector로 vectorize
  • linear/logistic reg에서는 각 column이 하나의 feature로 취급 됨
  • 만약 vocabulary가 5000개인 corpus가 있다면 --> 각 문장 = 5000 x 1 column vector
  • logistic reg는 5000차원의 x를 주어진 y value들에 잘 맞는 직선을 찾는 학습 과정을 거침
  • 학습 후, 새로운 문장들(= 검증 셋 = evaluation set)이 주어졌을 때는 logistic reg는 다음과 같은 결과를 줌
("배우 연기 대박! 진짜 좋다", 0.95)
‌‌("최고다 최고. 스토리 작품성 모두", 0.85)‌‌
("괜찮았어. 재미는 있었거든", 0.63)‌‌
("최악의 작품", 0.05)‌‌
("왜내가 이 시간을 아깝게..", 0.1)‌‌
("아쉽다 뭔가. 2% 부족한 영화", 0.4)
  • 이 숫자들은 전부 0~1 사이 --> 점수/확률 둘 중 아무거나로 생각하면 됨
  • probability score라고 불림
  • 0에 가까울수록 부정, 1에 가까울수록 긍정 평가
  • threshold = 0.5로 결정하고 정확도 계산하면 됨

 

Feature Importance

  • 모델이 가장 중요하게 보는 단어(feature)들을 알아보는 것
  • 주로 predicted y 값을 계산할 때 x에서 각 row들에게 어떤 weight을 계산한 것을 보면 됨
    • 예를 들어 부정에는 negative weight, 긍정에는 positive weight
  • feature importance graph를 그려보면 모델이 무엇을 학습했는지 이해하는데 도움이 됨

https://medium.com/@aneesha/visualising-top-features-in-linear-svm-with-scikit-learn-and-matplotlib-3454ab18a14d