[NLP] 경진대회 발표 및 정리


우리 팀이 1등!!! 하핫
다른 팀들이 한 삽질 및 인사이트들 공유한 부분을 정리했다.
모델 레이어 프리징
T5 모델, 한국전자기술연구원에서 한국어 데이터셋 사전학습된거 - 메모리 누수 - Qlora를 써도 해결이 안됐음
젬마 모델 - 구글 베이스의 ko-gemma 2-9b it 이것도 메모리 누수. LoRa 사용하려고 했는데, 안됐음..
앙상블 적용하셨다는데, 모델 레이어 프리징. 소프트 보팅 방식 사용.
멘토님 의견 -> 데이터 증강할때 LLM한테 퓨샷 샘플을 더 넣어줘서 전이학습을 시켜줬으면 좋았을 것 (데이터셋이 번역한거라서 LLM이 쌩으로 만드는 거랑은 많이 디스트리뷰션이 다름)
데이터 오류 발견! 데이터가 노이지한 데이터임.. (요약문에 대화문이 들어가 있는다던가..) 같은 내용의 대화문인데 형식만 조금 바꾸는 방식으로 데이터 증강을 함. (멘토님: 대신 같은 내용이 중복되면 내용에 오버피팅될 수 있다)
LLM 이용해서 데이터 증강함. 프롬프트 엔지니어링 들어감. 화자 태그 유지.
한국어를 영어로 다시 번역하고, 영어로 요약한 다음에, 다시 한국어로 번역하는 방식. (멘토님: 번역체도 모델마다 달라서 잘 안될 수도 있음)
다른 조에서 발표 때 공유한 궁금한 점인데, 공감이 많이 갔다.

에폭수가 오히려 낮을 때 성능이 좋을 것(과적합이 덜 되어서)
후처리 LLM api? 생성한걸 다시 후처리해주게 하는 방식을 써볼 수도 있을 것.
데이터 분석과 전처리가 중요해. 작은 노이즈나 사소한 오타가 모델 성능에 크게 영향을 주지 않는 방향으로 가고 있음. 그런 노이즈를 넣는게 오히려 더 좋은 성능을 내기도 함.
다양한 문맥 확보를 위해 Random adverb insertion을 시도. 같은 뜻의 문장을 다양하게 만들어주는 효과?
랜덤 리플레이스먼트도 시도했는데, 쓸데없는 부사만 늘고 성능이 떨어져서 폐기
랜덤 인설션(insertion) 도 시도
다양한 문맥 확보를 위해 일본어, 중국어 등을 이용해 백트랜스레이션 사용. 다양한 방식으로 데이터 증강 시도!

