SlideShare a Scribd company logo
한국어 문서 추출요약 AI 경진대회
참가 후기
김한길
Photo by Sudan Ouyang on Unsplash
대회 개요 및 제한조건
• 대회명: 한국어 문서 추출요약 AI 경진대회
• 대회 기간: 2020.11.11 ~ 2020.12.09 18:00
• 데이터: 뉴스기사 데이터셋 + 요약문(사람 생성)
• 규정
• 평가지표: ROUGE-1(점수1), ROUGE-2(점수2), ROUGE-L(점수3)별 개별 순위 합산 역순
• 추출요약: 주어진 본문 내 문장 중 3개를 선택하여 그대로 제출
• 외부 데이터 및 사전 학습 모델
• 외부 데이터 사용 불가
• 지정된 Pre-trained 모델(ETRI-BERT, SKT-BERT, SKT-GPT)만 사용만 가능
2
Data 개요 및 EDA
3
https://colab.research.google.com/drive/1Z8MoApNT4C
JnsPN5bAiKm7XOlUic0kl9?usp=sharing
Data 개요 및 EDA
4
article_original(원문) 분포
• Sentences
• Words
Data 개요 및 EDA
5
abstractive(정답요약문) 분포
• Sentences: 대부분 1문장으로 구성되어 있음(일부 2~3문장 존재)
• Words
Data 개요 및 EDA
6
Abstractive extractive_sents no_extractive_sents
모델: BERTSUMEXT
• 논문 및 코드
• [BERTSum] Fine-tune BERT for Extractive Summarization; Code
• [PreSumm] Text Summarization with Pretrained Encoders; Code
7
모델: BERTSUMEXT
• 특징1: 기 Pre-trained BERT를 summarization task 수행을 위한 embedding layer로 활용하려면?
→ 여러 sentence를 하나의 인풋으로 넣어줘야 함
• Input document에서 매 문장의 앞에 [CLS] 토큰을 삽입
( [CLS] 토큰에 대응하는 BERT 결과값(T[CLS])을 각 문장별 representation으로 간주)
• 매 sentence마다 다른 segment embeddings 토큰을 더해주는 interval segment embeddings
8
모델: BERTSUMEXT: BERT + Transformer + sigmoid classifier
Multiple Sentences
Encoding
Pre-trained BERT
Summarization Layers
(Transformer)
Sigmoid classifier σ σ σ
“Representation for sent_i”
• 특징2: BERT 위에 inter-sentence Transformer 2-layers 및 sigmoid classifier를 얹어 fine-tuning
→ 문장별로 extract summary에 포함되는지 안되는지를 0,1 classification 문제로 품
모델: BERTSUMEXT
• 모델 선정 이유
• BERT-based pre-trained model을 그대로 활용할 수 있음
• ‘간단한 구조를 가지고 있으니 한국어 모델로 바꾸는게 쉽지 않을까?’
• Pre-trained BERT로 KoBERT(SKTBERT) 사용
• BERTSUMEXT 코드를 살펴보니 Huggingface transformers 라이브러리를 사용하여 Pre-trained
BERT 이용하고 있었음
→ ‘Transformers(monologg)를 통해 Huggingface transformers 라이브러리를 지원하는
KoBERT와 연결이 용이하지 않을까?’
• 관련 코드: https://github.com/SKTBrain/KoBERT
10
초기 시도: eng -> kor
11
데이터 형태 맞춰주기
한글 전처리 적용 + 기타 각종 버그 해결했더니
돌아는가더라!
토크나이저 변경
모델 변경
But… 15~20위권에서 왔다갔다…
12
혼자 하다 보니 문제가 무엇인지 파악이 어려움
- 전처리가 부족한가? 잘못됐나?
- 정답 sentence로 ext를 사용했어야 했나?
- BERT 연결 부분이 잘못됐나? Special token 설정을 잘못했나?
- KoBERT가 구린가? KorBERT로 바꿔볼까?
- BERTSUMEXT 모델이 구린가?
대회 마감 당일 새벽… 심각한 버그 발견 → 수정
• 어떻게 하면 gold summary(사람이 직접 생성한 Abstractive sentence)를
Oracle summary(extract sentence)로 전환할 것인가?
→ 보통 greedy selection 방식을 선택
• 이를 선택하기 전 클리닝 단계에서 한글이 모두 제외되는 문제 발견 -> 수정
• 성능을 높이고 대회규정을 충족시켜주기 위해 mix_selection 구현
• greedy 방식으로 무조건 3문장까지 추출되도록
• 추출한 3문장의 모든 조합(3!)에 대해 rouge1+rouge2+rougeL score가 가장 높은 경우를 선정
13
대회 마감 당일 새벽… 심각한 버그 발견 → 수정
Unused token 이용 문제
• BERTSUMEXT은 기 BERT 모델에서 고려되지 않은 TGT용(정답 summary sentence에 사용되는)
special token인 tgt_bos, tgt_eos, tgt_sent_split을 추가로 사용
• KoBERT는 vocab에 unused token을 포함하고 있지 않음
→ 기존 vocab중 (1) 주어진 train data set에 등장하지 않고, (2) 의미가 유사한 vocab으로 대체 후
fine-tuning하여 이용
14
마감 10분전 첫 수정 모델 제출…
15
Preprocessing
관련 주요 파일 목록
• src/make_data.py, preprocess.py : Preprocessing 실행 및 기본 데이터 변환
• Src/prepro/data_builder.py, tokenization_kobert.py : BERT 입력용 데이터 포맷 생성
16
Preprocessing: Cleaning
• Pre-trained BERT를 이용함에 따라 Cleaning은 최소한으로 적용
• html 삭제
• tgt special token으로 사용한 문자열( ¶, ----------------, ;) 제거
• 여기서 삽질을 엄청 오랜시간동안 함
17
Preprocessing: 정답(oracle) summary 문장 만들기
• 주어진 데이터셋에서 정답 문장으로 "extractive"가 아닌 "abstractive" 문장을 이용
① abstractive 문장들은 문장간 구분이 되어 있지 않게 주어졌기 때문에 kss를 수정한 함수를 적용하여
문장 토크나이징 수행
18
src/make_data.py
Preprocessing: 정답(oracle) summary 문장 만들기
② abstractive 문장에 대해
(1) greedy한 방식으로 rouge score를 높일 수 있는 문장 3개 추출,
(2) 선택한 3개 문장의 모든 조합(permutaion)에 대해서 rouge score를 최대로 하는 조합을 구함
③ BERT 입력용 데이터 생성하기( 앞 "PreSumm" 설명 참조)
19
srcpreprodata_builder.py
Fine-tuning
관련 주요 파일 목록
• src/make_data.py, preprocess.py : Preprocessing 실행 및 기본 데이터 변환
Training parameters
• batch_size: 3000
• learning rate: warmup 방식 사용
0.0000001부터 50 step당 0.0000001씩 증가하여 10000step까지 0.00002로 증가하다가 다시
감소하는 방식 사용
결과
• 총 50000 step까지 training
• validation set으로 테스트한 결과 7000 step에서 가장 좋은 성능을 보임
20
Pipeline
21
후기
배운점
• KoBERT 사용법 및 장단점 파악
• Pre-trained Model을 사용함에 있어서 Pre-training 관련 정보(전처리, 토크나이저)가 얼마나 중요한지!
• 오랜 시간 모델 트레이닝을 위한 기법들
• Distributed를 통한 GPU 활용
• Logger 중요성
• 빠른 실험 반복을 위한 파이프라인 구축
• ‘모델에 대한 이해’와 ‘구현’은 다른 문제다.
다시 한다면…
• 언론사 정보 반영
• 하이퍼파라미터 튜닝
• KorBERT(ETRI) 또는 적용해보기, do_lower_case를 False로 하고 해보기
22
실행 환경
• E5-2620 v4 @ 2.10GHz x 16
• NVIDIA Quadro RTX 5000 x 2
• Ubuntu 18.04
23
실행방법 안내
24
1. 필요 라이브러리 설치하기
python main.py -task install
2. 데이터 Preprocessing
# 2-1. 데이터를 ext/data/raw 에 넣어주기
# 2-2. Data preprocessing
# n_cpus 인자값을 이용할 CPU 수로 변경해주기
python main.py -task make_data -n_cpus 2
3. Fine-tuning
python main.py -task train -target_summary_sent abs -visible_gpus 0
4. Inference & make submissioon file
# visible_gpus 인자값을 이용할 GPU index 값으로 변경해주기
# 예(GPU 3개를 이용할 경우): -visible_gpus 0,1,2
python main.py -task test -test_from 1209_1236/model_step_7000.pt -visible_gpus 0
5. 최종 결과 파일 확인
경로: ext/data/results/submission_날짜_시간.csv
Thanks!
25

