본문 바로가기

Upstage AI Lab 2기

Upstage AI Lab 2기 [Day100] NLP (실습)

Upstage AI Lab 2기
2024년 5월 7일 (화) Day_100

 

CH2. 자연어처리 경진대회 이해하기

Part1. 자연어처리 Task 이해하기

(1) Hugging Face

1. import model, tokenizer

https://huggingface.co/

2. datasets module

https://huggingface.co/

3. pipeline module

 

 

(2) 자연어처리 task

- 기계 번역 / 질의 응답 / 정보 추출 / 감성 분류 / 요약

 

(3) Evaluation Metric

confusion matrix - accuracy, precision&recall, F1-score

더보기

서비스 관점에서의 예시 1) 악성 채팅

어느 것이 서비스 관점에서 더 치명적일까?

 - 일반 채팅을 악성채팅으로 분류하여 차단 (FP)

    : 악성채팅이 노출되지 않는 것이 중요한 경우, 악성채팅의 threshold 낮춤.

      FP 증가  Precision ↓

      FN감소 → Recall  ↑

 - 악성 채팅을 일반채팅으로 분류하여 노출 (FN)

    : 확실히 악성채팅인 것만 차단하는 것이 중요한 경우, 악성채팅의 threshold 높임.

      FP 감소  Precision ↑

      FN 증가 → Recall ↓

 

서비스 관점에서의 예시 2) 암환자 예측

실제 암환자를 찾아내는 것이 중요

FN 감소 → Recall ↑

FP 증가 → Precision ↓

 

BLEU (Bilingual Evaluation Understudy Score) 

기계번역 및 텍스트 생성의 평가지표

정답문장 중 몇 단어 누락 (FN 증가   recall 감소) 되어도 문장의 의미는 유사할 수 있음

but 문장에 없는 단어 포함 (FP 증가  precision 감소) 오번역 가능성 증가

∴ precision을 기반으로 함

n-gram : n개의 token을 한 개체로 보고 평가

https://i.stack.imgur.com/MZygZ.png

brevity penalty (정답문장보다 예측 문장이 짧을 경우 1 이하의 값을 곱해서 precision 값을 낮게 보정)

x

n-gram (n = 1 to 4) 에 대한 precision의 기하 평균에 관한 항

 

 

Part2. 자연어처리 Pipeline 이해하기

파이프라인의 구조

1. 환경설정 : 라이브러리 설치 & 데이터셋 로드

더보기

pd.read_csv() arguments

filepath or buffer : 파일 경로

sep or delimiter : 구분자

header : 헤더가 있는 행 번호

usecols : 컬럼명을 리스트로 지정

dtype : 각 컬럼의 데이터 타입을 딕셔너리로 지정

encoding : e.g. ‘utf-8’ , ‘cp949’

 

2. 데이터셋 구축 : input data → train/valid split → tokenize & Pytorch Dataset class 로 변환

더보기

Pytorch Dataset class

- DatatLoader 구현이 쉬움 → batch, shuffle, multi-processing 구현 쉬움

- Pytorch 와 확장성/호환성, 구조화된 데이터 관리

__init__ : 데이터 생성/전처리방법 지정

__len__ : 데이터셋 길이

__getitem__ : index에 해당되는 데이터 반환

[NLP Advanced] (2-2) 자연어 처리 Pipeline 이해하기 강의자료 중

 

3. Import model & tokenizer (pre-trained)

from transformer import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("모델체크포인트")

 

4. 모델 학습

Model : 토크나이저와 동일한 체크포인트!! (otherwise 호환성 문제 발생)

Trainer : 학습, 평가, 최적화

|- TrainingArguments() 

|    |- save_total_limit : 저장할 체크포인트의 수

|    |- warmup_steps : warmup(모델 학습률 점진적 증가)을 몇 스텝까지 진행

|    |- load_best_model_at_end : 학습 종료 후 제일 성능이 좋은 체크포인트 저장

|- Trainer() :

|    |- compute_metrics : 사전 정의된 metrics function 입력

|    |- callbacks : training 각 상태 별 선택할 action 설정

|    |    |-  (예. EarlyStoppingCallback(early_stopping_patience=3, early_stopping_threshold=0.001))

|    |- optimizers : optimizer, learning scheduler 지정

 

[NLP Advanced] (2-2) 자연어 처리 Pipeline 이해하기 강의자료 중
[NLP Advanced] (2-2) 자연어 처리 Pipeline 이해하기 강의자료 중

 

5. Inference&Evaluation : model.eval(), with thorch.no_grad()

model.eval() : batch normalization, dropout 등은 학습 시에만 적용, 추론 및 평가 시에는 꺼야 함.

with thorch.no_grad() : gradient 계산·저장하지 않음. (메모리 사용 ↓ 연산속도 ↑)

[NLP Advanced] (2-2) 자연어 처리 Pipeline 이해하기 강의자료 중

 

 

Part3. 자연어처리 Pipeline 구현하기

Task : 텍스트 분류

Dataset : AI Hub 낚시성 기사 탐지 데이터

 

1. Dataset & Tokenizing

 

제목과 본문을 [SEP] 토큰을 사이에 넣고 연결해서 input으로 넣어줌

 

 

2. Model & Trainer

epoch=1
all data used, epoch = 20
train

 

test

 

 

 

 

 

 

 

 

3. Inference & Evaluation

epoch = 1
all data used, epoch = 20