+ All Categories
Home > Documents > 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 •...

한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 •...

Date post: 23-Jul-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
68
한국어 BERT, HanBert의 개발 과정과 KorQuAD 2.0 2020. 1. 조 영환
Transcript
Page 1: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

한국어 BERT, HanBert의 개발 과정과

KorQuAD 2.0

2020. 1.

조 영환

Page 2: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

1

회사소개

• (주) 투블럭 Ai

• 설립일 : 2019년 7월 (자본금 1억원, 창업진출자)

• 인공지능연구원 (AIRI) 스핀오프

• 사무실 : 경기도 성남시 분당구 수내동 분당트라팰리스

• 사업화자금확보상황

• 개방형 Ai 경진대회 우수기업 사업화 지원 사업 자금 (2019.10)

• 신용보증기금 4.0 스타트업 보증 자금 (2019. 11)

• 사업분야 : Deep NLP와대화형 Ai

• 자연언어처리와 딥러닝 기술 핵심 기술 연구 개발

• 전문가 역할을 하는 정보제공 챗봇

• Social Discovery Service를 위한 인공지능 챗봇

말을알아듣는 Ai

Page 3: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

2

Way to Conversational Ai

전문가역할의 Ai

- 전문 지식을 갖춘 챗봇

- 사용자의 상황을 아는 챗봇

300G 원문 100G 정제

- 소설, 신문기사, 블로그

- 백과사전, Wiki 문서

- 기업 공시 정보, 특허 문서

Pre-Trained NLP Model

- 한국어 BERT : 분야/크기/넓이

- 한국어 GPT-2 : 특허/소설/이야기

- 특허 문서에 도메인 튜닝

Classical NLP Stacks

- 형태소 분석기, Ngram

- 명칭어 사전, Phrase 통계

- 감성 분류와 사전

Deep NLP Package*

- Task Fine tuning

- 기계 독해 : KorQuAD

- 요약, 감성 분석 등

사용자프로파일 Ai Hub

- 이미 나를 알고 대화하는 챗봇

- 나에게 특화된 추천

- 다른 Ai와 인터페이스

중개형 Ai 챗봇 서비스

- MatchMaker 수준의 역할 가능

- 문화적 트랜드와 부합

- 사용자, 대화 데이터 선순환

* 2019-2020 진행중

Page 4: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

3

NLP after BERT

• 평균적 사람보다 언어이해, 언어생성 능력이 뛰어남

Page 5: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

4

기계독해 : KorQuAD

• 기계 독해 : Bert 모델이 상위권 점유

Large Models

Normal Models

2020. 1. 2 현재

Page 6: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

5

감성분석 : nsmc

• 감성 분석 : Bert 모델이 일반 모델보다우수함

id 평가글 label

9976970 아 더빙.. 진짜 짜증나네요 목소리 부정

3819312 흠...포스터보고 초딩영화줄....오버연기조차 가볍지 않구나 긍정

10265843 너무재밓었다그래서보는것을추천한다 긍정

9045019 교도소 이야기구먼 ..솔직히 재미는 없다..평점 조정 부정

5403919 막 걸음마 뗀 3세부터 초등학교 1학년생인 8살용영화.ㅋㅋㅋ...별반개도 아까움. 부정

7797314 원작의 긴장감을 제대로 살려내지못했다. 부정

기존언어분석 (Classical NLP) 기술의수준 : 80점이하

LSTM, CNN 등의딥러닝기술의수준 : 80점 ~ 85점

글 읽는 Ai, BERT로 학습 : 90점수준

- 구글의오픈소스 BERT : 87점

- 정형문서로학습한 BERT : 88점

- 다양한문서로학습한 BERT : 90점

Page 7: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

6

원리 : 글 읽는 Ai (BERT)와 글 쓰는 Ai (GPT-2)

• 대규모 파라메터에 효과적으로 학습하는 방법

• 학습의 대상 : 단어의 의미, 문장에서의 의미적/구문적 역할

• 학습의 과정 : 대규모 (20G 이상) 텍스트를 재현

• 학습의 장치 : self attention, multi-head, deep layers

BERT : 양쪽방향을찾아봐서지금위치에이단어가나오게하려면, 어떤값을가져야하는지를학습

GPT : 왼쪽에서오른쪽으로글을쓰면서, 다음에나올단어를사전에서선택하도록학습

Page 8: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

7

NLP Pre-trained Model 학습가격

• 모델별 학습 비용 :

• BERT Large : 850만원

• GPT-2 : 5,100만원

• XLNet : 7,300만원

Naver DEVIEW 2019 발표 자료 중

Page 9: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

8

BERT의 학습과정

• 코퍼스 준비 모델 학습 Task 적용

원시코퍼스(800G, pdf, XML, txt..)

정제된코퍼스(110G, 문장들이모인텍스트)

딥러닝학습용코퍼스(1000GB, TF데이터 + Vocab)

한국어 분석기 한국어 Vocab

구글 Cloud로 이동

구글 TPU로 학습(모델당 최대 30일)

(종류별, 크기별 모델 생성)

(요약, 기계독해, 감성분석 등의Task 추가 학습)

Deep NLP 모델

Page 10: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

9

BERT의 학습과정 : 코퍼스준비 - 1

• 코퍼스 수집

• 총 6.7억 라인, 110억 토큰, 110G 바이트, 수집에 1개월, 정재에 2개월 소요

• PDF를 text로 변환, 완성형 (KSC 5601) 코드 변환, 문장 부분만 추출, 라인이 짤린 문장 이어 붙치기 등

• 문장 선택 / 문장 이어붙치기를 위해서, ngram 빈도, 형태소 분석기를 활용

Page 11: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

10

BERT의 학습과정 : 코퍼스준비 - 2

• 학습용 코퍼스 준비 : 형태소 분석

• 형태소 분석을 수행해서 형태소 토큰 단위로 변환

• "한국어 코퍼스를 형태소단위로 딥러닝에 사용하면 성능이 더 좋습니다."

• "한국 ~어 코퍼스 ~~를 형태소 ~단위 ~~로 딥러닝 ~~에 사용 ~~하면 성능 ~~이 더 좋 ~~습니다 ."

• 조사와 어미 등의 형태소에는 ~~ 기호, 붙여쓰여진 명사에는 ~ 기호를 부착

• (특허 출원 : 딥러닝 학습을 위한 한국어 표기 방법)

• 자체 보유중인 한국어 형태소 분석기 Moran을 변형해서 코퍼스 분석 : 1M byte 당 2초 정도 소요

• CPU 갯수 만큼 동시에 분석이 가능하므로, 100G 변환에 15시간 정도 소요됨

• 한개의 어절당 2.2개의 형태소생성

Page 12: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

11

BERT의 학습과정 : Vocab 만들기

• 형태소 단위로 분절된 코퍼스 중에 일부를 이용해서 Vocab 만들기

• 사용 프로그램 : subword_builder.py

• 몇개의 Vocab이 적절한가?

• 한글 음절을 기준으로 할 것인가? vs BPE와 같이 Byte를 기준으로 할 것인가?

• Vocab을 뽑기 위해 선별된 55억개의 어절 Corpus에서 다양한 크기의 Vocab을 생성

• 2개의 Vocab을 선택 :

• 90k : 89393개의 표제어 + 빈표제어 [NULL000] ~ [NULL605]로 9.0만개 짜리 Vocab

• 54k : 53,803개의 표제어 + 빈표제어 [NULL000] ~ [NULL195]로 5.4만개 짜리 Vocab

Page 13: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

12

Vocab 만들기

• 첫번째 :

• 5G 수준의 대화 코퍼스, 문서 코퍼스에 대해서 30k 수준의 Vocab에 대한 빈도수 찾기

• 코퍼스 정제가 완료되지 않은 상태에서, 전체 과정의 예행연습 수행

• 50781단어 Vocab 사용

• 평가 : Total Tokens = 1,018,514 Total SubTokens = 1,118,338 UNK tokens = 5,532 0.0049

• 두번째 :

• 첫번째 Vocab에서 특이점 - 이상한 표제어 제거, 기본 글자 추가, 숫자를 제거하고 개별 숫자 사용

• 모델의 입력 크기를 1024, 512 두가지로 하고, 정제된 48765 단어 Vocab 사용

• 평가 : Total Tokens = 1,018,514 Total SubTokens = 1,150,564 UNK tokens = 5,538 0.0048

• 세번째 :

• 두가지 Vocab으로 나누어 만들어봄

• 이상한 표제어를 한글 음절단위가 되도록 수정, 숫자의 일부분을 허용, [NULL] 표제어 추가

• 평가 : 54k (Tokens = 1,018,514, SubTokens = 1,116,401, UNK tokens = 485 0.00043)

• 평가 : 90k (Tokens = 1,018,514, SubTokens = 1,089,478, UNK tokens = 405 0.00037)

Page 14: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

13

BERT의 학습과정 : Vocab과 [UNK]

• 좋은 Vocab은 어떤 것일까?

• 단어의 차이를 반영할 수 있는 것. 표제어에 ~, ~~로 활용 정보 추가

• UNK가 적은 것 한글 음절 기반 (고빈도 한글 음절 추가)

• KorQuAD 2.0의 학습 데이터 중 Text에 해당하는 부분의 분석 결과 0.04%

