단일 문장 분류 task
문장 임베딩 벡터 유사도
두 문장 관계 분류 task
문장 토큰 분류 task
목적형 대화
의존 구문 분석
1단계에서 ‘충무공’, ‘조선’은 앞에 의존소가 없고 다음 어절은 지배소이므로 삭제
2단계에선 ‘이순신은’은 ‘무신이다’의 의존소이고 앞에 의존소가 없으므로 삭제
3단계에서 마지막 지배소 ‘무신이다’만 남고 삭제
문장 분류 task
주어진 문장이 어떤 종류의 범주에 속하는지 구분
감정분석
주제 라벨링 (토픽 라벨링)
언어 감지
의도 분류
문장이 가진 의도를 분류
챗봇에 사용
문장 분류를 위한 데이터
단일 문장 분류 모델 학습
import datasets
# 사용가능한 dataset list 불러오기
dataset_list = datasets.list_datasets()
# dataset list 확인
for datas in dataset_list:
if 'ko' in datas:
print(datas)
huggingFace에서 dataset 이름만 주면 dataset을 불러올 수 있도록 datasets 라이브러리 제공
실습에선 nsmc dataset 이용
dataset = datasets.load_dataset('nsmc') # nsmc, hate, sarcasm
train_data = pd.DataFrame({"document":dataset['train']['document'], "label":dataset['train']['label']})
test_data = pd.DataFrame({"document":dataset['test']['document'], "label":dataset['test']['label']})
## Dataset 구조 ##
DatasetDict({
train: Dataset({
features: ['id', 'document', 'label'],
num_rows: 150000
})
test: Dataset({
features: ['id', 'document', 'label'],
num_rows: 50000
})
})
dataset은 train, test로 나뉘며 feature 정보도 제공
train과 test dataset을 dataframe으로 생성
tokenized_train_sentences = tokenizer(
list(train_data['document']),
return_tensors="pt",
padding=True,
truncation=True,
add_special_tokens=True,
)
from sklearn.metrics import precision_recall_fscore_support, accuracy_score
def compute_metrics(pred):
labels = pred.label_ids
preds = pred.predictions.argmax(-1)
precision, recall, f1, _ = precision_recall_fscore_support(labels, preds, average='binary')
acc = accuracy_score(labels, preds)
return {
'accuracy': acc,
'f1': f1,
'precision': precision,
'recall': recall
}
trainer = Trainer(
model=model,
args=training_args,
compute_metrics=compute_metrics
)
trainer.evaluate(eval_dataset=test_dataset)
Trainer의 compute_metrics에 선언한 compute_metrics 함수를 넣으면,
trainer.evaluate
이 실행될 때 compute_metrics 함수가 실행된다.
원하는 메트릭을 return
nlp_sentence_classif = pipeline('sentiment-analysis', model=model, tokenizer=tokenizer, device=0)
코드를 사용해도 된다.
※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※