More Related Content

What's hot

파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차
Taekyung Han
 
코로나19로 인해 변화된 우리 시대의 데이터 트랜드
코로나19로 인해 변화된 우리 시대의 데이터 트랜드코로나19로 인해 변화된 우리 시대의 데이터 트랜드
코로나19로 인해 변화된 우리 시대의 데이터 트랜드
Yongho Ha
 
기계독해를 위한 BERT 언어처리 모델 활용
기계독해를 위한 BERT 언어처리 모델 활용기계독해를 위한 BERT 언어처리 모델 활용
기계독해를 위한 BERT 언어처리 모델 활용
Kenneth Jung
 
린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )
린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )
린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )
정혁 권
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
Seongyun Byeon
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
NAVER D2
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
NAVER D2
 
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
Yongho Ha
 
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
Yongho Ha
 
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천
BOAZ Bigdata
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
Jeongsang Baek
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Susang Kim
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Seongyun Byeon
 
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
CONNECT FOUNDATION
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
Heungsub Lee
 
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Stalker 팀] : 감정분석을 통한 MBTI 기반 개인별 투자 성향 분석
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Stalker 팀] : 감정분석을 통한 MBTI 기반 개인별 투자 성향 분석제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Stalker 팀] : 감정분석을 통한 MBTI 기반 개인별 투자 성향 분석
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Stalker 팀] : 감정분석을 통한 MBTI 기반 개인별 투자 성향 분석
BOAZ Bigdata
 
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
Yongho Ha
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
Chris Ohk
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템
NAVER D2
 
