long8v / PTIR

Paper Today I Read
19 stars 0 forks source link

[12] BBPE: Neural Machine Translation with Byte-Level Subwords #12

Open long8v opened 2 years ago

long8v commented 2 years ago
image

paper problem : multi-lingual 셋팅에서 BPE를 하면, 잘 나오지 않는 캐릭터들 때문에 vocab수를 잡아먹는다. 중국어의 경우에는 글자가 다른 글자의 일부인 경우도 있는데(虫, 蟲), 캐릭터 레벨에서는 이러한 관계를 알기 어렵다. solution : 글자들을 'utf-8'로 인코딩한 뒤에 BPE를 적용하자. result : 1) 더 적은 파라미터로 BPE와 비슷한 성능 2) BPE보다 더 짧은 sequence length을 만들어 train / inference 속도에도 용이 3) transfer learning에 용이(OOV문제를 해결) details :

long8v commented 2 years ago
from transformers import GPT2Tokenizer
BBPE = GPT2Tokenizer.from_pretrained("gpt2")
encoded_1 = BBPE.encode(text='안녕하세요')
encoded_2 = BBPE.encode(text='않녕하세요')
print(encoded_1)
print(encoded_2)

[168, 243, 230, 167, 227, 243, 47991, 246, 168, 226, 116, 168, 248, 242] [168, 243, 232, 167, 227, 243, 47991, 246, 168, 226, 116, 168, 248, 242]

tokens = BBPE.convert_ids_to_tokens(encoded_1)
print(tokens)

['ì', 'ķ', 'Ī', 'ë', 'ħ', 'ķ', 'íķ', 'ĺ', 'ì', 'Ħ', '¸', 'ì', 'ļ', 'Ķ']

BBPE.convert_tokens_to_string(tokens)

'안녕하세요'