模型:
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