Bert-Multilingual model을 이용해 KorQuAD 수행해보기 Part 1 훈련 및 평가

 
지난 2018년 10월 구글에서 기존 SQuAD 1.1 task에서 human performance를 넘어서는 BERT 모델에 대한 논문을 발표했다. SQuAD는 현재는 SQuAD dataset이 2.0으로 업그레이드( 더 어렵게) 되었고, 구글이 BERT로 SQuAD 2.0에서도 1등을 한 이후(2018. 11/15), 여러 팀들이 BERT에 여러 아이디어를 추가해 구글을 넘어서는 결과를 만들어냈다(아직까지 human performance를 넘지는 못했다). 이처럼 BERT 모델은 현재 NLP 분야에서 기본적으로 응용해야 하는, 꼭 알아야 되는 모델이 되었다.

그리고 지난 12월 LG CNS에서 한국어로 된 SQuAD 1.0과 같은(2.0와 같은 형식은 아니다.) 데이터셋 KorQuAD1.0을 공개했다. https://korquad.github.io/

그래서 BERT 모델과 KorQuAD 데이터셋을 이용해 QA task를 수행하는 과정을 정리해보려고 한다.그리고 과연 BERT를 한국어에 적용했을 때 성능은 얼마나 좋을 지도 확인할 수 있는 좋은 기회이기도 하다.
 

모델 준비

*유의 사항
BERT 모델을 train, inference(predict)에 이용하기 위해선 최소한 8G의 gpu 메모리가 필요한 것 같다. 1060 6g 모델에서는 out of memory가 뜨고 codalab의 Tesla m60 8g gpu를 썼을 때는 괜찮았다.

영어 모델을 한국어에 적용하는 과정은 얼핏 생각하기에 어려울 수도 있겠지만 구글이 친절하게(무섭게도) Multilingual BERT 모델을 공개해 놓았다. 이 모델은 100개 이상의 언어에 적용할 수 있다. ㄷㄷㄷ...

https://github.com/google-research/bert
에 가면 Readme 파일 제일 윗부분에 아래 그림처럼 링크가 걸려있다.

파란 글씨 BERT-Base, Multilingual Cased를 누르면 압축파일이 다운받아지고, 압축을 풀면 된다.

 

데이터셋 다운로드

위에 써 있는대로 https://korquad.github.io/ 에서 데이터셋을 다운받을 수 있다.
train, dev 데이터와 evaluate script까지 다운로드 받는다.
 

Fine-tuning 

이제 Pre-trained 모델을 KorQuAD task에 맞게 fine-tuning하기 위해 https://github.com/google-research/bert repository를 clone하거나 다운로드 받는다.

이제 준비가 다 끝났다.
argument를 맞춰서 실행해주면 된다.

python run_squad.py
--bert_config_file "pretrained 모델 폴더의 bert_config.json"
--vocab_file "pretrained 모델 폴더의 vocab.txt"
--output_dir "훈련된 모델이 저장될 폴더" (prediction 결과도 이 폴더에 저장된다.)
--do_train (훈련을 하겠다는 옵션)
--train_file "KorQuAD  데이터셋 폴더의 KorQuAD_v1.0_train.json"
--do_predict (predict 하겠다는 옵션)
--predict_file "KorQuAD 데이터셋 폴더의 KorQuAD_v1.0_dev.json"
--do_lower_case=false (현재 다운받은 Cased 모델은 이 옵션을 적용하지 않는다.)
--max_seq_length 적당히
--train_batch_size 적당히
--init_checkpoint "pretrained 모델 폴더"

max_seq_length와 train_batch_size 옵션은 메모리 사용량과 관계가 있다.
아래와 같이 구글에서 12G 메모리 기준으로 max_seq_length와 train_batch_size를 얼마로 해야 좋은지 실험한 결과를 공개했다.
이를 참고하여 쓰는 gpu의 메모리에 맞게 값을 조정하면 되겠다.

