네이버 부스트캠프 5기 6,7주차 주간 회고(STS 대회)

김태민·2023년 4월 25일
1

boostcamp

목록 보기
24/36
post-thumbnail

1. 프로젝트 개요

프로젝트 주제

Semantic Text Similarity (STS) : 두 텍스트가 얼마나 유사한지 판단하는 NLP Task

프로젝트 구현내용

1. Hugging Face의 Pretrained 모델과STS 데이터셋을 활용해 두 문장의 0과 5사이의 유사도를 측정하는 AI모델을 구축

2. 리더보드 평가지표인 피어슨 상관 계수(Pearson Correlation Coefficient ,PCC)에서 높은 점수(1에 가까운 점수)에 도달할 수 있도록 데이터 전처리, 증강, 하이퍼 파라미터 튜닝을 진행

개발 환경

GPU : Tesla V100 서버 5개 (RAM32G) / K80, T4, and P100 랜덤 할당(RAM52G) /

GeForce RTX 4090ti 로컬 (RAM 24GB), Rtx3060ti 8gb 로컬 2대 (RAM 8 GB)

개발 Tool : PyCharm, Jupyter notebook, VS Code [서버 SSH연결], Colab Pro +, wandb

협업 환경

Github Repository : Baseline 코드 공유 및 버전 관리, issue 페이지를 통하 실험 진행

Notion : STS 프로젝트 페이지를 통한 역할분담, 아이디어 브레인 스토밍, 대회관련 회의 내용 기록

SLACK, Zoom : 실시간 대면/비대면 회의

프로젝트 구조 및 사용 데이터셋의 구조도

2. 프로젝트 팀 구성 및 역할

  • 대부분의 팀원들이 첫 NLP 도메인의 프로젝트인만큼 명확한 기준을 가지고 업무를 구분한 것보다 다양한 인사이트를 기르기 위해 데이터 전처리부터 모델 튜닝까지 End-to-End로 경험하는 것을 목표로 하여 협업을 진행했다. 따라서 각자 튜닝할 모델을 할당하여 하이퍼 파라미터 튜닝을 하고 데이터 전처리, 증강 등 본인의 아이디어를 구현하되 서로의 내용이 겹치지 않도록 분업을 하여 프로젝트를 진행했다.
이름역할
강민재모델 튜닝(electra-kor-base , koelectra-base-v3-discriminator), 데이터 증강(back translation / switching sentence pair /임의 글자 삽입 및 제거), 데이터 전처리 실험(레이블 정수화 및 노이즈 추가), Ensemble 실험 (output 평균, 표준편차 활용), EDA(글자수 기반 데이터 분포 분석)
김태민Hugging Face기반 Baseline 코드 작성, Task에 적합한 모델 Search 및 분배, 모델 실험 총괄, 데이터 전처리 실험(Random Token Masking , Label Random Noise, Fill Random Token Mask, Source Tagging), Custom Loss실험(Binary Cross Entropy + Focal Loss), 모델 튜닝(xlm-roberta-large, electra-kor-base), 모델 Ensemble
김주원모델 튜닝(kobigbird-bert-base, electra-kor-base), EDA(라벨 분포 데이터 분석), EDA 기반 데이터 증강 아이디어 제시, 데이터 증강(Easy Augmented Data SR 증강), 팀 협업 프로세스 관리(Github 팀 관리 + 팀 Notion페이지 관리) , Custom Loss 실험(RMSE)
윤상원모델 튜닝(koelectra-base-finetuned-nsmc, KR-ELECTRA-discriminator 모델 튜닝), 데이터 증강(label rescaling, 단순 복제 데이터 증강, 어순 도치 데이터 증강, under sampling + swap sentence + copied sentence + uniform distribution + random noise), 모델 Ensemble
신혁준모델 튜닝(KR-ELECTRA-discriminator, mdeberta-v3-base-kor-further ) 데이터 증강(맞춤법 교정 증강,EDA(Easy Data Augmentation) SR(Synonym Replacement)품사 선택(명사, 조사) 교체 + swap sentence + copied sentence, Data Distribution), 데이터 전처리 실험(맞춤법 교정)

3. 프로젝트 수행 절차 및 방법

팀 협업을 위해 프로젝트 관련 Ground Rule을 설정하여 프로젝트가 원활하게 돌아갈 수 있도록 팀 규칙을 정했으며, 날짜 단위로 간략한 목표를 설정하여 협업을 원활하게 진행할 수 있도록 계획을 하여 진행했다.

3.1 협업 관련 Ground Rule

-a. 실험 관련 Ground Rule: 본인 실험 시작할 때, Github issue에 “[score 점수(없다면 --)] 모델이름, data = 데이터 종류, 전처리 종류, 데이터 증강 종류”양식으로 issue를 올린 뒤 실험을 시작한다.

