[스터디] BERT(Bidirectional Encoder Representations from Transformers)
목차
학습 목표
- BERT 모델의 등장 배경과 특징에 대해서 안다.
INTRO
- 파인튜닝을 위한 Pre-trained 모델이다.
- LLM 모델을 따로 학습하고, fine-tuning 을 모두 수행하면 어려움(e.g. 컴퓨터 리소스 부족, 시간이 오래 걸림, 성능 안나옴)..
- 따라서, 언어에 대한 학습이 기본으로 된 Pre-trained 모델을 많이 활용한다.
- BERT는 이러한 Pre-trained 모델의 대표
- Bidirectional(양방향): 양방향 context를 활용하여 문서에 대한 이해를 높임
BERT의 핵심 구조, 인코더
: Transformer의 인코더 구조를 가져왔다.
[데이터 전처리]
- 3가지 임베딩을 한다 : Token + Segment + Positional
1. Token Embedding: 각 단어 토큰 임베딩
2. Segment Embedding(=Sentence Embedding): 문장 단위 임베딩
3. Positional embedding: 위치 (Self-attention 사용함)
- 이후, 정규화 레이어와 Dropout
Token Embedding
어떻게 토큰화할 것인가?
우리는 모르는 단어를 쪼개서 잘 이해할 수 있다.
예를 들어, 축구공이라는 단어는 "축구"+"공"으로 쪼개면 축구할 때 쓰는 공이구나!라고 컴퓨터가 잘 이해할 수 있는 것이다.
따라서, 단어보다 작은 단위로 쪼개는 워드피스(Word Piece) 방식을 사용한다.
워드피스(Word Piece)
: 익숙한 단어들은 그대로 1개의 토큰으로 처리하되, 낯선 단어들은 단어보다 더 작은 단위인 서브워드(Subword)로 쪼갠다.
-> 위의 방식대로 하나의 단어 집합 꾸러미를 만드는 것이다!
준비물 : 이미 훈련 데이터로부터 만들어진 단어 집합
1. 토큰이 단어 집합에 존재한다. => 해당 토큰을 분리하지 않는다.
2. 토큰이 단어 집합에 존재하지 않는다.
=> 해당 토큰을 서브워드로 분리한다.
=> 해당 토큰의 첫번째 서브워드를 제외한 나머지 서브워드들은 앞에 "##" 를 붙인 것을 토큰으로 한다.
워드 피스를 구현하는 다양한 패키지가 있는데,
google이 만든 SentencePiece, huggingface, opennmt 등이 있다.
-
Segment Embedding(=Sentence Embedding): 문장 단위 임베딩
토큰 단위로 나눈 뒤, 각 토큰이 어느 문장인지 임베딩을 해준다.
예)
- 문장 1: "고양이는 귀여워요."
- 문장 2: "강아지는 활발해요."
-> Segment Embedding 후
- 고양이는(0) 귀여워요(0).
- 강아지는(1) 활발해요(1).
Q. 왜 하는가?
A. 여러 문장을 구분하고 문장들 사이의 관계를 이해하는 데 도움을 주기 위함
학습 과정
Overview: Pretraining 과 Finetuning 하는 방식으로 구성
1) Pretraining: Encoder가 입력 문장을 임베딩 하여 학습하는 과정
2) Fine-tuning: 특정 자연어 처리 Task를 수행하는 과정 (QA, 추론 등의 다양한 태스크에 적합하다.)
1) Pretraining: Encoder가 입력 문장을 임베딩 하여 학습하는 과정
언어의 특성을 더 잘 학습할 수 있도록 다음과 같이 2가지 특징을 가진다.
- Masked Language Model(MLM)
- Next Sentence Prediction(NSP)
Masked Language Model(MLM)
: 말그대로 입력 문장의 일부를 masking(안보이게)하고, 이를 예측하게 하는 모델이다.
이때 BERT에서는 입력 토큰의 15%를 무작위로 마스킹한다.
마스킹 하는 방법은 총 3가지 가 있음.
- 이때 15% 중 80%는 masking
- e.g. I love the way you are -> I love the [MASK] you are
- 이때 15% 중 10%는 랜덤 마스킹
- e.g. I love the way you are -> I love the [dog] you are
- 이때 15%의 10%는 그대로 둔다
=> 왜 이렇게 하는 걸까? 마스크에 과도하게 학습하지 않기 위해서
마스킹을 통해 학습에서 양방향성을 확보한다.
- 양방향성이란, 앞에서부터 뒤로, 그리고 뒤에서부터 앞으로 동시에 문맥을 분석한다는 뜻이다.
e.g.
"나는 [MASK]를 먹었다."에서 **"[MASK]"**가 "사과"인지를 예측하려면, **"나는"**과 **"먹었다"**라는 문맥을 동시에 고려
다음 문장 예측(Next Sentence Prediction, NSP)
두 문장이 이어지는지를 학습하게 한다.
- 이어지는 문장 set과 이어지지 않는 문장 set을 학습하게 하는 방식
- 왜? 다양한 NLP task에 적합한 범용 모델을 만들기 위해서
e.g. QA나 추론 문제의 경우 두 문장의 관계를 이해하는 것이 중요
예를 들어,
<이어지는 문장 Set>
Sentence A : 나는 배가 고팠다.
Sentence B : 왜냐하면 운동을 했기 때문이다.
<연관없는 문장 Set>
Sentence A : 나는 배가 고팠다.
Sentence B : 운동하는 것은 즐겁다.
Q&A
- 왜 Deep Bi-directional 모델인가?
- Elmo : (좌->우) + (좌<-우) 를 단순 concat
- BERT는 진정한 의미의 Bi-directional...
- GPT 모델과 차이는 뭘까?
- GPT: 디코더에만 GPT 사용
Reference
17-02 버트(Bidirectional Encoder Representations from Transformers, BERT)
* 트랜스포머 챕터에 대한 사전 이해가 필요합니다.  BERT(Bidire…
wikidocs.net
06-1. BERT를 활용한 분류 입문
``` 06-1 작성자 : 지해인 ``` [TOC] 딥러닝(deep learning)은 컴퓨터에 대해 잘 알지 못하는 사람들도 한 번씩은 들어 봤을 만큼 핫한 주제이다.…
wikidocs.net