[weekly NLP] Week 6

·2023년 7월 27일
0

위클리 NLP

목록 보기
6/13

문서들 주제별로 분류

NLP 분야에서는 이 주제를 document(text) classification 이라고 한다.

0이냐 1이냐: Binary Classification

Classification에서 가장 기본적이고 쉬운 것은 이분법(binary)다.

machine learning에서 수학이 좀 더 쉬워지는 좋은 방법

machine learning에서 가장 간단한 모델인 Linear Regression은 여러 개의 (X,Y) 데이터가 주어졌을 때, 가장 잘 맞는 직선을 찾는 (fit 하는) 알고리즘이다.
Y는 보통 한개의 숫자 (scalar value)이고, X는 n차원의 vector이다.
밑의 예제는 X가 1차원인 예시다

이름에서 나타나듯이 Linear Regression은 분류가 아니라 회귀다.
그렇다면 Linear Regression을 어떻게 분류 모델로 만들 수 있을까?
정답은 sigmoid(logistic) 함수에 있다.

보면 sigmoid 함수는 들어오는 어떤 숫자 (x축)든 전부 0과 1사이로 눌러 넣어버리는 특성 가짐
그래서 0과 1 사이의 y 값 만들어, binary classification 모델로 변신할 수 있다.
이를 logistic regression classifier라고 한다.

학습 하기 위한 데이터

영화 리뷰 긍정 (y=1), 부정 (y=0) 문장 분류 데이터 예시

("정말 재밌게 본 영화. 스토리도 연출도 정말 대박!", 1)‌‌
("배우들이 연기를 너무 잘하는데? 두 번 봐도 좋음.", 1)‌‌
("올해 최고의 작품!", 1)‌‌
("나는 그냥 별로. 졸다가 나왔다.", 0)‌‌
("도대체 이 뻔한 스토리는...", 0)‌‌
("정말 돈 아깝다. 인생 최악의 영화.", 0)

machine learning 모델을 학습 위한 dataset은 이러한 (x,y) 쌍이 적게는 수 백개에서, 많게는 수 백만 개로 구성되어 있다.
예시에서 주어진 X는 숫자가 아니라 string(문자열)이다. logistic regression 모델은 X가 n차원의 vector여야 학습시킬 수 있는데 어떻게 하면 될까?

문장을 어떻게 N차원 vector로 만들까?

tf-idf BoW vector
문장을 vector로 만들었던 이유는 logistic regression 같은 통계 모델의 input으로 넣을 수 있는 형태이기 때문이다. (이를 vectorize 한다고 표현한다.)

NLP 아닌 다른 종류 데이터로 linear/logistic regression 써본 사람들은 이미 tf-idf BoW vector의 각 열이 하나의 feature로 취급된다는 것을 파악했을 것이다.

만약 vocabulary가 5000개인 corpus가 있으면 각 문장은 5000 x 1 column vector로 표현될 것이고, logistic regression은 5000차원의 X를 주어진 Y value들에 잘 맞는 직선을 찾는 학습 과정을 거친다.

학습 완료된 이후 새로운 문장들(검증 셋; evaluation set) 주어질 때는,
logistic regression 모델은 다음과 같은 결과 내뱉는다.

("배우 연기 대박! 진짜 좋다", 0.95)
‌‌("최고다 최고. 스토리 작품성 모두", 0.85)‌‌
("괜찮았어. 재미는 있었거든", 0.63)‌‌
("최악의 작품", 0.05)‌‌
("왜내가 이 시간을 아깝게..", 0.1)‌‌
("아쉽다 뭔가. 2% 부족한 영화", 0.4)

여기서 나오는 숫자는 전부 0~1 사이의 숫자
점수 혹은 확률이라고 생각해도 좋다.
probability score라고 불리는 이 숫자는 0에 가까울수록 부정 평가,
1에 가까울수록 긍정 평가에 가까운 예측 나타낸다.

최종 결정은 보통 0.5 이하 점수 문장은 부정, 나머지는 긍정으로 예측 값 결정하고
정확도를 계산하면 된다.

어떤 단어들 중요할까

예시의 이러한 긍정, 부정 감성 분석(sentiment analysis) 모델 학습시켰을 때,
모델이 가장 중요하게 보는 단어들 어떤 것인지 알아볼 수 있다.
이것을 feature importance라고 한다.
주로 Y 예측 값을 계산할 때 X에서 각 행 (각 feature)들에게 주는 가중치를 계산한 것을 보면 된다.
이러한 그래프 그려보면 모델이 무엇을 학습했는지 이해하는데 도움이 된다.

긍정 부분에서 높은 가중치를 받는 단어와 반대로 낮은 가중치를 받는 단어 확인할 수 있다.

코드는 어떻게 짤까?

sci-kit learn이라는 python library이다.
Logistic regression classifier, RandomForestClassifier, Support Vector Machine, Naive Bayes Classifier 등 다양한 machine learning 모델 쓸 수 있다.

출처
https://jiho-ml.com/weekly-nlp-6/

0개의 댓글