250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- selenium
- 코드스테이츠
- 자료구조
- leetcode
- yolo
- 열심히
- 2021
- 기초통계
- Codestates
- MYSQL
- bootcamp
- 성실히
- 재미져
- 선형회귀
- Ai
- 독서
- pandas
- 노마드코더
- 꾸준히
- 매일매일
- JavaScript
- 딥러닝
- 리뷰
- 부트캠프
- SQL
- 빅데이터
- python
- 코딩테스트
- 파이썬
- 주간보고
Archives
- Today
- Total
코딩일기
HuggingFace GPT2 tokenizer special token 추가하기 ( feat. adding HuggingFace Bert tokenizer special token ) 본문
Code/기타
HuggingFace GPT2 tokenizer special token 추가하기 ( feat. adding HuggingFace Bert tokenizer special token )
daje 2022. 9. 21. 13:53728x90
반응형
안녕하십니까 다제입니다.
오늘은 Hugginface Tokenizer에 special token을 추가하는 것에 대해서 한번 배워보고자 합니다.
언어모델은 크게 Encoder 계열, Decoder 계열, Encoder-Decoder 계열로 구분할 수 있습니다.
그러나, Tokenizer의 기준으로는 Encoder 계열, Decoder 계열로 나눌 수 있으며, 필요에 따라서는 special token을 추가하여 학습을 진행할 수도 있습니다.
그런데, Encoder 계열, Decoder 계열의 Tokenizer에 따라 special token을 추가하는 방법이 약간 상이 합니다.
아래와 같이 추가하는 방법을 정리해 놓았으니, 참고하시어 연구하시는데 조금이나 시간을 절약하시기 바랍니다.
1. Decoder(GPT2) 계열
gpt2에 special token을 추가하는 방법
def load_tokenizer(args):
tokenizer = GPT2Tokenizer.from_pretrained(args['model_name'])
special_tokens = ['<speaker1>', '<speaker2>']
tokenizer.add_special_tokens({
'bos_token': '<bos>',
'additional_special_tokens': special_tokens
})
# add new token ids to args
special_tokens += ['<bos>', '<eos>']
sp1_id, sp2_id, bos_id, eos_id = tokenizer.encode(special_tokens)
args['sp1_id'] = sp1_id
args['sp2_id'] = sp2_id
args['bos_id'] = bos_id
args['eos_id'] = eos_id
return tokenizer
def load_model(args, tokenizer, device):
model = GPT2LMHeadModel.from_pretrained(args['model_name']).to(device)
model.resize_token_embeddings(len(tokenizer))
return model
tokenizer = load_tokenizer(args)
model = load_model(args, tokenizer, device)
args에 내가 원하는 모델의 이름을 넣어주기만 하면 바로 사용이 가능합니다.
2. Eecoder(Bert) 계열
Bert에 special Token을 추가하는 방법
def load_tokenizer(args):
tokenizer = BertTokenizerFast.from_pretrained(args['model_name'])
special_tokens = ['<speaker1>', '<speaker2>', '<bos>', '<eos>']
tokenizer.add_special_tokens({
'bos_token': '<bos>',
'eos_token': '<eos>',
'additional_special_tokens': special_tokens
})
# add new token ids to args
sp1_id, sp2_id, bos_id, eos_id = tokenizer.convert_tokens_to_ids(special_tokens)
args['sp1_id'] = sp1_id
args['sp2_id'] = sp2_id
args['bos_id'] = bos_id
args['eos_id'] = eos_id
return tokenizer
def load_model(args, tokenizer, device):
model = GPT2LMHeadModel.from_pretrained(args['model_name']).to(device)
model.resize_token_embeddings(len(tokenizer))
return model
참고 부탁드립니다.
감사합니다.
728x90
반응형
'Code > 기타' 카테고리의 다른 글
[Overview] curl이란? (feat.curl의 작동원리) (0) | 2022.11.18 |
---|---|
[Overview] Slurm, nn.ModuleList (0) | 2022.11.10 |
네이버 뉴스 크롤링 업데이트 버전 ( feat. naver new crawling update version with selenium ) (0) | 2022.09.21 |
인공지능 모델 훈련 완료 시, 자동 알람 & 노션 메세지 발송 설정(feat. shell, auto message) (0) | 2022.09.15 |
parlai에 새로운 task 추가하기(feat. Adding a new task to parlai, facebook, blenderbot2, blenderbot1) (0) | 2022.07.26 |