[๐Ÿค— ๊ฐ•์ขŒ 1.3] ๐Ÿค—Transformers๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค...

14492 ๋‹จ์–ด transformerstransformers

์ด ์„น์…˜์—์„œ๋Š” ํŠธ๋žœ์Šคํฌ๋จธ ๋ชจ๋ธ์ด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ , ๐Ÿค—Transformers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋„๊ตฌ์ธ pipeline() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Transformers are everywhere!

ํŠธ๋žœ์Šคํฌ๋จธ ๋ชจ๋ธ์€ ์ด์ „ ์„น์…˜์—์„œ ์–ธ๊ธ‰ํ•œ ๋ชจ๋“  ์ข…๋ฅ˜์˜ NLP ์ž‘์—…์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Hugging Face ๋ฐ ํŠธ๋žœ์Šคํฌ๋จธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ช‡๋ช‡ ํšŒ์‚ฌ ๋ฐ ์กฐ์ง๋“ค์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ž์‹ ๋“ค์ด ๋งŒ๋“  ๋ชจ๋ธ๋“ค์„ ๊ณต์œ ํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋‹ค์‹œ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค

๐Ÿค—Transformers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ณต์œ ๋œ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Model Hub์—๋Š” ๋ˆ„๊ตฌ๋‚˜ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ(pretrained models)๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž์‹ ์˜ ๋ชจ๋ธ์„ ํ—ˆ๋ธŒ์— ์—…๋กœ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

โš ๏ธ The Hugging Face Hub๋Š” ํŠธ๋žœ์Šคํฌ๋จธ ๋ชจ๋ธ์—๋งŒ ๊ตญํ•œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ์›ํ•˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ชจ๋ธ์ด๋‚˜ ๋ฐ์ดํ„ฐ์…‹(datasets)์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ ค๋ฉด huggingface.co ๊ณ„์ •์„ ๋งŒ๋“œ์„ธ์š”!

ํŠธ๋žœ์Šคํฌ๋จธ ๋ชจ๋ธ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด NLP ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Working with pipelines

๐Ÿค—Transformers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ฒด๋Š” pipeline() ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ํŠน์ • ๋ชจ๋ธ๊ณผ ๋™์ž‘์— ํ•„์š”ํ•œ ์ „์ฒ˜๋ฆฌ ๋ฐ ํ›„์ฒ˜๋ฆฌ ๋‹จ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋‹ต๋ณ€์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from transformers import pipeline

classifier = pipeline("sentiment-analysis")
classifier("I've been waiting for a HuggingFace course my whole life.")

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์žฅ์„ ๋™์‹œ์— ์ž…๋ ฅ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

classifier(["I've been waiting for a HuggingFace course my whole life.",
            "I hate this so much!"])

๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ํŒŒ์ดํ”„๋ผ์ธ์€ ์˜์–ด ๋ฌธ์žฅ์— ๋Œ€ํ•œ ๊ฐ์ • ๋ถ„์„(sentiment analysis)์„ ์œ„ํ•ด ๋ฏธ์„ธ ์กฐ์ •๋œ(fine-tuned) ์‚ฌ์ „ ํ›ˆ๋ จ ๋ชจ๋ธ(pretrained model)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ classifier ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•ด๋‹น ๋ชจ๋ธ์ด ๋‹ค์šด๋กœ๋“œ๋˜๊ณ  ์บ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ classifier ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ์บ์‹œ๋œ ๋ชจ๋ธ์ด ๋Œ€์‹  ์‚ฌ์šฉ๋˜๋ฉฐ ๋ชจ๋ธ์„ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ์— ํ…์ŠคํŠธ๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด 3๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. ํ…์ŠคํŠธ๋Š” ๋ชจ๋ธ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์œผ๋กœ ์ „์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค(preprocessing).
  2. ์ „์ฒ˜๋ฆฌ ์™„๋ฃŒ๋œ ์ž…๋ ฅ ํ…์ŠคํŠธ๋Š” ๋ชจ๋ธ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  3. ๋ชจ๋ธ์ด ์˜ˆ์ธกํ•œ ๊ฒฐ๊ณผ๋Š” ํ›„์ฒ˜๋ฆฌ๋˜์–ด(postprocessing) ์šฐ๋ฆฌ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒŒ์ดํ”„๋ผ์ธ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • feature-extraction (ํ…์ŠคํŠธ์— ๋Œ€ํ•œ ๋ฒกํ„ฐ ํ‘œํ˜„ ์ œ๊ณต)
  • fill-mask
  • ner (named entity recognition, ๊ฐœ์ฒด๋ช… ์ธ์‹)
  • question-answering
  • sentiment-analysis
  • summarization
  • text-generation
  • translation
  • zero-shot-classification

