๐Ÿค— 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: ์ž…๋ ฅ๋œ ํ…์ŠคํŠธ๋Š” ๋จผ์ € ํ† ํฌ๋‚˜์ด์ €๋ฅผ ํ†ตํ•ด ํ† ํฐํ™”๋œ ํ›„ ๋ชจ๋ธ์—๊ฒŒ ์ „๋‹ฌ๋จ
  • ์บ์‹œํ•˜๋‹ค: ๋‹ค์šด๋กœ๋“œ๋œ ๋ชจ๋ธ๊ณผ ํ† ํฌ๋‚˜์ด์ €๋ฅผ ๋กœ์ปฌ์— ์ €์žฅํ•˜์—ฌ, ๋‚˜์ค‘์— ๋‹ค์‹œ ์‚ฌ์šฉํ•  ๋•Œ ์žฌ๋‹ค์šด๋กœ๋“œ ์—†์ด ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • ๋ณธ ์˜๋ฏธ: ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•ด๋‘์–ด ๋‚˜์ค‘์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ
    • 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")
      

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

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