BERT
- 2018년, 구글이 공개한 사전 훈련된 모델
- 트랜스포머를 이용하여 구현 (트랜스포머의 인코더를 쌓아올린 구조)
- 위키피디아(25억 단어)와 BooksCorpus(8억 단어) 데이터로 사전 훈련 (Unsupervised Learning)
- 모든 자연어 처리 분야에서 좋은 성능을 내는 범용 Language Model
BERT등장 이전에는 데이터의 전처리 임베딩을 Word2Vec, GloVe, Fasttext 방식을 많이 사용
BERT가 높은 성능을 얻을 수 있었던 이유
레이블이 없는 방대한 데이터로 사전 훈련된 모델을 가지고,
레이블이 있는 다른 작업(Task)에서 추가 훈련과 함께 하이퍼파라미터를 재조정
* Fine-tuning : 다른 작업에 대해서 파라미터 재조정을 위한 추가 훈련 과정
= 추가적인 모델(RNN, CNN 등의 머신러닝 모델)을 쌓아 원하는 Task를 수행
ex 감성 분석 → BERT 위에 분류를 위한 신경망을 한 층 추가
(사전 학습 과정에서 얻은 지식을 활용할 수 있으므로 더 좋은 성능을 얻을 수 있음)
Input
BERT 모델의 입력은 3가지 Embedding이 결합된 형태
Token Embedding
- Word Piece 임베딩 방식 사용
- 토큰화(tokenization)하여 얻어진 토큰들에 대한 임베딩 벡터
WordPiece
단어를 서브워드(subword) 단위로 쪼개어 토큰화하는 방법
ex) "unintelligible" → "un", "##int", "##ellig", "##ible"
1. Out-of-Vocabulary(OOV) 문제를 해결할 수 있음
(훈련 데이터에는 존재하지만 테스트 데이터에는 없는 단어가 등장할 때 발생하는 문제)
"intelligible"이라는 단어가 훈련 데이터에 없어도
"##int", "##ellig", "##ible"이라는 서브워드는 존재하므로,
모델이 해당 서브워드를 이용하여 "unintelligible"을 처리할 수 있음!!
2. 모델이 더 많은 정보를 학습할 수 있음
단어의 의미를 나타내는 접두사(prefix)나 접미사(suffix)를 별도의 토큰으로 인식할 수 있음
이는 모델이 단어의 복잡한 구조를 이해하고, 단어 내의 다양한 형태와 의미를 학습할 수 있도록 해줌
BERT에서 토큰화를 수행하는 방식
토큰이 단어 집합에 존재하는 경우, 해당 토큰을 분리하지 않음
토큰이 단어 집합에 존재하지 않는 경우, 해당 토큰을 서브워드로 분리
(첫번째 서브워드를 제외한 나머지 서브워드들은 앞에 "#"을 붙임)
segment Embedding
- 토큰화 시킨 단어들을 다시 하나의 문장으로 만드는 작업
- [SEP]를 기준으로 두 문장을 구분
- 첫 번째 [SEP] 토큰까지는 0으로 그 이후 [SEP] 토큰까지는 1 값으로 마스크를 만들어 각 문장들을 구분
Position Embedding
- 위치 정보를 사인 함수와 코사인 함수로 만드는 것이 아닌 학습을 통해서 얻음
- 입력 문장의 길이가 가변적일 때, 적절하게 대처할 수 있음 (모델이 입력 문장의 패턴을 보다 잘 인식할 수 있음)
* Transformer에서 Positional Encoding의 경우 고정된 차원을 이용했었음
* 트랜스포머에서의 입력은 고정된 길이지만, BERT에서의 입력은 가변적인 길이
Pre-training
* 위키피디아(25억 단어)와 BooksCorpus(8억 단어) 데이터로 사전 훈련
Masked Language Model, MLM (마스크드 언어 모델)
- 전체 단어의 15%를 사용 (85%는 사용되지 않음)
- 인공 신경망의 입력으로 들어가는 입력 텍스트의 15%의 단어를 랜덤으로 마스킹
- 인공 신경망에게 이 가려진 단어들을(Masked words) 예측하도록 함
선택된 15%의 단어들은 다시 다음과 같은 비율로 규칙 적용
80% → [MASK]로 변경 Ex) The man went to the store → The man went to the [MASK] MASK 예측
10% → 랜덤으로 단어 변경 Ex) The man went to the store → The man went to the dog 원래 단어 예측
10% → 동일하게 둠 Ex) The man went to the store → The man went to the store
* 소프트맥스 함수가 사용된 1개의 층을 사용하여 원래 단어가 무엇인지 예측
* 여러 개가 변경된 경우, 각 단어에 대해 별도의 소프트맥스 함수가 적용되어 단어를 예측 (이후 평균을 구하는 방식으로)
Next Sentence Prediction, NSP (다음 문장 예측)
- 두 개의 문장을 준 후에 이 문장이 이어지는 문장인지 아닌지를 맞추는 방식으로 훈련
- BERT 모델은 이러한 문장들 사이의 관계를 더욱 잘 이해할 수 있게 됨!!
- [SEP]라는 특별 토큰을 사용해서 문장을 구분
- [CLS] 토큰의 위치의 출력층에서 이진 분류 문제를 풀도록 함
- Label : 이어지는 문장의 경우, IsNextSentence / 이어지는 문장이 아닌 경우, NotNextSentence
* [CLS] 토큰 : BERT가 분류 문제를 풀기 위해 추가된 특별 토큰
Transfer Learning
- 원하는 task에 맞추어 output layer를 추가
- 원하는 task를 위해 추가적인 모델을 쌓는 부분
한계점
- 사용 단어들이 다르고 언어의 특성이 다른 경우 잘 동작하지 않음
- 해당 특성을 수집할 수 있는 언어 데이터들을 수집하고, 언어 모델 학습을 추가적으로 진행해주어야 함
ex) 한국어 문장, Bio/Science/Finance 등 특정 분야
'AI' 카테고리의 다른 글
Transformer: Attention Is All You Need (0) | 2023.05.09 |
---|---|
Optimizer (0) | 2023.05.09 |
Gradient Descent (0) | 2023.05.08 |
Dropout (0) | 2023.05.02 |
Pre-training, Transfer Learning, Fine-tuning (0) | 2023.04.30 |