-b. Commit 관련 Ground Rule: git commit & push는 한번 실험할 때 마다 진행한다. 코드 수정 내용, 점수, 관련된 issue가 들어가도록 commit하고 개인 branch에 push한다.

-c. Submission 관련 Ground Rule: 각 사람별로 하루 submission 횟수는 2회씩 할당한다. 추가로 submission을 하고 싶으면 SLACK 단체 톡방에서 해당 날짜에 submission계획이 없는 혹은*횟수가 남는 사람에게 물어봐서 여유가 된다면 추가 submission 가능하다.

-d. Notion 관련 Ground Rule: 원활한 아이디어 브레인스토밍과 분업을 위해 회의를 할 경우 노션에 기록하며, 아이디어를 팀회의를 통해 실험을 팀원에게 할당한다.

3.2 프로젝트 진행 Time line

  • (1~3일차): NLP 기초 대회 관련 대회 강의 및 스페셜 미션 완료 & 협업 관련 Ground Rule 설정
  • (3~4일차): STS Baseline 코드 완성 & EDA(Exploratory Data Analysis) & 전처리/증강 관련 아이디어 회의
  • (5~14일차) : 전처리, 데이터 증강, 하이퍼 파라미터 튜닝 등 아이디어 구현 및 실험 진행

세부적인 대회 진행 절차는 아래와 같다.

4. 프로젝트 수행 결과

4.1. 순위

순위분류점수(Pearson Correlation)제출 횟수
1Public Score (대회 진행)0.936764
2Private Score(최종)0.940364

4.2. EDA(Exploratory Data Analysis)

주어진 데이터의 문장의 길이 관련, 라벨 분포와 관련된 데이터 분석을 진행했고, 이를 통해 문제 해결 전략을 수립하였다.

4.2.1 라벨 분포 관련 EDA


데이터의 분포에 대한 편향을 확인해보기 위해 target column인 Label에 대한 데이터 편향을 조사하였고, Label 구간을 1로 잡아 0,0~1,1~2,2~3,3~,4~5,5 의 데이터들은 어떤 특징을 가지고 있는지 데이터 분석을 통해 파악해보았다.

우선 데이터 분포에 대해서 살펴보면 우측 box-plot을 보면 데이터 Label의 평균은 0~5의 중간 값인 2.5가 아닌 2 아래인 1.8 정도에 형성된 것을 볼 수 있다. 실제로 값을 파악해봤을 때 평균은 1.8, 중간 값은 1.6, 하위 25% 값은 0.2 이하로 많은 데이터가 0에 가까운 값으로 치우친 것을 알 수 있다. 또한 좌측처럼 Label 분포를 막대 그래프에로 그렸을 때 0이하인 값이 매우 많고, 5 값이 매우 적은 것을 알 수 있다. 따라서 분포가 불균형하고 한 쪽 Label에 치우쳐 있으므로 class imbalance와 유사하게 편향이 생겨 현재 충분히 많지 않은 데이터 셋에서 학습이 잘 안 될 가능성이 있다. 따라서 모델에 학습을 시켰을 때 성능이 좋지 않다면, 편향을 줄여주는 방법으로 데이터 증강을 하거나, under sampling을 하면 성능의 개선 여지가 있다.

추가로 데이터 증강이나 전처리를 할 때 참고할 수 있도록 Label별 데이터 특징을 아래와 같이 살펴 보았다.

예시

Label

sentence1sentence2속한Label 구간특징
5.0그냥재미없음;;;;그냥 재미 없음;.5.0문장 부호의 갯수가 다르거나, 띄어 쓰기가 다르거나, 영어의 대소문자만 다르고 문장이 거의 일치한다.
4.2앗 제가 접근권한이 없다고 뜹니다;;오, 액세스 권한이 없다고 합니다4.0~4.9한, 두 단어가 다르고 뜻이 거의 일치한다.
3.8전 암만 찍어도 까만 하늘.. ㅠㅠ암만 찍어도 하늘은 까맣다.. ㅠㅠ3.0~3.9여러 개의 단어가 다르지만, 전체적인 맥락의 뜻은 거의 일치한다.
2.4주택청약조건 변경해주세요주택청약 무주택기준 변경해주세요.2.0~2.9비슷한 주제를 담고 있으나, 전체적인 뜻이 다르다.
1.0알콜중독자가 기초생활수급자?기초생활수급자 장애인을 위하여1.0~1.9비슷한 소재가 쓰인다. 전체적인 맥락과 뜻은 다르다.
0.6이렇게 귀여운 쥐들은 처음이네요.ㅎㅎㅎ이렇게 지겨운 공포영화는 처음..0.1~0.9몇개의 문구, 단어가 일치할 수 있지만 주제, 맥락이 다르다.
0뿌듯뿌듯 하네요!!꼬옥 실제로 한번 뵈어요 뿌뿌뿌~!~!0대부분 같은 단어도 존재하지 않으며, 주제, 맥락이 많이 다르다.

