아무것도 모르는 나란인간.. BERT가 뭔지 알아보기로 했다..
BERT란?
- Bidirectional Encoder Representations from Transformers
- Transformer를 Bidirection한 Encoder
- Bidirection : 양방향
- Encoder : 입력 값을 숫자 형태로 바꾸는 모듈
- BERT는 문맥을 양방향을 위해 숫자의 형태로 바꿔주는 딥러닝 모델
- BERT는 Language Model
- Pre-training 과 Fine-tuning 두 파트로 나뉘어짐
- GPT1과 동일한 사이즈의 BERT는 GPT1 보다 높은 성능을 가짐
BERT Pre-Training
- 입력 토큰들이 Position Embedding과 Segment Embedding과 더해짐
- CLS : Classification, 분류 Task에 사용되기 위한 벡터, 문장 전체가 하나의 벡터로 표현된 스페셜 토큰
- SEP : 두 문장으로 구성된 입력값의 경우에 사용되는 스페셜 토큰, 문장을 구분해줌
- WordPiece Embedding
- WordPiece Embedding을 사용해서 문장을 토큰 단위로 분리함
- WordPiece Embedding는 단순히 띄어쓰기로 토큰을 나누는 것보다 효과적으로 토큰을 분리함
- Segment Embedding
- 두 개의 문장이 입력될 경우에 각각의 문장에 서로 다른 숫자를 더해주는 것
- 딥러닝 모델에게 두 개의 다른 문장이 있다는 것을 쉽게 알려주기 위해 사용하는 Embedding
- Position Embedding
- 토큰들의 상대적 위치정보를 알려줌
- 딥러닝 모델은 Position Embedding으로 e1 다음에 e2, e2 다음에 e3 토큰이 위치함을 알 수 있음
- sin, cos 함수를 이용함
- sin과 cos 출력 값은 입력 값에 따라 달라짐
- 따라서 sin, cos 출력 값은 입력 값의 상대적인 위치를 알 수 있는 숫자로 사용 가능함
- sin과 cos 출력 값은 규칙적으로 증가 또는 감소함
- 따라서, 딥러닝 모델이 이 규칙을 사용해서 입력 값의 상대적 위치를 쉽게 계산 가능함
- sin과 cos는 무한대 길이의 입력 값도 상대적인 위치를 출력할 수 있음
- 어떤 위치의 입력 값이라도 -1 에서 1사이의 값을 출력하게 되어 있음
- 상대적 위치를 사용하는 이유?
- 절대적 위치를 사용할 경우 최장 길이 문장을 세팅해야 함
- 따라서 최장 길이 문장보다 긴 학습 데이터는 사용할 수 없음
- WordPiece Embedding
BERT Fine Tuning
- 두 문장의 관계를 예측하기 위해 모델을 만드는 방법
- 두 개의 문장을 SEP 토큰으로 구분해서 BERT에 입력하여
- 력 값의 첫번째 CLS 토큰이 두 문장의 관계를 나타내도록 학습시킴
- 문장을 분류하는 모델
- 문장 1개를 입력받고 CLS 토큰이 분류 값 중 하나가 되도록 학습시킴
- QnA 예제(질의 및 응답 예제)
- 입력 값으로 질문과 정답이 포함된 장문을 SEP 토큰으로 구분해서 줌
- BERT에 출력 값의 마지막 토큰들이 장문 속에 위치한 정답의 시작 인덱스와 마지막 인덱스를 출력하도록 학습시킴
- 문장 속 단어를 태깅하는 예제
- 각각의 입력 토큰에 대한 출력 값이 있기 때문에, 이 출력 값이 원하는 태깅으로 출력되도록 학습시킴
Transformer란?
- 구글에서 공개한 Encoder, Decoder 구조를 지닌 딥러닝 모델
- 기계번역에서 우수한 성능을 보여준 모델
- Encoder는 입력 값을 양방향으로 처리하고
- Decoder는 입력 값을 왼쪽에서 오른쪽으로 단방향으로 처리 함
Transformer 작동방식
- 입력 값은 먼저 Encoder에 입력됨
- 입력 값이 Encoder에 입력되면 각 토큰들은 포지셔널 인코딩과 더해지고
- 인코더는 이 값들을 행렬 계산을 통해서 한방에 Attention 벡터를 생성함
- 벡터는 토큰의 의미를 구하기 위해서 사용됨
- 단어하나만 보면 그 단어의 의미가 상당히 모호할 때가 많음
- 예를 들어, 문장 전체를 보지 않고 단순히 '텍스트'라는 단어만 보면 텍스트가 신문지 속에 있는 문장들을 의미하는지, 문자메세지를 보내는 행위를 말하는 지 알기 어려움
- 마찬가지로 메세지라는 단어만 봤을 경우 누가 말로 전하는 소식인지, 문자인지 헷갈림
- Attention 벡터는 fully connected layer로 전송됨
- 이와 동일한 과정이 6번 진행되어 그 최종 출력 값을 Transformer Decoder로 입력 값으로 사용함
- Encoder는 모든 토큰을 한방에 계산함
- 왼쪽에서 오른쪽으로 하나씩 읽어가는 과정이 없음
- Decoder는 Encoder의 출력 값과 최초 스타트 스페셜 토큰으로 작업 시작함
- Decoder는 왼쪽부터 오른쪽으로 순차적으로 출력 값을 생성함
- Decoder는 이전에 생성된 Decoder의 출력 값과 Encoder의 출력 값을 사용해서 현재의 출력 값을 생성함
- Decoder 역시 Attention 벡터를 만들고 fully connected layer로 전송하는 작업을 6번 진행함
- Decoder는 end토큰이라는 스페셜 토큰을 출력할 때까지 반복함
BERT가 양방향 Encoder를 취하게 된 이유?
- GPT1으로부터 시작됨
- GPT1이란?
- 2018년에 openAI 에서 Transformer Decoder 구조를 사용해서 만든 자연어 처리 모델
- GPT1은 Generative training으로 학습된 Language 모델이 얼마나 자연어 처리 능력이 우수한지 보여준 우수한 모델
- 기본적으로 문장을 데이터로 사용함
- 단어를 하나씩 읽어가면서 다음 단어를 예측하는 방법으로 학습됨
- 이런 학습 방식은 별도의 라벨링 작업이 필요하지 않아 비지도 학습임
- 한 문장만 가지고도 여러 학습 데이터를 만드는 것이 가능함
- 현재 위치의 단어 다음에 위치한 단어를 예측하는 방식으로 학습됨
- 구글은 질의 및 응답 영역은 문맥이해 능력이 상당히 중요한데, 단순히 왼쪽에서 오른쪽으로 읽어나가는 방식으로는 문맥이해의 약점이 있을 수 있다고 지적함
- 이에 단순히 왼쪽에서 오른쪽으로 읽어나가는 Decoder보다 양방향으로 문맥을 이해할 수 있는 Encoder를 활용한 Language 모델을 BERT라는 이름으로 발표함
BERT vs GPT
- BERT
- 양방향 LM
- Fine Tuning을 하도록 만들어짐
- GPT
- 단방향 LM
- Fine Tuning을 하지 않도록 만들어짐
글에 문제가 있으면 댓글로 알려주시면 감사하겠습니다!
그럼 이만.!
출처
1. https://www.youtube.com/watch?v=30SvdoA6ApE (허민석님의 [딥러닝 자연어처리]BERT이해하기)
2. Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova, "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding"(https://arxiv.org/pdf/1810.04805.pdf)
'Study' 카테고리의 다른 글
multiprocessing 겅부.. (0) | 2022.09.18 |
---|---|
local에서 ssh 서버에 띄운 jupyter notebook 붙기 (0) | 2022.02.06 |
Neural Search 관련 공부 (2) | 2021.07.07 |
머신러닝 개념 정리 (0) | 2021.05.22 |