์ด ์ค‘ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

Zero-shot classification

์šฐ์„ , ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋˜์ง€ ์•Š์€ ํ…์ŠคํŠธ๋ฅผ ๋ถ„๋ฅ˜ํ•ด์•ผ ํ•˜๋Š” ๋” ์–ด๋ ค์šด ์ž‘์—…๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ์— ์ฃผ์„(annotation)์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๊ณ  ๋ถ„์•ผ ์ „๋ฌธ ์ง€์‹(domain expertise)์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ๋งค์šฐ ํ”ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ์ด ํ™œ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ, zero-shot-classification ํŒŒ์ดํ”„๋ผ์ธ์€ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ํ•ด๋‹น ๋ถ„๋ฅ˜์— ์‚ฌ์šฉํ•  ๋ ˆ์ด๋ธ”์„ ์ง์ ‘ ๋งˆ์Œ๋Œ€๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์ „ ํ›ˆ๋ จ๋œ ๋ชจ๋ธ์˜ ๋ ˆ์ด๋ธ” ์ง‘ํ•ฉ์— ์˜์กดํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์šฐ๋ฆฌ๋Š” ํ•ด๋‹น ๋ชจ๋ธ์ด ๋‘ ๋ ˆ์ด๋ธ”(๊ธ์ •, ๋ถ€์ •)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์žฅ์„ ๊ธ์ • ๋˜๋Š” ๋ถ€์ •์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด๋ฏธ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ชจ๋ธ์„ ์ด์šฉํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ ˆ์ด๋ธ” ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ๋ถ„๋ฅ˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

from transformers import pipeline

classifier = pipeline("zero-shot-classification")
classifier(
    "This is a course about the Transformers library",
    candidate_labels=["education", "politics", "business"],
)

์œ„์™€ ๊ฐ™์ด ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๋ ˆ์ด๋ธ” ์ง‘ํ•ฉ์œผ๋กœ ๋ฌธ์žฅ ๋ถ„๋ฅ˜๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ๋„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋ธ์„ ๋ฏธ์„ธ ์กฐ์ •(fine-tuning)ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— zero-shot ๋ถ„๋ฅ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์œ„ ์˜ˆ์‹œ์—์„œ ๋ณด๋Š” ๋ฐ”์™€ ๊ฐ™์ด ์›ํ•˜๋Š” ๋ ˆ์ด๋ธ” ๋ชฉ๋ก์— ๋Œ€ํ•œ ํ™•๋ฅ  ์ ์ˆ˜๋ฅผ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

Text generation

์ด์ œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์š” ์•„์ด๋””์–ด๋Š” ์ž…๋ ฅ์œผ๋กœ ํŠน์ • ํ”„๋กฌํ”„ํŠธ(prompt)๋ฅผ ์ œ๊ณตํ•˜๋ฉด ๋ชจ๋ธ์ด ๋‚˜๋จธ์ง€ ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž๋™ ์™„์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ „ํ™”๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ…์ŠคํŠธ ์˜ˆ์ธก ๊ธฐ๋Šฅ(predictive text feature)๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ์ƒ์„ฑ์€ ๋žœ๋คํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ถœ๋ ฅ์ด ์•„๋ž˜ ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฒƒ์€ ์ •์ƒ์ž…๋‹ˆ๋‹ค.

