SlideShare a Scribd company logo
1 of 19
C’est La Vie
이준호, 조복래, 황명규, 지승훈
한국 인공지능 연구소
Hello Bert!
2018년 10월 30일 구글에서 발표
발표 직후 squad(Stanford Question Answering Dataset)에서 상
위 랭크의 주로 사용되는 모델
Google researchers에 따르면 11개의 Task에 적용 가능한 모델
Goal : Bert의 근간을 이루는 Transformer 에 대한 이해 +
Bert fine-tuning / + 기사 데이터에 적용
Project
Plan
• 3월 9일(1차) : 지난 기수 활동 정리, 내용 공유
• 3월 19일(2차) : Bert model 탐색, Microsoft Research Paraphrase Corpus (MRPC) 가지고
Fine-Tuning 시도
• 3월 23일(3차) : bert model의 run_classifier 구조 분석, Input Embedding 분석
• 4월 2일(4차) : Task에 따른 model output 분석
• 4월 6일(5차) : 중간 발표, bert output에서 start, stop position에 대한 공부
• 4월 20일, 30일(6, 7차) : KorQuAD를 이용해 Fine-Tuning 시도
• 5월 7일(7차) : KorQuAD를 이용해 Fine-Tuning 결과 확인 및 I/O 변경
• 5월 25일 : 최종 데모데이
Environment
Environment
Google Colab 을 통해서 진행
Tesla K80 (12GB)
Tesla T4 (16GB)
할당 받으면 12시간 동안 활성화
Environment Issue
Fine turning 실행 결과
실제로 드라이브에 반영이 안되어 있음
학습이 끝나고 드라이브에 Ckpt 파일이 다운이 완료되기 전까지
Colab의 런타임을 유지하기 위해 다른 코드 주기적으로 실행
Bert
Fine Tuning
KorQuAD Dataset (Training set 60,407개, 약 37MB)
KorQuAD dev evaluate
AIHub squad Dataset (Training set ?개, 약 88MB)
KorQuAD + AIHUB Dataset dev evaluate
Q/A Example
Context
• 기존의 BERT를 이용한
KOQUAD모델은 .json파일형
태로 입력받은 후
PREDICTION 결과를 .json파
일형태로 출력하는 형태였음
KORQUAD BERT MODEL
TRAINING FILE
(JSON)
DEV FILE
(JSON)
PREDICTION
FILE
(JSON)
DO_TRAIN=TRUE DO_PREDICT=TRUE
• 하지만 챗봇의 형태를 띠기
위해서는 텍스트를 입력 받
고 텍스트를 콘솔에 출력하
는 것이 자연스럽다고 판단
Model I/O Change
KOQUAD BERT MODEL
TRAINING FILE DEV FILE
PREDICTION
FILE
DO_TRAIN=FALSE
• 우선 학습된 모델을 이용해
질문에 대한 답을
PREDICTION만 하면 되었
기 때문에 DO_TRAIN
=FALSE로 지정
DO_PREDICT=TRUE
Model I/O Change
변환 방법(데이터 입력처리)
• 플래그형식으로 입력받은
질문과 문맥을 모델에 전달
• 입력받는 함수에서
koquard에 부합하는 json
형식으로 변환 후
PREDICTION 과정 진행
• DEV FILE은 전달만 될 뿐
사용되지 않음
문맥
입력
KOQUAD BERT MODEL
DEV FILE
(미사용)
FLAG:
context
FLAG:
question
질문
입력
모델 내에서
JSON형태 변환
Model I/O Change
변환 방법(데이터 출력처리)
KOQUAD BERT MODEL
PREDICTION
FILE
• 파일에 쓰여질 내용들을 추출
하여 기존의 PREDICTION
FILE에 담지 않고 콘솔에 출
력만 함.
• 이때 내부정합성을 위해서 각
함수의 인자들은 그대로 유지
한 뒤 함수 내부 코드만 변경
이는 입력파트도 마찬가지로
적용됨
• 입력함수 :
read_squad_examples
• 출력함수 : write_predictions
콘솔 출력
답
Model I/O Change
UNK Tokens Issue
[UNK] 토큰으로 처리 되는 현상
이 부분이 문제인 것 같은데
NFD로 normalize 할 경우 ㅍㅏㅇㅣㅆㅓㄴ (원문 파이썬)
식으로 저장
Vocab은 자모음이 아닌 음절단위로 구성
한글에 대해서 NFD normalize 가 되지 않도록
Tokenization.py 수정
참고 : https://github.com/google-
research/bert/pull/228
UNK Tokens
Out of Memory Issue
Out of Memory Issue
Google Blog에 올라와있는 single Titan X (12GB RAM) TF 1.11
Maximum batch size (Benchmarked)
Google colab 을 이용 주로 12GB
(GPU RAM Free: 11441MB | Used: 0MB | Util 0% | Total
11441MB) 할당
이유는 모르겠지만 12GB에서 종종 Memory Issue로 실행이
종료
ResourceExhaustedError
Batch size 변경  Seq Length 320 / Max Batch Size 8
(5~6시간 소요)
Out of Memory Issue
메모리 문제의 해결책으로 생각되었던 논문
- Reducing BERT Pre-Training Time from 3 Days to 76 Minutes
(https://arxiv.org/abs/1904.00962 2019.04.01 Google)
- large batch size 에 적합한 optimizer 를 제안
- 기존(AdamW) 보다 large batch size에서 정확성이 높음
- LAMB optimizer
- batch size를 증가시켜서 학습
- 64배 많은 TPU 사용 (3일  76분)
- 메모리 할당량을 줄이는 방식으로는 적합하지 않음
• 질문과 문맥을 입력할때마다 모델을 쌓고 파라미터를 로드하는 과정을 거쳐야만 답이
나옴
• 현재의 경우 질문뿐만 아니라 질문의 답을 찾을 수 있는 문맥도 함께 제공하여야 함.
 TF-IDF 를 이용해서 특정 Knowledge base에서 서칭
• 질문만 던져주면 문맥은 자동적으로 모델에 제공할 수 있는 방법이 필요
 Bert single sentence classification 사용
• Tensor Flag 가 한번 설정되면 다시 설정되면 DuplicateFlagError 가 발생
Model I/O Issue

More Related Content

What's hot

PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보Young Hoo Kim
 
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)Cherucy
 