4.2.2문장 길이관련 EDA

이전EDA 과정에서 하나의 feature에만 집중해서 분석을 진행하였고, 특별한 인사이트를 발견하기 어려웠다. 그래서 산점도를 그려 두 개 이상의 feature를 동시에 분석하여 유의미한 패턴을 발견하려 하였고, 그 결과 새로운 인사이트를 발견할 수 있었다. x축은 1번 문장과 2번 문장의 길이의 차이를 나타내고, y축은 두 문장의 유사도를 나타낸다. 높은 점수일수록 데이터의 표본이 부족하다는 것을 알 수 있고, 특히 주목할 점은 문장 쌍의 길이 차이가 모든 레이블에서 정규분포를 따른다는 것을 확인할 수 있다.

정확한 확인을 위해서 y축을 확률밀도로 나타내었고, 문장 쌍의 길이 차이에 대한 분포가 정규분포를 따름을 더욱 명확하게 확인할 수 있다.

두 figure를 종합적으로 이해해보았을 때, 모든 레이블에서 Length difference가 정규분포를 따르기 때문에, 데이터 전처리 또는 증강 과정에서 특정 레이블에서 분포가 불균형해진다면 해당 레이블에서는 Length difference에 대한 편향이 발생할 수 있다고 판단하였다.

NLP에서 모델이 길이에 의한 편향을 학습할 수 있다는 사실은 여러 연구를 통해 입증되었고, 널리 알려진 사실이다. 예를 들어, Kenton Murray의 논문[1]에는 NMT 모델의 번역 결과가 문장의 길이에 의존한다는 사실이 언급되었다.또한, Sarthak Jain의 연구[2]에서는 Attention 모듈의 성능은 인정하지만, 문장이 의미가 아닌 다른 feature에서 무언가를 학습한다는 사실을 지적하기도 했다.이러한 점에서 미루어 볼 때, 만약 위와 같이 모든 레이블 범위에서, length difference가 같은 분포를 따르지 않고, 특히 정규분포를 따르지 않게 하는 이상치가 다수 존재하게 된다면 학습 과정에서 이에 대한 편향이 발생할 것임을 예측할 수 있다. 따라서 어떤 증강 또는 전처리에 의한 성능 저하가 발생하였다면, 이러한 편향이 발생했을 가능성을 염두에 두어야 한다는 결론을 내렸다.

4.2.3가설

train 데이터 셋은 4.2.1의 라벨 분포 EDA에 근거하여 데이터의 Target column인 Label이 0인 값이 상대적으로 매우 많고(전체 데이터의 약 22.72%)5의 값이 부족한(전체 데이터의 약 0.98%) 불균형한 분포를 갖고있다. 따라서 Label이 imbalance함으로 모델 학습이 자주 등장하는 라벨에 대해 편향되는 부정적인 영향을 미칠 수 있다고 판단했다. 따라서 이러한 문제를 해결하기 위해 데이터 증강을 이용하여 라벨의 분포를 보다 균등하게 맞추게 되면 모델의 예측 성능이 향상될 것이라고 가설을 세웠다. 다만, Label별로 문장 길이의 차이는 균등 분포는 아니지만 가우시안 분포를 따르고 있으므로, 학습 시sentence1과 sentence2의 문장 차이에 대한 편향은 발생하지 않을 것으로 판단되었다. 따라서 Label 분포를 고르게 하기 위한 데이터 증강을 할 때에 길이에 대한 편향이 생기지 않도록 데이터 증강을 진행하기로 계획했다.

4.3. EDA를 기반으로 한 데이터 증강

4.3.1분포를 고려한 단순 복제 증강

라벨 분포를 균등 분포로 맞추기 위해 라벨 값을 1 단위로 나누어, 0부터 1 사이의 값의 데이터는 oversampling하지 않고, 나머지 구간의 데이터의 개수를 0부터 1 사이의 데이터 개수와 같아지도록 oversampling하였다. oversampling 기법으로는 문장의 의미가 훼손되지 않게 하기 위해서 단순히 데이터를 복사하여 추가하는 방식을 사용했다. 실험 결과 기존 raw dataset보다 pearson 점수가 상승하여 유의미한 증강 기법임을 확인했다.

4.3.2 Down sampling+swap sentence+copied sentence+uniform distribution 데이터 증강

