ML/NLP

[NLP] BERT에 대해서

young_3060 2024. 1. 6. 10:30
728x90

첫번째로, BERT 모델에 대해서 공부해보자.

BERT

: Bidirectional Encoder Representations from Transformers로, 2018년도 google이 공개한 AI 언어 모델

이름에서 알 수 있듯이, 자연어를 이해하기 위한 양방향 학습 모델을 모두 지원하는 알고리즘이다.

3.3억 단어의 방대한 코퍼스를 정제 및 임베딩하여 학습하고 스스로 라벨링하여 준지도학습으로 수행했다.

💡 기본 구조

Transformer의 Encoder을 쌓아올린 구조로, Base 버전에는 12개를 쌓았고 Large 버전에서는 24개를 쌓았다.

 

💡 BERT의 토크나이저 WordPiece

: BERT는 단어보다 더 작은 단위로 쪼개는 서브워드 토크나이저를 사용. BPE(Byte Pair Encoding)의 유사 알고리즘으로, 글자로부터 서브 워드들을 병합해가는 방식으로 최종 단어 집합을 만드는 것이 유사.

서브워드 토크나이저?

자주 등장하는 단어는 그대로 단어 집합에 추가, 그렇지 않은 단어는 더 작은 단위인 서브워드로 분리하여 단어 집합에 추가.

이렇게 만들어진 단어 집합을 기반으로 토큰화를 수행한다.

준비물 : 이미 훈련 데이터로부터 만들어진 단어 집합

  1. 토큰이 단어 집합에 존재한다. → 해당 토큰을 분리하지 않는다.
  2. 토큰이 단어 집합에 존재하지 않는다. → 해당 토큰을 서브워드로 분리한다. → 해당 토큰의 첫번째 서브워드를 제외한 나머지 서브워드들은 앞에 "##"를 붙인 것을 토큰으로 한다.

 

💡 포지션 임베딩(Position Embedding)

먼저, 포지셔널 인코딩(Positional Encoding)에 대해서 알아야 할 것 같다.

포지셔널 인코딩은 sin함수와 cos함수를 사용하여 위치에 따라 다른 값을 가지는 행렬을 만들어 이를 단어 벡터들과 더하는 방법이다.

트랜스포머에서는 포지셔널 인코딩 방법을 통해서 단어의 위치 정보를 표현하는데, BERT에서는 이와 유사하지만 위치 정보를 sin, cos함수를 통해서가 아닌 학습을 통해서 얻는 포지션 임베딩을 사용한다.

포지션 임베딩은 위치 정보를 위한 임베딩 층(Embedding layer)을 하나 더 사용한다. 실제 BERT에서는 문장의 최대 길이를 512로 하고 있어 총 512개의 포지션 임베딩 벡터가 학습된다.

 

임베딩 관점에서의 BERT

Pre-training 방식으로, 이전에 사용되던 임베딩 방식인 Word2Vec, GloVe, Fasttext보다 더 좋은 성능을 낸다.

  • BERT 사용 X : [분류할 데이터] → LSTM, CNN등 머신러닝 모델 → 분류
  • BERT 사용 O : [방대한 corpus] → BERT → [분류할 데이터] → LSTM,CNN등 머신러닝 모델 → 분류

즉, 코퍼스에 BERT언어 모델을 적용하고 ‘상태 좋은 임베딩’값을 추가적인 모델에 입력(전이학습)하는 것으로 수행하는 구조

전이학습? Transfer Learning, 좋은 임베딩을 딥러닝 모델 입력 값으로 사용하는 것

단어의 의미를 벡터로 잘 표현하고 임베딩 성능이 좋아 언어 모델 자체의 성능도 좋고 모든 NLP 처리 분야에서 좋은 성능을 보이는 범용 언어 모델이다.

ELMo나 GPT-1과 마찬가지로 문맥을 반영한 임베딩(Contextual Embedding)을 사용하고 있다.

그림에서도 볼 수 있듯이, [CLS]라는 벡터는 입력 임베딩에서는 단순한 임베딩 층을 지난 임베딩 벡터였지만, BERT를 지나고 나서는 BERT의 입력이었던 모든 단어들인 [CLS], I, love, you를 참고한 후 문맥 정보를 가진 벡터가 되는 걸 확인할 수 있다.

이외에도 출력 임베딩 단계에서의 love를 보면 동일하게 BERT의 입력이었던 모든 단어들인 [CLS], I, love, you를 참고하고 있는 걸 확인할 수 있다.

이런 연산은 BERT의 모든 층에서 전부 이루어진 후 최종적으로 출력 임베딩을 얻게 되는 것이다.

 

[CLS]토큰? BERT가 분류 문제를 풀기위한 특별 토큰

 

BERT의 3가지 임베딩 층

  • WordPiece Embedding : 실질적인 입력이 되는 워드임베딩. 임베딩 벡터의 종류는 단어 집합의 크기로 30,522개.
  • Position Embedding : 위치 정보를 학습하기 위한 임베딩. 임베딩 벡터의 종류는 문장 최대 길이인 512개.
  • Segment Embedding : 두 개의 문장을 구분하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 개수인 2개.

 

BERT의 동작 과정

1️⃣ Input

  • Token Embedding : 각 문자 단위로 임베딩
  • Segment Embedding : 토큰화 한 단어들을 다시 하나의 문장으로 만드는 작업
  • Position Embedding : 토큰 순서대로 인코딩

 

2️⃣ Pre-Training

: 단어들을 임베딩→인코딩 후 MLM과 NSP 방식을 사용하여 모델 학습시킨다.

  • MLM : Masked Language Model, 입력 문장에서 임의로 토큰을 버리고(Mask) 그 토큰을 맞추는 방식으로 학습 진행. BERT는 masked 언어 모델 외에도 다음 문장 예측이라는 또 다른 task를 학습한다.

  • NSP : Next Sentence Prediction, 두 문장을 주고 순서를 예측하는 방식으로 문장 간 관련성을 고려하며 학습 진행.

 

→ 모든 상황에서 BERT BASE(MLM과 NSP 모두 적용한 것)의 성능이 좋음

 

3️⃣ Transfer Learning

: 학습된 언어모델을 전이학습시켜 실제 NLP를 수행하는 과정

BERT모델 Fine-tuning하기

  1. Single Text Classificaiton : 하나의 텍스트에 대한 텍스트 분류 유형
  2. Tagging : 하나의 텍스트에 대한 태깅 작업
  3. Text Pair Classification or Regression : 텍스트의 쌍에 대한 분류 또는 회귀 문제
  4. Question Answering : 질의 응답
  5. … etc

 

어텐션 마스크(Attention Mask)

BERT를 실제로 쓰려면 어텐션 마스크라는 시퀀스 입력이 추가로 필요하다. 이는 어텐션 연산에서 불필요하게 패딩 토큰에 대해 어텐션을 하지 않도록 실제 단어와 패딩 토큰을 구분할 수 있도록 알려주는 입력이다.

값은 0과 1 두가지 값을 가지는데, 1은 실제 단어이므로 마스킹을 하지 않는다는 의미이고, 0은 패딩 토큰이므로 마스킹을 한다는 의미이다.

 

 

[참고]

https://wikidocs.net/115055

 

    다음에는 BERT를 이용해서 영화리뷰를 분석해보는 실습을 진행해보겠다.
728x90

'ML > NLP' 카테고리의 다른 글

[NLP] BERT로 네이버 영화 리뷰 감정분류하기  (2) 2024.01.12
[NLP] LLM이란?  (0) 2024.01.05