일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 트위치
- 구글 스토어 리뷰
- 피파온라인 API
- BERTopic
- 옵티마이저
- Tableu
- 포아송분포
- NLP
- Roberta
- 토픽 모델링
- 원신
- 블루 아카이브
- 개체명 인식
- 코사인 유사도
- 데이터넥스트레벨챌린지
- 블루아카이브 토픽모델링
- 문맥을 반영한 토픽모델링
- geocoding
- 데이터리안
- CTM
- SBERT
- 다항분포
- 데벨챌
- 조축회
- 자연어 모델
- 클래스 분류
- 붕괴 스타레일
- KeyBert
- Optimizer
- LDA
- Today
- Total
분석하고싶은코코
생성형 모델 옵션 설정_Transformer - GenerationConfig, (beam, greed search) 본문
생성형 모델 옵션 설정_Transformer - GenerationConfig, (beam, greed search)
코코로코코 2024. 1. 16. 13:00잘 만든 모델이더라도 파라미터를 제대로 설정하지 않는다면 제대로된 성능을 낼 수 없습니다. 그래서 이번 포스팅에서는 Transformer의 GenerationConfig에 대해서 알아보겠습니다. 생성형 자연어 모델에 대해서 공부하다보니 모델을 불러와서 단순하게 generate함수를 호출하여 문자를 생성하지만 파라미터들은 알려주는대로 설정하다보니 '아~ 그냥 잘 생성하는구나~'라고 하고 넘어갔었습니다. 그런데 점점 공부를 할 수록 제가 원하는 형태의 생성 결과를 얻기 위해서는 이 파라미터들에 대해서 공부해야되겠다고 생각되어 이번 포스팅을 작성하게 되었습니다. 이번 포스팅은 HuggingFace - Transformer_GenerationConfig문서를 기반으로 작성하였습니다.
transformer의 text-generation에 대한 예시는 링크를 참고하시면 됩니다. 이번 포스팅에서는 Pytorch, Tensorflow에서 모두 공용으로 사용되는 주요 generationconfig에 대해서 다룹니다.
Beam-search & Greed-search
옵션 설명에 앞서 필요한 개념인 beam-search와 greedy search에 대해서 간단하게 이야기하고 옵션들에 대해서 알아보겠습니다. 두 개의 서치 방법 중 보편적으로 더 좋은 전략을 평가 받는 전략은 beam-search입니다. 그 이유는 다양성에 대한 고려가 들어갔다는데 있습니다. 아래 그림을 통해서 그 과정을 이해해보겠습니다. greedy search는 탐욕적 탐색으로 말 그대로 높은 확률만을 선택하는 과정을 거치게 됩니다. 이게 전체에 대한 고려가 아니라 그 순간순간마다 탐욕적 선택을 하게 됩니다. 따라서 아래 그림의 왼쪽의 선택을 보면 0.5인 nice를 선택했고 nice의 다음 선택지 중에서 또 가장 높은 woman을 선택하고 end-point에 도달하여 텍스트 생성이 끝났습니다. 반면에 오른쪽 그림이 beam-search과정인데 첫 분기점에서 3개의 beam이 초기화 되었고 이를 가지뻣기해 나가면서 각 가지에서는 greedy search가 적용됩니다. 그 결과 초기 beam 중에서 0.4였던 dog에서 다음 가지에 0.9 has까지 선택된 결과가 모든 beam중에서 가장 높은 socre를 받게 되어 단순한 greedy search에서는 발견할 수 없었던 'The dog has' 텍스트를 생성할 수 있게 되었습니다.
Transformer - generationconfig
앞서 알아본 텍스트 생성 전략을 바탕으로 transformer의 주요 generationconfig 옵션들에 대해서 알아보겠습니다. 더 많은 옵션들이 있으니 원하시는 분들은 허깅페이스 페이지를 참조하시면 됩니다!
텍스트 생성 길이(length)
- max_length (int, optional, defaults to 20) — 생성할 토큰(텍스트)의 최대 길이를 설정합니다. 입력 prompt + max_new_tokens로 결정. 만약 max_new_tokens를 옵션으로 설정했다면 이 옵션은 무시되는 옵션이 됩니다.
- max_new_tokens (int, optional) — 입력 prompt를 제외하고 새롭게 생성할 토큰의 수를 설정.
- min_length (int, optional, defaults to 0) — max_length와 반대되는 옵션. 역시 min_new_tokens를 설정했다면 무시되는 옵션입니다.
- min_new_tokens (int, optional) — max_new_toekns와 같습니다. 입력 prompt를 제외한 최소 생성 토큰 수를 설정.
- early_stopping (bool or str, optional, defaults to False) — beam-base(beam-search 알고리즘)로 모델이 텍스트를 생성하는 기준을 설정합니다. 'True'설정시 완벽한 후보 단어가 선정된다면 생성을 중지합니다. 'False' 설정시 더 나은 후보군이 없을 확률이 있다면 스탑,'never' 설정시 더 나은 후보군이 없을 경우 중지.
- max_time(float, optional) — 텍스트 생성에 시간을 제한하는 옵션
텍스트 생성 전략(Strategy)
- do_sample (bool, optional, defaults to False) — 샘플링을 진행할지에 대한 선택. 진행하지 않는다면 Greedy search를 의미함.
- num_beams (int, optional, defaults to 1) — beam-search 전략입니다. 1을 선택한다면 beam-search알고리즘을 사용하지 않는 것으로 보면됩니다. 이 옵션을 높일수록 생성할 텍스트가 다양할 수 있지만 그만큼 엉뚱한 텍스트를 생성할 가능성이 높아집니다.
- num_beam_groups (int, optional, defaults to 1) — beam의 다양성 확보를 하기 위한 그룹 옵션 자세한 설명은 링크를 참조하라고 합니다.
텍스트 생성 logits
- temperature (float, optional, defaults to 1.0) — 확률에 대한 첨도를 설정하는 것이라 생각하시면 됩니다. 값이 높을수록 확률이 높은 후보군의 확률이 높아집니다.
- top_k (int, optional, defaults to 50) — 후보군 단어중 k개에 대해서만 샘플링을 진행하게 됩니다. 고르게 확률이 분포되어 있다면 좋은 후보군을 놓칠 가능성이 있습니다.
- top_p (float, optional, defaults to 1.0) — 후보군 단어들의 확률의 합을 통해 후보군 단어를 정합니다. 0.95로 설정시 상위 후보군부터 누적 확률이 95%가 되는 단어까지가 샘플링 후보군이 됩니다.
- typical_p (float, optional, defaults to 1.0) — 각beam에서 나온 후보군의 다음 랜덤 단어들에 대해서 누적 확률을 고려하는 옵션으로 보입니다.(정확한 옵션에 대한 이해인지는 모르겠습니다.)
- epsilon_cutoff (float, optional, defaults to 0.0) — 설정한 값 이상의 토큰들만 샘플링을 진행하게 됩니다. 3e-4 ~ 9e-4로 추천하고, 자세한 내용은 링크를 참조하라고 하네요.
- diversity_penalty (float, optional, defaults to 0.0) — beam의 다양성 패널티를 설정하는 값입니다. 위쪽에 있는 beam_group에 대한 설정을 했을때 유효한 옵션이라고 합니다.
- repetition_penalty (float, optional, defaults to 1.0) — 반복에 대한 패널티를 설정하는 옵션이라고 합니다. 1은 패널티가 없는 것을 의미한다고 합니다. 자세한 내용은 링크에 있습니다.
- length_penalty (float, optional, defaults to 1.0) — beam-base 알고리즘의 길이 패널티를 의미합니다. beam-search에서 길이가 짧을수록 누적확률이 높을 수 밖에 없습니다. 이를 해결하기 위한 값으로 설정할 수 있습니다. 긴 시퀀스에 대해서는 0보다 큰 값을, 짧은 시퀀스에 대해서는 0보다 작은 값을 권장한다고 합니다.
- no_repeat_ngram_size (int, optional, defaults to 0) — n-gram에 대한 단어가 다시 등장하지 않도록 설정하는 옵션입니다. 예를들어 2옵션으로 '블로그 포스팅'이라는 단어가 한 번 생성됐다면 이후에는 이 '블로그 포스팅'은 생성하지 않습니다.
+ 그 외
- decoder_start_token_id (int, optional) — 디코딩 작업의 시작 토큰을 강제할 수 있는 옵션입니다.
'머신러닝&딥러닝 > NLP' 카테고리의 다른 글
LoRA(Low-Rank Adaptation of LLM) (0) | 2024.01.22 |
---|---|
RLHF(Reinforcement Learning from Human Feedback)_(2) - RM(Reward Model) (2) | 2023.12.28 |
RLHF(Reinforcement Learning from Human Feedback)구현해보기_(1) - STF(Supervised Fine-tuning) (0) | 2023.12.25 |
XAI - LIME(Local Intcrprctablc Model-agnostic Explanations) (1) | 2023.12.19 |
여러 모델을 활용한 비속어 문장 탐지 (0) | 2023.12.18 |