AI/NLP

언어모델 Decoding Methods

체봄 2022. 3. 6. 21:05

 

  • Greedy Decoding 
    • 해당 시점에서 확률이 제일 높은 것 하나만 선택.
    • 입력이 동일할 경우 매번 같은 문장이 나옴
    • 파라미터: do_sample=False

 

  • Beam Search 
    • 확률이 높은 토큰을 k개씩 선택. 각 beam에서 k개씩 선택하고, 또 새로 생성된 값들 중 누적 확률이 가장 높은 k개만 선택하는 방식
    • 어떤 beam에서 <eos>가 나오면 해당 beam은 최종 선택 후보가 되며, 해당 beam은 k개 중에서 빠짐
    • 이에 따라 k개를 채우기 위해 상위 k+1번째였던 값이 그 자리를 채움
    • 이 과정은 <eos>가 나온 beam이 k개가 될 때까지 진행
    • 그 후 k개의 후보 중 누적 확률이 가장 높은 beam을 선택
    • 입력이 동일할 경우 매번 같은 문장이 나옴
    • 파라미터: do_sample=False, num_beams=k
      (num_beams=1이면 Greedy Decoding과 동일)

 

  • Length Penalty
    • 누적 확률 계산 시 확률을 계속 곱하기 때문에 beam이 길어질수록 그 값이 점점 작아지는 문제를 해결하기 위해 사용. 누적 확률을 length penalty (α)로 나눠주는 방식.
    • 식 = (min_length + length) ** α / (min_length + 1) ** α
    • α=1.2를 많이 사용

 

  • Top-k Sampling
    • 예측한 다음 토큰들 중 확률이 가장 높은 k개 중 하나를 랜덤하게 선택
    • 상대적으로 확률이 낮은 토큰도 선택될 수가 있음
    • 파라미터: do_sample=True, top_k=k
      (top_k=1이면 Greedy Decoding과 동일)

 

  • Top-p Sampling
    • 기준 확률 p를 설정함. 그리고 예측한 다음 토큰들 중 확률이 높은 순서대로 더해 누적 확률이 p 이하인 토큰들 중 하나를 선택.
    • 토큰 수는 유동적
    • 특정 토큰의 확률이 굉장히 높을 때 사용하는게 좋음
    • 파라미터: do_sample=True, top_p=p

 

  • Temperature Scaling
    • 예측한 다음 토큰들의 확률 분포를 변형시킴
    • 0에 가까울수록 -> 확률 분포가 뾰족해짐 (확률이 큰 값은 더 크게, 작은 값은 더 작게), 정확도 높아짐
    • 1 -> 확률 분포 그대로
    • 1보다 커질수록 -> 확률 분포가 평평해짐 (확률이 큰 값과 작은 값 사이의 차이가 줄어듦), 다양한 문장 생성
    • 보통 1 사용
    • Top-k Sampling / Top-p Sampling과 같이 사용해야 의미가 있음
    • 파라미터: temperature

 


 

 

참고한 블로그

  1. https://blog.naver.com/PostView.nhn?blogId=sooftware&logNo=221809101199&from=search&redirect=Log&widgetTypeCall=true&directAccess=false
  2. https://ratsgo.github.io/nlpbook/docs/generation
반응형