File size: 6,643 Bytes
0137895 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
---
license: cc-by-nc-3.0
---
# ๊ณผํ๊ธฐ์ ๋ถ์ผ BERT ์ฌ์ ํ์ต ๋ชจ๋ธ (KorSci BERT)
๋ณธ KorSci BERT ์ธ์ด๋ชจ๋ธ์ ํ๊ตญ๊ณผํ๊ธฐ์ ์ ๋ณด์ฐ๊ตฌ์๊ณผ ํ๊ตญํนํ์ ๋ณด์์ด ๊ณต๋์ผ๋ก ์ฐ๊ตฌํ ๊ณผ์ ์ ๊ฒฐ๊ณผ๋ฌผ ์ค ํ๋๋ก, ๊ธฐ์กด [Google BERT base](https://github.com/google-research/bert) ๋ชจ๋ธ์ ์ํคํ
์ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ํ๊ตญ ๋
ผ๋ฌธ & ํนํ ์ฝํผ์ค ์ด 97G (์ฝ 3์ต 8์ฒ๋ง ๋ฌธ์ฅ)๋ฅผ ์ฌ์ ํ์ตํ ๋ชจ๋ธ์ด๋ค.
## Train dataset
|Type|Corpus|Sentences|Avg sent length|
|--|--|--|--|
|๋
ผ๋ฌธ|15G|72,735,757|122.11|
|ํนํ|82G|316,239,927|120.91|
|ํฉ๊ณ|97G|388,975,684|121.13|
## Model architecture
- attention_probs_dropout_prob:0.1
- directionality:"bidi"
- hidden_act:"gelu"
- hidden_dropout_prob:0.1
- hidden_size:768
- initializer_range:0.02
- intermediate_size:3072
- max_position_embeddings:512
- num_attention_heads:12
- num_hidden_layers:12
- pooler_fc_size:768
- pooler_num_attention_heads:12
- pooler_num_fc_layers:3
- pooler_size_per_head:128
- pooler_type:"first_token_transform"
- type_vocab_size:2
- vocab_size:15330
## Vocabulary
- Total 15,330 words
- Included special tokens ( [PAD], [UNK], [CLS], [SEP], [MASK] )
- File name : vocab_kisti.txt
## Language model
- Model file : model.ckpt-262500 (Tensorflow ckpt file)
## Pre training
- Trained 128 Seq length 1,600,000 + 512 Seq length 500,000 ์คํ
ํ์ต
- ๋
ผ๋ฌธ+ํนํ (97 GB) ๋ง๋ญ์น์ 3์ต 8์ฒ๋ง ๋ฌธ์ฅ ๋ฐ์ดํฐ ํ์ต
- NVIDIA V100 32G 8EA GPU ๋ถ์ฐํ์ต with [Horovod Lib](https://github.com/horovod/horovod)
- NVIDIA [Automixed Mixed Precision](https://developer.nvidia.com/automatic-mixed-precision) ๋ฐฉ์ ์ฌ์ฉ
## Downstream task evaluation
๋ณธ ์ธ์ด๋ชจ๋ธ์ ์ฑ๋ฅํ๊ฐ๋ ๊ณผํ๊ธฐ์ ํ์ค๋ถ๋ฅ ๋ฐ ํนํ ์ ์งํนํ๋ถ๋ฅ([CPC](https://www.kipo.go.kr/kpo/HtmlApp?c=4021&catmenu=m06_07_01)) 2๊ฐ์ง์ ํ์คํฌ๋ฅผ ํ์ธํ๋ํ์ฌ ํ๊ฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์์ผ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
|Type|Classes|Train|Test|Metric|Train result|Test result|
|--|--|--|--|--|--|--|
|๊ณผํ๊ธฐ์ ํ์ค๋ถ๋ฅ|86|130,515|14,502|Accuracy|68.21|70.31|
|ํนํCPC๋ถ๋ฅ|144|390,540|16,315|Accuracy|86.87|76.25|
# ๊ณผํ๊ธฐ์ ๋ถ์ผ ํ ํฌ๋์ด์ (KorSci Tokenizer)
๋ณธ ํ ํฌ๋์ด์ ๋ ํ๊ตญ๊ณผํ๊ธฐ์ ์ ๋ณด์ฐ๊ตฌ์๊ณผ ํ๊ตญํนํ์ ๋ณด์์ด ๊ณต๋์ผ๋ก ์ฐ๊ตฌํ ๊ณผ์ ์ ๊ฒฐ๊ณผ๋ฌผ ์ค ํ๋์ด๋ค. ๊ทธ๋ฆฌ๊ณ , ์ ์ฌ์ ํ์ต ๋ชจ๋ธ์์ ์ฌ์ฉ๋ ์ฝํผ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ช
์ฌ ๋ฐ ๋ณตํฉ๋ช
์ฌ ์ฝ 600๋ง๊ฐ์ ์ฌ์ฉ์์ฌ์ ์ด ์ถ๊ฐ๋ [Mecab-ko Tokenizer](https://bitbucket.org/eunjeon/mecab-ko/src/master/)์ ๊ธฐ์กด [BERT WordPiece Tokenizer](https://github.com/google-research/bert)๊ฐ ๋ณํฉ๋์ด์ง ํ ํฌ๋์ด์ ์ด๋ค.
## ๋ชจ๋ธ ๋ค์ด๋ก๋
http://doi.org/10.23057/46
## ์๊ตฌ์ฌํญ
### ์์ ํ๋ข Mecab ์ค์น & ์ฌ์ฉ์์ฌ์ ์ถ๊ฐ
Installation URL: https://bitbucket.org/eunjeon/mecab-ko-dic/src/master/
mecab-ko > 0.996-ko-0.9.2
mecab-ko-dic > 2.1.1
mecab-python > 0.996-ko-0.9.2
### ๋
ผ๋ฌธ & ํนํ ์ฌ์ฉ์ ์ฌ์
- ๋
ผ๋ฌธ ์ฌ์ฉ์ ์ฌ์ : pap_all_mecab_dic.csv (1,001,328 words)
- ํนํ ์ฌ์ฉ์ ์ฌ์ : pat_all_mecab_dic.csv (5,000,000 words)
### konlpy ์ค์น
pip install konlpy
konlpy > 0.5.2
## ์ฌ์ฉ๋ฐฉ๋ฒ
import tokenization_kisti as tokenization
vocab_file = "./vocab_kisti.txt"
tokenizer = tokenization.FullTokenizer(
vocab_file=vocab_file,
do_lower_case=False,
tokenizer_type="Mecab"
)
example = "๋ณธ ๊ณ ์์ ์ฃผ๋ก ์ผํ์ฉ ํฉ์ฑ์ธ์ ์ก์ ์ง์ด๋ฃ์ด ๋ฐ๋ดํ๋ ์ธ์ ์กํฌ์ ๋ด๋ถ๋ฅผ ์ํธ์์ผ๋ก ์ด์ค์ฐฉํ๋ ์ธ์ ์ก์ด ๋ฐฐ์ถ๋๋ ์ ๋จ๋ถ ์ชฝ์ผ๋ก ๋ด๋ฒฝ์ ํ์ํ๊ฒ ํ์ฑํ์ฌ์ ๋ด๋ถ์ ๋ค์ด์๋ ์ธ์ ์ก์ ์์ง์ง ์ ์๋๋ก ํ๋ ํฉ์ฑ์ธ์ ์กํฌ์ ๊ดํ ๊ฒ์ด๋ค."
tokens = tokenizer.tokenize(example)
encoded_tokens = tokenizer.convert_tokens_to_ids(tokens)
decoded_tokens = tokenizer.convert_ids_to_tokens(encoded_tokens)
print("Input example ===>", example)
print("Tokenized example ===>", tokens)
print("Converted example to IDs ===>", encoded_tokens)
print("Converted IDs to example ===>", decoded_tokens)
============ Result ================
Input example ===> ๋ณธ ๊ณ ์์ ์ฃผ๋ก ์ผํ์ฉ ํฉ์ฑ์ธ์ ์ก์ ์ง์ด๋ฃ์ด ๋ฐ๋ดํ๋ ์ธ์ ์กํฌ์ ๋ด๋ถ๋ฅผ ์ํธ์์ผ๋ก ์ด์ค์ฐฉํ๋ ์ธ์ ์ก์ด ๋ฐฐ์ถ๋๋ ์ ๋จ๋ถ ์ชฝ์ผ๋ก ๋ด๋ฒฝ์ ํ์ํ๊ฒ ํ์ฑํ์ฌ์ ๋ด๋ถ์ ๋ค์ด์๋ ์ธ์ ์ก์ ์์ง์ง ์ ์๋๋ก ํ๋ ํฉ์ฑ์ธ์ ์กํฌ์ ๊ดํ ๊ฒ์ด๋ค.
Tokenized example ===> ['๋ณธ', '๊ณ ์', '์', '์ฃผ๋ก', '์ผํ์ฉ', 'ํฉ์ฑ', '##์ธ', '##์ ', '##์ก', '์', '์ง', '##์ด', '##๋ฃ', '์ด', '๋ฐ๋ด', 'ํ', '๋', '์ธ์ ', '##์ก', '##ํฌ', '์', '๋ด๋ถ', '๋ฅผ', '์ํธ', '์', '์ผ๋ก', '์ด', '##์ค', '์ฐฉ', '##ํ', '๋', '์ธ์ ', '##์ก', '์ด', '๋ฐฐ์ถ', '๋', '๋', '์ ๋จ๋ถ', '์ชฝ', '์ผ๋ก', '๋ด๋ฒฝ', '์', 'ํ', '##์', 'ํ', '๊ฒ', 'ํ์ฑ', 'ํ', '์ฌ์', '๋ด๋ถ', '์', '๋ค', '์ด', '์', '๋', '์ธ์ ', '##์ก', '์', '์', '์ง', '์ง', '์', '์', '๋๋ก', 'ํ', '๋', 'ํฉ์ฑ', '##์ธ', '##์ ', '์ก', '##ํฌ', '์', '๊ดํ', '๊ฒ', '์ด', '๋ค', '.']
Converted example to IDs ===> [59, 619, 30, 2336, 8268, 819, 14100, 13986, 14198, 15, 732, 13994, 14615, 39, 1964, 12, 11, 6174, 14198, 14061, 9, 366, 16, 7267, 18, 32, 307, 14072, 891, 13967, 27, 6174, 14198, 14, 698, 27, 11, 12920, 1972, 32, 4482, 15, 2228, 14053, 12, 65, 117, 12, 4477, 366, 10, 56, 39, 26, 11, 6174, 14198, 15, 1637, 13709, 398, 25, 26, 140, 12, 11, 819, 14100, 13986, 377, 14061, 10, 487, 55, 14, 17, 13]
Converted IDs to example ===> ['๋ณธ', '๊ณ ์', '์', '์ฃผ๋ก', '์ผํ์ฉ', 'ํฉ์ฑ', '##์ธ', '##์ ', '##์ก', '์', '์ง', '##์ด', '##๋ฃ', '์ด', '๋ฐ๋ด', 'ํ', '๋', '์ธ์ ', '##์ก', '##ํฌ', '์', '๋ด๋ถ', '๋ฅผ', '์ํธ', '์', '์ผ๋ก', '์ด', '##์ค', '์ฐฉ', '##ํ', '๋', '์ธ์ ', '##์ก', '์ด', '๋ฐฐ์ถ', '๋', '๋', '์ ๋จ๋ถ', '์ชฝ', '์ผ๋ก', '๋ด๋ฒฝ', '์', 'ํ', '##์', 'ํ', '๊ฒ', 'ํ์ฑ', 'ํ', '์ฌ์', '๋ด๋ถ', '์', '๋ค', '์ด', '์', '๋', '์ธ์ ', '##์ก', '์', '์', '์ง', '์ง', '์', '์', '๋๋ก', 'ํ', '๋', 'ํฉ์ฑ', '##์ธ', '##์ ', '์ก', '##ํฌ', '์', '๊ดํ', '๊ฒ', '์ด', '๋ค', '.']
### Fine-tuning with KorSci-Bert
- [Google Bert](https://github.com/google-research/bert)์ Fine-tuning ๋ฐฉ๋ฒ ์ฐธ๊ณ
- Sentence (and sentence-pair) classification tasks: "run_classifier.py" ์ฝ๋ ํ์ฉ
- MRC(Machine Reading Comprehension) tasks: "run_squad.py" ์ฝ๋ ํ์ฉ
|