티스토리 뷰

반응형

HuggingFace의 transformers를 사용하여 Bert의 입력값을 만들어 보자.

 

1. 사전 학습된 모델 로드

from_pretrained()를 사용함으로써 pretrained된 모델을 사용할 수 있다.

from transformers import BertTokenizer

tokenizer =  BertTokenizer.from_pretrained("bert-base-uncased", do_lower_case=True)
print(tokenizer)

PreTrainedTokenizer(name_or_path='bert-base-uncased', 
                    vocab_size=30522, 
                    model_max_len=512, 
                    is_fast=False, 
                    padding_side='right', 
                    truncation_side='right', 
                    special_tokens={'unk_token': '[UNK]', 'sep_token': '[SEP]', 'pad_token': '[PAD]', 'cls_token': '[CLS]', 'mask_token': '[MASK]'})

 

2. Bert의 입력값 만들기(batch_encode_plus)

Bert의 입력값에는 기본적으로 3가지가 입력되어야한다. 

 

1) input_ids
문장을 토크나이즈해서 인덱스 값으로 변환하는 것이다. 일반적으로 버트에서는 단어를 subword 단위로 변환 시키는 워드 피스 토크나이저로 활용을 한다.

2) attention_mask
패딩된 부분에 대해 학습에 영향을 받지 않기 위해 처리해 주는 입력값이다. 버트 토크나이저에서는 1은 어텐션에 영향을 받는 토큰을 나타내고, 0은 영향을 받지 않는 토큰을 나타낸다.

3) token_type_ids
두 개의 시퀀스 입력으로 활용할 때 0과 1로 문장의 토큰 값을 분리한다. [CLS]는 문장의 시작을 의미하고, [SEP]는 문장이 분리되는 부분을 의미하는 토큰이다.

예를 들어 두개의 문장이 들어오면 0,0,0,0,0,0 1,1,1,1,1,1,1, 이렇게 표시된다.

 

transformers의 batch_encode_plus 메소드를 사용해서 위의 입력값을 리턴받을 수 있다.

max_length = 128 
def bert_tokenizer(sentense_pairs):
	encoded = self.tokenizer.batch_encode_plus(
   		sentense_pairs),
        add_special_tokens=True,
        max_length=max_length,
        return_attention_mask=True,
        return_token_type_ids=True,
        pad_to_max_length=True,
        return_tensors="tf",
    )
    
	input_ids = np.array(encoded["input_ids"], dtype="int32")
    attention_masks = np.array(encoded["attention_mask"], dtype="int32")
    token_type_ids = np.array(encoded["token_type_ids"], dtype="int32")
      
    return input_ids, attention_masks, token_type_ids
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함