Project

[Project]한국 광고 분류 모델 개발(1)

moonzoo 2022. 12. 30. 08:50

Abstract

 

본 프로젝트는 뉴스 데이터를 분석하기 위한 전처리 과정에서 사용자가 원하지 않는 정보를 자동적으로 필터링하여 전처리 진행 속도와 정확도를 상승시키는 것을 목적으로 한다. 수집한 뉴스 데이터에 광고인지 아닌지 라벨링을 진행하고 pretrained된 Korean Pre-trained Language Models을 활용해 fine-tuning을 진행해 한국 광고 분류 모델을 개발하고 성능을 테스트해 사용해보도록 하겠다. 그 과정을 기록하고 피드백을 하기 위해 이 글을 작성한다.

 

1. INTRO

뉴스 데이터를 수집하고 보면 아래와 같은 광고성 기사를 종종 접할 수 있다.

이러한 광고성 기사들은 뉴스 키워드 추출 및 토픽 모델링에서 많은 noise를 발생시키고 토픽 모델링의 성능을 저하 시키는 요인이 된다. 그렇다고 매번 뉴스 데이터를 수집할 때마다 직접 눈으로 광고성 기사를 판단하고 제거해주기에는 시간적으로도 정신적으로도 낭비가 된다. 그렇기 때문에 뉴스 기사 기반으로 광고성 기사를 분류하는 모델을 개발한다면 데이터 전처리 과정의 소요시간과 OUTPUT 결과도 좋아질 것이라 생각해 한국 광고 뉴스 분류 모델을 개발하고자 한다.

 

2. 실험 설계(가설 설정)

2-1 뉴스 기사 텍스트 길이 확인

뉴스 기사 content 길이 & 뉴스 기사 headline 길이

표와 통계치를 보면 뉴스 기사의 content 길이는 평균 535로 긴 문장이 많이 있으며 3분위수로보면 700이 넘어가는 문장도 많이 있다. 반대로 뉴스 제목의 문장길이는 매우 짧은것을 확인할 수 있다.

 

2-2 문제점 및 해결책

 

Problem1

 

뉴스 기사 content로 광고 뉴스 분류 모델링을 진행하면 대부분의 모델이 max_len을 512까지밖에 지원하지 않기 때문에 모든 정보를 담아서 학습을 시키기에 문제가 생긴다. 

 

Solution

 

여기서 두가지 방법을 생각해봤는데

1. 가장 간단한 방법으로 그냥 모든 content 길이를 512 이하로 문자열을 자르고 학습을 진행

2. 다음으로 간단한 방법은 headline으로 학습을 진행

3. 최대한 뉴스의 정보를 반영하기 위해 pretrained된 문장 요약 모델을 활용해 512자 이하로 요약하게 한 뒤 학습 진행

여기서 어떤 방법이 좋은지는 3가지 모두 진행해보고 비용을 고려해 선택할 예정이다.

 

2-3.실험설계

 

TASK 

- binary classfier

 

수집 데이터 

- 네이버 파이낸스 종목뉴스 ((+ 추후에 경제 뉴스나 종목 뉴스만이 아닌 좀 더 일반화된 뉴스 데이터셋도 수집할 것 고려중

 

데이터셋 구축 

- column : headline, contents, label

 

- label : 0(광고가 아닌 기사), 1(광고성 기사)  ((+ 중립을 넣을지 고민중 

 

데이터 전처리

 

1. 특수문자 등 불필요한 문자 제거 ( 일괄 적용을 통해 정규화 효과 )

2. max_len 512로 그 이하로 문자열을 자를 것 

-> 사실 뉴스의 앞단에 중요한 내용이 다 나오기 때문에 512보다 더 작은 max_len을 설정하는 것도 고려중

 

Loss Function

광고보다 광고가 아닌기사가 월등히 많을 것으로 예상하기 떄문에 손실함수를 Focal Loss나 Asymmnetric Loss로 설정

 

- Focal Loss

Cross Entropy의 클래스 불균형 문제를 다루기 위한 개선된 버전. 어렵거나 쉽게 오분류되는 케이스에 대하여 더 큰 가중치를 주는 방법을 사용함. 반대로 쉬운 케이스의 경우 낮은 가중치를 반영

 

- Asymmetric Loss

Focal Loss는 positive, Negitive 모두 같은 값으로 적용하는 문제점이 존재해 ASL로 negative-postive imbalance, mislabelling해결 기존 아키텍쳐 구조를 변경하지 않기 때문에 모델 학습 시간이나 추론 시간의 부하는 없으면서 성능이 좋음.

 

모델링

 

여러 Korean Pre-trained Language Models을 사용해 학습을 진행하고 성능 테스트를 통해 성능이 좋은 모델 순으로 모델 튜닝을 진행. Ensemble에도 활용할 예정

 

 

 

2-4. 가설 설정

가설

 

뉴스 content를 보고 사람이 직접 데이터셋 라벨링을 진행하기 때문에 신뢰도가 높은 데이터셋을 구축할 수 있다. 이 데이터셋이 완성되면  headline만으로 학습을 진행하더라도 content를 살펴보고 라벨링한 결과이기 때문에 headline으로 광고 를 분류하는 모델을 만들어도 괜찮은 성능의 광고 분류 모델을 만들어 낼 수 있을 것이다.

 

Benefit

headline만으로도 괜찮은 성능의 광고 분류 모델을 개발한다면 content로 예측하는 것보다 비용이 적다.

 

FLOW

1. 수집한 뉴스 기사의 content를 보고 광고인지 아닌지 라벨링을 진행 (이 때, 데이터셋의 컬럼은 headline,content,label )

 

2. 라벨링을 진행한 데이터셋을 train, test, validation으로 split 진행

 

3. 여러가지의 pretrained 모델이 있는데 가장 적합한 모델을 성능 테스트를 진행

https://www.letr.ai/blog/tech-20221124

 

한국어 언어모델 (Korean Pre-trained Language Models) 톺아보기 (2)

해외와 마찬가지로 한국어 역시 대량의 말뭉치를 통해 사전 학습된 Transformer를 기반으로 모델을 연구한 사례들이 많이 있습니다. KoBERT,KorBERT, HanBERT, KoELECTRA, KoGPT, Hyper CLOVA 등등 다양한 모델들이

www.letr.ai

4. 선택한 모델의 성능 향상을 위해 손실함수, 파라미터 튜닝, 미세조정 진행 성능의 큰 향상이 있다면 Ensemble까지 진행

-> 모델이 무겁더라도 real time으로 제공할 필요가 없기 때문에 성능 향상이 주목적이 될듯하다.

 

5. test, validation 데이터셋으로 성능 검증

 

6. 뉴스 기사를 매주 수집하기 때문에 모델 고도화를 하며 유지 및 보수 진행

 

 

3. 결론

결과가 어떤식으로 나올지는 아직 모르겠지만 우선은 데이터를 수집하고 라벨링을 진행해본 뒤 학습을 진행해 결과를 보면서 방향을 잡도록 하겠다.