여러 실험을 통해 불용어를 문장 중간에 삽입하거나 인접한 단어의 어순을 바꾸어 문장을 변형하면 의미 변화가 생기기 때문에 문장의 의미가 변형되고 데이터의 정보가 변질되어 학습에 부정적인 영향을 끼치게 되었다는 것을 확인하였다. 따라서 최대한 문장의 구조를 수정하지 않고 데이터를 증강하여 라벨 균등 분포를 맞추기 위해 아래와 같은 방법들을 사용하였다.

a. under sampling : Label 값이 0점이 데이터가 지나치게 많아, 단순 복제 방식으로 oversampling 하는 것이 아닌, 문장을 수정하지 않고 새로운 데이터를 추가하여 1점대 이상의 데이터를 증강하는 방식으로는 개수를 균등하게 맞춰주기 어렵다고 판단하여, 2119개의 0점 데이터 중 1000개만 추출하여 under sampling을 진행하였다. 문장의 길이 변화가 모델의 학습에 미치는 영향을 줄이기 위해 0점 데이터의 총 문장 길이 분포와 추출한 데이터의 총 문장 길이 분포가 유사하도록 1000개의 데이터를 추출하였다. 이후, 사용되지 않은 0점 데이터의 일부는 copied sentence 증강 기법에 사용되었다.
b. swap sentence : STS task에 사용되는 BERT 계열의 모델의 경우, 데이터 셋 내의 sentence_1과 sentence_2의 순서를 바꾸게 되면 유의미한 차이를 만들 수 있을 것이라고 가설을 세웠다. 이 가설에 대한 근거로는 문장의 위치가 바뀌면서 segment embedding과 positional embedding의 값이 달라져, 새로운 데이터를 학습하는 효과를 낼 수 있을 것이라고 판단했기 때문이다. 마찬가지로, 해당 증강 기법도 라벨의 균등 분포를 위해 증강하는 것이므로 0점대의 데이터를 제외한 나머지 데이터에 적용하여 데이터의 양을 2배로 늘려주었다.
c. copied sentence : 논문[3]에서 영감을 받아 응용한 기법으로, 다른 데이터에 비해 양이 많이 부족한Label 값이 5점인 데이터를 증강하기 위한 방법으로 under sampling시에 선택되지 않은 데이터 중 약 500개의 데이터를 가져와 같은 문장을 sentence_1과 sentence_2에 넣고 Label 값을 5로 주어 새로운 데이터를 생성하였다. 이 때 선택된 500개의 데이터는 전체 데이터의 분포를 따르도록 sampling하였다.** 위와 같은 방식을 사용하면 문장의 의미 훼손을 최소화하고, 문장의 의미가 거의 일치하는 Label 5점에 해당하는 데이터의 패턴을 모델이 학습하기 용이해질 것이라고 판단하였다.

4.3.3 Easy Data Augmentation Synonym Replacement(품사 선택 교체)+swap sentence+copied sentence

논문[4]을 참고하여 Easy Data Augmentation(EDA)기법인 Synonym Replacement(SR)을 적용했다. KoEDA라이브러리를 사용하여 문장에서 임의의 단어를 선택하여 동의어로 교체했다.하지만 KoEDA라이브러리는 문장의 단어를 임의로 변경했기 때문에 생성된 두 문장의 의미가 원본의 두 문장과 달라졌고, 원본 데이터의 문장 유사도 점수와 생성된 데이터의 문장 유사도가 달라지게 되어 성능향상을 얻을 수 없었다. 따라서 직접 EDA의 SR 데이터 증강 라이브러리를 구현하였고 방법은 아래와 같다.

-a. 문제점 해결을 위한 가설 설정: 문장의 위치를 임의로 변경하는 KoEDA라이브러리와 다르게 두 문장에서 모두 같은 단어가 존재할 때만 동의어로 교체하여 데이터를 증강하면 원본 데이터의 문장 유사도가 증강된 데이터에서도 보존된다는 가설을 세운다. 이 가설을 활용하여 구현할 때 아래의 원칙을 지켜 증강하도록 구현했다.

첫번째로 비교되는 두 문장의 같은 단어를 같은 단어로 교체한다. 두번째로 원본 문장의 문장 구조를 최대한 보존한다. 문장에서 임의로 단어를 선택하여 임의로 교체하거나 문장 구조가 바뀐다면 비교되는 두 문장의 문장 유사도 점수가 변동될 수 있다. 따라서 두 문장에 모두 존재하는 단어를 동일하게 교체하면 원본 데이터의 문장 유사도를 유지하여 데이터를 증강할 수 있을 것이다.