* 형태소 분석에서 알파벳, 한글, 특수분자 이외의 외래 글자는 'z'로 변환하였음

• Google과 Naver와 Vocab에 따른 [UNK] 비율 비교

• 0.04% (TBai) vs 1.5% (Naver) vs 6% (Google) (*TBai의 경우 일부 외래글자를 변환)

* 아래는 Naver 발표 자료 중 일부임 (엄~청 큰 언어 모델 공장 가동기! LaRva, DEVIEW 2019)

54k Vocab : Tokens = 1,018,514 SubTokens = 1,116,401 UNK tokens = 485 0.043%

90k Vocab : Tokens = 1,018,514 SubTokens = 1,089,478 UNK tokens = 405 0.037%

Page 15: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

14

BERT의 학습과정 : Tensor Flow 레코드만들기

• 학습을 위한 텐서 레코드 화일 만들기

• 사용 프로그램 : create_pretraining_data.py

• 고려 사항 : --max_seq_length, --dupe_factor, --max_predictions_per_seq

• max_seq_length : 모델의 입력의 크기 , 512가 일반적임, 1024 버젼도 가능함

• dupe_factor : 코퍼스당 몇배로 중복을 만들 것인가? 1 ~ 5 ~ 10 ~ 20 등

• max_predictions : 85 (15%를 [MASK]로 생성)

• 메모리 문제 : 코퍼스를 메모리에 모두 올려 놓고, 섞어서 중복의 데이터를 생성하기 때문에 메모리 문제

• Dup비율에 따라서 메모리 사용함

• Dup 10일때 : 1G당 2.2시간 * 70G 메모리 * Dupe_factor * 1.2 배 수준의 레코드 화일 생성

입력문서

계절과관계없이냉·난방으로인해안구건조증을호소하는사람이 많다. 이때 바로 찾는것이인공눈물이다.

moran4dnlp

계절 ~~과 관계 ~~없이냉난방 ~~으로 인 ~~해안구건조증 ~~을 호소~~하는 사람 ~~이 많~~다. 이때 바로 찾~~는 것 ~~이 인공눈물~~이다 .

moran.db

subwords

30K.voca

계절 ~~과 관계 ~~없이냉 ##난방 ~~으로 인#~~해 안구 ##건조 증~~을 호소 ~~하는 사람~~이 많 ~~다 . 이때바로 찾 ~~는 것 ~~이인공 ##눈물 ~~이다 .

create_pretraining_data

30K.voca

[3823 29898 2132 28392 15643 29988 13232 29834 20123 28338 15494 20135 29663 14232 29837 345 29384 27349 29723 29992 29394 28394 10394 19243 29384 2838 23842 29283 4484 4949 291829 29999]

Page 16: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

15

Tensor Flow 레코드만들기

• 첫번째 : 내부 장비로 변환을 수행 2주 정도 소요

• 128G Mem 장비 1대 활용, Dup 10/20, 동시에 2개의 변환기 가동, 2가지 Type으로 변환

• 두번째 : 데이터변환을 위해서 4대의 장비를 5일간 활용 63만원

• 장비 : 네이버 클라우드 8core 64G

• 대당 : 시간당 673원, 1일당 16,152원 * 4대

• 최대 대당 변환 시간 : 176 시간 (44G)

• 1024형 변환에 3.6일, 512형 변환에 3.6일

• 4대 서버 : 35만원, 4대 디스크 : 8만원 , 네트워크 사용료 : 20만원

• 세번째 : Dup를 낮추고 코퍼스도 선별하여, 내부 서버 2대로 5일간 변환

• Vocab의 종류, 입력의 크기에 따라 각각 만들어야 함

• 54k vocab, 90k vocab 용으로 모든 코퍼스에 대해서 만들고, 용도에 따라서 다시 조합해서 모델에 넣었음

서버 디스크 데이터 이동 (약 1T)

Page 17: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

16

TPU를 이용한훈련 과정

1. Google Cloud Storage 생성

2. TPU V3 생성

3. VM 인스턴스 생성

4. VM 인스턴스 접속, 훈련 실행

5. 완료된 CheckPoint들 가져오기

6. Fine tuning (korquad 2.0 등)

TF 데이터화일

gsutil -m cp 4bert gs://tbai_disk/

40M/sec

Page 18: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

17

Google Cloud Storage 생성

• TPU를 사용해 갖고 있는 데이터를 학습하려면 데이터가 클라우드 Storage에 있어야 함

• 구글 클라우드 플랫폼에서, Storage를 선택하고 브라우저를 클릭

• 버킷 만들기를 클릭한 후, 이름을 설정하고 생성을 완료

• 이후 create_pretraining_data.py를 통해 만들어진 데이터를 업로드함

• 로컬 서버와의 데이터 전송 속도 비교

• 구글 Storage >> VM 장비

• 구글 Storage - 구글 VM >> 구글 Storage - 로컬 서버

>> 구글 VM - 로컬 서버

Page 19: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

18

TPU로 학습하기 - 첫번째시도

• 연습용 TPU를 V3-8, 5개 활용

• 입력크기 : 1024, 512

• 각 Step 을 128만번까지 돌려보기

• loss가 떨어지는 것을 관찰하기

• 구글의 "TensorFlow Research Cloud"를 무료로 활용함

Page 20: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

19

TPU로 학습하기 - 두번째시도

• TPU를 5개 할당받음

• 적당히 조절하면서 학습 진행

• 두번째 BERT 굽기 loss의 급격한 증가시 실패로 판결하고 학습 중단

• 구글의 "TensorFlow Research Cloud"를 추가로 30일간 무료 활용함

Bert 모델 batch size 용도 학습 step 판결

1024-base-Large 24 대용량 추론용 1,585,400 실패

512-base-Large 64 정형문서 2,446,800 실패

512-base-Normal 208 정형문서 3,428,600 완료

512-base-Small 392 정형문서 1,103,800 완료

1024-IP-Large 64 대용량 추론용 3,669,400 완료

512-IP-Normal 240 특허전문 3,607,200 완료

512-IP-Small 392 특허전문 1,102,200 완료

1024-gen-Large 24 대용량 추론용 1,703,400 중단

512-gen-Normal 208 일반문서 2,505,000 완료

512-gen-Small 392 일반문서 1,703,400 완료

Page 21: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

20

TPU로 학습하기 - 세번째시도

• TPU를 5개 할당받음

• 모델 별로 학습의 양을 적당히 조절하면서 진행

• 두가지 Vocab * 3가지 크기로 5개 모델에 대한 학습 수행 : 54kN,54kML, 90kS, 90kN, 90kML

• 비용 : 구글 클라우드가 11월 중순부터 $ 기본 청구에서 원 단위로 변경 (무료 TFRC 제외)

• 하루 최대 110만원 수준 (TPU V3-8, 5대 동시 활용)

• loss의 변화가 거의 없어지면 학습을 중단

• 학습이 완료된 모델에 특허 코퍼스를 다시 학습 진행 (특허 분석용)

Page 22: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

21

저장된모델들

• 구글 Storage에서 다운로드

• 각 10만 Step 마다 Checkpoint를 저장

• gsutil -m cp -r gs://tbai_disk/result_54k_large .

Page 23: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

22

HanBert 성능 평가

• BERT의 성능 평가

• 다양한 GPU에서 동작 속도 비교 평가

• 기존의 학습 Set에 대해서 비교 평가 수행

• 평가 대상

• nsmc : 네이버 영화평 DB https://github.com/e9t/nsmc

• korquad 1.0 : 짧은 기계 독해 DB https://korquad.github.io/

• korquad 2.0 : Wiki 문서 기계 독해 DB https://korquad.github.io/

• Demo Page

• KorQuAD 1.0 모델

• 신문기사 입력 후 질문하면 응답

• KorQuAD 2.0 모델

• 기업용 문서 PDF를 업로드 하고 질의 응답

• GPT-2 : 글쓰기

• 글쓰기 앞부분을 입력하면 이어서 쓰기

• GPT-2 : 특허 쓰기

• 특허 초안의 아이디어를 입력하면 이어서 쓰기

Page 24: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

23

기계독해 : HanBert-54kN + korquad 1.0 학습

• 신문기사에 대해서도 질문에 대답을잘 하는 느낌

• 곤은 어떤 회사의 회장이니? 르노 닛산 얼라이언스

• 어디에서 탈출했다는 거지? 일본

• 어디에 숨어서 도망간거지? 대형 악기 케이스

• 누구 도와준 사람있어? 부인

• 어디에서 자가용 비행기를 탔어? 간사이국제공항

". . . 이어 곤 전 회장 측은 수도권의 나리타공항과 하네다공항이 아니라 오사카의 간사이국제공항에서 자가용 비행기를 이용해 탈출을 감행한 것으로 보인다. . . ."

Page 25: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

24

특허초안만들기 by HanGPT-IP

• 특허의 개요에 해당하는 요약을 입력하면 나머지 부분을 모델이 자동으로 완성

