논문/리뷰

[NLP] Reddit Comment Toxicity Score Prediction throughBERT via Transformer Based Architecture Review | NLP 논문 리뷰

쏘오금 2023. 8. 7. 19:36

 

오늘 리뷰할 논문은 
"Reddit Comment Toxicity Score Prediction throughBERT via Transformer Based Architecture" 입니다.

이 연구는 트랜스포머 구조에 기반해 Reddit 데이터가 가진 comment 내의 독성 수치를 예측하는 모델을 제안합니다.

 

여느 때 처럼 사진을 누르면 논문 페이지로 이동합니다.

독성 예측을 위한 연구이니 만큼 문장의 단어 흐름이나 앞뒤 관계보다도 특정 단어의 반복에 집중을 한것 같습니다.
반복되는 단어에 집중하면서 단어의 가중치 편향이나 과적합 문제를 비교적 자주 마주했을텐데 적재적소에 맞는 방법을 잘 사용해 난관을 극복한 연구였습니다.

시작하시죵

- - -

 

I. INTRODUCTION

저자들은 소셜 미디어의 세상이 도래한 현시점에서 소셜미디어가 가지는 이면성 문제에 대해 집중합니다.
강한 언어들은 폭력적으로만 사용되는게 아닌 감탄사나 스스로를 표현하는 언어로 활용되기도 합니다. 그러나 대다수는 부적절한 용도로 사용됩니다. 이런 경우 작성자를 향하는 부적절한 어휘는 독성 텍스트가 아니지만 그 외의 인물을 향하는 경우 독성 텍스트로 분류하는 것이 일반적입니다.
이런 텍스트 분류는 기계에게는 까다로운 요청이기에 관리자가 직접 검토하는 경우가 많은데요. 제대로 학습되지 못한 콘텐츠 필터를 사용한다면 사이트 자체가 차단되고는 하죠.

저자들은 트윗 데이터에 기반한 독성 텍스트 탐지 연구에 힌트를 얻어 TF-IDF에 기반한 Ridge regrssion과 cat-boost 알고리즘, BERT 모델을 사용해 독성 수치 예측을 진행했습니다.  

* 하이퍼 링크: 전에 리뷰했던 트위터 독성 수치 예측 논문, 저자들은 저 논문은 안본것 같더라구요.

III. PROPOSED SOLUTION

A. Dataset Description

데이터의 기본 형태

저자들이 사용한 Reddit data는 NLP pipe-line을 마치고 문장에 포함된 독성에 따라 점수를 부여받은 데이터입니다.
지난 트위터 데이터와 비슷하게 -1에 가까울수록 적은 독성을 +1에 가까울수록 많은 독성을 가집니다.
이미 전처리된 데이터를 이용하였으나 자세한 데이터 preprocessing 과정은 B.와 같습니다.
*(NLP pipe-line: 문장 분할, 단어 토큰화, 토큰에 대한 품사구별, 텍스트의 원형 복원, 불용어 식별 및 종속성 구문 분석)

데이터 내 독성 점수 분포

 

B. Feature Extraction and Pre-Processing

Feature Extraction and Pre-Processing 과정


(1) HTML 태그 제거(python으로 스크랩핑 했기에 남아있었음)
(2) 모든 단어를 소문자로 변환 후 구두점과 공백을 모두 제거해 토큰화
(3) 토큰 속 관사 제거 ( a, an, the ..etc)
   - 이때 여러 중복 형태의 문장구조가 만들어집니다. 이 중복을 줄이기 위해 어간 추론을 통한 접미사 구분과 lemmatization 이라고 쓰이는 동음이의어 추출로 지워 나갑니다.
(4) Bag-of-Word 방법으로 문법이나 단어 순서는 고려하지 않고 단어의 출현 빈도에만 집중해 텍스트 데이터를 수치화 합니다.

사용된 TF-IDF 식

이때 저자들은 TF-IDF 가중치 부여 방법을 사용합니다. 
TF: 1개의 문서안에서 특정 단어의 등장 빈도가 높을수록 그 단어의 가중치가 비례해서 증가
IDF: 특정 단어가 모든 문서에 등장하는 흔한 단어 일 때, 출현 빈도에 비례해 가중치가 감소

