[Day20] Self-supervised Pre-training Models
Self-supervised Pre-training Models
Advanced Self-supervised Pre-training Models
중요
BERT
BERT의 config, tokenizer, model을 각각 불러오고 확인
bert_name = 'bert-base-uncased'
config = BertConfig.from_pretrained(bert_name)
# model과 tokenizer는 무조건 같은 name를 불러와야 한다.
tokenizer = BertTokenizer.from_pretrained(bert_name)
model = BertModel.from_pretrained(bert_name)
여기서 tokenizer와 model이 다르게 되면 차원이 달라질 수 있어서 idx가 이상하게 될 수 있다. config
를 보게 되면 max_position_embeddings
가 있는데 이것은 입력 길이의 최대값이 된다.
Tokenizer 사용
sentence = "I want to go home."
output = tokenizer(sentence)
output
>>> {'input_ids': [101, 1045, 2215, 2000, 2175, 2188, 1012, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]}
- input_ids: 기존 문장을 vocab의 idx로 바꿔서 반환
- token_type_ids: segment embedding이다. 우리는 한문장을 줬기때문에 0
- atention_mask: input에 대한 masking한다. 이건 input에 pad가 있을때 활용한다.
- 문장의 101: CLS 토큰의 idx 102: SEP 토큰의 idx
혹은 직접 tokenize
함수를 호출할 수 있다.
tokenized = tokenizer.tokenize(sentence)
tokenized
>>> ['i', 'want', 'to', 'go', 'home', '.']
그러면 위 처럼 따로 idx로 반환하지 않고 자연어 상태로 보여 준다. 소문자 버전이라 I도 i로 나온 것을 확인 할 수 있다.
또한 vocabulary도 확인 가능
vocab = tokenizer.get_vocab()
print(vocab)
print(len(vocab))
>>> {'[PAD]': 0, '[unused0]': 1, '[unused1]': 2, '[unused2]': 3, '[unused3]': 4, ... }
>>> 30522
각각 여러 함수들이 존재 하므로 예시를 보고 익혀보자
# token
token_ids = [vocab[token] for token in tokenized]
print(token_ids)
>>> [1045, 2215, 2000, 2175, 2188, 1012]
# _convert_token_to_id
token_ids = [tokenizer._convert_token_to_id(token) for token in tokenized]
print(token_ids)
>>> [1045, 2215, 2000, 2175, 2188, 1012]
# convert_tokens_to_ids
token_ids = tokenizer.convert_tokens_to_ids(tokenized)
print(token_ids)
>>> [1045, 2215, 2000, 2175, 2188, 1012]
# encode
token_ids = tokenizer.encode(sentence)
print(token_ids)
>>> [101, 1045, 2215, 2000, 2175, 2188, 1012, 102]
# convert_tokens_to_string
sentence = tokenizer.convert_tokens_to_string(tokenized)
print(sentence)
>> i want to go home .
# convert_ids_to_tokens & convert_tokens_to_string
tokens = tokenizer.convert_ids_to_tokens(token_ids)
print(tokens)
>>> ['[CLS]', 'i', 'want', 'to', 'go', 'home', '.', '[SEP]']
sentence = tokenizer.convert_tokens_to_string(tokens)
print(sentence)
>>> [CLS] i want to go home . [SEP]
# 문장 2개를 넣으면 "[SEP]" token을 추가하여 자동으로 processing
tokenizer("I want to go home.", "Me too.")
>>> {'input_ids': [101, 1045, 2215, 2000, 2175, 2188, 1012, 102, 2033, 2205, 1012, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
GPT-2
GPT-2의 config, tokenizer, model을 각각 불러오고 확인
GPT-2도 마찬가지로 BERT와 같이 불러온다.
gpt_name = 'gpt2'
config = GPT2Config.from_pretrained(gpt_name)
tokenizer = GPT2Tokenizer.from_pretrained(gpt_name)
model = GPT2Model.from_pretrained(gpt_name)
여기도 tokenizer와 mode의 name은 같아야 한다. config
를 확인해보면 BERT의 max_position_embeddings
과 같이 n_ctx
의 이름으로 입력의 최댓값을 표시한다.
BERT 에서 본 Tokenizer에서 본 함수들을 똑같이 사용할 수 있다. model에 따라 output값만 다르게 된다. 사용법은 같음.
아래 사이트를 이용해서 사용법을 익히자.
- https://huggingface.co/transformers/index.html
- https://github.com/huggingface/transformers
- https://huggingface.co/models
BERT, GPT-2에 다양한 head를 추가한 모델을 제공한다.
- https://huggingface.co/transformers/model_doc/bert.html
- https://huggingface.co/transformers/model_doc/gpt2.html
피어세션
찰스
BLEU 스코어가 옳은 번역/ 옳지 않은 번역은 확실히 스코어링해주는데 비슷한 완성도의 번역은 잘 스코어링해주지 못한다.
-
바로 원격저장소를 브라우저로 오픈해주는 역할을 한다.
네오
알고리즘 문제선정을 진행
- BFS/DFS → 그래프 → 문자열(타워) → DP(LCS) → 이분탐색
- 13711번 LCS-4
- 17142번 연구소 3
- bisect 모듈
'AI > 부스트 캠프 AI tech' 카테고리의 다른 글
[Day24] 정점 표현 & 추천시스템(심화) (0) | 2021.02.25 |
---|---|
[Day23] 군집 탐색 & 추천 시스템(기초) (0) | 2021.02.24 |
[Day22] 페이지랭크 & 전파 모델 (0) | 2021.02.23 |
[Day21] 그래프 이론 기초 & 그래프 패턴 (0) | 2021.02.22 |
[Day19] Transformer (0) | 2021.02.18 |
[Day18] Seq2Seq (0) | 2021.02.17 |
[Day17] LSTM and GRU (0) | 2021.02.16 |
[Day16] NLP 기초 (0) | 2021.02.15 |