Deep Learning/트랜스포머를 활용한 자연어 처리

[Chapter 5] 텍스트 생성

notty 2024. 6. 19. 19:03
728x90

GPT-2, GPT-3 : 수백만 개의 웹 페이지에서 단순히 다음 언어를 예측하는 방법을 학습하여 다양한 종류의 입력 프롬프트를 바탕으로 텍스트를 생성

 

언어모델의 학습

  • 문맥 학습(하나의 문장에 대해 다음단어 예측을 학습) + 추론학습

 

일관성 있는 텍스트 생성의 어려움

  • 사전훈련학습 or 지도학습 기반의 미세 튜닝 -> 작업에 특화된 헤드에서 예측한다
  • 확률을 기반으로한 텍스트 생성 -> 디코딩 방법이 필요

 

디코딩 수행

  • 주어진 시퀀스를 추정하여 다음에 올 단어를 확률적으로 추정한다 -> 확률의 연쇄법칙을 사용하여 조건부 확률의 곱으로 나타냄 => 이전 시퀀스를 기반으로 다음 단어를 예측한다
  • 대부분의 디코딩 방법은 다음단어가 될 가장 높은 확률을 가지는 토큰을 선택한다. 이 때 선택한 확률를 곱하여 전체적으로 확률이 가장 높은 시퀀스를 찾는다 => 가능한 모든 시퀀스를 평가해야함

 

그리드 서치 디코딩

  • 각 타임스텝에서 가장 확률이 큰 시퀀스를 탐욕적으로 선택한다
  • 반복적인 출력 시퀀스를 생성하는 경향이 있음 => 그리디 서치 알고지름의 보편적 문제이며 최적의 솔류션을 만들기 어려움

 

빔 서치 디코딩

  • 첫 스텝에서 계산한 확률로 가장 높은 상위 b개의 다음 토큰을 추적한다 eos에 도달할 때 까지
  • 확률이 아닌 로그 확률을 사용하여 시퀀스 점수를 매긴다 -> why? 시퀀스 전체의 학률를 계산할 때 곱해야하는데 이러면 값이 너무 작아짐 -> log를 사용하여 곱을 합으로 변형시켜 보여준다

 

그리드 VS 빔 서치

  • 트랜스 포머 모델은 입력 토큰이 주어지면 다음 토큰에 대한 정규화 되지 않은 로짓을 반환한다
  • 로짓을 정규화 -> 시퀀스와 각 토큰을 위해 전체 어휘 사전에 대한 확률 분포를 만든다 -> 시퀀스에 있는 토큰 확률만 선택한다
  • 입력 시퀀스에 대한 로그 확률은 무시하고(모델은 다음 토큰을 예측하기 때문) 로짓과 레이블 정렬이 중요하다
  • 마지막 로짓도 정답이 없어 마지막 로짓도 제외
  • 결과
    • 그리디보다 빔 서치가 더 높은 로그 확률을 가지지만 빔 서치는 각 빔에 대해 병렬적으로 시퀀스를 생성하여 생성과정에서 시간이 걸린다
    • 그리디, 빔 서치 모두 텍스트가 반복 생성되는 문제가 있다 -> no_repeat_ngram_size매개변수로 패널티를 부과하여 반복 생성을 줄이고자한다 => 적용 후 적체 확률은 낮아졌지만 더 균형있는 텍스트가 생성되었다.

 

샘플링 방법

  • 가장 간단한 방법 : 각 타임스텝 내에 모델이 출력한 전체 어휘사전의 확률 분포에서 랜덤하게 샘플링 하는 방법
  • 방법1) T : 로짓의 스케일을 조정하는 온도 파라미터를 추가하여 출력의 다양성 제어 (예 온도가 낮으면 드문 토큰을 억제한다-> 창의적인 답변 줄어든다)
    • T<<1 -> 드문 토큰을 억제한다 (낮은온도, 일관성)
    • T>>1 -> 토큰의 확률이 동일해져 다양한 토큰 생성 가능 (높은 온도, 다양성)
  • 방법2) 토큰의 확률
    • 확률이 낮은 단어를 제외하고 샘플링을 진행한다
    • top-p 샘플링(누적 확률을 사용, 선택되는 토큰의 갯수가 동적) 
      • 각 토큰의 확률을 계산 -> 확률에 따라 분포를 확인 -> 어디서 컷오프를 할지 조정(동적) -> 확률에 따라 내림차순으로 토큰 정렬 -> 선택한 토큰의 확률값이 95%(사용자 지정)에 도달 할 때 까지 토큰을 추가
      • generate(~~, top-p=0.90)
    • top-k 샘플링(확률이 높은 k개의 토큰 선택, 선택할 토큰의 갯수 지정)
      • 토큰별 확률 계산 -> 확률이 높은 k개의 토큰에서만 샘플링을 진행

 

디코딩 방법 선택

  • 정답은 없음, 여러 실험(혼합, 온도조절 등등)을 통해서 가장 적합한 것으로 ㄱ 
728x90
반응형

'Deep Learning > 트랜스포머를 활용한 자연어 처리' 카테고리의 다른 글

[chapter 6] 요약  (0) 2024.06.22
[Chapter 4] NER  (1) 2024.06.01
[Chapter 3] 트랜스포머  (0) 2024.05.22
[Chapter 3] 코드_1  (0) 2024.05.17