본 발명은 분상체용 포장기계의 분비 투입장치에 관한 것으로, 더욱 상세하게는 커피, 프림 및 설탕 등과 같은 분상체를 스틱형 포장지에 포장하는데있어서 포장되는 분상체의 양을 자유롭게 조절할 수 있고, 여러 종류의 분상체가 서로 혼합되지 않도록 순차적으로 투입하여 층상을 이루게 하며, 동시에 여러 개의 포장지에 분상체 를 주입할 수 있어서 소비자가 일부 분상체의 양을 취향에 따라 조절할 수 있을 뿐만 아니라 생산자의 입장에 서는생산효율을 향상시켜주는 분상체용 포장기계의 분배 투입장치에 관한 것이다.

일반적인 분상체용 포장기계는 주로 도 1에서 보는 바와 같이 여러 개의 포장지를 이용하여 분상체을 분배 주입시키며, 이러한 포장지를 분배투입시키는 과정에서 여러 개의 포장지 중 어느 하나의 포장지의 표면에 분상체을 혼합시켜 넣고, 분배된 모든 제품을 한 번에 포장하며 포장완료된내용물을 분상체로 만들어 넣어주는 것이 사용되는 것이다. 그리고 이러한 분배 투입단계에서 다양한 종류의 분상체가 혼합되어 공급되는 경우포장에 사용되는 모든 포장지가 포장된 내용물이 투입되는 포장지의 개수를 고려하여 분배장치의 회전이 이루어져야 하는데, 이때 한 번에 포장이완료된 여러 개의 내용물을 포장완료된 포장지 마다 포장하여야 하며, 이를 위해 상기 분배 투입단계 이전에 포장된 내용물을 포장완료된 포장지마다분배장치의 회전속도를 달리하여 분배하여야 하는데, 이를 위해 분배 투입단계 이전의 포장지마다 분배장치의 회전속도, 회전방향을 달리하여야하는데, 이런 포장단계 및 포장완료단계에서 각각의 분배장치에 가해지는 각 분배장치의 회전속도를 모두 다르게 하여야 하기 때문에, 분상체가혼합되고 혼합된 내용물이 포장완료된 포장지로부터 분리되지 않도록 하여야 하는데, 이를 위한 종래의 포장방법은 포장완료된 내용물이 포장완료된포장지마다 분배장치가 회전하여야 하는데, 이때 포장지 공급단계 및 각 포장완료단계에 분배장치의 위치가 고정되어 있게 될 경우 포장지 공급단계및 포장완료단계가 동일하게 회전되지 않도록 하는데 많은 시간과 노력이 요구되게 되며, 제품불량의 원인을 초래하므로 본 발명에서는 설명하지않고 분배 투입기, 포장장치가 상호 독립적으로 회전하는 것으로 하였다. 이에, 포장장치를 통한 내용물의 포장과정은 다음과 같다. 먼저 분배단계가 진행되면포장지 공급장치의 투입부에 투입된 포장지가 투입된 상태에서 포장지 공급부의 이송부를 통하여 이송이 이루어지게 된다. 그리고 포장지 공급부의 공급모터가구동하게 되어 이송부에 의해 공급된 포장지의 일측 또는 타측이 공급되지 않는 경우, 먼저 투입부에 의하여 공급된 포장지가 공급부에 의하여 공급되거나 타측으로이동하여 투입되는 형태로 공급되어 포장지 공급부를 통과하면서 분할부 방향으로 배출된다. 앞서 공급된 포장지가 분할부에 의하여 복수개의 포장지가 포장되기위해서는 투입부에 의하여 공급되기 전에 포장지를 공급해야 하므로 포장장치에서 포장지 공급부의 위치가 항상 동일하게 배치되어야 하는데, 이때, 포장지공급부에서 공급되는 포장지의 크기에 따라 공급수단의 크기가 가변되는 것이 아니면 구동수단을 통하여 공급수단을 회전시킬 수 없는 경우 상기한 크기가 다른포장지가 공급에 적절하지 못할 수 있다. 이에 대한 자세한 설명은 이하에서 서술하도록 한다. 그리고 포장단계가 진행되면, 다음 단계 즉, 포장단계에서 포장하고자하는 포장지를 투입부로부터 공급부 방향으로 이송시켜 크기가 다른 포장지가 공급부로 유입하도록 하는 투입단계가 진행된다. 포장단계 전에는 크기가 다른포장지가 공급부에 용이하게 수용되어 공급되므로, 포장단계에서 포장하고자 하는 포장지의 크기에 맞추어 투입단계를 진행한다. 투입단계는 앞서 설명한공급단계와 동일하며, 투입부에 의하여 공급된 포장지를 복수의 포장지가 포장될 방향으로 배출시키는 배출단계는 앞서 도 8에서 참조하였던 포장지 이송단계와동일하므로, 동일한 과정이므로 별도의 상세한 설명은 생략하도록 한다. 아울러 제 1 이송단계의 경우에는 공급부 및 포장지 공급부 등 모든 공급수단을 이송시키지

않고, 다음 공정에서 배출되는 포장지만을 이송시키도록 하여, 각 공급수단에 의하여 다음 단계에서 배출되는 배출되는 포장지를 최소화 할 수 있다. 이에 대한 자세한

설명은 다음에서 서술하도록 한다. 투입단계를 거친 포장지는 복수의 포장지가 순차적으로 배출되면서 포장되며, 공급부 및 이송부에 의하여 배출된다. 그리고 배출단계는 도 9와 같이, 공급단계와 동일하게이루어진다. 예를 들어 공급단계에서, 공급부의 이송부는 공급수단을 공급하지 않도록 하고, 투입단계에서, 투입부는 공급수단을 공급하도록 함으로써, 공급수단으로부터 공급된 포장지가 포장될 방향으로배출되도록 할 수 있다. 이로써 배출되는 포장지를 최소화 할 수 있으며, 포장지가 포장되는 과정에서 포장지가 파손되는 것에 의하여 포장지가 파손되는 것을 방지할 수 있게 된다. 한편, 배출단계에서, 공급단계의 공급수단은 도 10에서 참조하였던 바와 같이, 공급부 및 포장지 공급부 등 공급수단을 이송시키지 않고, 공급부 및 포장지 공급부의 이송방향을 전환 또는 조절할 수 있도록 할 수 있다. 이로써 모든공급수단이 공급없이 공급되고 포장지가 포장되도록 할 수 있을 뿐만 아니라, 포장지가 포장되는 과정에서 이송되어 포장지가 파손되는 것을 방지할 수 있게 된다. 그리고 각 공급수단는 각 공급부 또는 포장지공급부로 분리되어 공급되도록 할 수 있을 뿐만 아니라, 각 이송부 역시 각 이송부로 분리되어 공급되도록 할 수 있다. 따라서 각 공급수단을 통해 포장지가 포장될 수 있는 공급수단 및 포장지 공급부에서공급되는 포장지는 공급수단의 분리 및 공급부의 분리에 의하여 상호 연결되지 않고도, 공급될 수 있도록 할 수 수 있다는 이점을 가진다. 한편, 배출단계에서, 공급단계의 공급수단은 도 11에서 참조하였던 바와같이, 공급부 및 포장지 공급부 등 공급수단을 이송시키지 않고, 공급부 및 포장지 공급부의 이송방향을 전환 또는 조절할 수 있도록 할 수 있다. . . .

Page 26: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

25

GPU당 성능평가

• GPU에 따라서처리 용량과 응답시간 검토 (i/o 포함, API 시간은 훨씬 낮음)

MODEL GPU memoryRequest per sec./worker

Max workers

BERT

GTX 1660 6G 76.420 7

RTX 2060 SUPER 8G 78.312 10

RTX 2070 SUPER 8G 77.360 10

RTX 2080 ti 12G 79.277 13

RTX TITAN 24G 80.245 28

MODEL GPU 가격 화면 출력 sec./input

KorQuAD

GTX 1660 25만원 2.905

RTX 2060 SUPER 62만원 2.957

RTX 2070 SUPER 90만원 2.901

RTX 2080 ti 200만원 2.883

RTX TITAN 340만원 2.813

MODEL GPU memory 512개 토근 생성 sec.

특허용 GTX 1660 6G N/A

GPT-2 RTX 2060 SUPER 8G 109.650

7.7억 RTX 2070 SUPER 8G 100.686

파라메터 RTX 2080 ti 12G 73.258

RTX TITAN 24G 70.467

Page 27: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

26

성능평가 : nsmc

• nsmc

• 형태소 분석기를 통해서 학습 데이터 미리 변환

• train data 15만건, test data 5만건

id document label9976970 아 더빙.. 진짜 짜증나네요 목소리 03819312 흠...포스터보고 초딩영화줄....오버연기조차 가볍지 않구나 110265843 너무재밓었다그래서보는것을추천한다 09045019 교도소 이야기구먼 ..솔직히 재미는 없다..평점 조정 05403919 막 걸음마 뗀 3세부터 초등학교 1학년생인 8살용영화.ㅋㅋㅋ...별반개도 아까움. 07797314 원작의 긴장감을 제대로 살려내지못했다. 0

id document label9976970 아 더빙 . . 진짜 짜증나 ~~네요 목소리 03819312 흠 . . . 포스터 ~~보고 초딩 ~영화 ~줄 . . . . 오버 ~연기 ~~조차 가볍 ~~지 않 ~~구나 110265843 너무재밓었다그래서보는것을추천한 ~~다 09045019 교도소 이야기 ~~구 ~~먼 . . 솔직히 재미 ~~는 없 ~~다 . . 평점 조정 05403919 막 걸음마 뗀 3 ~세 ~~부터 초등 ~학교 1 ~학년 ~생인 8 ~살 ~용 ~영화 . ㅋㅋㅋ . . . 별반 ~개 ~~도 아까 ~~움 . 07797314 원작 ~~의 긴장감 ~~을 제대로 살려내지못했 ~~다 . 0

