AI/NLP
언어 모델 디코딩 전략(Decoding Strategies) 소개
체봄
2022. 10. 11. 16:57
언어 모델의 대표적인 Decoding strategies를 알아본다.
아래에 언급되는 '파라미터'는 transformers 라이브러리의 generate() 함수에 정의된 파라미터를 의미한다.
관련 포스팅 링크를 걸어둔다.
Greedy Search
- 해당 시점에서 확률이 제일 높은 것 하나만 선택.
- 입력이 동일할 경우 매번 같은 문장이 나옴
- 파라미터: 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과 동일)
Top-k Sampling
- 예측한 다음 토큰들 중 확률이 가장 높은 k개 중 하나를 랜덤하게 선택
- 상대적으로 확률이 낮은 토큰도 선택될 수가 있음
- 파라미터: do_sample=True, top_k=k
(top_k=1이면 Greedy Decoding과 동일)
Top-p Sampling (= Nucleus Sampling)
- 기준 확률 p를 설정함. 그리고 예측한 다음 토큰들 중 확률이 높은 순서대로 더해 누적 확률이 p 이하인 토큰들 중 하나를 선택.
- 토큰 수는 유동적
- 특정 토큰의 확률이 굉장히 높을 때 사용하는게 좋음
- 파라미터: do_sample=True, top_p=p
이외에도 다양한 디코딩 전략이 연구되고 있다.
위에서 소개한 디코딩 전략과 함께 사용하는 개념들도 알아본다.
Length Penalty
- 누적 확률 계산 시 확률을 계속 곱하기 때문에 beam이 길어질수록 그 값이 점점 작아지는 문제를 해결하기 위해 사용. 누적 확률을 length penalty (α)로 나눠주는 방식.
- 식 = (min_length + length) ** α / (min_length + 1) ** α
- α=1.2를 많이 사용
Temperature Scaling
- 예측한 다음 토큰들의 확률 분포를 변형시킴
- 0에 가까울수록 -> 확률 분포가 뾰족해짐 (확률이 큰 값은 더 크게, 작은 값은 더 작게), 정확도 높아짐
- 1 -> 확률 분포 그대로
- 1보다 커질수록 -> 확률 분포가 평평해짐 (확률이 큰 값과 작은 값 사이의 차이가 줄어듦), 다양한 문장 생성
- 보통 1 사용
- Top-k Sampling / Top-p Sampling과 같이 사용해야 의미가 있음
- 파라미터: temperature=값
반응형