ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Transformers] 🤗 트랜스포머로 파이썬 텍스트 분석 모델 이용하기
    Python/자연어처리 2024. 10. 7. 12:49
    반응형

    🤗 트랜스포머를 이용한 텍스트 분석 모델 이용하기


    파이썬(Python)을 이용한 자연어 처리(NLP, Natural Language Processing) 작업에서 최근 많이들 이용하는 라이브러리로 허깅페이스 트랜스포머(HuggingFace Transformers)를 빼놓을 수 없습니다. 이 라이브러리는 추상화 수준이 아주 높아서 허깅페이스에 올라와 있는 모델, 데이터셋, 토크나이저의 이름만 적으면 코드를 거의 변경하지 않고 비교 분석이 가능하다는 장점이 있지요. 특히, 딥러닝 프레임워크 중 점유율이 아주 높은 파이토치(PyTorch)와 텐서플로우(TensorFlow)를 가리지 않고 지원하기 때문에 더욱 확장성이 좋습니다.

     

     

    이번에는 🤗 트랜스포머를 활용해서 다양한 텍스트 분석 모델을 이용하는 방법을 소개해 드리려고 합니다. 기본적인 사용법만 알아두면, 허깅페이스 홈페이지에서 내가 사용할 모델 이름만 확인해서 이 코드를 재활용할 수 있으니 자세히 읽어보세요!

     

    패키지 설치


    만약 🤗 트랜스포머 설치를 하지 않았다면, 아래 명령어를 이용해 설치해 주시기 바랍니다. 파이토치와 텐서플로우도 함께 설치해 주시는 것이 좋습니다.

     

    • 트랜스포머, 데이터셋 패키지 설치: !pip install transformers datasets
    • 파이토치 설치: !pip install torch
    • 텐서플로우 설치: !pip install tensorflow

     

    영어 감정분석 모델


    🤗 트랜스포머에는 파이프라인(pipeline) 이라고 하는 모듈이 있습니다. 이 모듈은 수행할 작업 및 모델 이름만 적으면 코드 몇 줄로 구현할 수 있게끔 만들어주는 강력한 기능을 보여준답니다. 이번에는 이 모듈을 이용해서 감정분석(sentiment analysis) 작업을 구현해 보겠습니다.

     

     

    파이프라인은 기본적으로 두 개의 매개변수를 요구합니다. `task` 와 `model` 인데요, 각 매개변수는 아래와 같이 입력하시면 됩니다.

     

    • task: pipeline 모듈 문서 에서 제공하는 task 정보에 따라 원하는 작업을 입력합니다.
    • model: 허깅페이스에 업로드된 임의의 모델 이름을 입력해 줍니다. 이 때, 입력된 task를 지원하지 않는 모델은 이용할 수 없습니다.

     

    from transformers import pipeline
    
    # sentiment analysis의 기본 모델: distilbert/distilbert-base-uncased-finetuned-sst-2-english
    classifier = pipeline("sentiment-analysis")

     

    # 단일 문장 입력
    classifier("Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do.")
    [{'label': 'NEGATIVE', 'score': 0.999713122844696}]

     

    # 복수의 문장 입력
    results = classifier(["Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do.", "“Well!” thought Alice to herself, “after such a fall as this, I shall think nothing of tumbling down stairs!"])
    
    for result in results:
        print(f"label: {result['label']}, with score: {round(result['score'], 4)}")
    label: NEGATIVE, with score: 0.9997
    label: POSITIVE, with score: 0.7803

     

     

    이 감정분석 모델은 입력된 문장을 POSITIVE or NEGATIVE의 두 가지 중 하나의 감정으로 분류한 뒤, label과 score 정보를 딕셔너리 형태로 반환합니다. 만약, 여러 문장을 한꺼번에 분석하고 싶다면 입력 데이터를 리스트로 묶어서 작성하시면 됩니다.

     

     

    모델 및 토크나이저 선택하기


    pipeline() 함수를 이용해 모델을 선택하는건 원하는 이름만 바꿔넣으면 되기 때문에 똑같은 코드를 이용해서 다양한 모델을 비교해볼 수 있다는 장점을 가집니다. 그런데, 토크나이저까지 임의로 선택하고 싶을 경우에는 AutoTokenizerAutoModelForSequenceClassification 클래스를 이용할 수 있습니다. 여기서는 nlptown/bert-base-multilingual-uncased-sentiment 모델 및 토크나이저를 이용해 프랑스어를 처리할 수 있는 프로그램 만들기를 살펴보겠습니다.

     

     

    from transformers import AutoTokenizer, AutoModelForSequenceClassification
    
    model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
    model = AutoModelForSequenceClassification.from_pretrained(model_name)
    tokenizer = AutoTokenizer.from_pretrained(model_name)

     

    classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
    classifier("Nous sommes très heureux de vous présenter la bibliothèque 🤗 Transformers.")
    [{'label': '5 stars', 'score': 0.7272652387619019}]
    반응형

    댓글

문의: jwkang3929@naver.com