๐ค Transformers ์์ํ๊ธฐ: pipeline์ผ๋ก ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ ์ถ๋ก ํ๊ธฐ
๐ค Transformers๋?
- PyTorch, TensorFlow, JAX๋ฅผ ์ํ ์ต์ฒจ๋จ ๋จธ์ ๋ฌ๋
- ์ฌ์ ํ์ต๋ ์ต์ฒจ๋จ ๋ชจ๋ธ๋ค์ ์ฝ๊ฒ ๋ค์ด๋ก๋ํ๊ณ ํ๋ จ์ํฌ ์ ์๋ API์ ๋๊ตฌ๋ฅผ ์ ๊ณตํจ
- ๋ค์ํ ๋ถ์ผ์ task๋ฅผ ์ง์ํจ
- ๐ ์์ฐ์ด ์ฒ๋ฆฌ: ํ ์คํธ ๋ถ๋ฅ, ๊ฐ์ฒด๋ช ์ธ์, ์ง์์๋ต, ์ธ์ด ๋ชจ๋ธ๋ง, ์์ฝ, ๋ฒ์ญ, ๊ฐ๊ด์ ์ง์์๋ต, ํ ์คํธ ์์ฑ
- ๐ผ๏ธ ์ปดํจํฐ ๋น์ : ์ด๋ฏธ์ง ๋ถ๋ฅ, ๊ฐ์ฒด ํ์ง, ๊ฐ์ฒด ๋ถํ
- ๐ฃ๏ธ ์ค๋์ค: ์๋์์ฑ์ธ์, ์ค๋์ค ๋ถ๋ฅ
- ๐ ๋ฉํฐ๋ชจ๋ฌ: ํ ์ง์์๋ต, ๊ดํ ๋ฌธ์ ์ธ์ (OCR), ์ค์บํ ๋ฌธ์์์ ์ ๋ณด ์ถ์ถ, ๋น๋์ค ๋ถ๋ฅ, ์๊ฐ ์ง์์๋ต
- PyTorch, TensorFlow์ JAX ๊ฐ์ ์ํธ์ด์ฉ์ฑ์ ์ง์ํ์ฌ, ๋ชจ๋ธ์ ๊ฐ ๋จ๊ณ๋ง๋ค ์ ์ฐํ๊ฒ ๋ค๋ฅธ ํ๋ ์์ํฌ ์ฌ์ฉ ๊ฐ๋ฅํจ
-> ex) ์ฝ๋ 3์ค๋ง ์จ์ ๋ชจ๋ธ์ ํ๋ จ์ํจ ๋ค์, ๋ค๋ฅธ ํ๋ ์์ํฌ ์์์ ์ถ๋ก
pipeline์ด๋?
- ์ฌ์ ํ์ต๋ ๋ชจ๋ธ๊ณผ ํ ํฌ๋์ด์ ๋ฅผ ์๋์ผ๋ก ๋ค์ด๋ก๋ํ๊ณ ์บ์ํ์ฌ, ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ถ๋ก ํ ์ ์๊ฒ ํ๋ ๋๊ตฌ
pipeline()
: hugging face์ transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ํจ์๋ก, ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ์ฝ๊ฒ ๋ถ๋ฌ์ ๋ค์ํ NLP ์์ ์ ์ํํ ์ ์๋๋ก ๋์์ค๋ค.- ์ฌ๋ฌ task์์ pipeline()์ ์ฆ์ ์ฌ์ฉํ ์ ์์
- ์ง์ํ๋ task ์์
ํ์คํฌ | ์ค๋ช | ๋ชจ๋ฌ๋ฆฌํฐ | ํ์ดํ๋ผ์ธ ID |
---|---|---|---|
์๊ฐ ์ง์์๋ต | ์ฃผ์ด์ง ์ด๋ฏธ์ง์ ์ด๋ฏธ์ง์ ๋ํ ์ง๋ฌธ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅด๊ฒ ๋๋ตํ๊ธฐ | ๋ฉํฐ๋ชจ๋ฌ | pipeline(task=โvqaโ) |
๋ฌธ์ ์ง์์๋ต | ์ฃผ์ด์ง ๋ฌธ์์ ์ง๋ฌธ์ ๋ํด ์ฌ๋ฐ๋ฅด๊ฒ ๋๋ตํ๊ธฐ | ๋ฉํฐ๋ชจ๋ฌ | pipeline(task=โdocument-question-answeringโ) |
์ด๋ฏธ์ง ์บก์ ๋ฌ๊ธฐ | ์ฃผ์ด์ง ์ด๋ฏธ์ง์ ์บก์ ์์ฑํ๊ธฐ | ๋ฉํฐ๋ชจ๋ฌ | pipeline(task=โimage-to-textโ) |
- Transformers documentation: Pipelines์์ ๋ค์ํ task์ pipeline() ์ ๋ณด ๋ฐ ์์๋ค์ ๋ณผ ์ ์๋ค.
์ฉ์ด ์ ๋ฆฌ
- ํ ํฌ๋์ด์ (Tokenizers): NLP์์ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์ ์
๋ ฅํ ์ ์๋ ํํ๋ก ๋ณํํ๋ ๋๊ตฌ (์ฆ, ํ
์คํธ๋ฅผ ์ซ์ ํํ์ ๋ฒกํฐ๋ก ๋ณํํด์ฃผ๋ ๋๊ตฌ)
- hugging face์
transformers
๋ผ์ด๋ธ๋ฌ๋ฆฌ์์pipeline()
์ ํธ์ถํ ๋, ํ ํฌ๋์ด์ ๋ ๋ชจ๋ธ๊ณผ ํจ๊ป ์๋์ผ๋ก ์ค์ ๋๋ฉฐ, ์ ๋ ฅ๋ ํ ์คํธ๋ฅผ ๋ชจ๋ธ์ด ์ดํดํ ์ ์๋ ํํ๋ก ๋ณํํ๋ ์ญํ ์ ํจ - ex) ๊ฐ์ ๋ถ์ task: ์ ๋ ฅ๋ ํ ์คํธ๋ ๋จผ์ ํ ํฌ๋์ด์ ๋ฅผ ํตํด ํ ํฐํ๋ ํ ๋ชจ๋ธ์๊ฒ ์ ๋ฌ๋จ
- hugging face์
- ์บ์ํ๋ค: ๋ค์ด๋ก๋๋ ๋ชจ๋ธ๊ณผ ํ ํฌ๋์ด์ ๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ์ฌ, ๋์ค์ ๋ค์ ์ฌ์ฉํ ๋ ์ฌ๋ค์ด๋ก๋ ์์ด ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
- ๋ณธ ์๋ฏธ: ํน์ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํด๋์ด ๋์ค์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ
pipeline()
์ด ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ๊ณผ ํ ํฌ๋์ด์ ๋ฅผ ๋ค์ด๋ก๋ํ๋ฉด ๋ก์ปฌ ์์คํ ์ ํน์ ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋๋๋ฐ, ์ด ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์บ์์ด๋ค.- ์ดํ ๋์ผํ ๋ชจ๋ธ์ด๋ ํ ํฌ๋์ด์ ๋ฅผ ๋ค์ ์ฌ์ฉํ ๋, ์ฒ์๋ถํฐ ๋ค์ ๋ค์ด๋ก๋ํ ํ์ ์์ด ์ด๋ฏธ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฅด๊ฒ ์์ ์ํํ ์ ์๋ค.
๐ค Transformers ์์ํ๊ธฐ: pipeline์ผ๋ก ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ ์ถ๋ก ํ๊ธฐ
- pipeline์ ์ฌ์ฉํ์ฌ ์ถ๋ก ํ๊ณ , ์ฌ์ ํ์ต๋ ๋ชจ๋ธ๊ณผ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ AutoClass๋ก ๋ก๋ํ๊ณ , PyTorch ๋๋ TensorFlow๋ก ๋ชจ๋ธ์ ๋น ๋ฅด๊ฒ ํ์ต์ํค๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ๋ค.
- Transformers documentation: ๋๋ฌ๋ณด๊ธฐ๋ฅผ ๋ฐ๋ผ ์งํํ์ผ๋ฉฐ, ์ฝ๋ ์คํ์ ํด๋น ํ์ด์ง์์ ์ ๊ณตํ๋ colab notebook์ ๋ค์ด๋ก๋ํด์ colab ํ๊ฒฝ(CPU)์์ ์งํํ๋ค.
- Transformers documentation: Pipelines์์ โDocumentQuestionAnsweringPipelineโ ๋ถ๋ถ์ pipeline์ผ๋ก ์งํํ์ผ๋ฉฐ, impira/layoutlm-document-qa ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค. (์ด ๋ ๋งํฌ์ ์ ์๋ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํํจ)
1. ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ๋ฐ ํ์ธํ๊ธฐ
- hugging face์ ํด๋น ๋ชจ๋ธ ํ์ด์ง(ex: impira/layoutlm-document-qa)์ ๋ค์ด๊ฐ๋ฉด ์๋์ ๊ฐ์ด ๋ชจ๋ธ ์ฌ์ฉ ์ ์ ๋ฏธ๋ฆฌ ์ค์นํด์ผ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ธ๊ธ๋์ด์๋ค.
- ๋ชจ๋ธ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ํตํด ์๊ตฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ค์นํ๋ฉด ๋๋ค.
!pip install Pillow pytesseract torch transformers
- ์ด๋ ์ ํธํ๋ ๋จธ์ ๋ฌ๋ ํ๋ ์์ํฌ๋ ์ค์นํด์ผ ํ๋ค.
!pip install torch
2. pipeline์ instance ์์ฑํ๊ธฐ
- document question answering task์ impira/layoutlm-document-qa ๋ชจ๋ธ์ ์ฌ์ฉํ pipeline์ ์์ฑํ๋ค.
from transformers import pipeline document_qa = pipeline(model="impira/layoutlm-document-qa")
- pipeline ์ธ์คํด์ค ์์ฑ ๋ฐฉ๋ฒ
- task ์ ํ ์ง์ (๊ธฐ๋ณธ ์ฌ์ฉ): task ์ ํ(ex: โdocument-question-answeringโ)๋ง ์ง์ ํ๋ฉด, ํด๋น task์ ๋ง๋ ๊ธฐ๋ณธ ๋ชจ๋ธ์ด ์๋์ผ๋ก ์ฌ์ฉ๋๋ค.
from transformers import pipeline document_qa = pipeline("document-question-answering")
- ํน์ ๋ชจ๋ธ ์ง์ : ๋ชจ๋ธ ์ด๋ฆ์ ๋ช
์ํ์ฌ ํน์ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์๋ค.
from transformers import pipeline document_qa = pipeline(model="impira/layoutlm-document-qa")
- ์์
์ ํ๊ณผ ๋ชจ๋ธ ๋ชจ๋ ์ง์
from transformers import pipeline document_qa = pipeline("document-question-answering", model="impira/layoutlm-document-qa")
- task ์ ํ ์ง์ (๊ธฐ๋ณธ ์ฌ์ฉ): task ์ ํ(ex: โdocument-question-answeringโ)๋ง ์ง์ ํ๋ฉด, ํด๋น task์ ๋ง๋ ๊ธฐ๋ณธ ๋ชจ๋ธ์ด ์๋์ผ๋ก ์ฌ์ฉ๋๋ค.
3. pipeline ์ธ์คํด์ค๋ก ์ถ๋ก ํ๊ธฐ
- ์๋ ์ฝ๋๋ฅผ ์คํํ์ฌ LayoutLM ๋ชจ๋ธ์ ์ฌ์ฉํ ๋ฌธ์ ์ด๋ฏธ์ง ๊ธฐ๋ฐ ์ง์ ์๋ต ์์
์ ์ํํ ์ ์๋ค.
document_qa( image="https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png", question="What is the invoice number?" )
- problem 1.: Tesseract-OCR ์์ง์ด ์์คํ
์ ์ค์น๋์ด ์์ง ์์์ ๋ฐ์ํ ์ค๋ฅ์ด๋ค.
- solution: Tesseract-OCR์ ์ค์นํ๊ณ , Tesseract-OCR์ ํ์ด์ฌ์์ ์ฌ์ฉํ๊ธฐ ์ํด pytesseract ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํ๋ค. ๊ทธ ๋ค์, ๋ฐํ์ > ์ธ์
๋ค์ ์์์ ์ ํํ์ฌ python ํ๊ฒฝ์ ์ฌ์์ํ๋ฉด ๋๋ค.
!apt-get install -y tesseract-ocr
!pip install pytesseract
Colab ํ๊ฒฝ์์ ์ค๋ฅ ๋ฐ์ํ์ ๋, ํด๊ฒฐํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด๋ ๋ฌธ์ ๊ฐ ๊ทธ๋๋ก๋ผ๋ฉด ๋ฐํ์์ ๋ค์ ์์ํด๋ณด์!
- ์ถ๋ก ๊ฒฐ๊ณผ: Transformers documentation: Pipelines์์์ example ๊ฒฐ๊ณผ๋ ๋์ผํจ์ ํ์ธํ ์ ์๋ค.
Reference
- ์์ํ๊ธฐ: ๐ค Transformers
- ๐ค Transformers์์ ์ง์ํ๋ ๋ชจ๋ธ ํ์ธ
- ์์ํ๊ธฐ: ๋๋ฌ๋ณด๊ธฐ
- ๐ค Transformers ์์ํ๊ธฐ
- ์ฌ์ ํ์ต๋ ๋ชจ๋ธ ๋ก๋ ๋ฐ ํ์ต
- Transformers documentation: Pipelines
- pipeline() ๊ด๋ จ ์ง์ํ๋ ํ์คํฌ์ ์ ์ฒด ๋ชฉ๋ก ํ์ธ
๋๊ธ๋จ๊ธฐ๊ธฐ