[226]대용량 텍스트마이닝 기술 하정우
[226]대용량 텍스트마이닝 기술 하정우[226]대용량 텍스트마이닝 기술 하정우
[226]대용량 텍스트마이닝 기술 하정우
NAVER D2
 

What's hot (20)

파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차
 
코로나19로 인해 변화된 우리 시대의 데이터 트랜드
코로나19로 인해 변화된 우리 시대의 데이터 트랜드코로나19로 인해 변화된 우리 시대의 데이터 트랜드
코로나19로 인해 변화된 우리 시대의 데이터 트랜드
 
기계독해를 위한 BERT 언어처리 모델 활용
기계독해를 위한 BERT 언어처리 모델 활용기계독해를 위한 BERT 언어처리 모델 활용
기계독해를 위한 BERT 언어처리 모델 활용
 
린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )
린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )
린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
 
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
 
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
 
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
 
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Stalker 팀] : 감정분석을 통한 MBTI 기반 개인별 투자 성향 분석
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Stalker 팀] : 감정분석을 통한 MBTI 기반 개인별 투자 성향 분석제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Stalker 팀] : 감정분석을 통한 MBTI 기반 개인별 투자 성향 분석
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Stalker 팀] : 감정분석을 통한 MBTI 기반 개인별 투자 성향 분석
 
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템
 
[226]대용량 텍스트마이닝 기술 하정우
[226]대용량 텍스트마이닝 기술 하정우[226]대용량 텍스트마이닝 기술 하정우
[226]대용량 텍스트마이닝 기술 하정우
 