그 외 메모리와 관련된 추가적인 사항은 https://github.com/google-research/bert#out-of-memory-issues 를 참고하면 된다.

gpu의 성능에 따라 다르겠지만 훈련에는 대략 2~5시간 정도 소요될 것으로 예상된다.
epoch는 기본으로 3으로 설정되어 있다.
 

점수 평가하기

훈련이 잘 끝났다면 output_dir에 훈련된 모델 파일과 prediction.json 파일이 생겼을 것이다.
점수를 평가하기 위한 명령을 실행하여 점수를 확인해 본다.

python evaluate-v1.0.py KorQuAD_v1.0_dev.json predictions.json
evaluate-v1.0.py는 KorQuAD 홈페이지에서 받을 수 있으며 3가지 파일의 위치를 잘 지정해서 실행하면 내가 훈련한 모델이 낸 답들을 평가할 수 있다.

꽤 높이 나와서 놀랐다.
내가 한 건 단순 다운로드 & 실행 뿐인데...


이제 내가 훈련한 모델을 KorQuAD leaderboard에 등록할 차례이다.
이 부분에 대한 포스트는 다음에 작성하도록 하겠다.

여기까지 수고 많으셨습니다.

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

[출처] http://mlgalaxy.blogspot.com/2019/01/bert-multilingual-model-korquad-part-1.html

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 96377
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 87130
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 103952
22 Docker에서 SQL Server 컨테이너 이미지 구성 file 졸리운_곰 2020.01.23 1721
21 MSSQL 설치형 한글 환경으로 변경 file 졸리운_곰 2020.01.23 3086
20 PRIMARY KEY 와 FOREIGN KEY 를 전부 뽑아주는 쿼리 졸리운_곰 2018.12.16 1929
19 [MSSQL] CASE 문 . 조건에 따라 값 정하기 ! CASE WHEN THEN 졸리운_곰 2018.07.24 1763
18 Track Data Changes (SQL Server) file 졸리운_곰 2018.07.02 1480
17 Docker가 있는 SQL Server 2017 컨테이너 이미지를 실행 하는 빠른 시작 file 졸리운_곰 2018.06.26 1160
16 [MSSQL] Management Studio 이용해 데이터베이스 생성하기 file 졸리운_곰 2018.06.17 1523
15 [MSSQL - GROUP BY HAVING 을 이용한 중복 데이타 체크] file 졸리운_곰 2018.06.15 1440
14 [SQL] select 한 결과로 update 처리, SQL한문장, How to UPDATE from SELECT in SQL Server 졸리운_곰 2018.01.22 1602
13 UNION으로 결과 집합 조합 졸리운_곰 2017.08.27 1569
12 uniqueidentifier(Transact-SQL) file 가을의곰 2017.06.10 1919
11 하위 쿼리를 사용하여 다른 쿼리 또는 식에 쿼리 중첩 [MS-ACCESS : ms offce suit] 가을의곰 2017.06.10 1965
10 [MS-SQL] 테이블명, 컬럼명 검색 졸리운_곰 2017.04.17 2248
9 DB의 모든 테이블에서 데이터 검색 졸리운_곰 2017.04.17 1915
8 Microsoft SQL Server DBA 가이드-DBA라면 이정도는 알아야한다!!! file 졸리운_곰 2017.01.15 1503
7 SQL Server DBA 가이드 file 졸리운_곰 2017.01.15 1888
6 IDENTITY_INSERT가 OFF로 설정되면 ‘테이블명’ 테이블의 ID 열에 명시적 값을 삽입할 수 없습니다 file 졸리운_곰 2017.01.15 1795
5 MS SQL 서버에서 자동증가, autoincrement 처리 file 졸리운_곰 2017.01.15 1944
4 MS SQL 서버의 날짜, 시간 => 문자열 변환 포멧 설명 졸리운_곰 2017.01.15 1357
3 MS SQL 서버 코딩 표준 가이드 file 졸리운_곰 2017.01.14 1944
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED