[Day20] Self-supervised Pre-training Models

2021. 2. 19. 23:39·AI/부스트 캠프 AI tech

[Day20] Self-supervised Pre-training Models

  • Self-supervised Pre-training Models

    • https://n-brogrammer.tistory.com/95
  • Advanced Self-supervised Pre-training Models

    • https://n-brogrammer.tistory.com/96

 

 

중요

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 스코어가 옳은 번역/ 옳지 않은 번역은 확실히 스코어링해주는데 비슷한 완성도의 번역은 잘 스코어링해주지 못한다.

    • git open 소개

      • 바로 원격저장소를 브라우저로 오픈해주는 역할을 한다.

         

  • 네오

    • 연구 논문 소개

 

  • 알고리즘 문제선정을 진행

    • 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
'AI/부스트 캠프 AI tech' 카테고리의 다른 글
  • [Day22] 페이지랭크 & 전파 모델
  • [Day21] 그래프 이론 기초 & 그래프 패턴
  • [Day19] Transformer
  • [Day18] Seq2Seq
N-analyst
N-analyst
  • N-analyst
    개발자CuCu
    N-analyst
  • 전체
    오늘
    어제
  • 공지사항

    • 티스토리에서 원하는 글 찾는 방법
    • 분류 전체보기 (140)
      • 티스토리 (4)
      • 알고리즘 (5)
        • 알고리즘 정리 (1)
        • 백준 (4)
      • 마크다운(Typora) (13)
        • 사용법 (13)
      • 에러 (1)
        • 파이썬 (1)
      • 데이터 분석 (5)
        • python_analysis (3)
        • Machine Learning (2)
      • AI (109)
        • 파이토치로 시작하는 딥러닝 기초 (2)
        • 부스트 캠프 AI tech (41)
        • 이론 (66)
      • 파이썬(python) (1)
        • 기타 (1)
      • 웹 프로그래밍 (1)
        • 설정 팁 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
N-analyst
[Day20] Self-supervised Pre-training Models
상단으로

티스토리툴바