모델의 구조를 바꾸지 않고 오로지 학습 데이터를 가공하는 것만으로 모델의 성능을 끌어올릴 수 있다.
- Generation Model (GPT3, T5, ChatGPT, GPT-4 등)을 통한 Synthetic Data 생성
- Data Augmentation
- Data sampling
- negative sampling
- Data Quality Control
- Data labeling error detection, Data Cleaning, Data Filtering
1. Data augmentation - simple ways
기초적인 증강으로 가장 쉽게 떠올릴 수 있는건 label을 유지하면서 text를 살짝 바꿔보는 것이다.
1) paraphrasing
원문의 의미를 최대한 유지하면서 변형하는 것이다.
- WordNet : synonym, hypernyms (동의어 상의어)로 단어 일부를 WordNet(사전)으로 교체해보는 것이다. ex) "이 영화 재밌다" -> "이 영화 흥미롭다".
- semantic embedding : Glove, Word2Vec, FastText과 같은 확률기반 모델들처럼 사전학습된 단어 임베딩을 활용할 수도 있다.
- back-translation : 기계번역 모델을 활용해서 back-translation으로 데이터를 증강할 수도 있다.
- model generation : seq2seq 인코더 디코더 모델을 통해 동일한 의미를 지닌 새로운 문장을 생성할 수 있다. "한 남자가 음식을 먹고있다." 는 encoder에 입력값으로 넣어주고 "A man is eating food"는 decoder에 입력으로 넣어서 새로운 문장을 생성할 수 있다. QQP, MRPC, STS-B 데이터셋을 활용할 수 있다. 이렇게 데이터셋의 다양성을 보장하면서 증강할 수 있다.
2) noising
모델의 robustness를 올리기 위해 적용해볼 수 있으나 원본 Label이 변경될법한 noise가 추가될 수도 있다.
3) Sampling
paraphrasing과 다르게 의미가 같거나 다른 새로운 문장을 만들어서 보강하는 방법이다. label이 있다면 재구성이 필요할 수 있다.
- rule base : 예를들어, <주어 + 시간부사 + 부사 + 동사 -> 시간부사 + 주어 + 부사 + 동사> 의 규칙하에 새로운 문장을 만들어낸다. 확률기반 모델을 활용해서 주어 자리에 다른 단어를 넣고, 부사 자리에 또 다른 단어를 넣고 하는 방식으로 새로운 문장이 탄생된다. "나는 오늘 늦게 일어났다" -> "오늘 그녀는 일직 잠들었다."
- pretrained MLM : "This is [MASK] cool" -> "This is pretty cool" or "This is not cool"
- self training : semi-supervised learning 방법 중 하나다. 분류기를 만든다고 했을 때, 초기 가지고 있는 데이터로 모델을 학습시키고 이 모델로 unlabeled data를 사용할 수 있게 만드는 것이다.
- Mixup : 두 데이터 sample을 섞어서 새로운 데이터를 만든다. label도 섞어서 새로운 label을 만든다. 텍스트 데이터를 embedding한 값을 평균내는 방식으로 이루어질 수도 있다. 데이터 분포를 풍부하게 만들어 overfitting을 완화시킬 수 있다. 다양한 task에 적용하기 어려워서 주로 classification에 사용되긴 한다.
2. Data augmentation - Conditional BERT
MLM을 활용했는데 "This is [MASK] cool" -> "This is pretty cool" or "This is not cool" 이렇게 결과의 성격이 완전히 달라질 수 있다. 따라서 conext와 label을 모두 고려해서 [MASK]를 맞춰보겠다 하는 것이 C-BERT이다.
label embedding을 통해서 '아 positive라는 class로 mask를 예측해야겠다' 라고 알려주는 것이다. 즉 label에 민감한 결과를 도출하도록 한다.
먼저 우리가 가지고 있는 데이터를 가지고 C-BERT를 학습시켜야 한다. 학습이 끝나면 train set에서 무작위로 mask를 넣고 label과 함께 input을 만들고 추론을 통해 새롭게 증강된 데이터를 만들 수 있다.
원래 샘플의 label과 반대되는 label을 input으로 넣었을 때 변환 결과이다. worst가 best로 바뀌는걸 보면 label에 민감하게 잘 생성한다고 이해할 수 있다.
3. LMSI, Language Model Self-Improved
동일한 질문에 여러가지 prompt를 붙여서 여러 셋을 만든다.
LLM은 이 여러 버전의 질문들을 받아서 답을 추론한다.
우리는 질문의 정답까지 알고 있지 않다. LLM 추론 결과 중 가장 득표가 높은 answer만을 모은다.
그러면 일관된 답변들에서 나타나는 reasoning path(추론 과정)를 정답이라고 생각할 수 있다.
이렇게 unlabeled dataset에 label을 생성해서 언어모델을 위한 fine-tuning에 사용할 수 있다.
특정 프롬프트나 답변스타일에 ovefitting이 될 수 있기 때문에 위 도표 처럼 다양한 prompt를 적용해서 데이터셋을 만들었다고 한다.
이런식으로 LLM을 self-improved시켜서 상당한 성능 향상을 얻었다고 한다.
4. 끝으로
모델이 예측하는 결과의 confidence score를 활용해서 특정 샘플에서의 증강 여부를 filtering할수도 있다.
생성한 데이터셋에 대한 평가는 어떤 기준으로 이루어질 수 있을까? 도 찾아보자.
'boostcamp AI tech > boostcamp AI' 카테고리의 다른 글
NLP Datasets 1 (0) | 2024.01.23 |
---|---|
Intro to Data Centric AI (0) | 2024.01.22 |
Positional Encoding (0) | 2024.01.19 |
Multi-modal - LXMERT, ViLBERT, Dall-e (0) | 2024.01.18 |
Controllable LM - Plug and Play LM(PPLM) (0) | 2024.01.18 |