NLP는 인간 언어와 관련된 모든 것을 이해하는 데 초점을 맞춘 언어학 및 기계 학습 분야
NLP 작업의 목표는 단일 단어를 개별적으로 이해하는 것 뿐만 아니라 해당 단어의 맥락을 이해하는 것_
- transformer 기반 LLM모델을 손쉽게 사용할 수 있게 해주는 함수
- 복잡한 모델처리 과정을 감춤.
from transformers import pipeline
#감성 분석
classifier = pipeline(task = "sentiment-analysis", model = 'bert-base-multilingual-cased')
# sentiment-analysis 모델 파이프라인 생성
# 기본값 : distilbert-base-uncased-finetuned-sst-2-english
classifier = pipeline("sentiment-analysis")
# 모델 사용
text = ["I've been waiting for a HuggingFace course my whole life.",
"I hate this so much!",
"I have a dream.",
"She was so happy."]
classifier(text)
출력:
[{'label': 'POSITIVE', 'score': 0.9598048329353333},
{'label': 'NEGATIVE', 'score': 0.9994558691978455},
{'label': 'POSITIVE', 'score': 0.9997022747993469},
{'label': 'POSITIVE', 'score': 0.9998832941055298}]
이외 Pipeline으로 사용 가능한 언어 관련 task
Sentiment analysis : 주어진 문장에 대해 긍정, 부정 분류
Zero-shot classification: 학습 과정에서 본 적 없는 클래스에 대해 분류
Summarization : 긴 문장이나 글에대해 핵심 내용 요약
Translation : 다양한 언어로 번역
text-generation : 몇 글자를 입력하면 문장 생성
~~
자연어 처리 및 인공 지능 분야에서 가장 인기 있는 오픈 소스 라이브러리와 모델을 제공하는 플랫폼

!pip install transformers==4.31.0
!pip install datasets
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datasets import load_dataset # 데이터셋 다운로드
# emotion 데이터셋 다운로드
emotions = load_dataset("emotion")
# 데이터 레이블
classes = emotions['train'].features['label'].names
classes
# 데이터프레임으로 변환
emotions.set_format(type="pandas")
# train 데이터 만 추출
df = emotions["train"][:]
# 정수인코딩된 레이블에 원래 문자 추가하기
def label_int2str(row):
return emotions["train"].features["label"].int2str(row)
df["label_name"] = df["label"].apply(label_int2str)
df.head()
# 데이터 준비
from transformers import AutoTokenizer
# 데이터 토큰화
# 문장 하나씩 토크나이즈 하기 위한 함수 생성
def tokenize(batch):
return tokenizer(batch["text"], padding=True, truncation=True)
em_encoded = emotions.map(tokenize, batched=True, batch_size=None)
#텐서플로 학습을 위한 데이터셋 구성
em_encoded["train"]
tokenizer.model_input_names
# 학습 배치에 포함될 샘플의 수
batch_size = 64
# 필요한 칼럼 : ['input_ids', 'attention_mask']
token_cols = tokenizer.model_input_names
# 데이터셋 구성
train = em_encoded["train"].to_tf_dataset(columns=token_cols, label_cols="label",
shuffle=True, batch_size=batch_size)
val = em_encoded["validation"].to_tf_dataset(columns=token_cols, label_cols="label",
shuffle=False, batch_size=batch_size)
test = em_encoded["test"].to_tf_dataset(columns=token_cols, label_cols="label",
shuffle=False, batch_size=batch_size)
from transformers import TFAutoModelForSequenceClassification
from sklearn.metrics import accuracy_score, f1_score
import tensorflow as tf
from keras.optimizers import Adam
from sklearn.metrics import *
# 사전훈련된 모델 지정
preTrModel = "distilbert-base-uncased"
# Output Layer 노드 수
nclass = 6
# 모델 로드하기
model_ft = TFAutoModelForSequenceClassification.from_pretrained(preTrModel, num_labels=nclass)
# 컴파일 및 학습
model_ft.compile(optimizer = Adam(5e-5), loss = 'sparse_categorical_crossentropy')
model_ft.fit(train, validation_data = val, epochs=5, batch_size = 64)
#예측 및 평가
pred = model_ft.predict(test)
pred = pred.logits.argmax(axis=1)
y_test = em_encoded["test"]['label']
print(confusion_matrix(y_test, pred))
print()
print(classification_report(y_test, pred, target_names = classes))
결과 :

