Hugging Face์ Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ฐ์ด ์ฒ๋ฆฌ(NLP)๋ฅผ ๊ฐ๋จํ๊ฒ ๊ตฌํ ํ ์ ์๋ ๋ค์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ Colab ํ๊ฒฝ์์ transformers` ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ pipeline ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ค์ํ NLP ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์๊ฐ ํด๋ณด๊ณ ์ ํฉ๋๋ค.

1. Pipeline ์๊ฐ
pipeline์ Hugging Face ํ์ต ์ ๊ฐ์ฅ ์ฒ์ ๋ณด๊ฒ ๋๋ ์ธํฐํ์ด์ค๋ผ๊ณ ํ ์ ์์ต๋๋ค. ํ
์คํธ ๋ถ๋ฅ, ์ง๋ฌธ ๋ต๋ณ, ํ
์คํธ ์์ฑ ๋ฑ ์ฌ๋ฌ NLP ์์
์ ์์ฝ๊ฒ ์ํํ ์ ์์ด์, Hugging Face๋ฅผ ์ฒ์ ์์ํ๋ค๋ฉด pipeline ๋ถํฐ ์์ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ์ด๋ฒ ์ค์ต์์๋ pipeline์ ๋ํ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ณ , ๊ฐ ์ฝ๋์ ๋ด์ฉ์ ๋ํด์ ๋ง์๋๋ฆฌ๋ ค๊ณ ํฉ๋๋ค. ์ด ๊ธ์ด ๋ค๋ฃจ๋ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
- ๊ฐ์ ๋ถ์: ํ
์คํธ๊ฐ ๊ธ์ ์ ์ธ์ง ๋ถ์ ์ ์ธ์ง ํ๋ณ
- ํ
์คํธ ์์ฑ: ์ฃผ์ด์ง ํ๋กฌํํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ํ
์คํธ ์์ฑ
- ์ง๋ฌธ ๋ต๋ณ: ํ
์คํธ์์ ์ง๋ฌธ์ ๋ํ ๋ต์ ์ฐพ๊ธฐ
- ๋ฒ์ญ: ํ
์คํธ๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญ
- ์์ฝ: ์ฃผ์ด์ง ๋ฌธ์ฅ์ ์์ฝํ๊ธฐ
๊ทธ ์ธ์๋ ๋ค์ํ ์์ (task) ์ ํ์ pipeline์ด ์ ๊ณตํ๊ณ ์์ง๋ง, ์ด๋ฒ ๊ธ์์๋ ์ฐ์ ์ ์ผ๋ก ์ ๋ด์ฉ๋ง ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
2. ์ค๋น ๋จ๊ณ: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
Colab์์๋ ์
ธ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ ์ ์์ต๋๋ค. ์๋ ์ฝ๋๋ฅผ ์คํํ์ฌ `transformers` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๊ธ์ ์์ฑํ๋ ์์ ์ Colab ์ ๊ธฐ๋ณธ์ ์ผ๋ก transformers๊ฐ ์ค์น๋์ด ์๋ ๊ฒฝ์ฐ๋ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ง์ฝ, ์ค์น๊ฐ ์ด๋ฏธ ๋์ด ์๋ ์ํ๋ผ๋ฉด ์๋ ์ฝ๋๋ฅผ Colab ์์ ์คํํ์๋ฉด ์ด๋ฏธ ์ค์น๊ฐ ๋์ด ์๋ค๋ ๋ก๊ทธ๊ฐ ๋์ค๊ฒ ๋ ๊ฒ ์
๋๋ค.
!pip install transformers
3. Pipeline์ ์ฌ์ฉํ NLP ์์
3.1 ๊ฐ์ ๋ถ์
๋จผ์ , ๊ฐ์ ๋ถ์ ์์
์ ์ํํด๋ณด๊ฒ ์ต๋๋ค. "pipeline" ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ "sentiment-analysis" ์์
์ ํ์ ์ง์ ํฉ๋๋ค.
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
# ๋จ์ผ ๋ฌธ์ฅ ๋ถ์
result = classifier("I've been waiting for a HuggingFace course my whole life.")
print(result)
# ์ฌ๋ฌ ๋ฌธ์ฅ ๋ถ์
results = classifier([
"I've been waiting for a HuggingFace course my whole life.",
"I hate this so much!"
])
print(results)
์ถ๋ ฅ์ ์์ธก๋ ๊ฐ์ (๊ธ์ /๋ถ์ )๊ณผ ์ ๋ขฐ๋ ์ ์๋ฅผ ํฌํจํฉ๋๋ค.
3.2 ํ
์คํธ ์์ฑ
ํ๊ตญ์ด๋ฅผ ์ง์ํ๋ ๋ชจ๋ธ์ pipeline์ ์ง์ ํ๋ฉด ํ๊ตญ์ด๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์์ฑ ์์ ๋ ํ๊ตญ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ธ์ ์ฌ์ฉํด์ ํ ์คํธ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ๋ก "skt/kogpt2-base-v2" ๋ชจ๋ธ์ ์ ์ฉํด ๋ณด๊ฒ ์ต๋๋ค. pipeline์ task๋ฅผ "text-generation"์ผ๋ก ์ง์ ํ ํ์ pipeline ๊ฐ์ฒด์ ํ๋กฌํํธ๋ฅผ ์ ๋ ฅํ๋ฉด, ์ ๋ ฅ๋ ํ๋กฌํํธ์ ์ด์ด์ง ๋ฌธ์ฅ์ ์์ฑํฉ๋๋ค.
from transformers import pipeline
generator = pipeline("text-generation", model='skt/kogpt2-base-v2')
# ๊ฐ๋จํ ํ
์คํธ ์์ฑ
result = generator("์ฌ๋ฌ๋ถ ๋ง๋์ ๋ฐ๊ฐ์ต๋๋ค. ํ๊น
ํ์ด์ค ๊ฐ์๋ฅผ ์์", max_length=30, num_return_sequences=2)
print(result)
- max_length=30์ ์์ฑ๋ ๋ฌธ์ฅ์ ์ต๋ ๊ธธ์ด๋ฅผ 30 ํ ํฐ์ผ๋ก ์ ํ ํ๋ ์ญํ ์,
- num_return_sequences=2๋ ๊ฐ ์ ๋ ฅ์ ๋ํด 2๊ฐ์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋๋ก ์ง์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
์ถ๋ ฅ์ ํ๋ฅ ์ ๊ธฐ๋ฐํ๊ธฐ์ ๋งค๋ฒ ์กฐ๊ธ์ ๋ฌ๋ผ์ง ์๋ ์์ง๋ง, ์๋์ ๊ฐ์ ํ์์ผ๋ก ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค.
[{'generated_text': '์ฌ๋ฌ๋ถ ๋ง๋์ ๋ฐ๊ฐ์ต๋๋ค. ํ๊น
ํ์ด์ค ๊ฐ์๋ฅผ ์์ํ๋ฉฐ...'},
{'generated_text': '์ฌ๋ฌ๋ถ ๋ง๋์ ๋ฐ๊ฐ์ต๋๋ค. ํ๊น
ํ์ด์ค ๊ฐ์๋ฅผ ์ค๋นํ์ต๋๋ค.'}]
3.3 ์ง๋ฌธ ๋ต๋ณ
pipeline์ด ์ง์ํ๋ ๊ธฐ๋ฅ ์ค์๋ ์ง๋ฌธ-๋ต๋ณ ๊ธฐ๋ฅ๋ ์์ต๋๋ค. ํ๊ตญ์ด ์ง๋ฌธ-๋ต๋ณ์ ์ํด "klue/roberta-base" ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ฃผ์ด์ง ์ปจํ
์คํธ์์ ์ง๋ฌธ์ ๋ํ ๋ต์ ์ถ์ถํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
from transformers import pipeline
qa_pipeline = pipeline("question-answering", model="klue/roberta-base")
context = """
๋ฃจํธ๋นํ ํ ๋ฒ ํ ๋ฒค์ ๋
์ผ์ ์์ ๊ณ ์ ์์
์๊ณก๊ฐ์ด์ ํผ์๋์คํธ์ด๋ค. ๋
์ผ์ ๋ณธ์์ ํ์ด๋ฌ์ผ๋ฉฐ, ์ฑ์ธ์ด ๋ ์ดํ ๊ฑฐ์ ์ค์คํธ๋ฆฌ์ ๋น์์ ์ด์๋ค.
"""
result = qa_pipeline(
question="๋ฒ ํ ๋ฒค์ด ํ์ด๋ ๊ณณ์ ์ด๋์ธ๊ฐ์?",
context=context
)
print(result)
pipeline ํจ์์ ์์ ์ ํ์ผ๋ก "question-answering"์ ์ง์ ํ๊ณ , klue/roberta-base๋ผ๋ ํ๊ตญ์ด ์ง๋ฌธ-๋ต๋ณ์ ํนํ๋ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. context ๋ณ์์๋ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ์์ฑํ๊ณ , question์ ํด๋นํ๋ ์ง๋ฌธ์ ๋ต๋ณ์ ์ถ์ถํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ๋ชจ๋ธ์ด ์์ธกํ ๋ต๋ณ๊ณผ ๊ทธ ์ ๋ขฐ๋ ์ ์๋ก ๋ฐํ๋ฉ๋๋ค.
{
'score': 0.98, # ๋ชจ๋ธ์ ์์ธก ์ ๋ขฐ๋
'start': 47, # ๋ต๋ณ์ ์์ ์์น (context์์์ ์ธ๋ฑ์ค)
'end': 49, # ๋ต๋ณ์ ๋ ์์น (context์์์ ์ธ๋ฑ์ค)
'answer': '๋ณธ' # ๋ชจ๋ธ์ด ์์ธกํ ๋ต๋ณ
}
๊ฒฐ๊ณผ ๊ฐ์ด ์์ ๋์ผํ๊ฒ ๋์ค์ง๋ ์์ ํ๋ฅ ์ด ๋์ง๋ง ๋ง์ฝ ์ ๋์จ๋ค๋ฉด ์์ ๊ฐ์ ํํ์ ๋ต๋ณ์ด ๋์ฌ ๊ฒ ์ ๋๋ค.
3.4 ๋ฒ์ญ
ํ๊ตญ์ด-์์ด ๋ฒ์ญ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ํ
์คํธ๋ฅผ ๋ฒ์ญํด๋ณด๊ฒ ์ต๋๋ค.
์ด ์์ ์ ๋ณด์๋ค์ถ์ด ๊ต์ฅํ ์ง๊ด์ ์ ๋๋ค. 'translation'์ผ๋ก ์์ ์ ์ง์ ํ๊ณ , ํ๊ตญ์ด-์์ด ๋ฒ์ญ์ด ๊ฐ๋ฅํ ๋ชจ๋ธ์ ์ง์ ํ๋ฉด ๋ฒ์ญ ์์ ์ด ๊ฐ๋ฅ ํฉ๋๋ค.
from transformers import pipeline
translator = pipeline("translation", model="circulus/kobart-trans-ko-en-v2")
result = translator("์ค๋ ์ ์ฌ์ผ๋ก ์คํ
์ดํฌ๋ฅผ ๋จน์์ต๋๋ค.")
print(result)
3.5 ํ
์คํธ ์์ฝ
๊ธด ํ
์คํธ๋ฅผ ์์ฝํ๋ ์์
์ "summarization"์ pipeline์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ฃผ๋ฉด ๊ฐ๋ฅ ํฉ๋๋ค. ๋ง ๊ทธ๋๋ก ์์ฝ ๊ธฐ๋ฅ์ผ๋ก ์ฃผ์ด์ง text๋ฅผ ์์ฝํ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ค๋๋ค.
from transformers import pipeline
summarizer = pipeline("summarization")
text = """
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.
"""
result = summarizer(text)
print(result)
4. ์ง์๋๋ ์์
์ ํ
`pipeline`์ ๊ทธ ์ธ์๋ ๋ค์ํ ์์
์ ์ง์ํฉ๋๋ค. HuggingFace์ pipeline์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ ์์
์ ํ์ ์๋์ ์ฝ๋๋ก ํ์ธ ๊ฐ๋ฅ ํฉ๋๋ค.
from transformers.pipelines import SUPPORTED_TASKS
print("Available tasks in Hugging Face pipeline:")
for task in SUPPORTED_TASKS:
print(f"- {task}")
์ด ๊ธ์์๋ Hugging Face์ `pipeline` ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ Colab์์ ๋ค์ํ NLP ์์
์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ต๋๋ค. `transformers` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ NLP ์์
์ ๊ฐ๋จํ๊ฒ ์ํํ ์ ์๋๋ก ๋์์ค๋๋ค. ๊ณ์ํด์ ์ค์ต ์ฝ๋๋ฅผ ํตํด HuggingFace ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ๋ฒ์ ๋ํด์ ์์๋๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค. ๐