예시sentence1sentence2Label
원본 문장아버지가 방에서 주무신다.아버지가 방에서 주무십니다.5.0
변경 문장아버지가 안방에서 주무신다.아버지가 안방에서 주무십니다.5.0

-b. 구현

1. SR데이터 제작: 원본 문장은 오타와 비문이 많기 때문에 맞춤법 검사로 정제한 데이터를 사용하고, 두 비교 문장에서 형태소 분석을 통해 같은 단어이며 품사가 명사인 단어를 교체 후보로 정하고, 동의어 Wordnet에 있으면 두 문장 모두 명사를 교체했다. Wordnet은 KoEDA 내부에서 찾았으며 KAIST에서 제작한 동의어 사전[5]을 활용했고,교체할 동의어 명사 끝음절의 받침 여부에 따라서 문장의 조사를 교체했다. 총 5188 Dataset을 생성했다.

2. Label Uniform Distribution: 원본 데이터를 모두 사용하며 Label Distribution을 균등하게 맞추기 위해서 추가적인 증강을 했다. 원본 데이터에 Label이 0~1사이인 Dataset은 39.8%로 차지하는 비율이 높다. 따라서 생성한 L0 Dataset은 사용하지 않았다. 전체 중 비율이 낮은 Label 1~ 3사이인 데이터와 Label이 5.0인 데이터 셋을 증강했다. Swap Sentence기법을 사용하여Label이 0~1사이인 값을 증강했고, Label이 5.0인 dataset은 Copied Sentence 기법을 사용하여 Label이 0인 데이터 1000개를 이용해 증강했다. 최종적으로 18460개의 기존의 2배 크기의 데이터셋을 구축했으며. Label구간 크기가 1인 분포는 약 20% 수준으로 이전 Label Distribution을 적용한 best.csv 데이터보다 균등한 분포의 dataset을 만들었다.

snunlp/KR-ELECTRA-discriminator모델에서 Hyper-parameter Tuning 적용 후 Evaluation Pearson Correlation 0.9363, Public 0.9265, Private 0.9354으로 팀의 단일 모델 중 최고 점수를 받았다. 이전 Label Distribution을 적용한 best.csv를 snunlp/KR-ELECTRA-discriminator모델에서 학습했을 때 Public 0.9216, Private 0.9280으로 성능이 향상됨을 확인했다.

4.4. 모델 탐색 및 선정

4.4.1 모델 Research


Hugging Face의 pre-trained 모델을 선택하여 transfer learning을 진행했고, competition의STS의 Task를 올바르게 수행할 수 있을까라는 관점에서 첫번째 기준을 만들어 모델을 일차적으로 선별했다. Sentence Similarity 기반의 모델이 아닌 Text Classification 모델을 이용했는데. 이유는 다음과 같다. Hugging Face의 Sentence Similarity Task는 왼쪽의 그림[6]처럼 여러 문장끼리의 유사성을 판단하여 그사이의 거리를 재는 것이라고 파악했고 이는 주로 검색 및 클러스터링, 문서 분류 작업에 유용할 거라고 판단할 수 있었다. 따라서 두 개의 문장의 유사도를 구하는 Regression에는 적합하지 않을 것이라고 추측했으며, 예상과 일치하게 해당 모델들은 대회 Task에 높은 성능을 보이지 않는 것을 확인했다. 따라서 Text Classification에 Label의 개수가 1인 모델들을 선택하여 Regression Task에 활용했다.

1차 기준에 따라 총 5가지 모델(monologg/koelectra-base-v3-discriminator, lighthouse/mdeberta-v3-base-kor-further, monologg/koelectra-base-finetuned-nsmc, monologg /kobigbird-bert-base, kykim/electra-kor-base)을 이용해 튜닝을 진행했는데, 위 모델들 중 Public Score가 0.921이상인 세가지 모델(kykim/Electra-kor-base, snunlp/KR-ELECTRA-discriminator, XML-Roberta-large)을 앙상블 모델의 후보군으로 선정했다.

그리고 해당되는 모델들은 다음과 같은 측면에서 앙상블에 적합하다고 생각하여 모든 모델을 앙상블에 활용했다.

-a. kykim/electra-kor-base : 데이터의 경우 단어의 하위집합에 대해서 토크나이징이 수행된다. 이는 단어 수준에 대해서 문장을 이해하여 결과값을 도출하게 된다.

- b. snunlp/KR-ELECTRA-discriminator: snunlp의 ELECTRA 모델은 34GB의 한국어 데이터 세트와 30000개의 형태소 기반 단위 토큰을 사용하였기에 같은 ELECTRA 모델이지만 서로 다른 부분을 특징을 파악할 것이라고 생각되어 선정하였다.
- c. xlm-roberta-large: XML의 모델은 100개의 언어와 2.5TB라는 데이터 세트로 훈련된 모델이다. 비록 이 데이터 세트에 한국어가 적더라도 전체적인 언어의 문맥 이해는 ELECTRA 모델보다 높을 것이며 Transformers 모델 특성상 좋은 품질의 많은 양의 데이터라면 성능은 지속해서 올라감으로 한국어가 데이터 셋이 조금이어도 가장 큰 데이터 세트를 사용한 모델을 선정하였다.

