模型:
snunlp/KR-BERT-char16424
这是首尔国立大学计算语言学实验室开发的针对韩语的小规模BERT模型的发布版本,其性能与其他模型相当甚至更好,详见文献 KR-BERT: A Small-Scale Korean-Specific Language Model 。
| Mulitlingual BERT (Google) | KorBERT (ETRI) | KoBERT (SKT) | KR-BERT character | KR-BERT sub-character | |
|---|---|---|---|---|---|
| vocab size | 119,547 | 30,797 | 8,002 | 16,424 | 12,367 |
| parameter size | 167,356,416 | 109,973,391 | 92,186,880 | 99,265,066 | 96,145,233 |
| data size | - (The Wikipedia data for 104 languages) | 23GB 4.7B morphemes | - (25M sentences, 233M words) | 2.47GB 20M sentences, 233M words | 2.47GB 20M sentences, 233M words |
| Model | Masked LM Accuracy |
|---|---|
| KoBERT | 0.750 |
| KR-BERT character BidirectionalWordPiece | 0.779 |
| KR-BERT sub-character BidirectionalWordPiece | 0.769 |
韩语文本基本上由韩语音节字符表示,可以分解为亚字符或字形素。为了适应这种特性,我们在两种不同的语料表示法(音节字符和亚字符)上训练了一个新的词汇表和BERT模型。
如果要使用我们的亚字符模型,请使用以下代码对数据进行预处理。
import torch
from transformers import BertConfig, BertModel, BertForPreTraining, BertTokenizer
from unicodedata import normalize
tokenizer_krbert = BertTokenizer.from_pretrained('/path/to/vocab_file.txt', do_lower_case=False)
# convert a string into sub-char
def to_subchar(string):
return normalize('NFKD', string)
sentence = '토크나이저 예시입니다.'
print(tokenizer_krbert.tokenize(to_subchar(sentence)))
我们使用双向WordPiece模型来降低搜索成本,同时保持选择的可能性。该模型在前向和后向方向上应用BPE算法,得到两个候选项,并选择频率更高的那个。
| Mulitlingual BERT | KorBERT character | KoBERT | KR-BERT character WordPiece | KR-BERT character BidirectionalWordPiece | KR-BERT sub-character WordPiece | KR-BERT sub-character BidirectionalWordPiece | |
|---|---|---|---|---|---|---|---|
| 냉장고 nayngcangko "refrigerator" | 냉#장#고 nayng#cang#ko | 냉#장#고 nayng#cang#ko | 냉#장#고 nayng#cang#ko | 냉장고 nayngcangko | 냉장고 nayngcangko | 냉장고 nayngcangko | 냉장고 nayngcangko |
| 춥다 chwupta "cold" | [UNK] | 춥#다 chwup#ta | 춥#다 chwup#ta | 춥#다 chwup#ta | 춥#다 chwup#ta | 추#ㅂ다 chwu#pta | 추#ㅂ다 chwu#pta |
| 뱃사람 paytsalam "seaman" | [UNK] | 뱃#사람 payt#salam | 뱃#사람 payt#salam | 뱃#사람 payt#salam | 뱃#사람 payt#salam | 배#ㅅ#사람 pay#t#salam | 배#ㅅ#사람 pay#t#salam |
| 마이크 maikhu "microphone" | 마#이#크 ma#i#khu | 마이#크 mai#khu | 마#이#크 ma#i#khu | 마이크 maikhu | 마이크 maikhu | 마이크 maikhu | 마이크 maikhu |
| TensorFlow | PyTorch | |||
|---|---|---|---|---|
| character | sub-character | character | sub-character | |
| WordPiece tokenizer | 1234321 | 1235321 | 1236321 | 1237321 |
| Bidirectional WordPiece tokenizer | 1238321 | 1239321 | 12310321 | 12311321 |
如果您想使用我们模型的亚字符版本,请将 subchar 参数设置为 True 。
如果您想使用原始的BERT WordPiece分词器,请将 tokenizer 参数设置为 bert ,如果您想使用我们的双向WordPiece分词器,请将其设置为 ranked 。
tensorflow: 在下载我们的预训练模型后,将它们放在 krbert_tensorflow 目录下的 models 目录中。
pytorch: 在下载我们的预训练模型后,将它们放在 krbert_pytorch 目录下的 pretrained 目录中。
# pytorch
python3 train.py --subchar {True, False} --tokenizer {bert, ranked}
# tensorflow
python3 run_classifier.py \
--task_name=NSMC \
--subchar={True, False} \
--tokenizer={bert, ranked} \
--do_train=true \
--do_eval=true \
--do_predict=true \
--do_lower_case=False\
--max_seq_length=128 \
--train_batch_size=128 \
--learning_rate=5e-05 \
--num_train_epochs=5.0 \
--output_dir={output_dir}
pytorch代码结构参考文献 https://github.com/aisolab/nlp_implementation 。
| multilingual BERT | KorBERT | KoBERT | KR-BERT character WordPiece | KR-BERT character Bidirectional WordPiece | KR-BERT sub-character WordPiece | KR-BERT sub-character Bidirectional WordPiece | |
|---|---|---|---|---|---|---|---|
| pytorch | - | 89.84 | 89.01 | 89.34 | 89.38 | 89.20 | 89.34 |
| tensorflow | 87.08 | 85.94 | n/a | 89.86 | 90.10 | 89.76 | 89.86 |
如果您使用了这些模型,请引用以下论文:
@article{lee2020krbert,
title={KR-BERT: A Small-Scale Korean-Specific Language Model},
author={Sangah Lee and Hansol Jang and Yunmee Baik and Suzi Park and Hyopil Shin},
year={2020},
journal={ArXiv},
volume={abs/2008.03979}
}
nlp.snu@gmail.com