Huggingface Transformers Pipeline
🤗

Huggingface Transformers Pipeline

Tags
NLP
MLDL Framework
Published
Published February 10, 2022

Generation Options

GPT나 T5와 같은 생성 타입의 옵션들

생성 Pipeline Object 생성시의 옵션

from transformers import pipeline pipe = pipeline( model, # <-- 이렇게 pipeline 객체 생성시 넣는 Arguments # ... )
notion image

생성 일반적인 사용 샘플

pipe = pipeline( 'text2text-generation', model='KETI-AIR/ke-t5-base', # tokenizer='KETI-AIR/ke-t5-base', # <- 모델과 같으면 안써도 됨! )
  • modeltokenizer 는 Huggingface Hub의 id값, 혹은 로컬 경로(상대경로 절대경로 모두 OK)

생성 Pipeline Object의 Call을 할 때 옵션

pipe( 'text', # <-- 이렇게 pipeline 객체 사용시 넣는 Arguments do_sample=True, max_length=128, ... )
notion image

생성 일반적인 사용 샘플

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 할 때도 넣어줘도 된다.
notion image

Pipeline Object Call 할때의 옵션

  • 사실 분류 pipeline object를 사용할 때는 크게 다양한 옵션이 필요하지는 않다.
  • 특히나, 모델이 분류한 결과만을 원하지 Logits 혹은 Tensor를 원하는 경우가 흔하지 않아서, 별도의 설정 없이도 괜찮은 편이다.
  • 다만, 아래와 같이 Huggingface 홈페이지 혹은 Pipeline의 결과물에서 0, 1, 2같은 결과 대신, none, others, gender 처럼 사람이 이해할 수 있는 Label로 만들기 위해서는,
    • 아래와 같이 모델의 config.json 파일 내에 id2label, label2id 라는 항목을 추가해두어야 한다.
      notion image
      notion image
      notion image
notion image