도찐개찐

[허깅페이스] pipeline 사용법 본문

PYTHON

[허깅페이스] pipeline 사용법

도개진 2024. 1. 23. 10:37

0. 정리

 - pipeline은 간단한 사용법을 제시한 것으로 기본 모델 말고 모델을 지정할 때에는 모델마다 작동 여부가 다름

 - max_length, return_sequences 등의 파라미터도 모델에 따라서 적용 여부가 다름

 - NLP를 단순하게 소개 하거나, 기초자를 대상으로 할 때 흥미를 가지는 용도로 사용

1. pipeline 이란?

 - transformers 라이브러리의 가장 기본 객체

 - 전처리 + 후처리 과정을 모델과 연결하여 쉽게 NLP 모델을 사용할 수 있게 함.

 - 사용전에 transformers 라이브러리 설치

!pip install transformers

 

2. pipeline 활용

 가. pipline을 사용할 때 모델을 지정하지 않으면 기본 모델이 들어가고, 특정 모델을 지정하고 싶으면 model 파라미터에 원하는 모델을 넣어주면 됨.

pipe = pipeline('text-generation', model='kogpt') #kogpt로 모델 입력

 나. 사용가능한 파이프라인

  • feature-extraction : 특징 추출 (텍스트에 대한 벡터 표현 추출)
  • fill-mask : 마스크 채우기
  • ner : 개체명 인식 (named entity recognition)
  • question-answering : 질의 응답
  • sentiment-analysis : 감정 분석
  • summarization : 요약
  • text-generation : 텍스트 생성
  • translation : 번역
  • zero-shot-classification : 제로샷 분류

 다. 사용방법

   1) 기본 사용법

from transformers import pipeline 
pipe = pipeline("사용할 파이프라인")
pipe("질의 등")

   2)  pipline별 사용법

     가). feature-extraction : 특징 추출 (텍스트에 대한 벡터 표현 추출)

from transformers import pipeline
import numpy as np

pipe = pipeline("feature-extraction")
result = pipe("hello")
print(result)

     나). fill-mask : 마스크 채우기

from transformers import pipeline
import numpy as np

pipe = pipeline("fill-mask")
result = pipe("A Man is <mask>", top_k=3) #top_k는 가장 확률이 높은 3개 출력
print(result)


[{'score': 0.11967816203832626,
  'token': 23632,
  'token_str': ' Missing',
  'sequence': 'A Man is Missing'},
 {'score': 0.10868901759386063,
  'token': 8912,
  'token_str': ' Born',
  'sequence': 'A Man is Born'},
 {'score': 0.05237989127635956,
  'token': 9088,
  'token_str': ' Dead',
  'sequence': 'A Man is Dead'}]

     다). ner : 개체명 인식 (named entity recognition)

from transformers import pipeline
import numpy as np

pipe = pipeline("ner", grouped_entities=True) #grouped_entities=True 같은 개체 그룹화
result = pipe("Dokdo is a unique territory of Korea.")

#출력
print(result)
[{'entity_group': 'LOC',
  'score': 0.9633191,
  'word': 'Dokdo',
  'start': 0,
  'end': 5},
 {'entity_group': 'LOC',
  'score': 0.9983676,
  'word': 'Korea',
  'start': 31,
  'end': 36}]

     라). question-answering : 질의 응답

from transformers import pipeline

result = pipeline("question-answering", model="klue/roberta-base") #모델명은 허깅페이스에서 검색하여 제목 그대로 사용
result(
    question="베토벤이 태어난 곳은 어디인가요?",
    context="루트비히 판 베토벤은 독일의 서양 고전 음악 작곡가이자 피아니스트이다. 독일의 본에서 태어났으며, 성인이 된 이후 거의 오스트리아 빈에서 살았다. 감기와 폐렴의 합병증으로 투병하다가 57세로 세상을 떠난 그는 고전주의와 낭만주의의 전환기에 활동한 주요 음악가이며, 종종 영웅적인 인물로도 묘사된다. 음악의 성인 즉 악성이라는 별칭으로도 불린다.."
)

#출력
{'score': 0.00026570854242891073,
 'start': 40,
 'end': 53,
 'answer': '독일의 본에서 태어났으며'}

     마). sentiment-analysis : 감정 분석

from transformers import pipeline

pipe = pipeline("sentiment-analysis")
pipe(['I am King in the world'])

#출력
[{'label': 'POSITIVE', 'score': 0.999794065952301}]

     바). summarization : 요약

from transformers import pipeline

pipe = pipeline("summarization")
pipe( """
    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.
""")

#출력
[{'summary_text': ' The number of engineering graduates in the United States has declined in recent years . China and India graduate six and eight times as many traditional engineers as the U.S. does . Rapidly developing economies such as China continue to encourage and advance the teaching of engineering . There are declining offerings in engineering subjects dealing with infrastructure, infrastructure, the environment, and related issues .'}]

     사). text-generation : 텍스트 생성

from transformers import pipeline

pipe = pipeline("text-generation", model="skt/kogpt2-base-v2", max_length=30)
pipe("나는 오늘 저녁에 밥을 먹고")

#출력
[{'generated_text': '나는 오늘 저녁에 밥을 먹고\n어디로 가는지부터 고민의 연속이다.\n그렇다면 나흘 동안 어디를 가고 그리고 어디로 가야 할까요?\n'}]

     아). translation : 번역

from transformers import pipeline

pipe = pipeline("translation", model="circulus/kobart-trans-ko-en-v2")
pipe("오늘 점심으로 스테이크를 먹었습니다.")

#출력
[{'translation_text': 'I had steak for lunch today'}]

     자). zero-shot-classification : 제로샷 분류

from transformers import pipeline

classifier = pipeline("zero-shot-classification", model="hyunwoongko/kobart")
classifier(
    "개구리는 양서류이다.",
    candidate_labels=["교육", "정치", "사업"],
)

#출력
{'sequence': '개구리는 양서류이다.',
 'labels': ['사업', '정치', '교육'],
 'scores': [0.38976219296455383, 0.3134584426879883, 0.2967793345451355]}

 

 

728x90

'PYTHON' 카테고리의 다른 글

[PYTHON] setuptools  (0) 2024.03.11
[Python] getter, setter  (0) 2022.12.26
[Python] 예외처리(try, Except, else, fanally)  (0) 2022.12.26
[Python] 클래스  (0) 2022.12.26
[Python] 함수  (0) 2022.12.26
Comments