BERT 입력 길이를 정하는 방법

Soogyung Gwon·5일 전

구름을잡아라

목록 보기
59/60

Transformer/BERT는 attention 계산량이 토큰 길이가 길어질 수록 급격히 증가한다.

O(n2){O(n^2)}

대표적인 BERT 모델들은 보통 512 토큰까지 지원한다.
(BERT, KoBERT, KLUE-BERT)

그러나 실제 학습은 보통 더 짧게 사용한다.

길이를 정하는 기준

1. 데이터 문장 길이 분포

예) 문장 평균 길이 = 22, 95%의 길이가 87 이라면 96 ~ 128

데이터의 각 문장의 길이를 센 다음에 이 길이들의 평균/최대값, 비율 등을 확인하여 정하게 된다.

lengths = [len(tokenizer.tokenize(sent)) for sent in texts]

너무 크게 정하면...

  • PAD 토큰이 매우 많아짐
  • 메모리 낭비
  • 학습 느려짐

너무 작게 하면...

  • 토큰이 잘림 (NER에서는 특히 좋지 않음)

2. Tokenizer를 거친 후 길이

실제 길이는 Tokenize 된 후의 길이가 되므로 이 길이를 기준으로 한다.
또한 BERT는 자동으로 [cls], [SEP] 을 추가하므로 길이 + 2가 되어야 한다.

예)

lengths = []

for sent in texts:
    tokens = tokenizer.tokenize(sent)
    lengths.append(len(tokens))

문장 A -> 12
문장 B -> 34
문장 C -> 91
문장 D -> 140

대체로 길이가 100 이하이므로 128로 결정할 수 있다.

그냥 문장 vs 토크나이저 거친 후

I am playing soccer

vs

[CLS] i am play ##ing soccer [SEP]

profile
오랜시간 망설였던 코딩을 다시 해보려고 노력하고 있는 사람

0개의 댓글