from transformers import pipeline

generator = pipeline("text-generation")
generator("In this course, we will teach you how to")

์œ„์˜ generator ๊ฐ์ฒด์— num_return_sequences ์ธ์ž(argument)๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑ๋˜๋Š” ์‹œํ€€์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๊ณ , max_length ์ธ์ž๋กœ๋Š” ์ถœ๋ ฅ ํ…์ŠคํŠธ์˜ ์ด ๊ธธ์ด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Using any model from the Hub in a pipeline

์ด์ „ ์˜ˆ์ œ์—์„œ๋Š” ํ˜„์žฌ ์ž‘์—…์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ธ(default model)์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ํ—ˆ๋ธŒ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์›ํ•˜๋Š” ๋ชจ๋ธ์„ ์„ ํƒํ•˜์—ฌ ํŠน์ • ์ž‘์—…(์˜ˆ: ํ…์ŠคํŠธ ์ƒ์„ฑ)์— ๋Œ€ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํ—ˆ๋ธŒ(Model Hub)๋กœ ์ด๋™ํ•˜์—ฌ ์™ผ์ชฝ์— ์žˆ๋Š” ํŠน์ • ํƒœ๊ทธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ด€๋ จ ์ž‘์—…์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋ธ๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋Š” ์ด ํŽ˜์ด์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž ์ด์ œ distilgpt2 ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด ๋ด…์‹œ๋‹ค! ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ด ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

from transformers import pipeline

generator = pipeline("text-generation", model="distilgpt2")    # distilgpt2 ๋ชจ๋ธ์„ ๋กœ๋“œํ•œ๋‹ค.
generator(
    "In this course, we will teach you how to",
    max_length=30,
    num_return_sequences=2,
)

์–ธ์–ด ํƒœ๊ทธ(language tags)๋ฅผ ํด๋ฆญํ•˜์—ฌ ๊ทธ ์–ธ์–ด์— ํŠนํ™”๋œ ๋ชจ๋ธ์„ ์„ธ๋ถ€์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์„ ํƒํ•จ์œผ๋กœ์จ ์›ํ•˜๋Š” ์–ธ์–ด๋กœ ํ‘œํ˜„๋œ ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Model Hub์—๋Š” ๋‹ค์ค‘ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ๋‹ค๊ตญ์–ด ๋ชจ๋ธ(multilingual models)์— ๋Œ€ํ•œ ์ฒดํฌํฌ์ธํŠธ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ๋ชจ๋ธ์„ ํด๋ฆญํ•˜์—ฌ ์„ ํƒํ•˜๋ฉด ์˜จ๋ผ์ธ์—์„œ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์ ฏ(widget)์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์ „์— ๊ทธ ๋ชจ๋ธ์˜ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

The Inference API

๋ชจ๋“  ๋ชจ๋ธ์€ Hugging Face ์›น์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณต๋˜๋Š” Inference API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ง์ ‘ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ์ž„์˜์˜ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋ชจ๋ธ์ด ํ•ด๋‹น ํ…์ŠคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์‚ดํŽด๋ณด๋ฉด์„œ ๋ชจ๋ธ๋“ค์„ ํ…Œ์ŠคํŠธํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์ ฏ์„ ๊ตฌ๋™ํ•˜๋Š” Inference API๋Š” ์œ ๋ฃŒ ์ œํ’ˆ์œผ๋กœ๋„ ์ œ๊ณต๋˜๋ฏ€๋กœ ์‹ค๋ฌด์ ์œผ๋กœ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐ€๊ฒฉ ์ฑ…์ • ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Mask filling

