안녕하세요, 인공지능을 공부하고 있는 학생입니다. 최근 Upstage AI LAB 3기 부트캠프의 NLP 과정을 통해 일상 대화 요약 경진대회에 참여하게 되었습니다. 이 글에서는 NLP 과정을 통해 배운 내용과 경진대회에서의 경험을 상세하게 공유하고자 합니다.

목차

  1. 팀 소개: 전지재능
  2. 대회 소개 및 데이터 탐색
  3. 데이터 전처리 및 증강
  4. 모델 선택과 학습 과정
  5. 결과 및 분석
  6. 회고와 인사이트
  7. 마치며

협업 방식

효율적인 협업을 위해 다양한 도구를 활용했습니다.

  • 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 기법을 활용하여 단어 수준에서 문장을 변경했습니다.

  1. 유의어 교체(Synonym Replacement, SR): 문장의 일부 단어를 유의어로 교체
  2. 임의 단어 삽입(Random Insertion, RI): 임의의 위치에 단어 삽입
  3. 단어 위치 변경(Random Swap, RS): 문장 내 두 단어의 위치를 교환
  4. 임의 단어 삭제(Random Deletion, RD): 임의의 단어를 삭제

AEDA(An Easier Data Augmentation)

문장 부호를 문장 내 임의의 위치에 삽입하여 데이터를 증강하는 기법입니다.

  • 예: 마침표, 쉼표, 물음표 등을 추가하여 문장 구조 다양화

역번역(Back Translation)

기존의 문장을 다른 언어로 번역한 후 다시 원래 언어로 번역하여 문장을 생성합니다.

  • 절차:
    1. 한국어 문장을 영어로 번역
    2. 영어 문장을 다시 한국어로 번역
  • 효과: 문장의 의미는 유지하면서 표현 방식이 달라져 데이터 다양성 향상

외부 데이터셋 활용

공개된 대화 말뭉치를 활용하여 추가적인 학습 데이터를 확보했습니다.

  • 데이터셋 예시: AI Hub의 대화 데이터셋 등
  • 포맷 변경: 외부 데이터셋을 대회 데이터셋과 동일한 형식으로 변환

모델 선택과 학습 과정

사용한 모델들

다양한 사전 학습된 언어 모델을 활용하여 최적의 성능을 내는 모델을 찾고자 했습니다.

  1. KoBART (digit82/kobart-summarization)
  2. T5 (eenzeenee/t5-base-korean-summarization)
  3. Meta Llama 3.1 (meta-llama/Meta-Llama-3.1-8B)
  4. SOLAR (upstage/SOLAR-10.7B-v1.0)
  5. 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 확장은 오히려 성능 저하를 초래

3. Meta Llama 3.1

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-1ROUGE-2ROUGE-LMidterm ScoreFinal Score
KoBART0.51590.32020.427142.105838.7040
T50.52170.32620.435642.785941.7716
Meta Llama 3.10.51180.32650.431742.332940.6886
SOLAR0.53710.34560.456144.629242.8231
Gemma20.55570.37050.472546.624944.6438

결과 분석

  • Gemma2 모델이 가장 높은 성능을 기록
  • 모델의 크기와 정밀도 설정이 성능에 큰 영향을 미침
  • 데이터 증강보다는 하이퍼파라미터 튜닝모델 설정이 성능 향상에 효과적

회고와 인사이트

성공 요인

  1. 대용량 언어 모델(LLM) 활용: 대용량의 파라미터를 가진 언어 모델을 사용하여 높은 성능을 달성할 수 있었습니다.

  2. 하이퍼파라미터 튜닝: 각 모델의 특성에 맞는 하이퍼파라미터를 조정하여 성능을 향상시켰습니다.

    • max_new_tokens: 출력 요약문의 최대 길이를 적절히 설정하여 요약문의 품질 향상
    • LoRA 설정: 저비용으로 모델의 성능을 향상시키는 LoRA 설정을 최적화
  3. 추론 결과 후처리: 추론된 요약문의 시작과 끝에 존재하는 공백 문자 제거 등 미세한 후처리를 통해 성능을 개선했습니다.

아쉬운 점과 개선 방향

  1. 데이터 증강의 한계: 일부 데이터 증강 기법은 오히려 성능 저하를 초래했습니다.

    • EDA 기법: 문장의 의미가 왜곡되어 모델 학습에 부정적인 영향
    • 역번역: 기대한 만큼의 성능 향상을 가져오지 못함
  2. 모델별 최적화의 어려움: 각 모델마다 입력 형식과 특성이 달라 최적의 성능을 내는 데 어려움이 있었습니다.

    • 입력 형식: 모델별로 요구하는 입력 형식을 준수하지 않으면 성능이 저하됨
    • 토크나이저 특성: 모델의 토크나이저가 특수 토큰을 제대로 인식하지 못하는 경우가 발생
  3. 추론 결과의 다양성 부족: 높은 ROUGE 스코어를 얻기 위해서는 정답과 유사한 표현을 사용해야 하는데, LLM은 독창적인 표현을 생성하여 점수가 낮게 나오는 경우가 있었습니다.

개인적인 소감

  • Hugging Face를 처음 접했는데, 모델별로 코드가 달라 어려움이 있었습니다. LLM에서 토크나이저 조절의 중요성을 깨달았고, 새로운 세계에 발을 디뎠습니다.

  • 많은 가설이 틀려 힘들었지만, 팀원들로부터 새로운 아이디어를 얻어 계속 시도할 수 있었습니다.

  • 성능은 아쉬웠지만 여러 기법을 시도해 볼 수 있어서 즐거웠습니다. LLM에서 발생한 메모리 오류를 해결하며 많이 배웠습니다.

  • 제한된 메모리 안에서 최대한의 효율과 성능을 내는 시도를 해보아 유용했습니다.

  • LLM과 하이퍼파라미터의 효과를 확인할 수 있어 즐거웠습니다. 여러 기법들이 효과가 없어 아쉬웠지만, 수정하여 다시 시도해보고 싶습니다.


마치며

이번 Upstage AI LAB 3기 부트캠프의 NLP 과정과 일상 대화 요약 경진대회는 저에게 큰 도전이자 성장의 기회였습니다. 팀원들과의 협업을 통해 다양한 시도를 해볼 수 있었고, 실패를 통해 배운 점도 많았습니다.

특히, 대용량 언어 모델의 가능성과 한계를 직접 경험하며 앞으로의 학습 방향을 설정하는 데 큰 도움이 되었습니다. 데이터 전처리의 중요성, 하이퍼파라미터 튜닝의 영향력, 그리고 팀원들과의 협업이 얼마나 중요한지 다시 한 번 깨달았습니다.

앞으로도 이 경험을 바탕으로 더욱 깊이 있는 연구와 개발을 이어나가고자 합니다. 긴 글 읽어주셔서 감사합니다.


참고 자료

profile
AI가 재밌는 걸

0개의 댓글