Similar to 한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기

생체 광학 데이터 분석 AI 경진대회 3위 수상작
생체 광학 데이터 분석 AI 경진대회 3위 수상작생체 광학 데이터 분석 AI 경진대회 3위 수상작
생체 광학 데이터 분석 AI 경진대회 3위 수상작
DACON AI 데이콘
 
C'est la vie (hello bert!)
C'est la vie (hello bert!)C'est la vie (hello bert!)
C'est la vie (hello bert!)
Junho Lee
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
JAEGEUN YU
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
cranbe95
 
[Paper Review] What have we achieved on text summarization?
[Paper Review] What have we achieved on text summarization? [Paper Review] What have we achieved on text summarization?
[Paper Review] What have we achieved on text summarization?
Hangil Kim
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
Younghan Kim
 
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
DACON AI 데이콘
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
khuhacker
 
생체 광학 데이터 분석 AI 경진대회 7위 수상작
생체 광학 데이터 분석 AI 경진대회 7위 수상작생체 광학 데이터 분석 AI 경진대회 7위 수상작
생체 광학 데이터 분석 AI 경진대회 7위 수상작
DACON AI 데이콘
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
Sukwoo Lee
 
PyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengePyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challenge
Yoongi Kim
 
RLHF_Lessons_learned.pdf
RLHF_Lessons_learned.pdfRLHF_Lessons_learned.pdf
RLHF_Lessons_learned.pdf
ssuser1bc84b
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
Kivol
 
JSP 프로그래밍 2014-2018년 기말시험 기출문제
JSP 프로그래밍 2014-2018년 기말시험 기출문제JSP 프로그래밍 2014-2018년 기말시험 기출문제
JSP 프로그래밍 2014-2018년 기말시험 기출문제
Lee Sang-Ho
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
NeoClova
 
천체 유형 분류 대회 1위 수상자 코드 설명
천체 유형 분류 대회 1위 수상자 코드 설명천체 유형 분류 대회 1위 수상자 코드 설명
천체 유형 분류 대회 1위 수상자 코드 설명
DACON AI 데이콘
 
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Platform
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
haiteam
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
ksdc2019
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
Gyuwon Yi
 

Similar to 한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기 (20)

생체 광학 데이터 분석 AI 경진대회 3위 수상작
생체 광학 데이터 분석 AI 경진대회 3위 수상작생체 광학 데이터 분석 AI 경진대회 3위 수상작
생체 광학 데이터 분석 AI 경진대회 3위 수상작
 
C'est la vie (hello bert!)
C'est la vie (hello bert!)C'est la vie (hello bert!)
C'est la vie (hello bert!)
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
[Paper Review] What have we achieved on text summarization?
[Paper Review] What have we achieved on text summarization? [Paper Review] What have we achieved on text summarization?
[Paper Review] What have we achieved on text summarization?
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
 
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
생체 광학 데이터 분석 AI 경진대회 7위 수상작
생체 광학 데이터 분석 AI 경진대회 7위 수상작생체 광학 데이터 분석 AI 경진대회 7위 수상작
생체 광학 데이터 분석 AI 경진대회 7위 수상작
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
PyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengePyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challenge
 
RLHF_Lessons_learned.pdf
RLHF_Lessons_learned.pdfRLHF_Lessons_learned.pdf
RLHF_Lessons_learned.pdf
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
JSP 프로그래밍 2014-2018년 기말시험 기출문제
JSP 프로그래밍 2014-2018년 기말시험 기출문제JSP 프로그래밍 2014-2018년 기말시험 기출문제
JSP 프로그래밍 2014-2018년 기말시험 기출문제
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
 
천체 유형 분류 대회 1위 수상자 코드 설명
천체 유형 분류 대회 1위 수상자 코드 설명천체 유형 분류 대회 1위 수상자 코드 설명
천체 유형 분류 대회 1위 수상자 코드 설명
 
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 

