강승현 | 김형수 | 이소영A | 김창희 | 진성준 | 김하연 |
팀장 | 팀원 | 팀원 | 팀원 | 팀원 | 팀원 |
- (컴퓨팅 환경) 인당 RTX 3090 서버를 VSCode와 SSH로 연결하여 사용
- (협업 환경) Github, Wandb
- (의사 소통) Slack, Zoom
- 이번 대회는 Dialogue Summurization 대회로 일상 대화로 이루어진 대화문의 요약을 생성하는 대회입니다.
- March 08, 2024 - Start Date
- March 20, 2024 - Final submission deadline
├── README.md
├── changhee
│ ├── DS-T5.ipynb
│ └── cleaning_data.ipynb
├── hayeon
│ ├── kobart_gogamza_keyword.ipynb
│ ├── kot5_keyword.ipynb
│ └── test.csv
├── hyperparameter-tuning
│ ├── hp_tuning_ver_2
│ ├── hp_tuning_ver_3.ipynb
│ └── optuna_hsk.ipynb
├── seongjun
│ └── t501_lora_inference.ipynb
├── seunghyun
│ └── kobert.ipynb
└── soyoung
└── baseline_kot5.ipynb
- 이번 대회에 사용된 데이터는 모두 대화문 데이터이며 train data, validation data, test data는 각각 12,457개, 499개, 499개 입니다. 각각의 대화문은 최소 2명에서 최대 7명의 화자가 등장하며, 최소 2턴에서 최대 60턴까지 대화가 이어집니다. 대화문에서 발화자는 #Person"N"#으로 구분되어있습니다.
- 대화문에 존재하는 개인정보(예: 전화번호, 주소 등)는 다음과 같이 마스킹되어 있습니다.
- 예) 전화번호 -> #PhoneNumber#
-
Train data, validation data, test data 에 존재하는 #..# 형식의 단어:
['#Address#', '#CarNumber#', '#CardNumber#', '#DateOfBirth#', '#Email#', '#PassportNumber#', '#Person#', '#Person1#', '#Person2#', '#Person3#', '#Person4#', '#Person5#', '#Person6#', '#Person7#', '#PhoneNumber#', '#SSN#']
-
Train data, validation data, test data를
kobart-summarization
으로 tokenized 했을 때 각 대화문과 요약문의 길이 정보Train Data Validation Data Test Data 대화문 mean: 158.597014
min: 32
25%: 105
50%: 141
75%: 197
max: 950mean: 156.687375
min: 46
25%: 104
50%: 139
75%: 194
max: 620mean: 163.146293
min: 38
25%: 103
50%: 149
75%: 204
max: 1041요약문 mean: 30.980734
min: 7
25%: 21
50%: 29
75%: 38
max: 165mean: 28.795591
min: 9
25%: 19
50%: 26
75%: 35
max: 89
-
오타 수정
-
'...#Person2#: 먼저, 이것은 19세기 초 배경ㅇ로 설정된 로맨스 소설이에요...' -> ‘으로’
-
'...#Person1#: 편집장이 제ㅏ 다른 잡지에서 편집자로 일했던 경험이 있다는 걸 듣고, 그가 도우미 편집자가 되고 싶냐고 물어봤어요....' -> ‘제가’
-
'...#Person1#: 이제 그만. 너는 아직ㅍ알맞는 사람을 만나지 못했을 뿐이고, 너는 너무 많이 일하는 것 같아. 너는 어떻게 즐기고 삶을 즐기는 법을 배워야 해....' -> ‘ 알맞는’
-
'...#Person1#: 아무것도 안 했어. 그는 결국 나갔어. 그런데 오늘 또 그를 봤어. 신발 가게 밖에서. 카페 근처에서. 나는 CD 가게에 들어가서 CD를 보는 척했ㄷ거든. 그런데 그도 들어왔어....' -> ‘ 거든'**
-
-
연속된 자음 대체
- '...#Person1#: 속았어! ㅋㅋ.. 완전 속았어....' -> ‘웃기다’
-
마스킹 정보 추출 -> 토큰화 시 Special Token으로 추가
강승현
-
사용한 모델
-
bart 기반 한국어 사전학습 모델
-
digit82/kobart-summarization
-
EbanLee/kobart-summary-v2
-
gangyeolkim/kobart-korean-summarizer-v2
-
ainize/kobart-news
-
-
gpt2 기반 한국어 사전학습 모델
digit82/kogpt2-summarization
-
-
실험 결과
-
digit82/kobart-summarization
-
baseline 모델: eval_loss => 0.5629, 리더보드 점수 => 41.4015
-
Special Token 추가: eval_loss => 0.5623, 리더보드 점수 => 41.5824 (점수 상승)
-
텍스트 정제(스탑워드 리스트에 포함된 단어 제거): eval_loss => 0.5619, 리더보드 점수 => 41.7505 (점수 상승)
-
-
EbanLee/kobart-summary-v2
- eval/loss => 0.6062
-
gogamza/kobart-summarization
- eval_loss => 0.5790, 리더보드 점수 => 40.2952 (점수 하락)
-
ainize/kobart-news
- val_loss => 0.6404, 리더보드 점수 => 39.3084 (점수 하락)
-
digit82/kogpt2-summarization
- 리더보드 점수 => 27.5233 (점수 하락)
-
김창희
-
Hugging face의 모델
psyche/KoT5-summarization
,lcw99/t5-large-korean-text-summary
,eenzeenee/t5-base-korean-summarization
을 사용하여 테스트 -
psyche/KoT5-summarization
을 사용했을 때 Train loss는 0, Validation Loss가 고정되는 문제가 있어 transformer의 trainer를 사용하지 않고 직접 training function을 구현하여 학습을 하였지만 baseline의digit82/kobart-summarization
보다 성능이 좋지 못함 -
lcw99/t5-large-korean-text-summary
,eenzeenee/t5-base-korean-summarization
를 사용하였을 때 Validation Loss가 가장 낮게 나오는lcw99/t5-large-korean-text-summary
모델을 선택
김하연
-
유총재(2023). Improvement of Dialogue Summarization Using Keyword Extractor 참고, 키워드 기반 생성 요약 진행
-
pretrained model : gogamza/kobart-summarization
-
Dialogue, Topic을 학습시킨 모델로 Test Topic 생성, Dialogue, Topic, Summary를 학습시킨 모델로 Test Summary 생성
- 최종 결과:
final_result
=> 41.8308,rouge1
=> 0.5135,rouge2
=> 0.3181,rougeL
=> 0.4233
- 최종 결과:
김형수
-
EDA 과정에서 데이터셋의 대화문과 요약문 최대 길이가 베이스라인 코드의
encoder_max_len
와decoder_max_len
보다 긴 것을 확인하고,encoder_max_len
,decoder_max_len
,generation_max_length
값을 조절해가며 학습.- 최초
final_result
41.6394에서 42.0135로 점수 소폭 상승
- 최초
-
추가로 더 많은
Seq2SeqTrainer
의 하이퍼파라미터를 조절하여 튜닝하기 위하여optuna
라이브러리를 임포트하여 하이퍼파라미터 튜닝 -
Trainer
클래스의hyperparameter_search
메서드를 사용하여 하이퍼파라미터learning_rate
,per_device_train_batch_size
,per_device_eval_batch_size
,weight_decay
,lr_scheduler_type
,optim
를 튜닝.- 최종 결과:
final_result
=> 42.1127
- 최종 결과:
이소영
- 사용한 모델
- bart 기반의 한국어 사전학습 모델
digit82/kobart-summarization
- t5 기반의 한국어 사전학습 모델
paust/pko-t5-base
lcw99/t5-base-korean-text-summary
noahkim/KoT5_news_summarization
paust/pko-t5-large
lcw99/t5-large-korean-text-summary
- bart 기반의 한국어 사전학습 모델
- Modeling Process
- 가설1: eda 결과를 학습 및 평가 데이터의 토큰 개수를 고려하여 encoder_max_len, decoder_max_len, generation_max_length를 증가시키면 성능이 향상될 것
- Model: digit82/kobart-summarization
encoder_max_len: 1000
decoder_max_len: 200
per_device_train_batch_size: 16
-> 점수 향상, LB: 42.1735 - Model: digit82/kobart-summarization
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 16
-> 점수 향상, LB: 42.4697
- Model: digit82/kobart-summarization
- 가설2: learning rate를 줄이면 파라미터가 더 안정적으로 수렴하여 스코어가 향상될 것
- Model: digit82/kobart-summarization
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 16
learning_rate: 5-e6
-> 점수 하락, LB: 41.1145
- Model: digit82/kobart-summarization
- 가설3: weight decay를 늘리면 오버피팅을 방지하여 모델의 일반화 성능이 향상될 것
- Model: digit82/kobart-summarization
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 16
weight_decay: 0.02
-> 점수 하락, LB: 41.5500
- Model: digit82/kobart-summarization
- 가설4: Text-to-Text 방식으로 입력과 출력 사이의 상관 관계를 명시적으로 모델링하는 T5 기반 모델이 대화문 요약 task에서 더 높은 성능을 보일 것
- Model: paust/pko-t5-base
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 6
-> 점수 상승, LB: 42.8954 - Model: lcw99/t5-base-korean-text-summary
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 6
-> 점수 상승, LB: 42.9973 - Model: noahkim/KoT5_news_summarization
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 6
-> 점수 상승, LB: 43.2997
- Model: paust/pko-t5-base
- 가설5: batch size를 늘리거나 gradient accumulation steps를 늘려 메모리 효율적인 방식으로 더 큰 배치 크기로 학습할 수 있도록 하면 수렴 속도가 향상될 것
- Model: noahkim/KoT5_news_summarization
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 7
-> 점수 하락, LB: 42.5872 - Model: noahkim/KoT5_news_summarization
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 7
gradient_accumulation_steps: 4
-> 점수 하락, LB: 42.4952
- Model: noahkim/KoT5_news_summarization
- 가설6: 더 강력한 t5 모델인 t5-large 기반 사전 학습 모델을 사용하면 성능이 향상될 것
- Model: lcw99/t5-large-korean-text-summary
encoder_max_len: 1000
decoder_max_len: 200
generation_max_length: 200
per_device_train_batch_size: 1
-> 점수 상승, LB: 43.7724
- Model: lcw99/t5-large-korean-text-summary
- 가설1: eda 결과를 학습 및 평가 데이터의 토큰 개수를 고려하여 encoder_max_len, decoder_max_len, generation_max_length를 증가시키면 성능이 향상될 것
진성준
-
이소영님 께서 공유해주신 모델 학습 후 lora 추가 학습 사용 모델
-
noahkim/KoT5_news_summarization
"generation_max_length"
: 200,"encoder_max_len"
: 1000,"decoder_max_len"
: 2000,
-
LoRA
from peft import LoraConfig, TaskType, get_peft_model, PeftModellora_config = LoraConfig( r=32, target_modules=["q","v"], bias="none", task_type=TaskType.SEQ_2_SEQ_LM ) lora_model = get_peft_model(generate_model, lora_config)
-
-
최종 결과:
final_result
=> 42.8141,rouge2
=> 0.3260,rougeL
=> 0.4325