๋‹ค์Œ์œผ๋กœ ์‹œ๋„ํ•  ํŒŒ์ดํ”„๋ผ์ธ์€ fill-mask ์ž…๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์ฃผ์–ด์ง„ ํ…์ŠคํŠธ์˜ ๊ณต๋ฐฑ์„ ์ฑ„์šฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

from transformers import pipeline

unmasker = pipeline("fill-mask")
unmasker("This course will teach you all about <mask> models.", top_k=2)

top_k ์ธ์ž(argument)๋Š” ์ถœ๋ ฅํ•  ๊ณต๋ฐฑ ์ฑ„์šฐ๊ธฐ ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ชจ๋ธ์€ ๋งˆ์Šคํฌ ํ† ํฐ(mask token) ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ํŠน์ˆ˜ํ•œ <mask> ๋‹จ์–ด๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค. ๋งˆ์Šคํฌ ์ฑ„์šฐ๊ธฐ(mask-filling) ๋ชจ๋ธ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋งˆ์Šคํฌ ํ† ํฐ์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ํƒ์ƒ‰ํ•  ๋•Œ ํ•ญ์ƒ ํ•ด๋‹น ๋งˆ์Šคํฌ ํ† ํฐ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™•์ธํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์œ„์ ฏ์— ์‚ฌ์šฉ๋œ ๋งˆ์Šคํฌ ํ† ํฐ์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Named entity recognition

๊ฐœ์ฒด๋ช… ์ธ์‹(NER, Named Entity Recognition)์€ ์ž…๋ ฅ ํ…์ŠคํŠธ์—์„œ ์–ด๋Š ๋ถ€๋ถ„์ด ์‚ฌ๋žŒ, ์œ„์น˜ ๋˜๋Š” ์กฐ์ง๊ณผ ๊ฐ™์€ ๊ฐœ์ฒด๋ช…์— ํ•ด๋‹นํ•˜๋Š”์ง€ ์‹๋ณ„ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

from transformers import pipeline

ner = pipeline("ner", grouped_entities=True)
ner("My name is Sylvain and I work at Hugging Face in Brooklyn.")

์—ฌ๊ธฐ์„œ ๋ชจ๋ธ์€ "Sylvain"์ด ์‚ฌ๋žŒ(PER)์ด๊ณ  "Hugging Face"๊ฐ€ ์กฐ์ง(ORG)์ด๋ฉฐ "Brooklyn"์ด ์œ„์น˜(LOC)์ž„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹๋ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ํ•จ์ˆ˜์—์„œ grouped_entities=True ์˜ต์…˜์„ ์ „๋‹ฌํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋™์ผํ•œ ์—”ํ‹ฐํ‹ฐ์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์žฅ์˜ ๋ถ€๋ถ„(ํ† ํฐ ํ˜น์€ ๋‹จ์–ด)๋“ค์„ ๊ทธ๋ฃนํ™”ํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ชจ๋ธ์€ "Hugging"๊ณผ "Face"๋ฅผ ๋‹จ์ผ ์กฐ์ง(ORG)์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ทธ๋ฃนํ™”ํ–ˆ์ง€๋งŒ ์ด๋ฆ„ ์ž์ฒด๋Š” ์—ฌ๋Ÿฌ ๋‹จ์–ด๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๋‹ค์Œ ์žฅ์—์„œ ๋ณด๊ฒŒ ๋˜๊ฒ ์ง€๋งŒ, ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์‹ฌ์ง€์–ด ์ผ๋ถ€ ๋‹จ์–ด๋ฅผ ๋” ์ž‘์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Sylvain์€ S, ##yl, ##va ๋ฐ ##in์˜ ๋„ค ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ํ›„์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์€ ํ•ด๋‹น ์กฐ๊ฐ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์žฌ๊ทธ๋ฃนํ™”ํ–ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋กœ "Sylvain"์ด ๋‹จ์ผ ๋‹จ์–ด๋กœ ์ถœ๋ ฅ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Question Answering

