BERT의 출력구조

SeongGyun Hong·2024년 10월 10일

NLP

목록 보기
5/5

1. BERT의 출력구조

1. BERT 모델은 일반적으로 두 가지 주요 출력을 생성한다 :

  • outputs: 마지막 히든 레이어의 전체 시퀀스 출력 (shape: [batch_size, sequence_length, hidden_size])
  • outputs[1]: [CLS] 토큰에 대한 풀링된 출력 (shape: [batch_size, hidden_size])

2. outputs[1]이 [CLS] 토큰에 해당하는 이유 :

  • BERT는 입력 시퀀스의 맨 앞에 특별한 [CLS] 토큰을 추가하고
  • 모델의 마지막 레이어에서 이 [CLS] 토큰의 표현을 가져와 추가 처리를 함.
  • 이 처리 과정에는 일반적으로 선형 레이어와 활성화 함수(예: tanh)가 포함되며
  • 이렇게 처리된 [CLS] 토큰의 최종 표현이 outputs[1]로 출력됨.

2. 구체적인 예시:

from transformers import BertModel, BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

text = "Hello, how are you?"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)

sequence_output = outputs[0]  # 전체 시퀀스의 마지막 히든 스테이트
pooled_output = outputs[1]    # [CLS] 토큰의 풀링된 출력

print(sequence_output.shape)  # 예: torch.Size([1, 8, 768])
print(pooled_output.shape)    # 예: torch.Size([1, 768])

이 예시에서 pooled_output (outputs[1])은 [CLS] 토큰에 대한 특별히 처리된 표현으로, 이는 전체 입력 시퀀스의 정보를 압축한 형태로 볼 수 있으며, 주로 분류 작업 등에 활용됨.

profile
헤매는 만큼 자기 땅이다.

0개의 댓글