Wrap Up
대회의 목표: 딥러닝을 활용해 문제 해결 전반에 대한 경험. 경험, 경험, 경험!
데이터 분석 및 처리, 모델 선정 및 학습, 정성/정량 평가 및 결과 분석, 반복적 모델 개선
데이터 분석: 정성/정량 분석과 문제 발견을 기대했다. 비정형 데이터에 대한 기초적인 분석(EDA, 결측치 탐색, 최대 길이 조사 등등..)
데이터 전처리: 다양한 문제의 해소 전략 수립:
제대로 된 한국어가 아닌 번역투 한국어 - 어떻게 해소할지?
번역이 제대로 안된 부분?
데이터 자체의 중복, 잘못된 매핑은?
오탈자?
등등 데이터 문제를 어떻게 처리할지 고민하고 학스 . 데이터셋 클리닝과 필터링, 테스트 데이터의 노이즈를 고려.
데이터 증강/선별: 현재 데이터의 부족하거나 과한 부분을 찾고 이에 대한 증강과 선별을 기대.
규칙/모델 기반 데이터 변형하거나 증강시키는 방법
공개 데이터 활용하는 방법
토픽을 활용한 카테고리별 데이터 밸런싱(TF-IDF 등 규칙 기반 유사도 측정 및 데이터 중복 제거)
LLM 기반 데이터 생성 - 임베딩 similarity 등 모델 기반 유사도 측정 및 데이터 중복 제거
모델 탐색 및 선정: 다양한 모델에 대한 조사, 사전 학습
하이퍼파라미터 최적화: 모델 학습에 활용되는 하이퍼 파라미터 조사 및 최적화.
정량 평가: 주어진 Rouge score 기반으로 한 평가. 형태소 분석기 기반 Rouge score 추가 개발 및 활용. (밸리데이션 셋과 테스트셋의 결과값 차이가 줄도록)
정성 평가: 결과 파일을 정성적으로 살펴보며 모델 평가. BERTScore, GPTScore
파이프라인 효율화: 시간 최적화(얼리 스타핑, 하이퍼파라미터 조정 등 학습시간 최적화), 모델 선정 사이클 최적화,
자원 최적화: gradient checkpointing, QLoRA 등 기술을 학습한 VRAM 최적화.
PTQ, QAT 등 기술을 활용한 평가 VRAM 최적화
기대했던 진행 과정
일단 한번 돌려보기 ->
간단한 하이퍼파라미터 튜닝
(하이퍼파라미터 파악하기. 러닝 레이트를 키워서 학습을 가속화시켜보거나, 에폭을 늘려서 더 오래 학습해본다던가.. 하이퍼 파라미터들을 수정하면서 관계를 파악하고 학습. ->
데이터 분석을 통한 개선 ->
반복을 통한 개선
솔루션 리뷰
- 전략 수립이 중요하다! 대회 집중? 모델/학습에 집중? 파이프라인 전체 경험에 집중?
뭘 얻고 싶은지 목표를 수립하고 거기에 집중하는 게 중요하다. - 적은 데이터, 노이지한 데이터로 좋은 모델을 만들어야 하는 대회였다. 기존 데이터의 noise + 번역때문에 생긴 noise
어떻게 해야 양질의 다량의 데이터를 만들 수 있을까?
-> 아웃라이어를 제거하는 방법. stop word 추가해서 데이터 전처리(고전 자연어 처리에서 잘 동작하던 방법론. LLM에서는 잘 활용되지 않지만.. Bart, T5 모델에서는 잘 동작할 수 있음)
-> NER을 활용한 불균일한 영어 번역 해소
-> 데이터셋 전수조사를 통한 노이즈 탐색 및 제거
-> Embedding similarity 기반 데이터 필터링: 주어진 대화문과 대응되는 요약문간의 유사도를 측정하여, 유사하지 않은 샘플은 버리는 방식(요약 잘 안된거는 버린다)
-> Reward model 기반 데이터 필터링: 주어진 대화문과 그에 대한 요약문을 LLM에 주고, 해당 답변이 유효한지 아닌지에 대한 reward를 출력하게 한다. 이걸로 좋은 점수를 얻은 샘플만 사용하는 방식!
----->>> 결론 : 데이터 처리, 클렌징은 언제나 어디서나 꼭 필요한 작업이다!! 지금까지 일하면서 데이터 조사와 검수가 필요하지 않았던 적은 없었다. - 데이터 증강:
사람이 데이터를 생성하는 건 어려우니까. 모델에게 데이터를 생성하게 하자!
오픈 소스 데이터 활용
규칙 기반 데이터 증강
모델 기반 데이터 증강 방법론: translation/back translation을 통해 데이터를 증강하는 방법. SAMSum, DialogSum
LLM을 이용한 데이터 증강: LLM으로 summary 생성. 오픈 소스 데이터를 LLM을 통해 번역하는 방법. 퓨샷 샘플을 제공해서 번역투를 재현하도록 데이터를 만드는 방법. 또는 LLM이 대화와 요약문을 모두 생성.
LLM이 데이터를 잘 생성하게 만들어보는 방법: topic을 주고 topic에 대한 서머리를 생성하게 하거나, 대화문을 먼저 생성하고 요약문을 생성하게 한다거나, 서머리를 평가하게 한다던가.. 데이터 증강 방법론 고도화! - 모델:
좋은 사전학습 모델을 탐색: BART, T5, Gemma, SOLAR, Llama3 ...
제한된 자원 안에서 돌릴 수 있는 모델! (GPU VRAM은 항상 부족)
제한된 자원으로 돌리는 방법들: PEFT(파라미터 이피션트 파인 튜닝, quantization, LoRA), Zero optimization, Gradient checkpointing, CPU offloading
quantization/LoRA/ZeRO - 하이퍼파라미터 최적화
- 학습 Objective 변경
objective를 바꿔서 더 좋은 모델 만들기. (KL Divergence 기반의 Loss 함수, Rouge score 기반 강화 학습, DPO를 활용한 모델 학습 ... )
DPO: train dataset에 정답 sample과 모델 결과를 이용. 서로 다른 모델의 결과에서 더 좋은 모델을 따르도록 학습. -> 다양한 학습법 익히기. DPO는 정량 성능 최적화 및 정성 성능 증가에 모두 도움이 된다는 연구 결과가 있다고..
- 벤치마크-옵티마이제이션
좋은 정성 결과가 좋은 벤치마크는 아님. DeepSeek-VL: 벤치마크가
단순 벤치마크 성능을 높이고 싶다면, 벤치마크에 최적화된 방법이 필요함. (번역투를 최적화한 데이터셋을 만든다던가. 번역된 DialogSum 데이터셋에서 잘 동작하는 모델을 만들자. (영어 dialogue 요약 모델을 만들어 활용하기. 한국어 대화문 - 영어 대화문 -영어 요약문 - 한국어 요약문) - 그 외 다양한 기술/기법
요즘은 sLM! 작은 모델. 가벼운 장비로 돌릴 수 있는 모델. 인터넷 연결 없이 활용 가능한 모델, 주어진 태스크를 잘 수행하는 모델에 대한 수요. 2024년 AI 트렌드