TF - IDF는 TF, IDF 두 수치를 곱한 값으로
특정 단어가 한 문서에 몇 번 언급되는지, 전체 문서군에서는 얼마나 등장하였는지를 표현한 가중치입니다.
따라서 값이 높을수록 용어의 관련성이 높고, 낮을수록 관련성이 낮습니다.

 

C. Ridge Regression

저자들은 문제 해결을 위한 메인 process에 Ridge reg을 사용했습니다.
이 실험 케이스의 경우 독립 변수가 종속변수의 수를 초과했기 때문에 회귀선을 이용해 데이터 간의 편향을 줄이고자한 것 같습니다. 

 

D. Catboost Algorithm

Catboost Algorithm는 부스팅 알고리즘으로 XG boost와 유사하나 기존의 부스팅 모델들은 모든 훈련 데이터를 대상으로 잔차를 계산 하지만 Catboost는 학습 데이터의 일부만으로 잔차를 계산하고 이 결과로 모델을 구성합니다. 
저자들은 Catboost - Ordered Boosting 방법으로 과적합을 최소화해 모델을 구성했습니다.

* 여기서 Ordered Boosting?
Ordered Boosting 방법은 Prediction Shift 극복을 위해 고안된 방법입니다.
Prediction Shift는 학습시 사용되었던 데이터 셋으로 만든 누적함수와 테스트 시에 사용한 데이터 셋의 분포가 달라지고 이로 인해 오버피팅 발생되는 상황입니다.

기존의 gradient boosting은 손실함수를 target value에 대해 편미분한 그래디언트 값을 활용합니다.
하지만 이 과정에서  target value를 활용해 생기는 target leakage로 인해 Prediction Shift가 발생하고 이를 방지하고자 Catboost는 트리를 학습하는 매 스텝마다 다른 데이터셋을 활용합니다.

Ordered Boosting 방법은 부스팅 단계에서 레이블 데이터를 적용으로 인해 얻을 수 있는 잔차의 개수에 한계가 발생했을 때 사용됩니다. 보통 실험자는 모든 훈련 예제에 대해 편향되지 않은 잔차를 필요로 합니다. 이 경우, 모델 훈련에 사용된 예제에 따라서 다양한 모델 집합을 유지하는 것이 가능하여 잔차 없이 훈련된 모델의 집합을 사용합니다. 이 훈련 모델 집합을 구축하고자 순열에 기반한 순서형 원칙(Ordering Principle)을사용하여 Ordered Boosting입니다.

모델 복잡도와 메모리가 n배 증가하는 n개 타 모델의 훈련 필요성 떄문에 실용성 면에서 자주 선택되는 모델은 아닙니다.

 

E. BERT

저자들은 실험을 구성할 때에 문장의 문맥을 고려하고자 BERT를 이용했습니다.
실험에서 사용되는 token의 입력 방식은 다음과 같습니다.

(1) 제공된 seq를 BERT에 입력하기 전 각 그룹간 단어들의 15%를 [MASK] 토큰으로 대체합니다.
(2) 배열에 존재하는 비 마스킹 단어가 제공하는 context를 사용해 마스킹 단어의 원래 값을 예측합니다.
   - 예측 실행 방법


    시작은 classification layer가 인코더의 output에 적용될 때 이며, output vector는 matrix 차원으로 변환하기 위해 matrix를 포함하여 곱해집니다. 마지막으로 sotfmax는 각 어휘의 likelihood를 계산하는데 사용됩니다.

BERT의 loss function은 마스크된 단어의 예측값만 고려하기 때문에 다른 양방향성 모델들 모다 조금 느리게 수렴합니다. 그래서 저자들은 pre-trined BERT를 사용합니다.

bert 식 구조

저자들은  pre-trined BERT model의 마지막 hidden layer의 output에서 hidden-state seq를 사용합니다. hidden-state 상태 전반에 결처서 평균을 취함으로써 768 차원으로 축소됩니다. 
실험은 마지막 hidden layer에서 활성화 함수를 사용하지 않고 이후에 tanh와 leaky relu activation을 적용합니다.