question-answering ํŒŒ์ดํ”„๋ผ์ธ์€ ์ฃผ์–ด์ง„ ์ปจํ…์ŠคํŠธ(context) ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ ์งˆ๋ฌธ์— ์‘๋‹ต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

from transformers import pipeline

question_answerer = pipeline("question-answering")
question_answerer(
    question="Where do I work?",
    context="My name is Sylvain and I work at Hugging Face in Brooklyn",
)

์ด ํŒŒ์ดํ”„๋ผ์ธ์€ ์ œ๊ณต๋œ ์ปจํ…์ŠคํŠธ์—์„œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์„ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

Summarization

์š”์•ฝ(summarization)์€ ํ…์ŠคํŠธ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“ (๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜) ์ค‘์š”ํ•œ ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ•ด๋‹น ํ…์ŠคํŠธ๋ฅผ ๋” ์งง์€ ํ…์ŠคํŠธ๋กœ ์ค„์ด๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

from transformers import pipeline

summarizer = pipeline("summarization")
summarizer(
    """
    America has changed dramatically during recent years. Not only has the number of 
    graduates in traditional engineering disciplines such as mechanical, civil, 
    electrical, chemical, and aeronautical engineering declined, but in most of 
    the premier American universities engineering curricula now concentrate on 
    and encourage largely the study of engineering science. As a result, there 
    are declining offerings in engineering subjects dealing with infrastructure, 
    the environment, and related issues, and greater concentration on high 
    technology subjects, largely supporting increasingly complex scientific 
    developments. While the latter is important, it should not be at the expense 
    of more traditional engineering.

    Rapidly developing economies such as China and India, as well as other 
    industrial countries in Europe and Asia, continue to encourage and advance 
    the teaching of engineering. Both China and India, respectively, graduate 
    six and eight times as many traditional engineers as does the United States. 
    Other industrial countries at minimum maintain their output, while America 
    suffers an increasingly serious decline in the number of engineering graduates 
    and a lack of well-educated engineers.
    """
)

ํ…์ŠคํŠธ ์ƒ์„ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ต์…˜์œผ๋กœ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด max_length ๋˜๋Š” min_length ์ง€์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Translation

๋ฒˆ์—ญ(Translation)์˜ ๊ฒฝ์šฐ ์ž‘์—…(task) ์ด๋ฆ„์— ์–ธ์–ด ์Œ(์˜ˆ: "translation_en_to_fr")์„ ์ง€์ •ํ•˜๋ฉด ์‹œ์Šคํ…œ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋ธ(default model)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ Model Hub์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋ชจ๋ธ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ ํ”„๋ž‘์Šค์–ด์—์„œ ์˜์–ด๋กœ ๋ฒˆ์—ญ์„ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

from transformers import pipeline

translator = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-en")
translator("Ce cours est produit par Hugging Face.")

ํ…์ŠคํŠธ ์ƒ์„ฑ ๋ฐ ์š”์•ฝ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ต์…˜์œผ๋กœ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด max_length ๋˜๋Š” min_length ์ง€์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ณธ ํŒŒ์ดํ”„๋ผ์ธ์€ ๋Œ€๋ถ€๋ถ„ ๋ฐ๋ชจ์šฉ์ž…๋‹ˆ๋‹ค. ํŠน์ • ์ž‘์—…(specific tasks)์„ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋˜์—ˆ์œผ๋ฉฐ ๋ณ€ํ˜•๋œ ์ž‘์—…์ด๋‚˜ ๋” ๋ณต์žกํ•œ ์ž‘์—…์€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” pipeline() ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์–ด๋– ํ•œ ๊ธฐ๋Šฅ ๋ฐ ๋™์ž‘๋“ค์ด ์กด์žฌํ•˜๊ณ  ๊ทธ๊ฒƒ๋“ค์„ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