Data Science

[do it! bert gpt] 1장. 처음 만나는 자연어처리 본문

인공지능

[do it! bert gpt] 1장. 처음 만나는 자연어처리

shinho0902 2023. 1. 26. 00:13

 

 

 

 

 

1-1 딥러닝 기반 자연어 처리 모델

 

자연어 처리 모델은 자연어를 입력 받아서 해당 입력이 특정 범주일 확률을 반환하는 확률 함수다.

  • 문서 분류 (document classification)
  • 문장 쌍 분류 (sentence pair classification)
  • 개체명 인식 (named entity recognition)
  • 질의응답 (question answering)
  • 문장 생성 (sentence generation)
 

학습이란 출력이 정답에 가까워지도록 모델을 업데이트하는 과정을 말한다.

 

1-2 트랜스퍼 러닝 - 전이학습 (transfer learning)

 

Transfer learning 이란 특정 태스크를 학습한 모델을 다른 태스크 수행에 재사용하는 기법이다.

 

업스트림 태스크 (upstram task)

문맥을 이해하는 과제

ex) 다음 단어 맞추기, 빈칸채우기

  • 다음 단어 맞히기 : GPT - 언어모델(language model)
  • 빈칸 채우기 : BERT - 마스크 언어 모델 (masked language model)
 
그림1-6.png
 

1-3 학습 파이프라인

In [ ]:
!pip install ratsnlp
In [ ]:
# 코드 1-1 설정값 선언
from ratsnlp.nlpbook.classification import ClassificationTrainArguments
args = ClassificationTrainArguments(
    pretrained_model_name="beomi/kcbert-base",
    downstream_corpus_name="nsmc",
    downstream_corpus_root_dir="/content/Korpora",
    downstream_model_dir="/gdrive/My Drive/nlpbook/checkpoint-doccls",
    learning_rate=5e-5,
    batch_size=32,
)
 

Korpora (코포라) : 다양한 한국어 말뭉치를 쉽게 내려받고 전처리할 수 있도록 도와주는 패키지

https://github.com/ko-nlp/Korpora

In [ ]:
# 코드 1-2 데이터 다운로드
# 네이버 영화 리뷰 말뭉치
from Korpora import Korpora
Korpora.fetch(
    corpus_name=args.downstream_corpus_name,
    root_dir=args.downstream_corpus_root_dir,
    force_download=True,
)
 
[nsmc] download ratings_train.txt: 14.6MB [00:00, 107MB/s]                             
[nsmc] download ratings_test.txt: 4.90MB [00:00, 71.9MB/s]
In [ ]:
# 코드 1-3 kcvbert-base 모델 준비
# hugging-face 에서 만든 transformers 오픈소스 파이썬 패키지에 있는 모델
from transformers import BertConfig, BertForSequenceClassification
pretrained_model_config = BertConfig.from_pretrained(
    args.pretrained_model_name,
    num_labels = 2,
)
model = BertForSequenceClassification.from_pretrained(
    args.pretrained_model_name,
    config=pretrained_model_config,
)
 
 
 
 
 
Some weights of the model checkpoint at beomi/kcbert-base were not used when initializing BertForSequenceClassification: ['cls.seq_relationship.bias', 'cls.seq_relationship.weight', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.decoder.bias', 'cls.predictions.decoder.weight', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias']
- This IS expected if you are initializing BertForSequenceClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing BertForSequenceClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
Some weights of BertForSequenceClassification were not initialized from the model checkpoint at beomi/kcbert-base and are newly initialized: ['classifier.bias', 'classifier.weight']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
In [ ]:
# 코드 1-4 kcbert-base 토크나이저 준비
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained(
    args.pretrained_model_name,
    do_lower_case=False,
)
 
 
 
 
 

pytorch DataLoader

  • 데이터 로더는 데이터를 배치단위로 모델에 넣어주는 역할
  • 전체 데이터 중 일부 인스턴스를 뽑아 배치를 구성
 
그림1-16.png
 
  • 컬레이트(collate): 배치의 모양등을 정비해 모델의 최종 input 형태로 만들어 주는 과정
 
그림1-17.png
In [ ]:
# 코드 1-5 문서 분류 데이터 로더 선언
from ratsnlp import nlpbook
from torch.utils.data import DataLoader, RandomSampler
from ratsnlp.nlpbook.classification import NsmcCorpus, ClassificationDataset
corpus = NsmcCorpus()
train_dataset = ClassificationDataset(
    args=args,
    corpus=corpus,
    tokenizer=tokenizer,
    mode='train',
)
train_dataloader = DataLoader(
    train_dataset,
    batch_size=args.batch_size,
    sampler=RandomSampler(train_dataset, replacement=False),
    collate_fn=nlpbook.data_collator,
    drop_last=False,
    num_workers=args.cpu_workers,
)
 

태스크 정의하기

  • 본 교재는 모델 학습을 할때 pytorch lightning 라이브러리 이용함
  • pytorch lightning: 딥러닝 모델을 학습할 때 반복적인 내용을 대신 수행하여 사용자가 모델 구축에만 신경쓸수 있도록 돕는 라이브러리
  • optimizer, learning rate scheduler
In [ ]:
# 코드 1-6 문서 분류 모델 학습
from ratsnlp.nlpbook.classification import ClassificationTask
task = ClassificationTask(model, args)
trainer = nlpbook.get_trainer(args)
trainer.fit(
    task,
    train_dataloaders=train_dataloader,
)
 
INFO:pytorch_lightning.utilities.rank_zero:GPU available: True, used: True
INFO:pytorch_lightning.utilities.rank_zero:TPU available: False, using: 0 TPU cores
INFO:pytorch_lightning.utilities.rank_zero:IPU available: False, using: 0 IPUs
INFO:pytorch_lightning.utilities.rank_zero:HPU available: False, using: 0 HPUs
/usr/local/lib/python3.8/dist-packages/pytorch_lightning/trainer/configuration_validator.py:133: UserWarning: You defined a `validation_step` but have no `val_dataloader`. Skipping val loop.
  rank_zero_warn("You defined a `validation_step` but have no `val_dataloader`. Skipping val loop.")
WARNING:pytorch_lightning.loggers.tensorboard:Missing logger folder: /gdrive/My Drive/nlpbook/checkpoint-doccls/lightning_logs
INFO:pytorch_lightning.accelerators.gpu:LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]
/usr/local/lib/python3.8/dist-packages/pytorch_lightning/core/optimizer.py:380: RuntimeWarning: Found unsupported keys in the optimizer configuration: {'scheduler'}
  rank_zero_warn(
INFO:pytorch_lightning.callbacks.model_summary:
  | Name  | Type                          | Params
--------------------------------------------------------
0 | model | BertForSequenceClassification | 108 M 
--------------------------------------------------------
108 M     Trainable params
0         Non-trainable params
108 M     Total params
435.680   Total estimated model params size (MB)
 
 

'인공지능' 카테고리의 다른 글

[do it! bert gpt] 2장. 문장을 작은 단위로 쪼개기  (0) 2023.01.26
Comments