Skip to content

KLUE RoBERTa의 special_token_id 이슈

Jihyung Moon edited this page Jul 27, 2021 · 1 revision

Issue Description

첫 배포 때 klue/robertaspecial_token_id가 학습 시 klue/roberta와 달라서 fine-tuning 시 special_token_id가 모두 꼬임

Why did it happen?

1. fairseq 코드 내에 별도의 지정이 없는 경우, special_tokenspecial_token_id 모두 고정이 되어있음

bos: 0
pad: 1
eos: 2
unk: 3
mask: 4

2. 초기 klue/roberta tokenizerBertTokenizer를 기반으로 하고 있고 bertspecial_token_index를 그대로 사용하고 있음 (아래 참고)

pad: 0
unk: 1
cls: 2
sep: 3
mask: 4

How we resolved

1. Pretraining 때 사용된 special_token 순서로 vocab.txt를 변경

pad: 0 -> 1
unk: 1 -> 3
cls: 2 -> 0
sep: 3 -> 2
mask: 4 -> 4

2. fairseq에서 pretraining 할 때 사용한 bos, eosclssep으로 mapping

  • tokenizer_config.jsonspecial_tokens_map.jsonbos_tokeneos_token 추가
    • tokenizer_config.json
{
  "do_lower_case": false,
  "do_basic_tokenize": true,
  "never_split": null,
  "unk_token": "[UNK]",
  "sep_token": "[SEP]",
  "pad_token": "[PAD]",
  "cls_token": "[CLS]",
  "mask_token": "[MASK]",
  "bos_token": "[CLS]",
  "eos_token": "[SEP]",
  "tokenize_chinese_chars": true,
  "strip_accents": null,
  "model_max_length": 512
}
    • special_tokens_map.json
{
  "unk_token": "[UNK]",
  "sep_token": "[SEP]",
  "pad_token": "[PAD]",
  "cls_token": "[CLS]",
  "mask_token": "[MASK]",
  "bos_token": "[CLS]",
  "eos_token": "[SEP]"
}