More from Hangil Kim

Prepo
PrepoPrepo
Prepo
Hangil Kim
 
Transafer entrophy
Transafer entrophyTransafer entrophy
Transafer entrophy
Hangil Kim
 
Pegasus
PegasusPegasus
Pegasus
Hangil Kim
 
‘관계맺기’의 관점에서 비즈니스 바라보기
‘관계맺기’의 관점에서 비즈니스 바라보기‘관계맺기’의 관점에서 비즈니스 바라보기
‘관계맺기’의 관점에서 비즈니스 바라보기
Hangil Kim
 
2019년 상반기 K-MOOC 플랫폼 업데이트 안내
2019년 상반기 K-MOOC 플랫폼 업데이트 안내2019년 상반기 K-MOOC 플랫폼 업데이트 안내
2019년 상반기 K-MOOC 플랫폼 업데이트 안내
Hangil Kim
 
K-MOOC_모바일앱_사용자매뉴얼_v2.0
K-MOOC_모바일앱_사용자매뉴얼_v2.0K-MOOC_모바일앱_사용자매뉴얼_v2.0
K-MOOC_모바일앱_사용자매뉴얼_v2.0
Hangil Kim
 
K mooc 모바일앱 사용자매뉴얼 v1.0
K mooc 모바일앱 사용자매뉴얼 v1.0K mooc 모바일앱 사용자매뉴얼 v1.0
K mooc 모바일앱 사용자매뉴얼 v1.0
Hangil Kim
 

More from Hangil Kim (7)

Prepo
PrepoPrepo
Prepo
 
Transafer entrophy
Transafer entrophyTransafer entrophy
Transafer entrophy
 
Pegasus
PegasusPegasus
Pegasus
 
‘관계맺기’의 관점에서 비즈니스 바라보기
‘관계맺기’의 관점에서 비즈니스 바라보기‘관계맺기’의 관점에서 비즈니스 바라보기
‘관계맺기’의 관점에서 비즈니스 바라보기
 
2019년 상반기 K-MOOC 플랫폼 업데이트 안내
2019년 상반기 K-MOOC 플랫폼 업데이트 안내2019년 상반기 K-MOOC 플랫폼 업데이트 안내
2019년 상반기 K-MOOC 플랫폼 업데이트 안내
 
K-MOOC_모바일앱_사용자매뉴얼_v2.0
K-MOOC_모바일앱_사용자매뉴얼_v2.0K-MOOC_모바일앱_사용자매뉴얼_v2.0
K-MOOC_모바일앱_사용자매뉴얼_v2.0
 
K mooc 모바일앱 사용자매뉴얼 v1.0
K mooc 모바일앱 사용자매뉴얼 v1.0K mooc 모바일앱 사용자매뉴얼 v1.0
K mooc 모바일앱 사용자매뉴얼 v1.0
 

