Awesome
HanBert-Transformers
HanBert on ๐ค Huggingface Transformers ๐ค
Details
- HanBert Tensorflow ckpt๋ฅผ Pytorch๋ก ๋ณํ
- ๊ธฐ์กด์ Optimizer ๊ด๋ จ Parameter๋ ์ ๊ฑฐํ์ฌ ๊ธฐ์กด์ 1.43GB์์ 488MB๋ก ์ค์์ต๋๋ค.
- ๋ณํ ์ Optimizer ๊ด๋ จ ํ๋ผ๋ฏธํฐ๋ฅผ Skip ํ์ง ๋ชปํ๋ ์ด์๊ฐ ์์ด ํด๋น ๋ถ๋ถ์ ๊ณ ์ณ์ ๋ณํํ์ต๋๋ค. (ํด๋น ์ด์ ๊ด๋ จ PR)
# transformers bert TF_CHECKPOINT TF_CONFIG PYTORCH_DUMP_OUTPUT
$ transformers bert HanBert-54kN/model.ckpt-3000000 \
HanBert-54kN/bert_config.json \
HanBert-54kN/pytorch_model.bin
- Tokenizer๋ฅผ ์ํ์ฌ
tokenization_hanbert.py
ํ์ผ์ ์๋ก ์ ์- Transformers์ tokenization ๊ด๋ จ ํจ์ ์ง์ (
convert_tokens_to_ids
,convert_tokens_to_string
,encode_plus
...)
- Transformers์ tokenization ๊ด๋ จ ํจ์ ์ง์ (
How to Use
-
๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
- torch>=1.1.0
- transformers>=2.2.2
-
๋ชจ๋ธ ๋ค์ด๋ก๋ ํ ์์ถ ํด์
- ๊ธฐ์กด์ HanBert์์๋ tokenization ๊ด๋ จ ํ์ผ์
/usr/local/moran
์ ๋ณต์ฌํด์ผ ํ์ง๋ง, ํด๋น ํด๋ ์ด์ฉ ์ ๊ทธ๋๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. - ๋ค์ด๋ก๋ ๋งํฌ (Pretrained weight + Tokenizer tool)
- ๊ธฐ์กด์ HanBert์์๋ tokenization ๊ด๋ จ ํ์ผ์
-
tokenization_hanbert.py ์ค๋น
- Tokenizer์ ๊ฒฝ์ฐ Ubuntu ํ๊ฒฝ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- ํ๋จ์ ํํ๋ก ๋๋ ํ ๋ฆฌ๊ฐ ์ธํ ์ด ๋์ด ์์ด์ผ ํฉ๋๋ค.
.
โโโ ...
โโโ HanBert-54kN-torch
โ โโโ config.json
โ โโโ pytorch_model.bin
โ โโโ vocab_54k.txt
โ โโโ libmoran4dnlp.so
โ โโโ moran.db
โ โโโ udict.txt
โ โโโ uentity.txt
โโโ tokenization_hanbert.py
โโโ ...
Example
1. Model
>>> import torch
>>> from transformers import BertModel
>>> model = BertModel.from_pretrained('HanBert-54kN-torch')
>>> input_ids = torch.LongTensor([[31, 51, 99], [15, 5, 0]])
>>> token_type_ids = torch.LongTensor([[0, 0, 0], [0, 0, 0]])
>>> attention_mask = torch.LongTensor([[1, 1, 1], [1, 1, 0]])
>>> sequence_output, pooled_output = model(input_ids, attention_mask, token_type_ids)
>>> sequence_output
tensor([[[-0.0938, -0.5030, 0.3765, ..., -0.4880, -0.4486, 0.3600],
[-0.6036, -0.1008, -0.2344, ..., -0.6606, -0.5762, 0.1021],
[-0.4353, 0.0970, -0.0781, ..., -0.7686, -0.4418, 0.4109]],
[[-0.7117, 0.2479, -0.8164, ..., 0.1509, 0.8337, 0.4054],
[-0.7867, -0.0443, -0.8754, ..., 0.0952, 0.5044, 0.5125],
[-0.8613, 0.0138, -0.9315, ..., 0.1651, 0.6647, 0.5509]]],
grad_fn=<AddcmulBackward>)
2. Tokenizer
>>> from tokenization_hanbert import HanBertTokenizer
>>> tokenizer = HanBertTokenizer.from_pretrained('HanBert-54kN-torch')
>>> text = "๋๋ ๊ฑธ์ด๊ฐ๊ณ ์๋ ์ค์
๋๋ค. ๋๋๊ฑธ์ด ๊ฐ๊ณ ์๋ ์ค์
๋๋ค. ์ ๋ถ๋ฅ๋๊ธฐ๋ ํ๋ค. ์ ๋จน๊ธฐ๋ ํ๋ค."
>>> tokenizer.tokenize(text)
['๋', '~~๋', '๊ฑธ์ด๊ฐ', '~~๊ณ ', '์', '~~๋', '์ค', '~~์
', '~~๋๋ค', '.', '๋', '##๋๊ฑธ', '##์ด', '๊ฐ', '~~๊ณ ', '~์', '~~๋', '์ค', '~~์
', '~~๋๋ค', '.', '์', '๋ถ๋ฅ', '~~๋', '~~๊ธฐ', '~~๋', 'ํ', '~~๋ค', '.', '์', '๋จน', '~~๊ธฐ', '~~๋', 'ํ', '~~๋ค', '.']
3. Test with python file
$ python3 test_hanbert.py --model_name_or_path HanBert-54kN-torch
$ python3 test_hanbert.py --model_name_or_path HanBert-54kN-IP-torch
Result on Subtask
max_seq_len = 50
์ผ๋ก ์ค์
NSMC (acc) | Naver-NER (F1) | |
---|---|---|
HanBert-54kN | 90.16 | 87.31 |
HanBert-54kN-IP | 88.72 | 86.57 |
KoBERT | 89.63 | 86.11 |
Bert-multilingual | 87.07 | 84.20 |
- NSMC (Naver Sentiment Movie Corpus) (Implementation of HanBert-nsmc)
- Naver NER (NER task on Naver NLP Challenge 2018) (Implementation of HanBert-NER)