INFO:tensorflow:text: 흠 . . . 포스터 ~~보고 초딩 ~영화 ~줄 . . . . 오버 ~연기 ~~조차 가볍 ~~지 않 ~~구나INFO:tensorflow:tokens: [CLS] 흠 . . . 포스터 ~~보고 초 ##딩 ~영화 ~줄 . . . . 오버 ~연기 ~~조차 가볍 ~~지 않 ~~구나 [SEP]

Page 28: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

27

nsmc : 다양한시도들

• 전북대 + ETRI : BERT

• BERT를 이용한 한국어 자연어처리: 개체명 인식, 감성분석, 의존 파싱, 의미역 결정 박광현1 , 나승훈1 , 신종훈2 , 김영길2, 1전북대학교, 2한국전자통신연구원

• LSTM으로 네이버 영화리뷰 감성분류, 테스트 정확도: 85.39%

• https://wikidocs.net/44249

• Kakao NLP 팀 개발자블로그 : 88.77% (?)

Page 29: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

28

nsmc : HanBert 성능평가

• 기본 Bert의 학습량이 많으면 점진적으로 성능이 높아지는 현상

• 학습량이 충분히 안정되지 못한 경우 (90k-ML의 2.4M Steps) 49.7% ~ 89.3% 5.0M : 90.4%

• Fine Tuning의 학습량은 일정수준 이상의 epoch에서 최적값을 찾아야함

• ML 모델 최대치 : 90.49%, N모델 최대치 : 90.36%, S 모델 최대치 : 89.84%

Model BERT Steps nsmc (5 epoch)

54k-ML

2.3M 0.899

2.8M 0.899

4.2M 0.902

54k-N

2.0M 0.900

2.5M 0.873

3.8M 0.903

90k-N

2.1M 0.900

2.6M 0.902

3.9M 0.902

90k-S

1.8M 0.896

2.2M 0.896

3.3M 0.899

기본 Bert 학습량에 따른 성능 변화 nsmc 학습량에 따른 성능 변화

0.9049 0.90360.9041

0.89740.8984

0.87

0.875

0.88

0.885

0.89

0.895

0.9

0.905

0.91

54k-ML 54k-N 90k-ML

90k-N 90k-S

Page 30: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

29

KorQuAD 1.0

• 위키 백과에서 1637건의 문서를 수집해서, 크라우드 소싱으로 QA 70K 생성 (LG-CNS)

"context": "1839년 바그너는 괴테의 파우스트을 처음 읽고 그 내용에 마음이 끌려 이를 소재로 해서 하나의 교향곡을 쓰려는 뜻을

갖는다. 이 시기 바그너는 1838년에 빛 독촉으로 산전수전을 다 걲은 상황이라 좌절과 실망 가득했으며 메피스토펠레스를 만나는

파우스트의 심경에 공감했다고 한다. 또한 파리에서 아브네크의 지휘로 파리 음악원 관현악단이 연주하는 베토벤의 교향곡 9번을 듣고

깊은 감명을 받았는데, 이것이 이듬해 1월에 파우스트의 서곡으로 쓰여진 이 작품에 조금이라도 영향을 끼쳤으리라는 것은 의심할

여지가 없다. 여기의 라단조 조성의 경우에도 그의 전기에 적혀 있는 것처럼 단순한 정신적 피로나 실의가 반영된 것이 아니라 베토벤의

합창교향곡 조성의 영향을 받은 것을 볼 수 있다. 그렇게 교향곡 작곡을 1839년부터 40년에 걸쳐 파리에서 착수했으나 1악장을 쓴

뒤에 중단했다. 또한 작품의 완성과 동시에 그는 이 서곡(1악장)을 파리 음악원의 연주회에서 연주할 파트보까지 준비하였으나,

실제로는 이루어지지는 않았다. 결국 초연은 4년 반이 지난 후에 드레스덴에서 연주되었고 재연도 이루어졌지만, 이후에 그대로

방치되고 말았다. 그 사이에 그는 리엔치와 방황하는 네덜란드인을 완성하고 탄호이저에도 착수하는 등 분주한 시간을 보냈는데, 그런

바쁜 생활이 이 곡을 잊게 한 것이 아닌가 하는 의견도 있다."

