KoBART를 활용한 카카오톡 대화 요약 서비스_3(feat.생성 전력과 허깅페이스)

shooting star·2023년 2월 8일
5

들어가며

지난 시간의 KoBART를 활용한 카카오톡 대화 요약 서비스_2(feat.모델과 평가)에 이어서 생성 전략과 허깅페이스 업로드에 대해서 다루어보도록 하겠다.

1. 생성 전략

텍스트 생성 전략에는 대표적으로 Sampling와 Beam Search가 있다.

1) Sampling

(1) 소개

샘플링이란 기본적으로 다음 단어를 무작위로 선택하는 것을 의미한다. 이러한 샘플링에는 Top_K, Top_P를 지정할 수 있는데 이 두 가지 기법은 모두 공통적으로 사용할 토큰의 개수를 줄인다는 개념이다. 하지만 토큰의 개수를 줄이는 방법은 각각 다르다. Top_K는 확률이 가장 높은 K 개의 토큰에서만 샘플링해서 확률이 낮은 토큰을 피한다. Top_P는 샘플링에서 누적 확률이 확률 P를 초과하는 가능한 가장 작은 단어 집합에서 선택한다. 즉 확률에 따라 내림차순으로 모든 토큰을 정렬하고 선택한 토큰의 확률이 P에 도달할 때까지 리스트의 맨 위부터 토큰을 하나씩 추가한다.

샘플링 기법의 경우는 다음 토큰이 랜덤하게 선택되기 때문에 창의적인 창작에 적합하다. 하지만 현재 진행하는 Task는 요약이기 때문에 샘플링 기법은 적합하지가 않다. 실제로 실험해 본 결과 샘플링 했을 때의 경우 Rouge가 현저하게 떨어지는 것을 확인할 수 있었다.

(2) 코드

outputs = model.generate(input_ids,
						do_sample=True, 
                        top_k=50, 
                        top_p=0.95,
                        )

(1) 소개

빔서치는 각 스텝에서 가장 높은 확률을 가진 토큰을 탐욕적으로 선택하는 그리디 서치를 보완하여 확률이 가장 높은 상위 b개의 다음 토큰을 추적하여 보다 더 정밀한 결과를 얻을 수 있다. 빔서치의 경우는 랜덤하게 토큰을 선택하는 샘플링과 달리 확률이 높은 상위 b개의 토큰을 추적하기 때문에 입력 토큰을 잘 표현한다. 따라서 추상 요약에서 유리한 전략으로 판단된다. 실제로 학습한 결과 샘플링보다 월등히 높은 Rouge를 달성하였다.

참고로 no_repeat_ngram_size는 연속적으로 반복되는 n-gram의 길이를 제한하도록 하는 것이다. 나는 이를 3으로 설정하였고 문장에서 동일한 3-gram이 반복되지 않는 것이다. 이를 통해서 문장의 반복성을 줄 일 수 있다. 요약문이기에 3번 연속 동일한 문장이 반복된다는 것을 정량적 평가를 해본 결과 성능 저하를 일으킨 다는 것을 확하였기 때문이다.

(2) 코드

outputs = model.generate(input_ids,
						num_beams=5,
						no_repeat_ngram_size=3,
                        attention_mask=attention_mask, 
                        )

HuggingFace 업로드

1) 소개

post-pretrain과 fine-tuning 한 모델을 HuggingFace에 업로드 하였다.

모델을 HuggingFace에 업로드하는 방법은 아래에 기재해 놓았다.

2) 코드

model.push_to_hub(
    Name, 
    use_temp_dir=True, 
    use_auth_token=HuggingFace_Token
)
tokenizer.push_to_hub(
    Name, 
    use_temp_dir=True, 
    use_auth_token=HuggingFace_Token
)

마치며

세 번째 포스팅은 텍스트 생성 전략과 HuggingFace 업로드에 대해서 살펴보았다. 마지막으로 다음 포스팅에서는 Flask를 활용한 모델 배포에 대해서 알아보도록 하겠다.

github로 이동 : KoBART를 활용한 카카오톡 대화 요약 서비스

0개의 댓글