cs Text Classification에서 class imbalance 해결 방법
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/NLP(Natural Language Processing)

Text Classification에서 class imbalance 해결 방법

by 시몬쯔 2021. 4. 28.
728x90

텍스트 분류를 BERT와 같은 언어모델로 풀고자 할 때 흔하게 발생하는 이슈는 특정 클래스들의 데이터 수가 상대적으로 적은 Imbalance 문제이다. 이를 어떤 방법으로 해결할 수 있을 지 살펴보자.

 

참고 : 

www.researchgate.net/publication/336538175_Dealing_with_Data_Imbalance_in_Text_Classification

 

(PDF) Dealing with Data Imbalance in Text Classification

PDF | Many real world datasets don’t offer enough training input for regular classifiers: some classes are more represented than others. Imbalanced data... | Find, read and cite all the research you need on ResearchGate

www.researchgate.net

towardsdatascience.com/how-i-handled-imbalanced-text-data-ba9b757ab1d8

 

How I handled imbalanced text data

Blueprint to tackle one of the most common problems in AI

towardsdatascience.com

 

 

 

텍스트를 분류하고자 할 때 텍스트를 벡터형태로 바꾼 representation을 생성해내는 것이 우선적이다.

텍스트를 Representation하는 데에는 여러 방법들이 있다.

 

대표적으로 몇가지를 살펴보자면,

 


1. Bag of Words(BoW)

 

2. TF-IDF

 

3. GLOVE 

단어 등장 수를 표현한 행렬을 Fatorization 등의 방법으로 차원을 줄인 후 사용하는 방법이다.

 

4. DOC2VEC

Word2Vec을 기반으로 만들어진 embedding 방법으로 단어들간의 관계, 예를 들면 동의어와 반의어와 같은 관계들을 잡아낼 수 있다.

 

5. Word2Vec with char n-grams(fastText)

 


 

Class등의 수가 너무 불균형할 때 일반적인 classifiers는 제대로 작동을 하지 못하게 된다.(수가 많은 class로 예측하면 정확도가 높아지기 때문에 치우쳐서 예측하게 됨)

 

그렇기 때문에 precision과 recall간의 trade-off를 잘 처리하기 위한 방법들이 필요하다.

 

이를 위해 두 가지 방법을 생각할 수 있는데, 첫번째는 분류 전에 전처리를 하는 방식이고 두번째는 분류 알고리즘 자체를 수정해서 수가 적은 class에 가중치를 주는 방법이다. 

 

이 두가지 방법을 차례로 알아보자.

 

 

1> Resampling methods

 

리샘플링은 데이터셋을 수정해서 클래스의 사이즈 간의 차이를 줄이는 방법이다. 

이러한 관점에서 두 가지 시나리오를 생각해볼 수 있는데, 첫번째는 majority class(data수가 많은 class)의 데이터를 삭제하는 방식(undersampling) 과 minority class(data수가 적은 class)의 데이터를 만들어내는 방식(oversampling) 이다.

 

Random undersampling은 이전 실험들에서 좋지 않은 결과를 내는 것으로 밝혀졌으므로 oversampling방법에 대해 더 알아보자.

 

 

1) Random oversampling

 

가장 간단하게 생각해볼 수 있는 방법으로 minority class에서 샘플을 랜덤으로 뽑아서 복사하는 방법이다.

 

 

2) SMOTE(= Synthetic Minority Over-sampling Technique)

 

SMOTE는 합성을 기반으로 하는 방법으로, minority class의 샘플을 가져와 이들을 잇는 선에서 중간값을 택하여 만들어내는 방식이다.(아래 GIF참고)

이를 통해 모델이 minority class에 대해 더 학습할 수 있게 된다.

 

towardsdatascience.com/how-i-handled-imbalanced-text-data-ba9b757ab1d8

 

3) SMOTE-SVM

 

이 방법은 SVM classifier에 의해 만들어진 support vectors(경계선과 가까운 vectors)에 속하는 인스턴스들에만 SMOTE algorithm을 적용하는 방법이다. 맨 처음, SVM를 학습시키고 support vectors에 속하는 샘플들이 나오면 SMOTE를 이용하여 oversampling하는 방식이다. Support vectors를 사용하기 때문에 클래스간의 경계선을 좀 더 뚜렷하게 만드는 효과가 있다.

 

 

4) WEMOTE/CWEMOTE

 

일반적인 SMOTE는 minority class 샘플들의 nearest neighbours를 결정해야 한다. 이는 $O(n^2)$의 시간이 소모되는데, 이와 달리 WEMOTE를 통해 좀 더 효율적으로 샘플들을 만들어낼 수 있다. WEMOTE는 두 개의 랜덤 벡터를 뽑아내고 평균을 계산하는 방식이다. 

 

하지만 같은 class라 하더라도 데이터들의 특성은 제각각이기에 in-class imbalance가 있다. 이를 위해 CWEMOTE는 minority class 내에서 학습 샘플들을 clustering한 후 WEMOTE를 적용하는 것이다. clustering은 k-means를 사용한다.

 

 

 

 

각 oversampling을 사용하여 classification을 했을 때의 F-measure는 다음과 같다.

 

 

 

 

www.researchgate.net/publication/336538175_Dealing_with_Data_Imbalance_in_Text_Classification
www.researchgate.net/publication/336538175_Dealing_with_Data_Imbalance_in_Text_Classification

 

 

 

사실 결과를 보기 전에는 CWEMOTE가 잘되겠거니 생각했는데 random sampling보다 못한 경우도 있어서 좀 놀랍다.

clustering을 통해 유사한 데이터끼리 사용해서 새로운 데이터를 만들어내는 것보다 random으로 만들어내는 것이 모델에게 좀 더 많은 정보를 줘서 그렇지 않나 싶기도 한다.

 

한 번 소스코드를 봐서 실제 도메인에서의 데이터에도 적용해봐야겠다.

 

728x90

댓글