"id": "5917067-0-0", "question": "바그너가 파우스트를 처음으로 읽은 년도는?"},{"answers": [{"text": "1839", "answer_start": 0}],

"id": "5917067-0-1", "question": "바그너가 처음 교향곡 작곡을 한 장소는?"},{"answers": [{"text": "파리", "answer_start": 410}],

"id": "5917067-0-2", "question": "바그너의 1악장의 초연은 어디서 연주되었는가?"},{"answers": [{"text": "드레스덴", "answer_start": 534}],

"id": "6566518-0-0", "question": "1839년바그너가 교향곡의 소재로 쓰려고 했던 책은?", "파우스트", 15

"id": "6566518-0-1", "question": "파우스트 서곡의 라단조 조성이 영향을 받은 베토벤의 곡은?", "합창교향곡", 354

"id": "6566495-0-0", "question": "바그너는 괴테의 파우스트를 읽고 무엇을 쓰고자 했는가?" "교향곡", 54

"id": "6566495-0-1", "question": "바그너는 교향곡 작곡을 어디까지 쓴 뒤에 중단했는가?" "1악장", 421

"id": "6566495-0-2", "question": "바그너가 파우스 서곡을 쓸 때 어떤 곡의 영향을 받았는가? "베토벤의 교향곡 9번", 194

Page 31: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

30

KorQuAD 1.0의학습알고리즘

• 학습 : BERT 모델은 입력이 512개 토큰으로 구성되어 있음

• 학습의 내용 : 해당 입력에 대해서 정답의 시작 위치와 끝 위치의 값이 선택되도록 모델의 파라메터 조정

• 결국 : 1~512의 각 위치당 시작으로 선택되도록 값을 극대화, 끝으로 선택되도록 값을 극대화하도록 학습

• 본문의 길이가 긴 경우 : 질문 + 본문의 Token 수가 512개 이내로 BERT에 입력을 주어야 함

• 입력을 여러개의 span으로 나누어서 각 span에 질문과 본문의 일부, 정답의 시작위치, 정답의 끝위치 지정

• Span이 하나의 단위가 되어서 전체 학습 데이터 Set이 됨 : 정답이 포함되지 않은 Span도 학습에 참여?

• 추론

• 본문을 (질문+본문) span의 모임으로 보고, 모델에서 추정하는 각 위치에 대한 시작값과 끝값을 작성

• 각 시작값과 끝값 중에 Top n개씩의 시작-끝의 값을 더하고, 길이 검사를 해서 최대값을 정답으로 선택

본문질문 정답

span-1 span-2 span-3 span-4 span-5

정답

Page 32: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

31

KorQuAD 1.0의학습알고리즘-2

• 텐서레코드를 만들때에 tokenizer 수행하고 자동으로 정답 위치 조정

*** Example ***context: ['로마는', '일부', '동맹국에는', '라티움인의', '권리를', '보장했는데,', '이', '권리는', '완전한', '로마', '시민권과', '외국인(peregrini)의', '중간', '수준의', '신분을', '의미했으며', '로마법이', '이', '지위를', '성문적으로', '보장했고,', '이들', '나라의', '최고', '정무관들은', '완전한', '로마', '시민권을', '얻었다.', '라틴인의', '권리에는', '여러', '층위가', '있는데,', '주된', '구분은', '"투표권이', '있는', '시민권"(cum', 'suffragio,', '로마의', '트리부스에', '등록되어', '트리부스', '민회에', '참여할', '수', '있었다)와', '"투표권이', '없는', '시민권"(sine', 'suffragio,', '로마', '정치에', '참여할', '수', '없다)으로', '나눌', '수', '있다.', '일부', '로마의', '이탈리아', '동맹국은', '기원전', '91~88년의', '동맹국', '전쟁', '이후', '완전한', '로마', '시민권을', '얻었다.', '기원후', '212년', '카라칼라의', '칙령으로', '제국내의', '모든', '자유', '시민에게', '로마', '시민권이', '부여되었다.', '여성은', '남성', '배우자와', '어느', '정도', '동등한', '기본권이', '있었으나,', '완전한', '시민으로', '인정되지', '않았으며,', '따라서', '투표를', '하거나', '정치에', '참여할', '수', '없었다.']

question : 라틴인의권리는주로 무엇의유무로구분이되었나 ? tokens: [CLS] 라틴 ~인 ~~의 권리 ~~는 주 ~~로 무엇 ~~의 유무 ~~로 구분 ~~이 되 ~~었 ~~나 ? [SEP] 로마 ~~는 일부 동맹국 ~~에는 라티 ##움 ~인 ~~의권리 ~~를 보장 ~~했 ~~는데 , 이 권리 ~~는 완전 ~~한 로마 시민권 ~~과 외국인 ( per ##eg ##rin ##i ) 의 중간 수준 ~~의 신분 ~~을 의미 ~~했 ~~으며로마 ##법 ~~이 이 지위 ~~를 성문 ~적 ~~으로 보장 ~~했 ~~고 , 이 ~들 나라 ~~의 최고 정무 ##관 ~들 ~~은 완전 ~~한 로마 시민권 ~~을 얻 ~~었 ~~다 . 라틴 ~인 ~~의 권리 ~~에는 여러 층 ##위 ~~가 있 ~~는데 , 주된 구분 ~~은 " 투표권 ~~이 있 ~~는 시민권 " ( cu ##m su ##ff ##ra ##gio , 로마 ~~의 트리##부스 ~~에 등록 ~~되 ~~어 트리 ~부스 민회 ~~에 참여 ~~할 수 있 ~~었 ~~다 ) 와 " 투표권 ~~이 없 ~~는 시민권 " ( sin ##e su ##ff ##ra ##gio , 로마정치 ~~에 참여 ~~할 수 없 ~~다 ) 으로 나눌 수 있 ~~다 . 일부 로마 ~~의 이탈리아 동맹국 ~~은 기원 ~전 91 ~ 88 ~년 ~~의 동맹국 전쟁 이후 완전 ~~한로마 시민권 ~~을 얻 ~~었 ~~다 . 기원후 212 ~년 카라 ##칼라 ~~의 칙령 ~~으로 제국 ##내 ~~의 모든 자유 시민 ~~에게 로마 시민권 ~~이 부여 ~~되 ~~었~~다 . 여성 ~~은 남성 배우자 ~~와 어느 정 ~~도 동등 ~~한 기본권 ~~이 있 ~~었 ~~으나 , 완전 ~~한 시민 ~~으로 인정 ~~되 ~~지 않 ~~았 ~~으며 , 따라서 투표 ~~를 하 ~~거나 정치 ~~에 참여 ~~할 수 없 ~~었 ~~다 . [SEP]input_ids: 3 19273 425 9 1947 7 102 21 711 9 9854 21 1928 10 65 31 87 88938 4 3466 7 246 15176 190 49300 6113 425 9 1947 13 2152 34 105 88697 35 1947 7 1739 18 3466 24469 25 1291 88639 27186 26291 49591 1795 88278 3202 1106 492 9 4810 8 440 34 101 3466 134910 35 4724 13 14140 30 19 2152 34 15 88697 35 23 826 9 500 7329 1407 23 14 1739 18 3466 24469 8 303 31 6 88842 19273 425 9 1947 190 544 1148 2448 17 16 105 88697 6311 1928 14 88481 30761 10 16 7 24469 88481 88639 13588 1185 26891 14660 11344 67072 886973466 9 2793 62220 11 1514 29 37 2793 21984 86926 11 626 41 26 16 31 6 88278 762 88481 30761 10 52 7 24469 88481 88639 37716 1043 26891 14660 11344 67072 88697 3466 488 11 626 41 26 52 6 88278 41104 9405 26 16 6 88842 246 3466 9 2679 15176 14 3919 586 6255 69 5587 49 9 15176 949 182 1739 18 3466 24469 8 303 31 6 88842 86189 21471 49 12319 53502 9 57731 19 3722 2798 9 245 6591220 68 3466 24469 10 1706 29 31 6 88842 550 14 1787 9313 32 521 297 24 8185 18 20041 10 16 31 330 88697 1739 18 1220 19 872 29 27 43 64 101 88697 617 2576 13 40 168 488 11 626 41 26 52 31 6 88842 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

start_position: 105 end_position: 105tensorflow:answer: 투표권

Page 33: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

32

KorQuAD 1.0 추론

• 추론의 과정

• 여러개의 span인 경우 최대 값을 갖는 것을 선택

[CLS] 임종석 ~~이 여의도 농민 폭력 시위 ~~를 주도 ~~한 혐의 ~~로 지명 ~수배 된 날 ~~은 ? [SEP] 1989 ~년2 ~월 15 ~일 여의도 농민 폭력 시위 ~~를 주도 ~~한 혐의 ( 폭력행 ##위 ~등 ~처벌 ~~에관한 ~법률 ##위반 ) 으로 지명 ##수배 ~~되 ~~었 ~~다 . 1989 ~년 3 ~월 12 ~일 서울지방 ~검찰청 공안부 ~~는 임종석 ~~의 사전

~구속영장 ~~을 발부 ~받 ~~았 ~~다 . 같 ~~은 해 6 ~월 30 ~일 평양 ##축 ##전 ~~에 임수경 ~~을 대표 ~~로 파견 ~~하 ~~여 국가 ~보안법 ~위반 혐의 ~~가

추가 ~~되 ~~었 ~~다 . 경찰 ~~은 12 ~월 18 ~일 ~ 20 ~일 사이 서울 경희대 ##학교 ~~에서 임종석 ~~이 성명 발표 ~~를 추진 ~~하 ~~고 있 ~~다는 첩보 ~~를 입수~~했 ~~고 , 12 ~월 18 ~일 오전 7 ~시 40 ~분 경 가스 ##총 ~~과 전 ~자 ##봉 ~~으로 무장 ~~한 특 ~공조 및 대공 ~~과 직원 12 ~명 등 22 ~명 ~~의 사복 경찰 ~~을승용차 8 ~대 ~~에 나누 ~~어 경희대 ##학교 ~~에 투입 ~~했 ~~다 . 1989 ~년 12 ~월 18 ~일 오전 8 ~시 15 ~분 경 서울 ~청 ##량 ##리 ##경찰서 ~~는 호위 학생 5 ~명 ~~과 함께 경희대 ~학교 학생 ~회관 건물 계단 ~~을 내려오 ~~는 임종석 ~~을 발견 , 검거 ~~해 구속 ~~을 집행 ~~했 ~~다 . 임종석 ~~은 청량리 ##경찰서 ~~에서

약 1 ~시간 동안 조사 ~~를 받 ~~은 뒤 오전 9 ~시 50 ~분 경 서울 장안 ~동의 서울지방 ~경찰청 공안 ~분 ##실 ~~로 인계 ~~되 ~~었 ~~다 . [SEP]

ids [3 24413 10 3145 5568 4181 3975 13 1970 18 1649 21 4420 47943 115 483 14 88938 4 8392 49 54 70 357 50 3145 5568 4181 3975 13 1970 . . . 31 6 88842 4 0 0 0 0 0 . . . 0 0 0 0]

(시작값, 끝값)0 27.99 (13.08,14.91) 1989 ~년 2 ~월 15 ~일 1989년 2월 15일1 14.36 (13.08,1.28) 1989 ~년 2 ~월 15 1989년 2월 15 2 12.74 (13.08,-0.34) 1989 ~년 2 ~월 1989년 2월3 11.94 (-2.97,14.91) ~일 일4 11.29 (13.08,-1.79) 1989 ~년 2 1989년 2

span-1 span-2 span-3 span-4 span-5

정답

Page 34: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

33

KorQuAD 1.0 답 내기

• Vocab으로 변환되었기 때문에 원문에서 답을 만들어야 함

• 알파벳 대소문자, 아랍어, [UNK] 매칭의 문제가 있음, 형태소 분석의 단위와 다르기도 함

['금강산은', '예로부터', '국내외에', '아름답기로', '유명하여,', '대대로', '많은', '예술가들의', '표현', '대상이', '되었다.', '봄의', '이름인', '금강을', '포함해', '여러', '가지', '이름이', '있지만', '현재는', '대개', '금강산이라', '불리며,', '계절에', '따라', '여름에는', '봉래산(蓬萊山', '신선이', '사는', '산', '중', '하나),', '가을에는', '풍악산(楓嶽山', '단풍', '든', '큰', '산,', '楓岳山', '단풍', '언덕', '산),', '겨울에는', '개골산(皆骨山', '바위', '뼈', '산)으로', '불렸다.', '동서로', '40킬로미터,', '남북으로', '60킬로미터,', '총면적', '530제곱킬로미터로', '수많은', '봉우리,', '오랜', '기간의', '지질', '활동과', '풍화', '작용으로', '생긴', '기암괴석', '및', '폭포,', '바다를', '낀', '지역으로', '이루어져', '있으며,', '이들은', '침엽수림과', '활엽수림으로', '덮여', '있다.', '흔히', '내금강,', '외금강,', '해금강으로', '나뉘며,', '때로는', '외금강의', '남쪽', '지역이', '신금강으로', '분류되기도', '한다.']

tokens [CLS] 금강산 ~~의 다른 이름 ~~으로 여름 ~~에 불리 ~~는 이름 ~~은 ? [SEP] 금강산 ~~은 예 ~~로부터 국내외 ~~에 아름답 ~~ ##~ ##기 ~~로 유명 ~~하 ~~여 , 대대로 많 ~~은 예술가 ~들 ~~의 표현 대상 ~~이 되 ~~었 ~~다 . 봄~~의 이름 ~~인 금강 ~~을 포함 ~~해 여러 가지 이름 ~~이 있 ~~지만 현재 ~~는 대개 금강산 ~~이라 불리 ~~며 , 계절 ~~에 따라 여름 ~~에

~~는 봉래 ##산 ( [UNK] [UNK] 山 신선 ~~이 사 ~~는 산 중 하나 ) , 가을 ~~에 ~~는 풍 ##악산 ( [UNK] [UNK] 山 단풍 든 큰 산 , [UNK] 岳 山단풍 언덕 산 ) , 겨울 ~~에 ~~는 개 ##골 ##산 ( [UNK] 骨 山 바위 뼈 산 ) 으로 불렸 ~~다 . 동서 ~~로 40 ~킬로 ~미터 , 남북 ~~으로 60 ~킬로미터 , 총면적 530 ~제곱 ##킬 ##로 ##미터 ~~로 수많 ~~은 봉우리 , 오랜 기간 ~~의 지질 활동 ~~과 풍화 작용 ~~으로 생긴 기암 ~괴석및 폭포 , 바다 ~~를 낀 지역 ~~으로 이루 ~~어 ~~져 있 ~~으며 , 이 ~들 ~~은 침엽수 ##림 ~~과 활엽수 ##림 ~~으로 덮여 있 ~~다 . 흔히 내~금강 , 외 ##금강 , 해금강 ~~으로 나뉘 ~~며 , 때로는 외 ##금강 ~~의 남쪽 지역 ~~이 신 ~금강 ~~으로 분류 ~~되 ~~기 ~~도 한 ~~다 . [SEP]

0 30.31 (15.02,15.29) 봉래산 text= 봉래산(蓬萊山

1 12.96 (-2.33,15.29) 산 text= 봉래산(蓬萊山

2 12.35 (15.02,-2.67) 봉래산 ( [UNK] [UNK] 山 신선 ~~이 사 ~~는 산 중 하나 ) , text= 봉래산(蓬萊山 신선이 사는 산 중 하나),

3 12.14 (15.02,-2.88) 봉래 text= 봉래산(蓬萊山

4 11.75 (15.02,-3.27) 봉래산 ( [UNK] [UNK] 山 text= 봉래산(蓬萊山

5 9.72 (15.02,-5.30) 봉래산 ( [UNK] [UNK] 山 신선 ~~이 사 ~~는 산 중 하나 ) text= 봉래산(蓬萊山 신선이 사는 산 중 하나)

6 7.99 (-7.30,15.29) 여름 ~~에 ~~는 봉래산 text= 여름에는 봉래산(蓬萊山

Page 35: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

34

KorQuAD 1.0 성능 평가방법

• Exact Match와 F1

• Exact Match는 알파벳 대소문자를 무시, 공백 무시, 특수문자 무시하여 변환한 후에 일치여부 판별

• "Exact Match" == "exactmatch" 1.0

• "완전일치(Exact Match" =/= "완전일치(Exact Match)" 0.0

• " 만폭동(萬瀑洞)" =/= "만폭동" 0.0

• "1992년 3월 21일 1시" =/= "1992년 3월 21일 1시경" 0.0

• F1은 글자 단위 (음절, unicode 1글자)로 해당 글자가 얼마나 겹쳐 나오는지 검토

• 1999년 (1: 1번, 9:3번, 년:1번) == 9991년 (1: 1번, 9:3번, 년:1번) 10/10

• 2001년 (1:1번, 2:1번, 0:2번, 년:1번) ~~ 2002년 (1:1번, 2:2번, 0:2번) 8/10

• " 만폭동(萬瀑洞)" ~~ "만폭동" 6/11

• 이슬람교 경전이나 길가메쉬 서사시 | 이슬람교 경전이나 길가메쉬 서사시등 0.967

• 마쓰오카 바키치 | 마쓰오카 바키치가 0.933

• 난세를 구할 큰 뜻을 품고 | 난세를 구할 큰 뜻을 품 0.947

• 종홍산(鐘洪山) | 종홍산( 鐘 洪 山 ) 1.0

• 와우섬 | 와우섬이 0.857

• 바이아라 | 바이아 0.857

Page 36: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

35

KorQuAD 1.0 내부 평가점수와제출시점수

• Dev Set과 Test Set의 성능 차이가 컸음

내부 평가 리더보드

• HanBert-54k-N (82.82, 93.37) 14. (81.94, 92.93)

• HanBert-54k-ML (83.26, 93.70) 18. (81.89, 92.65)

• HanBert-90k-N (82.97, 93.70) 23. (81.61, 92.48)

• HanBert-90k-ML (83.28, 93.54) 24. (81.35, 92.41)

2020. 1. 2 현재

Page 37: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

36

KorQuAD 1.0 리더보드와평가

• EM이 유사 F1의 모델과 유난히 떨어지는 현상

• Normal 모델이 Medium Large 모델보다 높은 성능을 보이는 현상

2020. 1. 2 현재

Page 38: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

37

KorQuAD 2.0의데이터셋

• 데이터셋

• 다양한 구조 문서의 기계독해를 위한 데이터셋

• 위키 문서 HTML로 수집, 크라우드 워커가 질문-답변 생성

• 8만건 : 작업자가 내용을 보지 않고 소제목 단위의 문서를 보고 질문 답변 생성

• 2만건 : korQuAD 1.0에서 변환

• 전체 103,193개의 Q-A 쌍, 47,971건의 문서에서 평균 2.15개 Q-A쌍

Short : 질문에 대한 답변이 단어 혹은 구 수준의 길이

Long : 문단 전체가 답이 되는 경우.

한두개의 <p>, <table>, <ul> tag로 쌓인 부분 전체가 답이됨

Text : 답변이 <p> tag 내에 존재

Table : 답변이 <table> tag 내에 존재

List : 답변이 <ul> tag 내에 존재

Page 39: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

38

• HTML의 구조적 문서를 파싱하는 문제

• 힌트 : 표와 리스트는 하나로 묶어서 하나의 단어라고 고려할 수 있음

• 표와 리스트를 제목과 연관된 하나의 가상 단어화

• #가계

KorQuAD 2.0 Wiki의 문서 구조

제목

#목차1

개요

#목차2 #목차3 #목차4

#목차1

내용

#목차2

내용

Page 40: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

39

KorQuAD 2.0 질문의유형

Page 41: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

40

KorQuAD 2.0과구글검색의차이점

• 검색은 문서 구조에 대한 이해가 부족해서 답변을 찾아내기 어려움

Page 42: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

41

KorQuAD 2.0 문서의구조를이해하고답을찾는 방법(?)

• 질문에 해당하는 답변을 찾을 수 있음

태풍 사라의 일본 미야코 섬에서의최대 풍속은 얼마를 기록하였는가?

53.0 m/s

Page 43: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

42

KorQuAD 2.0 문제의유형 : 단순형

• 일반 내용 중에 질문에 대응하는 답변이 여럿 존재

• KorQuAD 1.0과 유사한 문제형태

• 총 68488개 (82%)

쿠릴타이는 무엇인가?

유목 국가의 최고 정치 회의

Page 44: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

43

KorQuAD 2.0 문제의유형 : 블럭전체

• 총 2513개 (3.01%)

선혜옹주의 가족관계는?

Page 45: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

44

KorQuAD 2.0 문제의유형 : table, list 통째

• 총 4194개 (5.02%)

코리아 오픈 단식 경기 중 역대 결승 결과는?

Page 46: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

45

KorQuAD 2.0 문제의유형 : table, list의항목

• 총 4200개 (5.03%)

2017년 아프리카네이션스컵에서 가봉은몇 표를 받고 개최지로결정되었을까?

<td><b>9</b></td>

Page 47: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

46

KorQuAD 2.0 학습 데이터답변 Set의 형태적분포

• 학습 데이터의 구성

• 본문의 개수 : 38,496

• 질문과 답변의 개수 : 83,486

• 답변 형태의 분포 :

• Tag가 포함되지 않은 정답 : 46,910

• Tag가 포함된 정답 : 36,576

• 한줄인 경우 : 21,578

• 리스트형인 경우 : 710

• 테이블의 일부분 : 4,200

• <a>키워드</a> 포함 형태 : 16,668

• 여러줄인 경우 : 14,998

• 테이블이 답변인 경우 : 4194

• 한 블럭이 답변인 경우 : 2513

• 블럭의 일부가 답변인 경우 : 8291

• 시각적 분류

• 단순형 (82.04%), 구조형 (17.96%)

• 테이블 연관 (10%) : 테이블 전체 (5.02%), 테이블 일부 (5.03%)

• 블럭 연관 (13%) : 블럭 전체 (3.01%), 블럭 일부 (9.93%)

• 위키 표제어 포함 : 19.97%

68

48

8

14

99

8

83

94

41

94

42

00

25

13

82

91

16

66

8

답변 형태의 분포 (전체 83486)

Page 48: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

47

KorQuAD 2.0의원문이너무긴 문제

• 학습용 데이터에 비해서 추론용 데이터에 대해서 Span이 너무 많이 생김

• 이것은 어쩔 수 없이, Wiki의 모든 문서 부분을 검토해야 하기 때문임

• Prediction에 들어가는 시간도 많이 걸릴 것으로 예상됨

• Running training (정답만 학습하는 경우)

• INFO:tensorflow:***** Running training *****

• INFO:tensorflow: Num orig examples = 82466

• INFO:tensorflow: Num split examples = 107392 하나의 문서가 평균 1.2개로 늘어남

• Running predictions (추론은 전체 문서를 읽어야 함)

• 문서의 길이가 너무 길어서 평균 45개의 span이 발생함

• INFO:tensorflow:***** Running predictions *****

• INFO:tensorflow: Num orig examples = 10165

• INFO:tensorflow: Num split examples = 451461 하나의 문서가 45개로 늘어남

• 문제 : 과연 정답만 학습해서, 전체를대상으로 답을 뽑으면, 그것이 정답부분일까?

• 테이블에 답이 있는 경우와 본문에 답이 있는 것은 "질문"만으로는 알 수 없음

• 테이블 전체가 답이거나 일부분이 답인지 역시 "질문"만으로는 알기 힘듬

• 문제 : "답이 아니라고하기 어려운" 답이문서 전체에여기저기 존재함

• 특히 서술형의 경우에, 평가는 1개의 정답만 존재하기 때문에, 정답 선택자의 마음을 읽어야 할 듯 (^^;;)

Page 49: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

48

KorQuAD 2.0 해결을위한선택 사항들

• 가지고 있는 것은 HanBert 뿐 !!!

학습방식 모델구성 학습데이터 학습수행 추론데이터

평등학습(전체 Span)

Single(Tex + Tag)

Compound(Text*1 + Tag*5)

모델 차별 학습(Main * 10,

Bojo * 5)

분리 추론(Text, Tag)

선택학습(정답 포함 span)

Dual(Text, Tag)

Compound(Text*1 + Tag*4)

데이터 차별 학습(Text * 10, Tag * 30)

통합 추론(Text+Tag)

모범학습(정답 섹션의 정답 포

함 span)

Multi(54K + 90K)

복합 추론(Text+-Tag)

조화학습(정답 + 무답) x 5

Multi-Dual(54k-dual + 90k-

dual)

Page 50: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

49

KorQuAD 2.0 해결을위한여러가지시도

• Goolge의 Multi-ligual Model을 병행해서 사용하면 HTML Tag에 대응 가능(?)

• 자체적인 판단 구글의 Multi-ligual Model에 HTML Tag가 학습되지 않은 것으로 보임

• Text와 Tag를 나누어서각각 학습및 추론시도 : Dual Model

• 정답 부분만 검토시 : main과 bojo의 선택 정확도 문제는 검토 안됨

• TEXT Only 6951/10165, EM = 63.660, F1 = 77.412 Text에 답이 있으면 Text모델로 추론

• TAG Only 3084/10165, EM = 64.721, F1 = 76.838 Tag에 답이 있으면 Tag모델로 추론

• TEXT+TAG 10035/10165, EM = 63.797, F1 = 77.111 정답부분만 골라서 해당 모델로 추론

BERT의 Fine tuning에서 Tag의 embedding과 HTML(Table과 list)의 구조를 분석하는 능력이 학습되는 듯

text-1 html (table, ul) text table, ultext-2

tbai (model, vocab) g-multi (model, vocab)

tex

1-1Q

text

1-2Q

html

1Q

html

2Q

text

2-1Q

text

2-2Q

qid-1 qid-2

tbai (model, vocab) g-multi (model, vocab)

"train-tbai.tf_record" "train-ggle.tf_record"

Page 51: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

50

KorQuAD 2.0 해결을위한여러가지시도

• 테이블의 구조와 HTML Tag에 대해서 학습이 되나?

• Vocab의 [NULL000]~[NULL070]을 HTML Tag 어휘로 대체

• Vocab이 전체 모델 파라메터에서 차지하는 분량

• 90k-N : 44.7% 전체크기 1857M 중 829M

• 54k-N : 32.6% 전체크기 1525M 중 497M

• 90k-ML : 32.7% 전체크기 3384M 중 1105M

• 54k-ML : 22.6% 전체크기 2941M 중 663M

• Table과 List는 대부분이 Tag 어휘로 구성되어 있음

• Text 부분 대비 1배, 4배, 5배, 6배로 Tag 부분을 학습 효과가 없음

• HTML 구조와 Tag 어휘의 학습은 부족한 느낌

• 학습을 수행할때, 정답이 포함되지 않은 대부분의 Span을 학습에 참여시켜야 하나?

• KorQuAD 1.0에 적용 : (fs) 정답 아닌부분까지 학습, (as) 정답 포함 부분만 학습

• 1.0 train으로 학습하고 1.0 dev에 적용 : EM = 83.26, F1 = 93.70

• (fs) 2.0 전체 학습후에 1.0 dev에 적용 : EM = 32.87, F1 = 41.55

• (fs) 2.0 전체 학습후에 2.0 dev에 적용 : EM = 33.34, F1 = 43.64

• (as) 2.0 정답만 학습후에 1.0 dev에 적용 : EM = 73.14, F1 = 88.32

• (as) 2.0 정답만 학습후에 2.0 dev에 적용 : EM = 70.30, F1 = 86.99

정답이 아닌 부분을 포함해서 training은 아닌듯

1.0의 문제 속성 (단답형)과 2.0의 문제 속성 (서술형) 차이 존재

Page 52: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

51

KorQuAD 2.0 해결을위한여러가지시도

• Vocab에 포함된 HTML Tag의 embedding이 학습 되지 못할 것에 대비

• HTML Tag를 유사한 의미의 마크로 변환해서 학습과 추론 수행

• token_to_ids 를 변형해서, HTML 토큰에 해당하는 기호의 id로 사용하면, embedding을 활용할 수 있지 않을까?

• Tag를 대신해서 mark를 사용하는 것은 좋은 아이디어가 아님

html_marks html_tags

TOTAL = 10165 EM = 46.434, F1 = 62.829 EM = 56.183, F1 = 71.860

KorQuAD 2.0 학습을 통해서 HTML Tag에대한 embedding이형성되고, Table의구조 분석이가능해진느낌

• TPU를 활용해서 30 epoch 학습 (회당 17만원)

• 원본 데이터 로딩 & 변환 : 3시간 미리 학습용 데이터를 일부 가공해서 학습 데이터 1개로 작성

• 가공된 데이터 로딩 & 변환 : 1시간, 모델 학습 : 5000당 30분 총 15시간 소요 (TPU 비용 회당 17만원 정도)

• 결과적으로는 epoch 5.0 이내에서 최적 모델을 발견함

html_tags = ['<table>', '<caption>', '</caption>', '<tbody>', '<tr>', '<th>', '</th>', '</tr>', '<span>', '</span>', '<td>', '<a>', '</a>', '<br/>', '</td>', '</tbody>', '</table>', '<p>', '<b>', '</b>', '</p>', '<div>', '<input>', '<h2>', '</h2>', '<label>', '</label>', '</div>', '<ul>', '<li>', '</li>', '</ul>', '<img>', '<hr/>', '<abbr>', '</abbr>', '<s>', '</s>', '<!>', '<!!>', '<sup>', '</sup>', '<big>', '</big>', '<i>', '</i>', '<ol>', '</ol>', '<dl>', '<dt>', '</dt>', '<dd>', '</dd>', '</dl>', '<sub>', '</sub>', '<strong>', '</strong>', '<small>', '</small>', '<br>', '<a!!>', '<map>', '<area>', '</map>', '<pre>', '</pre>', '<noscript>', '</noscript>', '<mokcha>','</mokcha>' ]

html_marks = ['[', '(', ')', '[', '(', '<', '>', ')', '(', ')', '<', '(', ')', '.', ')', ']', ']', '-', '(', ')', '.', '[', '?', '?', '?', '?', '?', ']', '#', '-', '.', '.', '?', '-', '?', '?', '?', '?', '!', '!', '(', ')', '(', ')', '(', ')', '*', '.', '-', '*', '.', '*', '.', '.', '(', ')', '(', ')', '(', ')', '.', '!', '?', '?', '?', '-', '.', '?', '?', '{', '}' ]

Page 53: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

52

KorQuAD 2.0 해결에효과가있었던시도들

• BERT를 학습할 때부터 Vocab에 여분의 충분한 공간을 확보

• 추후 단어 추가의 목적으로 여유 공간 확보하고, 이 공간에 HTML Tag를 넣어서 KorQuAD 2.0 학습

• <table>, <td> 등의 HTML Tag가 <, table, >로 분리되지 않음

• 답이 테이블이나 본문의 전체인 경우

• <mokcha> 항목의 제목 </mokcha>로 하고 정답의 위치를 조정

• Table의 길이가 Span을 초과가는 경우도 많음

• 추론을 위해서 첫 페이지는 목차 페이지를 만들어서 삽입함

• 추론을 위해서 Wiki 문서를 항목을 기준으로 다수의 섹션으로 나누어 검토

• 하나의 긴 문서로 하지 않고, 섹션 별로 부속 문서를 만들어서 추론을 수행

• 전체가 하나의 문서라고 생각하고 작성된 token_is_max_context 검사를 변경

• HTML Tag, 문자 처리

• 리스트형 섹션에 대해서는 HTML Tag를 제거한 버젼과 HTML Tag를 포함한 버젼을 모두 추론에 적용

• 테이블이 포함된 섹션에 대해서는 HTML Tag를 포함한 버젼을 추론에 적용

• 테이블과 리스트가 없는 섹션에 대해서는 HTML Tag를 제거한 버젼을 추론에 적용

• <a> <b> 테그는 형태소 분석에 방해가 되므로 처음부터 제거

• Wiki 문서에는 다수의 공백문자가 존재함 : '\u2009', 8220, 0x202F, 0x00A0, 160, 0x2000, 0x200B, . .

Page 54: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

53

KorQuAD 2.0의성적

• 1 : HanBert-54k-N

• 1675 ms EM : 55.28 , F1 : 71.19

• 2 : HanBert-90k-N

• 1642 ms EM : 54.28, F1 : 70.44

2020. 1. 2 현재

Page 55: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

54

KorQuAD 2.0 : TPU 학습은실패

• Epoch가 증가하면 성능이 나빠지는 경향 : Text와 Tag의 조절이 어려움 (?)

• 1770 문항의 Dev_03만 사용해서 성능 예측 (5개의 Dev file 중에 하나만 테스트해보아도 전체 성능 예측 가능)

• 최종 결과는 Dev_03 성능의 F1 : +2.5 ~ +3.2, EM : +3.7 ~ +4.3

Page 56: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

55

KorQuAD 2.0 : 준비중인모델들

• F1 74, EM 57 수준

• Train Set + Dev Set 4/5 약간 성능 향상

• Dev set 일부로 전체 성능 예측 가능

• 1770 문항의 Dev_03만 사용해서 최종 성능 예측

제출 버젼 예측버젼 실측 버젼

Page 57: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

56

KorQuAD 2.0 : Span model에서 Doc model로확장

• 현재의 버젼은 KorQuAD 1.0과 동일한 모델 사용

• 최대 512개 입력에 대해서 각 512개의 입력이 답변의 (시작, 끝)으로 채택될 점수 : 주변 Span은 고려하지 않음

• 문서의구조를 반영할 수있는 모델이필요함

• Wiki 문서는 구조화된 문서

• Table 부분의 Score와 Text 부분의 Score가 서로 영향받아야 함

• Span 모델은 Doc 모델과 별개로 학습이 가능

• Doc 모델은 Span 모델의 결과를 입력으로 학습

• 문서 모델은 attention이 있는 bidirectional GRU ?

제목

목차

개요

블럭

블럭

블럭

설명

리스트형

블럭

테이블형

공통형식

요약

하위 블럭 하위 블럭 하위 블럭

Page 58: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

57

KorQuAD 2.0 model - v2 : Coming Soon

• BERT의 출력과 문서의 구조가 어우러지는모델이 필요

제목

목차

개요

블럭

블럭

블럭

설명

리스트형

블럭

테이블형

공통형식

요약

하위 블럭 하위 블럭 하위 블럭

BiGRU

Bert

Page 59: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

58

추후계획

• HanBert-ML에 대해 추가적인 코퍼스 학습

• 현재 HanBert-N과 유사한 성능이 나오고 있음 : 코퍼스 다양성의 부족

• HanBert-54k-N 모델의 Open Source화

• 형태소 분석기 Moran을 포함한 Docker 이미지로 배포 예정

• KorQuAD 2.0에 적합한 Document Model 개발

• 연구용/교육용 : ㅁBUTTER-BLOCK

• 투명한 케이스로 컴퓨터 내부 관찰 가능

• 무선 공유기를 내장하여 어디서든 쉽게 사용

• 학습과 추론을 휘한 GPU 포함

• 고가 / 중가 / 저가로 3가지 HW 모델

• HanBert 모델 탑재 + GPT-2 모델 탑재

• nsmc 모델 : 감성 분석

• KorQuAD 1.0 모델 : 기계 독해

• GPT-2 모델 : 특허 글쓰기, 소설 쓰기

• 기업업무 자동화솔루션화

• 복수의 기업에서 HanBert를 활용한 기계독해 (기업용 테이블 위주, 계약서 검토 등)와 문서 요약의 니즈 있음

Page 60: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

59

정리

• 3차례에 걸쳐서 BERT 모델 학습 진행

• 1차 : 5개 모델 학습 : 연습용, TFRC 프로그램 활용

• 2차 : 10개 모델 학습 : 코퍼스 조합 + 모델 크기

• 3차 : 5개 모델 학습 : Vocab 2가지 + 모델 크기

• Corpus/Vocab/Steps의 양과 질이 Bert의 품질에 영향을미침

• 학습의 대상이 되는 Corpus의 품질과 양이 가장 큰 영향을 미침 (일반문서 vs 특허문서)

• Vocab의 양과 질이 Bert의 성격에 영향을 미침 (잘못된 Vocab, 54k / 90k Vocab)

• 학습 Step 수가 증가하면 Bert의 성능이 높아짐 (loss를 관찰하면서 종료시점 선택)

• HanBert의 성능 평가 : nsmc, korquad 1.0/2.0

• 90k Vocab이 대화체 (nsmc) (?), 54k Vocab이 문어체 (korquad)에서 성능이 높음

• 1.0의 경우에 Large 모델의 성능을 Normal 모델이 따라가기 어려움

• 2.0의 경우에 테이블 이해 가능성 확인, 문서 이해 모델이 필요함 (Bert의 한계를 넘어섬)

• 현실의 문제를 풀기 위해서는 Bert 모델과 더불어 문서 구조 모델이 필요

• "정답이 아니라고말하기 어려운 답변" :

• "네이버는 . . . . 오디오 콘텐츠를 유튜브에 맞설 핵심 역량으로 삼고 있다."

• 무엇으로 유튜브에 맞서? "네이버" 무엇으로 유투브에 맞서? "오디오 콘텐츠"

Page 61: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

60

감사합니다.

조영환

[email protected]

https://twoblockai.com

(주) 투블럭에이아이

Page 62: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

61

(참고) 구글 Cloud TPU 사용

• 프로젝트 생성, VM 인스턴스, 디스크, TPU

Page 63: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

62

(참고) TPU 생성

• TPU

• TPU 노드 만들기를 클릭하여 TPU를 세팅

• 이름은 계정 이름과 동일하게 설정

• TPU v3는 europe-west4-a, us-central1-a, us-central1-b 에서만 가능하며 가격이더 싼 미국 지역을 선택

• Tensorflow 버전은 10.100.1.121서버와동일하게 1.11로 설정

• IP 주소 범위는 예시 그대로 입력

Page 64: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

63

(참고) VM 인스턴스생성

• 부팅 디스크 항목에서 변경을 누르면 사용 가능한 부팅 디스크 목록이 나옴

• 아래로 스크롤을 내려서 BERT 저자가

사용한 Tensorflow 1.11버전에 맞는

이미지를 선택

Page 65: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

64

(참고) VM 인스턴스생성

• 왼쪽 메뉴 중 VM 인스턴스를 클릭하고, 만들기를 클릭

• VM 인스턴스의 이름도 TPU를 만들 때처럼 계정 이름과 동일하게 설정

• 리전과 영역을 TPU와 동일하게 설정

• 맞춤 설정을 누르면 코어와 메모리를 조절

• CPU와 메모리는 낮아도 무방함

Page 66: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

65

(참고) VM 인스턴스생성

• 부팅디스크항목에서변경을누르면사용가능한부팅디스크목록이나옴

• 아래로스크롤을내려서 BERT 저자가사용한 Tensorflow 1.11버전에맞는이미지를선택

Page 67: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

66

(참고) VM 인스턴스접속

• gcloud를 설치

• 설치의 마지막 단계인 ./google-cloud-sdk/bin/gcloud init 를 실행하면You must log in to continue. Would you like to log in (Y/n)? 이 나옴Y를 입력하면 브라우저에서 권한을 확인하는 화면에서 확인을 클릭

• You are logged in as: Pick cloud project to use:로그인이 됐다는 메세지와 함께 프로젝트를 고르라고 하면, 프로젝트 번호를 입력

• 번호를 입력해 기본 지역을 설정

$ gcloud compute ssh tbai-korquad

• 학습에 필요한 파일들을 클라우드 VM으로 업로드

• $ gcloud compute scp run_pretraining.py modeling.py optimization.py bert_config.json tbai-bert:/home/bert

Page 68: 한국어 BERT, HanBert의개발과정과 · 2020-01-03 · • 연습용TPU를V3-8, 5개활용 • 입력크기: 1024, 512 • 각Step 을128만번까지돌려보기 • loss가떨어지는것을관찰하기

67

(참고) 학습실행

• 클라우드 VM에서 학습 명령을 실행

• 실행 예시 :

• python run_pretraining.py --bert_config_file bert_config.json--input_file gs://버킷이름/데이터파일1,gs://버킷이름/데이터파일2 --output_dir gs://훈련결과저장폴더 --do_train --train_batch_size 208 --num_train_steps 5000000 --iterations_per_loop 100 --keep_checkpoint_max 5 --save_checkpoints-steps 20000 --use_tpu --tpu_name tpu이름 --do_eval

• 클라우드 스토리지의 파일을 접근하기 위해서 “gs://” 를 앞에 붙임

• train_batch_size는 gpu 메모리가 허용하는 가장 큰 값을 사용

• tpu chip의 개수인 8의 배수여야 함

• BERT 논문에서는 train_batch_size를 256으로 하여 1,000,000 step만큼 학습하였음

• 이를 기준으로 train_batch_size * num_train_steps이 1,000,000,000이 되도록num_train_steps를 늘림

• 충분하게 큰 수로 하고, 학습 과정에서 loss가 1.0 이하로 떨어지면 중단 가능

• 학습 과정에서 loss가 6.0 (?) 이상으로 계속 증가하면 중단하고 학습 결과를 버림


Recommended