What's hot (6)

파이썬을 활용한 자연어 분석 - 추가분
파이썬을 활용한 자연어 분석 - 추가분파이썬을 활용한 자연어 분석 - 추가분
파이썬을 활용한 자연어 분석 - 추가분
 
Prepo
PrepoPrepo
Prepo
 
14 2 iterator
14 2 iterator14 2 iterator
14 2 iterator
 
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
 
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
 
서울 R&D 캠퍼스 자연어 수업자료
서울 R&D 캠퍼스 자연어 수업자료서울 R&D 캠퍼스 자연어 수업자료
서울 R&D 캠퍼스 자연어 수업자료
 

Similar to C'est la vie (hello bert!)

[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기PgDay.Seoul
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들Lee Geonhee
 
Improving Language Understanding by Generative Pre-Training
Improving Language Understanding by Generative Pre-TrainingImproving Language Understanding by Generative Pre-Training
Improving Language Understanding by Generative Pre-Trainingpko89403
 
검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPTTae Young Lee
 
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?JaewonLee153
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작DACON AI 데이콘
 
GPT-Series.pdf
GPT-Series.pdfGPT-Series.pdf
GPT-Series.pdfKyuri Kim
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)SangIn Choung
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
Petra보고서 개발 open자료
Petra보고서 개발 open자료Petra보고서 개발 open자료
Petra보고서 개발 open자료cho hyun jong
 
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기Haechan Lee
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 

Similar to C'est la vie (hello bert!) (20)