4.4.2 모델 앙상블

앙상블은 두가지 방식을 이용하였다. 일반 평균과 가중 평균을 이용한 방식인데, 일반평균의 방식으로 각각의3개 모델의 결과값의 평균을 구하여 특정 모델에 편향되지 않도록 모델 앙상블을 진행했다. 가중평균은 모델별로 가중치를 주어 평균을 내보았다. 가장 큰 점수의 모델에 비교적 높은 가중치를 주고 최하 점수의 모델에 낮은 가중치를 두어 가장 높은 모델의 큰 영향을 줄 수 있도록 조절하였다. 최종적으로는 일반 평균을 통해 만든 앙상블 모델을 선택하여 제출하였고 pearson correlation이 public 0.9367, private 0.9403 점수를 얻을 수 있었다.

5. 자체 평가 의견

5.1. 잘한 점

- 논문과 잘 알려진 기법을 찾아보고 실제로 적용해보았다. 근거를 가지고 실험을 하고 성능이 향상된 이유와 실패한 이유를 찾으며 팀원 모두 능동적으로 모델을 개선했다.

- Github issue와 Notion을 활용하여 각자의 실험 내용과 결과를 공유하며, 불필요한 자원이나 시간의 낭비를 막고, 효율적으로 실험을 진행하였다.

- 데이터 전처리와 증강에 대한 다양한 기법들을 브레인스토밍을 통해 공유하고, 최대한 많은 실험을 통하여 각 기법이 왜 효과적인지, 효과적이지 못한지를 경험을 통해 이해하고, 각자 공부한 이론적 근거를 나누며 태스크에 대한 이해도를 높였다.

5.2 실험에서 실패했으나 유의미한 실험

a. BERT Masking: BERT의 Masking 기법을 채택함으로써 마치의 CV의 Cutout처럼 동작하는 가설을 세웠다. 입력의 2문장에 대해서 각각 랜덤한 Masking을 적용하여 Overfilling을 방지하는 방식으로 적용하였지다. 하지만, CV 데이터와 다르게 NLP는 데이터가 조금만 다르더라도 전체적인 context 의미가 변질하며 또한 모델이 Maskfill을 학습하는 여지를 줌으로써 실패했다.

b. Label Noise: epoch마다 데이터 세트의 label 값에 소수점 단위의 노이즈를 주어 전체적인 Overfilling을 방지하였다. 하지만, Label의 Noise를 적당히 주는 파라미터는 찾기가 어려웠다. 데이터의 분포가 일치하지 않을 경우는 잘 동작하였지만 분포를 조정하자 Noise로 인해 데이터 세트의 분포가 불안정해져 학습에 악영향을 주었다.

b. Back Translation: 시도해 본 다양한 증강 기법들 중에 가장 큰 성능 향상을 기대했던 것은 역번역(Back-translation)이었다. 하지만 단순히 역번역을 통한 데이터 증강으로는 유의미한 효과를 볼 수 없었다. 번역 이전에 불필요한 특수 문자 제거, 띄어쓰기, 맞춤법 교정 등의 전처리가 선행되지 않았기 때문임을 일차적인 원인이라고 해석하였다. 데이터 대부분이 영화 리뷰, 슬랙 채팅 등 구조화되지 않은 구어체의 텍스트를 기반으로 하기 때문에 번역 과정에서 정보 손실이 크게 일어나는 경우도 상당 수 존재했다. 또한, 레이블 불균형 문제를 해결하지 않은 채로 증강을 적용하였기 때문에, 성능 향상을 기대하기 어렵다는 결론에 도달했다. 증강한 데이터를 조금 더 효과적으로 사용하기 위해서는 각 레이블에 대한 분포를 uniform distribution을 따르게 하고, 데이터를 사전에 정제하여 역번역 과정에서 정보 손실을 최소화할 수 있는 샘플을 대상으로 증강 기법을 적용해야 할 것이라고 생각하였다.

5.3 프로젝트 협업 프로제스에서 아쉬웠던 점

- 전반적으로 대부분의 팀원이 처음 경험하는 딥러닝 대회이고, 대회 성적에 집중한 나머지 베이스라인 코드에 대한 이해도가 조금 부족했고, 코드 리팩토링 과정에서 시간을 투자하지 못하였다.

