|
--- |
|
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" ์ฝ๋ ํ์ฉ |
|
|