[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud
 
메이크챗봇 자연어기초
메이크챗봇 자연어기초메이크챗봇 자연어기초
메이크챗봇 자연어기초
 
Improving Language Understanding by Generative Pre-Training
Improving Language Understanding by Generative Pre-TrainingImproving Language Understanding by Generative Pre-Training
Improving Language Understanding by Generative Pre-Training
 
검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT
 
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
파이썬을 활용한 자연어 분석 - 2차
파이썬을 활용한 자연어 분석 - 2차파이썬을 활용한 자연어 분석 - 2차
파이썬을 활용한 자연어 분석 - 2차
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
 
Albert
AlbertAlbert
Albert
 
GPT-Series.pdf
GPT-Series.pdfGPT-Series.pdf
GPT-Series.pdf
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
Petra보고서 개발 open자료
Petra보고서 개발 open자료Petra보고서 개발 open자료
Petra보고서 개발 open자료
 
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기
[NDC 2018] 테라 콘솔 포팅기 - UE3 게임 현세대 콘솔로 이식하기
 
GPT-X
GPT-XGPT-X
GPT-X
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 

C'est la vie (hello bert!)

  • 1. C’est La Vie 이준호, 조복래, 황명규, 지승훈 한국 인공지능 연구소
  • 2. Hello Bert! 2018년 10월 30일 구글에서 발표 발표 직후 squad(Stanford Question Answering Dataset)에서 상 위 랭크의 주로 사용되는 모델 Google researchers에 따르면 11개의 Task에 적용 가능한 모델 Goal : Bert의 근간을 이루는 Transformer 에 대한 이해 + Bert fine-tuning / + 기사 데이터에 적용 Project
  • 3. Plan • 3월 9일(1차) : 지난 기수 활동 정리, 내용 공유 • 3월 19일(2차) : Bert model 탐색, Microsoft Research Paraphrase Corpus (MRPC) 가지고 Fine-Tuning 시도 • 3월 23일(3차) : bert model의 run_classifier 구조 분석, Input Embedding 분석 • 4월 2일(4차) : Task에 따른 model output 분석 • 4월 6일(5차) : 중간 발표, bert output에서 start, stop position에 대한 공부 • 4월 20일, 30일(6, 7차) : KorQuAD를 이용해 Fine-Tuning 시도 • 5월 7일(7차) : KorQuAD를 이용해 Fine-Tuning 결과 확인 및 I/O 변경 • 5월 25일 : 최종 데모데이
  • 5. Environment Google Colab 을 통해서 진행 Tesla K80 (12GB) Tesla T4 (16GB) 할당 받으면 12시간 동안 활성화
  • 6. Environment Issue Fine turning 실행 결과 실제로 드라이브에 반영이 안되어 있음 학습이 끝나고 드라이브에 Ckpt 파일이 다운이 완료되기 전까지 Colab의 런타임을 유지하기 위해 다른 코드 주기적으로 실행
  • 8. Fine Tuning KorQuAD Dataset (Training set 60,407개, 약 37MB) KorQuAD dev evaluate AIHub squad Dataset (Training set ?개, 약 88MB) KorQuAD + AIHUB Dataset dev evaluate
  • 10. • 기존의 BERT를 이용한 KOQUAD모델은 .json파일형 태로 입력받은 후 PREDICTION 결과를 .json파 일형태로 출력하는 형태였음 KORQUAD BERT MODEL TRAINING FILE (JSON) DEV FILE (JSON) PREDICTION FILE (JSON) DO_TRAIN=TRUE DO_PREDICT=TRUE • 하지만 챗봇의 형태를 띠기 위해서는 텍스트를 입력 받 고 텍스트를 콘솔에 출력하 는 것이 자연스럽다고 판단 Model I/O Change
  • 11. KOQUAD BERT MODEL TRAINING FILE DEV FILE PREDICTION FILE DO_TRAIN=FALSE • 우선 학습된 모델을 이용해 질문에 대한 답을 PREDICTION만 하면 되었 기 때문에 DO_TRAIN =FALSE로 지정 DO_PREDICT=TRUE Model I/O Change
  • 12. 변환 방법(데이터 입력처리) • 플래그형식으로 입력받은 질문과 문맥을 모델에 전달 • 입력받는 함수에서 koquard에 부합하는 json 형식으로 변환 후 PREDICTION 과정 진행 • DEV FILE은 전달만 될 뿐 사용되지 않음 문맥 입력 KOQUAD BERT MODEL DEV FILE (미사용) FLAG: context FLAG: question 질문 입력 모델 내에서 JSON형태 변환 Model I/O Change
  • 13. 변환 방법(데이터 출력처리) KOQUAD BERT MODEL PREDICTION FILE • 파일에 쓰여질 내용들을 추출 하여 기존의 PREDICTION FILE에 담지 않고 콘솔에 출 력만 함. • 이때 내부정합성을 위해서 각 함수의 인자들은 그대로 유지 한 뒤 함수 내부 코드만 변경 이는 입력파트도 마찬가지로 적용됨 • 입력함수 : read_squad_examples • 출력함수 : write_predictions 콘솔 출력 답 Model I/O Change
  • 14. UNK Tokens Issue [UNK] 토큰으로 처리 되는 현상 이 부분이 문제인 것 같은데 NFD로 normalize 할 경우 ㅍㅏㅇㅣㅆㅓㄴ (원문 파이썬) 식으로 저장 Vocab은 자모음이 아닌 음절단위로 구성
  • 15. 한글에 대해서 NFD normalize 가 되지 않도록 Tokenization.py 수정 참고 : https://github.com/google- research/bert/pull/228 UNK Tokens
  • 16. Out of Memory Issue
  • 17. Out of Memory Issue Google Blog에 올라와있는 single Titan X (12GB RAM) TF 1.11 Maximum batch size (Benchmarked) Google colab 을 이용 주로 12GB (GPU RAM Free: 11441MB | Used: 0MB | Util 0% | Total 11441MB) 할당 이유는 모르겠지만 12GB에서 종종 Memory Issue로 실행이 종료 ResourceExhaustedError Batch size 변경  Seq Length 320 / Max Batch Size 8 (5~6시간 소요)
  • 18. Out of Memory Issue 메모리 문제의 해결책으로 생각되었던 논문 - Reducing BERT Pre-Training Time from 3 Days to 76 Minutes (https://arxiv.org/abs/1904.00962 2019.04.01 Google) - large batch size 에 적합한 optimizer 를 제안 - 기존(AdamW) 보다 large batch size에서 정확성이 높음 - LAMB optimizer - batch size를 증가시켜서 학습 - 64배 많은 TPU 사용 (3일  76분) - 메모리 할당량을 줄이는 방식으로는 적합하지 않음
  • 19. • 질문과 문맥을 입력할때마다 모델을 쌓고 파라미터를 로드하는 과정을 거쳐야만 답이 나옴 • 현재의 경우 질문뿐만 아니라 질문의 답을 찾을 수 있는 문맥도 함께 제공하여야 함.  TF-IDF 를 이용해서 특정 Knowledge base에서 서칭 • 질문만 던져주면 문맥은 자동적으로 모델에 제공할 수 있는 방법이 필요  Bert single sentence classification 사용 • Tensor Flag 가 한번 설정되면 다시 설정되면 DuplicateFlagError 가 발생 Model I/O Issue