* 여기서 Leaky Relu?
Leaky Relu는 relu function이 해결할 수 없는 knockout 문제를 해결하는 funtion입니다.
knockout 문제는 어떤 layer 하나에서 미분시에 모든 노드가 0 혹은 1의 값을 가져 이후 layer에서 어떤 값이 나오던 학습이 이뤄지지 못하는 상태를 말합니다.
relu는 임계치보다 작을 때 0을 출력하지만 Leaky Relu는 0.01을 곱합니다. 연산 비용이 다소 크고 실제 task에서 knockout  문제가 자주 발생하지 않기에 자주 선택되는 function은 아닙니다.

 

출처: https://theaisummer.com/hugging-face-vit/

저자들은 Huggingface module에서 BERT 모델을 가져와서 사용했습니다.
Huggingface는 자연어처리 스타트업이 개발한 다양한 트랜스포머 모델과 학습용 스크립트를 제공하는 모듈로 트랜스포머 사용시 layer, model 등을 선언하거나 스크립트 구현 과정을 덜어줍니다.

Huggingface 내의 모델들은 모든 레이어를 학습에 사용할 수 없어 레이어의 가중치가 동결되지 않는다는 이점을 가집니다. 실험에 사용된 Optimizer는 AdamW 이며, 과적합을 피하고자 3-epoch만 훈련 됩니다. 전체적으로 사용된 매개변수는 1억 9백만개 입니다.

 

IV. RESULTS

Validation data는 상대적으로 독성이 높은 주석 쌍으로 구성되었습니다.
한쌍의 comment에 대해 모델을 적용하고 어느 것이 더 독성이 높은지 예측합니다.
예측이 주어진 비교군과 일치한다면 올바른 예측이고 그렇지 않다면 잘못된 것입니다.
Accuracy= (correct predictions / total predictions)

총 3개의 모델을 사용하였으며 BERT와 Dense layer를 적용한 실험의 정확도가 가장 높았습니다.
아래가 실험의 정확도 입니다.

1. Tfidf+Ridge Regression Model: 76.89
2. Tfidf+Catboost Regression Model: 81.34
3. BERT+Dense Layer: 85.40

전체적인 결과는 N-gram range에 기반한 Ridge Regression의 피어슨 상관 계수 PCC(Pearson Correlation Coefficient)와 평균제곱오차 MSE(Mean Squared Error), activation function을 사용해 비교합니다.

* 여기서  N-gram?
N개의 연속적인 단어 나열을 하나의 token으로 간주합니다.
n-gram은 통계학 기반의 언어 모델로 문자열에서 N개의 연속된 요소를 추출하는 방법입니다.
다음 단어를 예측 할 떄 문장 내의 모든 단어를 고려하지 않고 특정 단어의 개수 N만 고려합니다.

이 실험에서는 단어의 순서가 무시되어도 상관 없는 실험이었기에 Bag-of-Word와 N-gram을 선택한것 같습니다.


 

가장 좋은 결과를 도출한 모델은 MSE가 0.029인 tanh activation function 기반의 BERT + Dense layer model 이었습니다.
catboost의 경우 n-gram range 1-5인 경우(MSE 0.038)에 최적을 성능을 보였으며 Ridge Regression 또한 n-gram range
1-5인 경우(MSE 0.047)에서 최적의 성능을 냈습니다.

저자들은 이 실험 결과가 n-gram 값의 증가는 모델에 대한 단어들간의 관계 정보를 증가시킨다는 것을 의미한다고 말했습니다.

저자들은 이 연구 결과에 기반해 유튜브 댓글을 독성 점수에 의한 pie 차트로 반환하는 PLASK(파이썬 웹 프레임 워크) 기반의 웹 어플리케이션을 만들어 배포했습니다. 

 

VI. CONCLUSION AND FUTURE WORKS

저자들은 Reddit comment에서 독성 점수를 예측하는 3가지 자연어 프레임 워크를 제안했습니다. 
1. TF - IDF + Ridge Regerssion
2. TF - IDF + Catboost
3. BERT + Dense layer

이중 3번째 BERT + Dense layer의 성능이 가장 좋다는 것이 MSE로 증명되었습니다.

저자들의 모델은 간접적인 모욕과 비꼬는 듯한 내용을 담은 다양한 독성 스크립트에 적용 가능했습니다.

 

- - -

 

이렇게 마무리 되었네요.
읽기 편하고 필요에 의해서 꼼꼼하게 잘 구성한 논문이었습니다.
저자들이 프레임 워크를 설정한 이유를 달리 언급하진 않았음에도 의도를 파악할 수 있는 글이었습니다.