- Huggingface trainer를 사용하여 하이퍼파라미터나 모델을 튜닝하였기 때문에 조금 더 low-level에서 모델을 수정하는 접근법은 구상만 하고 실제로 실험하지 못한 방법들이 있다.

5.4 프로젝트를 통해 배운점 또는 시사점

- 사전 학습된 모델을 우리에게 맞는 task로 전이 학습하여 예측 값을 얻는 방법을 몸소 익힐 수 있었다.

- wandb를 이용해 하이퍼 파라미터 튜닝을 하며 다양한 사용 방법들을 익힐 수 있었다.

- 딥러닝 모델을 개발하는 대회가 어떻게 진행되는지 전반적인 프로세스를 이해할 수 있었고, 이러한 문제를 협업을 통해 해결해 나가는 경험을 얻을 수 있었다.

- 널리 알려진 데이터 전처리 및 증강 기법의 효과는 태스크와 데이터에 의존적이며, 상황에 따라 어떤 기법을 사용할지에 대한 인사이트를 터득할 수 있었다.

6. 참고 문헌(References)

[1] Kenton Murray and David Chiang , Correcting Length Bias in Neural Machine Translation, 2018, In Proceedings of the Third Conference on Machine Translation: Research Papers, pages 212–223, Brussels, Belgium. Association for Computational Linguistics.,

