본문 바로가기

공부방/Upstage AI Lab 4기

[NLP] EDA | max_length 확인

학습 데이터인 대화문은 어떻게 생겼을까?

트랜스포머 모델은 입력 시퀀스의 최대 길이 제한이 있다. 

현재 베이스라인에 설정된 최대 길이는 아래와 같다. 

    "tokenizer": {
        "encoder_max_len": 512,
        "decoder_max_len": 100,
        "bos_token": f"{tokenizer.bos_token}",
        "eos_token": f"{tokenizer.eos_token}",
        # 특정 단어들이 분해되어 tokenization이 수행되지 않도록 special_tokens을 지정해줍니다.
        "special_tokens": ['#Person1#', '#Person2#', '#Person3#', '#PhoneNumber#', '#Address#', '#PassportNumber#']
    },

너무 긴 시퀀스가 들어가면 메모리를 많이 사용한다. 실제 데이터 길이에 맞춰서 최대값을 설정해주면 좋다고 하니, 

학습 데이터 대화문의 최대 길이를 확인해보자. 그리고 토크나이저를 적용해 토큰화된 후의 최대 길이값도 함께 알아보자!

대화문 길이에 대한 정보
count    12457.000000
mean       438.765112
std        220.134710
min         99.000000
25%        299.000000
50%        396.000000
75%        540.000000
max       2546.000000
Name: dialogue, dtype: float64

대화문 최대 길이: 2546
대화문 평균 길이: 438

토큰 기준 최대 길이: 1115
토큰 기준 평균 길이: 206

요약문 길이에 대한 정보
count    12457.000000
mean        87.397929
std         37.641178
min         19.000000
25%         61.000000
50%         80.000000
75%        106.000000
max        478.000000
Name: summary, dtype: float64

최대값을 너무 작게 설정해놓으면 중요한 정보가 잘릴 수도 있다고 한다. 데이터의 95% 이상을 커버할 수 있는 길이를 설정해야 좋다고 하는데(?) 95%까지 커버하려면 812자까지 늘려야한다; 그러기엔 데이터가 너무 적긴 한데. 굳이 그렇게까지 할 필요 있나 싶기도 하고.

일단 실험을 해보면, 

# 실험 1: 현재 설정
"encoder_max_len": 512
"per_device_train_batch_size": 50

# 실험 2: 중간값 시도
"encoder_max_len": 650  # 95퍼센타일과 현재값의 중간
"per_device_train_batch_size": 40

 

# 실험 1: 현재 설정 "encoder_max_len": 512 "per_device_train_batch_size": 50

 

# 실험 2: 중간값 "encoder_max_len": 650 # 95퍼센타일과 현재값의 중간 "per_device_train_batch_size": 40

 

흠 별 차이 없다 ㅋㅋㅋ