안녕하세요, 인공지능을 공부하고 있는 학생입니다. 최근 Upstage AI LAB 3기 부트캠프의 NLP 과정을 통해 일상 대화 요약 경진대회에 참여하게 되었습니다. 이 글에서는 NLP 과정을 통해 배운 내용과 경진대회에서의 경험을 상세하게 공유하고자 합니다.
목차
- 팀 소개: 전지재능
- 대회 소개 및 데이터 탐색
- 데이터 전처리 및 증강
- 모델 선택과 학습 과정
- 결과 및 분석
- 회고와 인사이트
- 마치며
협업 방식
효율적인 협업을 위해 다양한 도구를 활용했습니다.
- GitHub: 코드 공유와 버전 관리를 위해 사용
- Google 스프레드시트: 실험 결과와 진행 상황을 기록
- Google 프레젠테이션: 발표 자료 작성 및 공유
- Zoom: 매일 오전 11시에 정기 미팅을 통해 아이디어를 교환
- Slack: 실시간 소통과 이슈 해결을 위한 채널
특히, 매일의 미팅을 통해 각자의 진행 상황을 공유하고 새로운 아이디어를 도출할 수 있었습니다. 실험 기록은 스프레드시트를 통해 투명하게 공유되어 효율적인 협업이 가능했습니다.
대회 소개 및 데이터 탐색
대회 개요
이번 경진대회는 일상 대화에 대한 요약문 생성을 목표로 하는 대회였습니다. 주어진 대화문을 요약하여 핵심 내용을 추출하는 모델을 개발하는 것이 핵심 과제였습니다.
- 대회 기간: 2024년 8월 29일 10:00 ~ 2024년 9월 10일 19:00
- 평가 지표: ROUGE-1, ROUGE-2, ROUGE-L 스코어의 평균을 사용
평가 기준: ROUGE 스코어
ROUGE(Recall-Oriented Understudy for Gisting Evaluation)는 자동 요약 및 기계 번역 등에서 사용되는 평가 지표입니다.
- ROUGE-1: 모델 요약본과 참조 요약본 간에 겹치는 unigram의 수
- ROUGE-2: bigram의 수
- ROUGE-L: Longest Common Subsequence(LCS) 기법을 이용해 최장 길이로 매칭되는 문자열을 측정
- ROUGE-F1: ROUGE-Recall과 ROUGE-Precision의 조화평균
한국어의 특성상 정확한 ROUGE 스코어를 산출하기 위해 문장 토큰화를 진행한 후 평가를 진행했습니다.
데이터셋 정보
데이터셋 구성
- 학습 데이터(train.csv): 총 12,457개의 대화
- 검증 데이터(dev.csv): 총 499개의 대화
- 테스트 데이터(test.csv): 총 499개의 대화
각 데이터는 다음과 같은 컬럼으로 구성되어 있습니다.
- fname: 대화 고유번호
- dialogue: 최소 2명에서 최대 7명이 등장하는 대화
- summary: 대화 요약문 (테스트 데이터에서는 제공되지 않음)
- topic: 대화 주제 (테스트 데이터에서는 제공되지 않음)
데이터 형식 및 특성
- 발화자 구분을 위해
#Person"N"# 형식을 사용
- 발화자의 대화가 끝나면 줄바꿈(
\n)으로 구분
- 전화번호, 주소 등 개인정보는 마스킹 처리 (
#PhoneNumber# 등)
데이터 탐색(EDA)
데이터를 이해하고 모델링에 활용하기 위해 다양한 탐색을 진행했습니다.
대화 길이 분석
- 대화 길이: 평균 335.39자
- 요약문 길이: 평균 87.40자
- 요약문/대화문 비율: 약 0.26
이를 통해 요약문의 길이를 예측하고 모델의 출력 길이(max_new_tokens)를 설정하는 데 참고했습니다.
단어 빈도 분석
- 자주 등장하는 단어를 파악하여 특수 토큰 추가를 고려
- 예를 들어,
#Person1#, #Person2# 등의 발화자 토큰이 빈번히 등장
텍스트 정규화
- 불필요한 공백, 특수문자, 자음/모음 제거
- 정규 표현식을 활용하여 데이터 클렌징
- 텍스트 정규화를 통해 모델의 입력 데이터 품질을 향상시킴
데이터 전처리 및 증강
데이터 전처리
모델의 성능을 높이기 위해 데이터 전처리를 철저히 수행했습니다.
텍스트 정규화
- 불필요한 공백 제거: 연속된 공백을 하나로 축소
- 특수문자 제거: 알파벳, 숫자, 한글을 제외한 모든 문자 제거
- 자음/모음 제거: 홀로 존재하는 자음이나 모음 제거
특수 토큰 추가
- 모델이 발화자를 인식하고 문맥을 파악하도록 특수 토큰을 추가
- 예:
#Person1#, #Person2# 등을 모델의 토크나이저에 등록
데이터 증강(Data Augmentation)
모델의 일반화 성능을 향상시키기 위해 다양한 데이터 증강 기법을 적용했습니다.
EDA(Easy Data Augmentation)
EDA 기법을 활용하여 단어 수준에서 문장을 변경했습니다.
- 유의어 교체(Synonym Replacement, SR): 문장의 일부 단어를 유의어로 교체
- 임의 단어 삽입(Random Insertion, RI): 임의의 위치에 단어 삽입
- 단어 위치 변경(Random Swap, RS): 문장 내 두 단어의 위치를 교환
- 임의 단어 삭제(Random Deletion, RD): 임의의 단어를 삭제
AEDA(An Easier Data Augmentation)
문장 부호를 문장 내 임의의 위치에 삽입하여 데이터를 증강하는 기법입니다.
- 예: 마침표, 쉼표, 물음표 등을 추가하여 문장 구조 다양화
역번역(Back Translation)
기존의 문장을 다른 언어로 번역한 후 다시 원래 언어로 번역하여 문장을 생성합니다.
- 절차:
- 한국어 문장을 영어로 번역
- 영어 문장을 다시 한국어로 번역
- 효과: 문장의 의미는 유지하면서 표현 방식이 달라져 데이터 다양성 향상
외부 데이터셋 활용
공개된 대화 말뭉치를 활용하여 추가적인 학습 데이터를 확보했습니다.
- 데이터셋 예시: AI Hub의 대화 데이터셋 등
- 포맷 변경: 외부 데이터셋을 대회 데이터셋과 동일한 형식으로 변환
모델 선택과 학습 과정
사용한 모델들
다양한 사전 학습된 언어 모델을 활용하여 최적의 성능을 내는 모델을 찾고자 했습니다.
- KoBART (
digit82/kobart-summarization)
- T5 (
eenzeenee/t5-base-korean-summarization)
- Meta Llama 3.1 (
meta-llama/Meta-Llama-3.1-8B)
- SOLAR (
upstage/SOLAR-10.7B-v1.0)
- Gemma2 (
rtzr/ko-gemma-2-9b-it)
각 모델마다 특성과 장단점이 있으므로, 여러 모델을 실험하여 최적의 결과를 도출하고자 했습니다.
모델별 학습 및 실험
1. KoBART
KoBART는 한국어에 특화된 BART 모델로, 요약 및 번역 작업에 주로 사용됩니다.
- 실험 내용:
- 기본 모델 학습 (Baseline)
- Epoch 수 증가
- 데이터 증강(EAD, AEDA, 역번역)
- 특수 토큰 추가 및 입력 형식 변경
- 텍스트 정규화 적용
- 결과:
- Midterm Rouge Score: 42.1058
- Final Rouge Score: 38.7040
분석:
- 데이터 증강 기법이 성능 향상에 크게 기여하지 못함
- 특수 토큰 추가 및 입력 형식 변경으로 미세한 성능 향상
- 텍스트 정규화로 인한 성능 변화는 크지 않음
2. T5
T5(Text-to-Text Transfer Transformer)는 다양한 자연어 처리 태스크를 처리할 수 있는 범용 언어 모델입니다.
- 실험 내용:
- 텍스트 정규화 적용
- 역번역을 통한 데이터 증강
- 특수 토큰 추가 및 Vocab 확장
- 결과:
- Midterm Rouge Score: 42.7859
- Final Rouge Score: 41.7716
분석:
- 텍스트 정규화로 인해 성능이 소폭 향상
- 역번역 데이터 증강은 기대만큼의 성능 향상을 가져오지 못함
- Vocab 확장은 오히려 성능 저하를 초래
Meta Llama 3.1은 대용량의 파라미터를 가진 언어 모델로, 다양한 NLP 태스크에서 높은 성능을 보입니다.
- 실험 내용:
- 데이터 증강 적용
- 하이퍼파라미터 튜닝 (max_new_tokens, LoRA 설정 등)
- 추론 시 클렌징 적용
- 결과:
- Midterm Rouge Score: 42.3329
- Final Rouge Score: 40.6886
분석:
- 모델의 크기에 비해 성능 향상이 크지 않음
- 하이퍼파라미터 조정이 성능에 미치는 영향이 큼
4. SOLAR
SOLAR는 Upstage에서 개발한 대용량 한국어 언어 모델입니다.
- 실험 내용:
- 최대 토큰 수 조정 (max_new_tokens)
- 추론 결과 후처리 (공백 제거 등)
- 학습 데이터 증강
- 결과:
- Midterm Rouge Score: 44.6292
- Final Rouge Score: 42.8231
분석:
- max_new_tokens 값을 적절히 조정하여 성능 향상
- 추론 결과의 후처리가 성능에 영향을 줌
- 데이터 증강보다는 하이퍼파라미터 튜닝이 효과적
5. Gemma2
Gemma2는 한국어에 특화된 대용량 언어 모델입니다.
- 실험 내용:
- 4bit, 8bit 양자화를 통한 메모리 최적화
- FP16, BF16 등 다양한 정밀도 설정으로 학습
- LoRA 설정 변경 (Rank, Alpha 등)
- Dropout 조정 및 검증 데이터 포함 학습
- 결과:
- Midterm Rouge Score: 46.6249
- Final Rouge Score: 44.6438
분석:
- FP16 정밀도로 학습 시 성능이 크게 향상됨
- LoRA 설정과 Dropout 조정이 성능에 긍정적인 영향
- 검증 데이터를 포함하여 학습함으로써 일반화 성능 향상
결과 및 분석
최종 리더보드 성적
- Midterm Rouge Score: 46.6249 (1위)
- Final Rouge Score: 44.6438 (1위)
모델별 성능 비교
| 모델명 | ROUGE-1 | ROUGE-2 | ROUGE-L | Midterm Score | Final Score |
|---|
| KoBART | 0.5159 | 0.3202 | 0.4271 | 42.1058 | 38.7040 |
| T5 | 0.5217 | 0.3262 | 0.4356 | 42.7859 | 41.7716 |
| Meta Llama 3.1 | 0.5118 | 0.3265 | 0.4317 | 42.3329 | 40.6886 |
| SOLAR | 0.5371 | 0.3456 | 0.4561 | 44.6292 | 42.8231 |
| Gemma2 | 0.5557 | 0.3705 | 0.4725 | 46.6249 | 44.6438 |
결과 분석
- Gemma2 모델이 가장 높은 성능을 기록
- 모델의 크기와 정밀도 설정이 성능에 큰 영향을 미침
- 데이터 증강보다는 하이퍼파라미터 튜닝과 모델 설정이 성능 향상에 효과적
회고와 인사이트
성공 요인
-
대용량 언어 모델(LLM) 활용: 대용량의 파라미터를 가진 언어 모델을 사용하여 높은 성능을 달성할 수 있었습니다.
-
하이퍼파라미터 튜닝: 각 모델의 특성에 맞는 하이퍼파라미터를 조정하여 성능을 향상시켰습니다.
- max_new_tokens: 출력 요약문의 최대 길이를 적절히 설정하여 요약문의 품질 향상
- LoRA 설정: 저비용으로 모델의 성능을 향상시키는 LoRA 설정을 최적화
-
추론 결과 후처리: 추론된 요약문의 시작과 끝에 존재하는 공백 문자 제거 등 미세한 후처리를 통해 성능을 개선했습니다.
아쉬운 점과 개선 방향
-
데이터 증강의 한계: 일부 데이터 증강 기법은 오히려 성능 저하를 초래했습니다.
- EDA 기법: 문장의 의미가 왜곡되어 모델 학습에 부정적인 영향
- 역번역: 기대한 만큼의 성능 향상을 가져오지 못함
-
모델별 최적화의 어려움: 각 모델마다 입력 형식과 특성이 달라 최적의 성능을 내는 데 어려움이 있었습니다.
- 입력 형식: 모델별로 요구하는 입력 형식을 준수하지 않으면 성능이 저하됨
- 토크나이저 특성: 모델의 토크나이저가 특수 토큰을 제대로 인식하지 못하는 경우가 발생
-
추론 결과의 다양성 부족: 높은 ROUGE 스코어를 얻기 위해서는 정답과 유사한 표현을 사용해야 하는데, LLM은 독창적인 표현을 생성하여 점수가 낮게 나오는 경우가 있었습니다.
개인적인 소감
-
Hugging Face를 처음 접했는데, 모델별로 코드가 달라 어려움이 있었습니다. LLM에서 토크나이저 조절의 중요성을 깨달았고, 새로운 세계에 발을 디뎠습니다.
-
많은 가설이 틀려 힘들었지만, 팀원들로부터 새로운 아이디어를 얻어 계속 시도할 수 있었습니다.
-
성능은 아쉬웠지만 여러 기법을 시도해 볼 수 있어서 즐거웠습니다. LLM에서 발생한 메모리 오류를 해결하며 많이 배웠습니다.
-
제한된 메모리 안에서 최대한의 효율과 성능을 내는 시도를 해보아 유용했습니다.
-
LLM과 하이퍼파라미터의 효과를 확인할 수 있어 즐거웠습니다. 여러 기법들이 효과가 없어 아쉬웠지만, 수정하여 다시 시도해보고 싶습니다.
마치며
이번 Upstage AI LAB 3기 부트캠프의 NLP 과정과 일상 대화 요약 경진대회는 저에게 큰 도전이자 성장의 기회였습니다. 팀원들과의 협업을 통해 다양한 시도를 해볼 수 있었고, 실패를 통해 배운 점도 많았습니다.
특히, 대용량 언어 모델의 가능성과 한계를 직접 경험하며 앞으로의 학습 방향을 설정하는 데 큰 도움이 되었습니다. 데이터 전처리의 중요성, 하이퍼파라미터 튜닝의 영향력, 그리고 팀원들과의 협업이 얼마나 중요한지 다시 한 번 깨달았습니다.
앞으로도 이 경험을 바탕으로 더욱 깊이 있는 연구와 개발을 이어나가고자 합니다. 긴 글 읽어주셔서 감사합니다.
참고 자료