- TL-DR은 BERT를 이용한 한국어 문서 요약을 제공해줍니다. 기존의 BertSum 모델을 다양한 한국어 BERT (SKT의 KoBERT, ESTI의 한국어 BERT 등)에 적용할 수 있도록 변형한 모델입니다.
- 실제 문서에서 주제 및 중요한 내용은 문장 단위 보다는 구절처럼 보다 작은 형태로 나타나는 점에 착안하여 형태소 단위로 쪼개 모델의 학습을 진행해봤습니다.
- 형태소 단위로 데이터를 받는 KorBert, 그리고 문장 단위로 데이터를 받는 KoBert를 BERT 모델로 이용했고, 각각의 코드는 raqoon886님의 Velog 글과 uoneway님의 KoBertSum 를 참고해서 작성했습니다.
- 모델 학습 및 평가에 사용한 데이터는 AiHub에 공개된 문서요약 텍스트로, 각 모델의 ROGUE Score은 다음과 같이 나옵니다.
Model | ROUGE-1 | ROGUE-2 | ROGUE-L |
---|---|---|---|
Vanilia BERT+Transformer | 24.12 | 9.03 | 23.07 |
KoBert+Classifier | 24.97 | 9.78 | 23.91 |
KoBert+Transformer | 22.66 | 8.79 | 21.68 |
bert-kor-base+Transformer | 25.15 | 9.82 | 24.04 |
KorBert+Classifier | 34.40 | 13.82 | 33.27 |
- AIHub에서 원본 데이터를 다운받았다면, jsonl 파일을 불러와 csv 파일로 바꿔주는 과정이 필요합니다. 완성된 csv 파일은 다음과 같은 형태로 저장되어 있어야 합니다.
media | id | article_original | abstractive | extractive |
---|---|---|---|---|
법률 | 0 | ['원고가 소속회사의...', '노조조합장이...'] | 원고가 주동하여 회사업무... | [5,4,2] |
신문기사 | 1 | ['이시형 터키 리라화 가치...', '자동차강판...'] | 2009년 설립된 유럽... | [1,2,4] |
- 처리가 완료된 csv 파일을 이용해
/src/preprocess.ipynb
를 이용해 json 파일로 저장해주면 됩니다. 이때 카카오의 khaiii 형태소 분석기의 설치가 필요합니다. - 완성된 json 파일에 대해 BERT의 input token으로 임베딩을 진행해주기 위해 다음과 같은 코드를 실행해줍니다.
python preprocess.py -mode format_to_bert -raw_path ../json_data -save_path ../bert_data
- 모델 훈련을 시작하기 전에, ETRI 사이트에서 KorBERT 사용 허가를 받아야 합니다. 허가를 받았다면, 첫번째 모델을 다운받아 /content/ETRIBert 폴더에 압축을 풀어주면 됩니다.
- Train / Validation / Test 모두 /src/train.py를 이용해 실행되게 됩니다.
- 아래 코드는 Classifier을 이용해 학습시키는 코드 예시입니다. 자세한 파라미터 세팅은 documentation.pdf에 적혀있습니다.
python train.py -mode train -encoder classifier -dropout 0.1 -bert_data_path ../bert_data/korean -model_path ../models/ -lr 2e-3 -visible_gpus 0 -gpu_ranks 0 -world_size 1 -report_every 50 -save_checkpoint_steps 1000 -batch_size 2000 -decay_method noam -train_steps 30000 -accum_count 1 -log_file ../logs/training_log.txt -use_interval true -warmup_steps 6000 -bert_model ../content/ETRIBert -bert_config_path ../content/ETRIBert/bert_config.json -temp_dir ./temp
- 실제 모델 학습 및 테스트의 과정은 /src/train.ipynb에 작성되어 있습니다. 테스트를 진행하기 위해서는 /models/model_builder.py 파일에서
# for test only
로 주석처리된 부분을 해제하고 실행해야만 합니다.