Bert : Bidirectional Encoder Representation from Transformer

yourmean·2021년 2월 24일
0

Paper Review

목록 보기
2/2
post-thumbnail

elmo, gpt에 이은 세 번째 모델

Introductino

Bidirectional Encoder Representation from Transformer
: 트랜스포머에서 인코더만을 사용하는데, 여기에서 바이디렉셔널한 개념을 사용

버트의 구조 자체는 바이디렉셔널 리프렌제테이션을 학습

목적(task)은 두가지
1) MLM, 마스크드 랭귀지 모델 - 각가으 ㅣ인풋들이 들어왔을 때, 임의의 순서에 해당하는(순차적으로 사용X) 특정 위치에 해당하는 부분을 마스킹하고, 얘네를 예측하는 모델을 만든다

2) NSP : 특정한 두 쌍의 센텐스 들어왔을 때, 해당하는 다음 센텐스가 코퍼스에서의 실질적으로 다음에 등장했는지에 대한 여부 학습

프리트레인된 모델을 가져다가, 버트의 윗단에 단순한 레이어 하나만 추가함으로써 sota모델을 앞질를 수 있는 우수한 성능 나타냄!(당시에)
지금도 기본적인 구조로 많이 사용

Bert 모델 아키텍처

오른쪽은 트랜스포머의 인코더와 디코더
-> 인코더 블럭만 사용!
L: 레이어의 개수
H: 히든 노드 사이즈
A: 셀프 어텐션 헤드의 개수(멀티 헤드 어텐션을 몇 개 사용?)

모델 구조
1) bert base - gpt와의 성능을 비슷한 복잡도에서의 비교 위함
2) bert large -

input/output

input이 유연하게 구성된 필요
(버트에서의 정의
센텐스: 연속적인 텍스트의 span센텐스가 링귀스틱하지 않아도 ㄱㅊ,일련의 연속한 단어들의 집합으로 언어학적으로 완전할 필요 X
시퀀스: 앞서 정의한 싱글 센텐스일 수 도 있고, 두개가 결합한것도 ㄱㅊ)

실제 구조를 살펴보자.
우선, 두 개의 '마스킹된'센텐스를 입력받음 (센텐스가 가진 각각의 토큰이 일정 비율로 실제 토큰이 아닌, 마스킹을 하여 입력으로 집어넣음)
-> unlabeled의 이미? 수퍼바이저드 러닝이 아니라는 것!

  • CLS : 모든 시퀀스의 시작을 알리는 첫번째 토큰
  • SPK?? : 두 개의 센텐스를 구분(seperating)하는 토큰

output

  • 가장 먼저, NSP (단순 바이너리 분류에서는 얘만 쓴다)
    각각의 위치에 대응하는 토큰들은 n번째 토큰에서의 히든 벡터, 여기에서 두 개의 센텐스가 실제로 바로 다음인지에 대한 판별을 하는(0,1)의 바이너리 클래시피케이션 태스크, msked language model 두가지를 동시에 학습

input representation

세가지 임베딩 벡터의 합으로 구분
1. 토큰 임베딩
2. 세그먼트 임베딩: 경계선을 기준으로 문장 구분
: 부가설명
3. 포지션 임베딩: 각가의 포지션에 대한 임베딩
-> 모두 같은 차원이므로, 단순 sum으로 최종적인 인풋 repre-구성

Pretrainig Bert

task1. masked language model(MLM)
전체의 15%의 토큰이 [mask]로

  • 실제 가려진 단어를 잘 예측하도록 학습을 시키는 과정
    *MLM의 문제? 마스킹이 실제로 프리트레이닝 과정에서만 일어나며, 파인튜닝 과정에서는 등장하지 X, 미스매치가 발생할 수 있음
    -> solution(논문에서) : 80%마스킹, 10%랜덤하게치환, 10%는 마스킹 하지않고 그대로 쓰자 (경험적)
    ex) hariy -> [MASK], apple, hairy

task2. Next Sentence Prediction(NSP)
QA, NLI는 기본적으로 두 개 이상의 문장의 관계를 이해해야만 풀 수 있음
두 개 이상의 문장의 관계를 알아야지만 풀 수 있는 nlp task에도 좋은 성능 나타내기 위해, 매우 심플한 Binarized next sentence prediction 만들어냄
ex) s1,...,s10 에 대해
[cls] s1 [sep] s2 -> 1
[cls] s2 [sep] s10 -> 0
[cls] s5 [sep] s1 -> 0
위와 같은 방식으로 50%-50%으로 학습
QA와 NLI task에 대해서는 프리트레인(두 문장의 관계 파악) 한 것과 안한것의 차이가 크다

버트, GPT, ELMo의 모델 구조 비교

1.엘모: 여러 단계로 학습시키고, 해당하는 hidden state를 모두 리니어 결ㅎ밥
2. GPT: 트랜스포머의 디코더 블란만을 사용, 마스킹이 뒷쪽에만 되어있음(랜덤X)
- 마스킹할필요X, 정방향으로만 쓰기 때문
3. 버트는 양쪽 방향으로 동시에 학습, 일정 비율로 토큰들에 마스킹을 하여 사용
-> 큰 차이가 있다~

pretraining BERT

  • booksCorpus
  • English Wikipedia
  • Hyper-parameter settings

Fine-tuning Bert

버트 윗단에 하나의 레이어만 걸치면, 어떤 태스크도 태울 수 있다
4개의 모습??
-형태소 분석, 개체명 인식(NER)
다양한 구조에서 버트 트레이닝 후, 파인튜닝
파인튜닝은 버트의 제일 윗단에 하나의 레이어만 쌓는 것만으로도 가능

Experiments

NLU task에 대해 학습 수행 중

profile
𝐼 𝑒𝑖𝑡ℎ𝑒𝑟 𝑤𝑖𝑛 𝑜𝑟 𝑙𝑒𝑎𝑟𝑛 💪🏻

0개의 댓글