[2][Sarthak Jain](https://arxiv.org/search/cs?searchtype=author&query=Jain%2C+S), Byron C. Wallace , Attention is not Explanation, Attention is not Explanation. In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long Papers), Minneapolis, Minnesota. Association for Computational Linguistics.

[3] Park, Chanjun, Kim, Kuekyeng, Lim, Heuiseok, Optimization of Data Augmentation Techniques in Neural Machine Translation, 2019, Annual Conference on Human and Language Technology(p258-261)

[4] Jason Wei and Kai Zou, EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks, 2019, EMNLP-IJCNLP(p 6382–6388)

[5] KAIST Wordnet 동의어 사전, https://github.com/catSirup/KorEDA

[6] Research Gate, https://www.researchgate.net/figure/Visualization-of-clusters-obtained-via-HDBSCAN-on-sentence-embeddings-Each-cluster\_fig2\_338683513
NLP 기초 프로젝트(Semantic Wrap-Up Report) NLP-11

개인 회고

1. 나는 내 학습 목표를 달성하기 위해 무엇을 어떻게 했는가?
이번 대회에서는 직접 Hugging face에서 기존의 CV 모델들 말고 NLP 모델들을 사용하고 이를 자유롭게 튜닝하는 방법을 배우고 싶었다. 팀원이 모두 대회는 처음이다 보니 전체적인 Baseline 설계와 모델 리서치를 통해 자유롭게 모델들을 튜닝하고 데이터 쪽보단 직접 각종 딥러닝 테크닉들을 적용했다. 팀원들에게는 Baseline에서 각각의 실험 모델들을 선정해주며 대회 유경험자로서 대회 전반을 끌어냈다.


2. 마주한 한계는 무엇이며, 아쉬웠던 점은 무엇인가?
마주친 한계로써는 기존 CV 데이터의 대해서 전처리를 많이 수행하였지만 데이터의 전처리는 잘 경험해본 적이 없어 예상대로 어느 순간부터 데이터에 의한 모델의 한계점이 눈에 띄게 늘어났다. 데이터를 전처리하기 위해 각종 방법이 동원되었지만 정작 모델 앙상블과 딥러닝 테크닉을 맡음으로써 데이터의 전처리에서는 팀원들에게 맡기며 크게 다룬 것은 없었다.
비록 이번 대회가 NLP의 모델부터 자유롭게 다루어보자는 생각이었지만 데이터에 대한 실습이 미약했던 것으로 보인다.


3. 한계/교훈을 바탕으로 다음 프로젝트에서 시도해보고 싶은 점은 무엇인가?
현재로서 다음 프로젝트는 팀원 모두가 기본적으로 모델을 사용할 줄 알고 Hugging face라는 라이브러리도 익숙해졌으므로
기존 Baseline인 pytorch lightning으로 조금 더 low-level에서의 튜닝과 모델 부분과는 다르게 직접적으로 NLP 데이터를 전처리하고 다루어 보고 싶다. 또한 각종 딥러닝 테크닉들이 CV를 기반으로 두고 NLP에 적용했는데 이는 잘 적용되지 않아서 NLP에서의 테크닉을 조금 더 발전시키고 싶다.

4. 나는 어떤 방식으로 모델을 개선했는가?모델의 개선 측면은 기본적으로 토크나 이자에 고유 token을 추가시키는 방법 이외에 모델의 레이어를 직접적으로 수정하지는 않았다. 다만 각 모델의 토크나 이자를 보며 low-level~high-level에서 나오는 모델의 결괏값을 보며 앙상블 모델을 선정하여 높은 성능을 거두었다.


5. 내가 해본 시도중 어떠한 실패를 경험 했는가? 실패의 과정에서 어떠한 교훈을 얻었는가?
Directional_label_noise : Overfilling을 방지하기 위해 label의 중간값을 기준으로 낮은 값은 낮게 비싼 값은 높게 label에 노이즈를 주었다. 이는 초기 데이터 세트(분포가 맞지 않음)에 대하여 효과가 있었지만 추후 분포가 맞춰지면서 오히려 방해하는 역할을 하였다. 각종 noise는 기본적으로 데이터 세트의 분포를 맞추고 즉 데이터의 전처리가 끝난 후 딥러닝 테크닉이 들어가는 게 맞는다는 교훈을 얻어냈다.

Source Tagging : sour 별로 각각의 학습이 이루어질 수 있도록 각 데이터에 맞는 source tagging을 [SEP] 기준으로 붙여 인풋으로 넣어줬다. 하지만 이는 성능에 악영향을 주었으며 아마 source대로 label이 편향되는 효과를 주었기 때문이라고 예상한다. 교훈으로 한쪽으로 편향될 수 있는 딥러닝 모델에 대해 다시 유의점을 느낄 수 있었다.

Fill Random Token Mask : 이 또한 단어의 다양성 증가와 Overfilling 을 방지 그리고 CV의 Cut mix처럼 동작하기 위해 도입되었다. 각 문장의 단어를 Random 하게 Masking하고 이 Masking 된 곳에 Fill-Mask 모델을 통하여 유의어로 교체하는 방식을 사용하였다. 하지만 한국어의 특성상 완전히 완전히 다른 의미로 변질하는 경우가 많아 실패하였다. 아마 명사나 동사 부분만 태깅 후 이 부분만 교체하는 방식을 사용하면 나아지지 않겠느냐는 아쉬움이 존재한다. 교훈으로는 NLP는 단어를 바꾼다는 게 CV에서의 단순하게 픽셀값을 바꾸는 것과는 의미가 완전히 달라진다는 교훈을 얻어냈다.

Combine Custom Loss(Binary Cross Entropy + Focal Loss) : Auto encoder 에서 recon Loss는 MSE가 많이 쓰이지만 BCE가 성능이 더 좋다는 논문이 있다. https://arxiv.org/abs/1708.08487 이 논문에 따라 NLP에 도입하여 기존 MSE를 BCE로 교체하며 데이터 분포 불균형을 해결하기 위해 Focal loss와 결합하여 Custom loss를 만들었지만 BCE loss의 영향과 label 개수가 1이다 보니 Focal Loss가 어떤 영향을 미치는지 아주 파악되지 않아 하이퍼 파라미터 조정 실패로 돌아가게 되어 전체적으로 학습이 불안정해졌다. 교훈으로 각 Loss의 역할을 좀 더 상세히 알고 만약 Custom으로 제작 시에는 완벽히 두 로스를 이해하고 있어야겠다는 생각이 들었다. 다만 직접 BCE만 따로 쓰거나 Focal loss만 따로 쓰는 작업 보다 두 로스를 합쳐 학습이 돌아갔다는 점에서 큰 의미가 있었다고 생각한다,

6. 협업 과정에서 잘된점/아쉬웠던점은 어떤것이 있는가?
팀원들이 대회 경험이 없다 보니 대회를 끌고 나갔는데 모두 잘 따라와 주고 적극적으로 참여하였다. 나를 제외한 모두가 처음임에도 불구하고 각각 지시한 일들과 파트를 모두 열심히 수행하였다. 비록 기법의 결과가 악영향을 미쳐도 상심하지 않고 열심히 다음 실험을 이어 나가는 점에서 팀원 모두가 잘 수행하여 최종 2등을 기록할 수 있던 것 같다.
아쉬운 점으로는 내 대회 운영 방식이 Bottom-up 방식이지만 NLP 대회는 처음이다 보니 방향성이 중구난방으로 생겨 Bottom-up 방식이 제대로 운영되지 않았다. 결과적으로 대회에서 할 내용을 지시한 내가 아주 아쉽다. 다음 프로젝트부터는 기존의 대회를 진행했던 것처럼 Bottom-up 방식으로 대회를 진행하고 주체적인 역할도 좋지만 팀원으로서의 파트도 맡고 싶다.

Git

https://github.com/taemin6697/Level1_Semantictextsimilarity-Nlp-11

profile
한성대학교 네이버 AI Tech 5기 NLP

0개의 댓글