Generation Options생성 Pipeline Object 생성시의 옵션생성 일반적인 사용 샘플생성 Pipeline Object의 Call을 할 때 옵션생성 일반적인 사용 샘플Classifier OptionsPipeline Object Call 할때의 옵션
Generation Options
GPT나 T5와 같은 생성 타입의 옵션들
생성 Pipeline Object 생성시의 옵션
from transformers import pipeline pipe = pipeline( model, # <-- 이렇게 pipeline 객체 생성시 넣는 Arguments # ... )
생성 일반적인 사용 샘플
pipe = pipeline( 'text2text-generation', model='KETI-AIR/ke-t5-base', # tokenizer='KETI-AIR/ke-t5-base', # <- 모델과 같으면 안써도 됨! )
model
과tokenizer
는 Huggingface Hub의 id값, 혹은 로컬 경로(상대경로 절대경로 모두 OK)
생성 Pipeline Object의 Call을 할 때 옵션
pipe( 'text', # <-- 이렇게 pipeline 객체 사용시 넣는 Arguments do_sample=True, max_length=128, ... )
생성 일반적인 사용 샘플
from transformers import pipeline pipe = pipeline('text-generation', model='beomi/kcgpt2') args = ... res = pipe( x, do_sample=True if args.g_top_p or args.g_top_k or args.g_temperature else False, top_p=args.g_top_p if args.g_top_p else None, top_k=args.g_top_k if args.g_top_k else None, temperature=args.g_temperature if args.g_temperature else None, no_repeat_ngram_size=2, early_stopping=True, max_new_tokens=args.g_max_length, num_return_sequences=args.g_num_return_sequences, # text2text gen에는 반응 X )
do_sample
를 True로 잡아줘야만 생성시의 Sampling이 동작한다.- 만약 해당 옵션이 False라면 Greedy Search만 진행한다. (같은 결과만 생성!)
- top_p, top_k, temperature 옵션을 잘 조절하면 보다 ‘그럴듯한’ 문장들로 정할 수 있다.
no_repeat_ngram_size
는 미묘한 옵션인데.. 이 숫자를 키우면 생성 시간이 O(N^2)로 늘어나지만, 문장 생성시에 “이 문장은 문장은 문장은 문장은 ...” 와 같은 경우를 줄일 수 있다.
early_stopping
옵션의 경우는
max_new_tokens
옵션과max_length
옵션이 다른데,max_length
는 Prompt(LM의 초기 입력값)을 포함한 최대 길이를 지정하지만max_new_tokens
는 Prompt를 제외한 ‘생성한' 문장의 최대 길이를 지정한다.- GPT같은 Causal LM은
max_new_tokens
를 써야 하고, - T5와 같은 LM은
max_length
를 써야 한다.
num_return_sequences
는 GPT등의 모델에서는 사용이 가능하지만, T5등의 모델에는 사용하지 않는다.
Classifier Options
BERT for Sequence Classification 같은 분류기에 사용하는 옵션들
from transformers import pipeline device = -1 # CPU # device = 0 # 0번 GPU toxic_classifier = pipeline( "text-classification", model='beomi/beep-KcELECTRA-base-hate', device=device, return_all_scores=True, )
return_all_scores
는 pipeline object를 call 할 때도 넣어줘도 된다.
Pipeline Object Call 할때의 옵션
- 사실 분류 pipeline object를 사용할 때는 크게 다양한 옵션이 필요하지는 않다.
- 특히나, 모델이 분류한 결과만을 원하지 Logits 혹은 Tensor를 원하는 경우가 흔하지 않아서, 별도의 설정 없이도 괜찮은 편이다.
- 다만, 아래와 같이 Huggingface 홈페이지 혹은 Pipeline의 결과물에서 0, 1, 2같은 결과 대신,
none
,others
,gender
처럼 사람이 이해할 수 있는 Label로 만들기 위해서는,
아래와 같이 모델의
config.json
파일 내에 id2label
, label2id
라는 항목을 추가해두어야 한다.