한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기

  • 1. 한국어 문서 추출요약 AI 경진대회 참가 후기 김한길 Photo by Sudan Ouyang on Unsplash
  • 2. 대회 개요 및 제한조건 • 대회명: 한국어 문서 추출요약 AI 경진대회 • 대회 기간: 2020.11.11 ~ 2020.12.09 18:00 • 데이터: 뉴스기사 데이터셋 + 요약문(사람 생성) • 규정 • 평가지표: ROUGE-1(점수1), ROUGE-2(점수2), ROUGE-L(점수3)별 개별 순위 합산 역순 • 추출요약: 주어진 본문 내 문장 중 3개를 선택하여 그대로 제출 • 외부 데이터 및 사전 학습 모델 • 외부 데이터 사용 불가 • 지정된 Pre-trained 모델(ETRI-BERT, SKT-BERT, SKT-GPT)만 사용만 가능 2
  • 3. Data 개요 및 EDA 3 https://colab.research.google.com/drive/1Z8MoApNT4C JnsPN5bAiKm7XOlUic0kl9?usp=sharing
  • 4. Data 개요 및 EDA 4 article_original(원문) 분포 • Sentences • Words
  • 5. Data 개요 및 EDA 5 abstractive(정답요약문) 분포 • Sentences: 대부분 1문장으로 구성되어 있음(일부 2~3문장 존재) • Words
  • 6. Data 개요 및 EDA 6 Abstractive extractive_sents no_extractive_sents
  • 7. 모델: BERTSUMEXT • 논문 및 코드 • [BERTSum] Fine-tune BERT for Extractive Summarization; Code • [PreSumm] Text Summarization with Pretrained Encoders; Code 7
  • 8. 모델: BERTSUMEXT • 특징1: 기 Pre-trained BERT를 summarization task 수행을 위한 embedding layer로 활용하려면? → 여러 sentence를 하나의 인풋으로 넣어줘야 함 • Input document에서 매 문장의 앞에 [CLS] 토큰을 삽입 ( [CLS] 토큰에 대응하는 BERT 결과값(T[CLS])을 각 문장별 representation으로 간주) • 매 sentence마다 다른 segment embeddings 토큰을 더해주는 interval segment embeddings 8
  • 9. 모델: BERTSUMEXT: BERT + Transformer + sigmoid classifier Multiple Sentences Encoding Pre-trained BERT Summarization Layers (Transformer) Sigmoid classifier σ σ σ “Representation for sent_i” • 특징2: BERT 위에 inter-sentence Transformer 2-layers 및 sigmoid classifier를 얹어 fine-tuning → 문장별로 extract summary에 포함되는지 안되는지를 0,1 classification 문제로 품
  • 10. 모델: BERTSUMEXT • 모델 선정 이유 • BERT-based pre-trained model을 그대로 활용할 수 있음 • ‘간단한 구조를 가지고 있으니 한국어 모델로 바꾸는게 쉽지 않을까?’ • Pre-trained BERT로 KoBERT(SKTBERT) 사용 • BERTSUMEXT 코드를 살펴보니 Huggingface transformers 라이브러리를 사용하여 Pre-trained BERT 이용하고 있었음 → ‘Transformers(monologg)를 통해 Huggingface transformers 라이브러리를 지원하는 KoBERT와 연결이 용이하지 않을까?’ • 관련 코드: https://github.com/SKTBrain/KoBERT 10
  • 11. 초기 시도: eng -> kor 11 데이터 형태 맞춰주기 한글 전처리 적용 + 기타 각종 버그 해결했더니 돌아는가더라! 토크나이저 변경 모델 변경
  • 12. But… 15~20위권에서 왔다갔다… 12 혼자 하다 보니 문제가 무엇인지 파악이 어려움 - 전처리가 부족한가? 잘못됐나? - 정답 sentence로 ext를 사용했어야 했나? - BERT 연결 부분이 잘못됐나? Special token 설정을 잘못했나? - KoBERT가 구린가? KorBERT로 바꿔볼까? - BERTSUMEXT 모델이 구린가?
  • 13. 대회 마감 당일 새벽… 심각한 버그 발견 → 수정 • 어떻게 하면 gold summary(사람이 직접 생성한 Abstractive sentence)를 Oracle summary(extract sentence)로 전환할 것인가? → 보통 greedy selection 방식을 선택 • 이를 선택하기 전 클리닝 단계에서 한글이 모두 제외되는 문제 발견 -> 수정 • 성능을 높이고 대회규정을 충족시켜주기 위해 mix_selection 구현 • greedy 방식으로 무조건 3문장까지 추출되도록 • 추출한 3문장의 모든 조합(3!)에 대해 rouge1+rouge2+rougeL score가 가장 높은 경우를 선정 13
  • 14. 대회 마감 당일 새벽… 심각한 버그 발견 → 수정 Unused token 이용 문제 • BERTSUMEXT은 기 BERT 모델에서 고려되지 않은 TGT용(정답 summary sentence에 사용되는) special token인 tgt_bos, tgt_eos, tgt_sent_split을 추가로 사용 • KoBERT는 vocab에 unused token을 포함하고 있지 않음 → 기존 vocab중 (1) 주어진 train data set에 등장하지 않고, (2) 의미가 유사한 vocab으로 대체 후 fine-tuning하여 이용 14
  • 15. 마감 10분전 첫 수정 모델 제출… 15
  • 16. Preprocessing 관련 주요 파일 목록 • src/make_data.py, preprocess.py : Preprocessing 실행 및 기본 데이터 변환 • Src/prepro/data_builder.py, tokenization_kobert.py : BERT 입력용 데이터 포맷 생성 16
  • 17. Preprocessing: Cleaning • Pre-trained BERT를 이용함에 따라 Cleaning은 최소한으로 적용 • html 삭제 • tgt special token으로 사용한 문자열( ¶, ----------------, ;) 제거 • 여기서 삽질을 엄청 오랜시간동안 함 17
  • 18. Preprocessing: 정답(oracle) summary 문장 만들기 • 주어진 데이터셋에서 정답 문장으로 "extractive"가 아닌 "abstractive" 문장을 이용 ① abstractive 문장들은 문장간 구분이 되어 있지 않게 주어졌기 때문에 kss를 수정한 함수를 적용하여 문장 토크나이징 수행 18 src/make_data.py
  • 19. Preprocessing: 정답(oracle) summary 문장 만들기 ② abstractive 문장에 대해 (1) greedy한 방식으로 rouge score를 높일 수 있는 문장 3개 추출, (2) 선택한 3개 문장의 모든 조합(permutaion)에 대해서 rouge score를 최대로 하는 조합을 구함 ③ BERT 입력용 데이터 생성하기( 앞 "PreSumm" 설명 참조) 19 srcpreprodata_builder.py
  • 20. Fine-tuning 관련 주요 파일 목록 • src/make_data.py, preprocess.py : Preprocessing 실행 및 기본 데이터 변환 Training parameters • batch_size: 3000 • learning rate: warmup 방식 사용 0.0000001부터 50 step당 0.0000001씩 증가하여 10000step까지 0.00002로 증가하다가 다시 감소하는 방식 사용 결과 • 총 50000 step까지 training • validation set으로 테스트한 결과 7000 step에서 가장 좋은 성능을 보임 20
  • 22. 후기 배운점 • KoBERT 사용법 및 장단점 파악 • Pre-trained Model을 사용함에 있어서 Pre-training 관련 정보(전처리, 토크나이저)가 얼마나 중요한지! • 오랜 시간 모델 트레이닝을 위한 기법들 • Distributed를 통한 GPU 활용 • Logger 중요성 • 빠른 실험 반복을 위한 파이프라인 구축 • ‘모델에 대한 이해’와 ‘구현’은 다른 문제다. 다시 한다면… • 언론사 정보 반영 • 하이퍼파라미터 튜닝 • KorBERT(ETRI) 또는 적용해보기, do_lower_case를 False로 하고 해보기 22
  • 23. 실행 환경 • E5-2620 v4 @ 2.10GHz x 16 • NVIDIA Quadro RTX 5000 x 2 • Ubuntu 18.04 23
  • 24. 실행방법 안내 24 1. 필요 라이브러리 설치하기 python main.py -task install 2. 데이터 Preprocessing # 2-1. 데이터를 ext/data/raw 에 넣어주기 # 2-2. Data preprocessing # n_cpus 인자값을 이용할 CPU 수로 변경해주기 python main.py -task make_data -n_cpus 2 3. Fine-tuning python main.py -task train -target_summary_sent abs -visible_gpus 0 4. Inference & make submissioon file # visible_gpus 인자값을 이용할 GPU index 값으로 변경해주기 # 예(GPU 3개를 이용할 경우): -visible_gpus 0,1,2 python main.py -task test -test_from 1209_1236/model_step_7000.pt -visible_gpus 0 5. 최종 결과 파일 확인 경로: ext/data/results/submission_날짜_시간.csv