elmo, gpt에 이은 세 번째 모델
Bidirectional Encoder Representation from Transformer
: 트랜스포머에서 인코더만을 사용하는데, 여기에서 바이디렉셔널한 개념을 사용
버트의 구조 자체는 바이디렉셔널 리프렌제테이션을 학습
목적(task)은 두가지
1) MLM, 마스크드 랭귀지 모델 - 각가으 ㅣ인풋들이 들어왔을 때, 임의의 순서에 해당하는(순차적으로 사용X) 특정 위치에 해당하는 부분을 마스킹하고, 얘네를 예측하는 모델을 만든다
2) NSP : 특정한 두 쌍의 센텐스 들어왔을 때, 해당하는 다음 센텐스가 코퍼스에서의 실질적으로 다음에 등장했는지에 대한 여부 학습
프리트레인된 모델을 가져다가, 버트의 윗단에 단순한 레이어 하나만 추가함으로써 sota모델을 앞질를 수 있는 우수한 성능 나타냄!(당시에)
지금도 기본적인 구조로 많이 사용
오른쪽은 트랜스포머의 인코더와 디코더
-> 인코더 블럭만 사용!
L: 레이어의 개수
H: 히든 노드 사이즈
A: 셀프 어텐션 헤드의 개수(멀티 헤드 어텐션을 몇 개 사용?)
모델 구조
1) bert base - gpt와의 성능을 비슷한 복잡도에서의 비교 위함
2) bert large -
input이 유연하게 구성된 필요
(버트에서의 정의
센텐스
: 연속적인 텍스트의 span센텐스가 링귀스틱하지 않아도 ㄱㅊ,일련의 연속한 단어들의 집합으로 언어학적으로 완전할 필요 X
시퀀스
: 앞서 정의한 싱글 센텐스일 수 도 있고, 두개가 결합한것도 ㄱㅊ)
실제 구조를 살펴보자.
우선, 두 개의 '마스킹된'센텐스를 입력받음 (센텐스가 가진 각각의 토큰이 일정 비율로 실제 토큰이 아닌, 마스킹을 하여 입력으로 집어넣음)
-> unlabeled의 이미? 수퍼바이저드 러닝이 아니라는 것!
output
세가지 임베딩 벡터의 합으로 구분
1. 토큰 임베딩
2. 세그먼트 임베딩: 경계선을 기준으로 문장 구분
: 부가설명
3. 포지션 임베딩: 각가의 포지션에 대한 임베딩
-> 모두 같은 차원이므로, 단순 sum으로 최종적인 인풋 repre-구성
task1. masked language model(MLM)
전체의 15%의 토큰이 [mask]로
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에 대해서는 프리트레인(두 문장의 관계 파악) 한 것과 안한것의 차이가 크다
1.엘모: 여러 단계로 학습시키고, 해당하는 hidden state를 모두 리니어 결ㅎ밥
2. GPT: 트랜스포머의 디코더 블란만을 사용, 마스킹이 뒷쪽에만 되어있음(랜덤X)
- 마스킹할필요X, 정방향으로만 쓰기 때문
3. 버트는 양쪽 방향으로 동시에 학습, 일정 비율로 토큰들에 마스킹을 하여 사용
-> 큰 차이가 있다~
버트 윗단에 하나의 레이어만 걸치면, 어떤 태스크도 태울 수 있다
4개의 모습??
-형태소 분석, 개체명 인식(NER)
다양한 구조에서 버트 트레이닝 후, 파인튜닝
파인튜닝은 버트의 제일 윗단에 하나의 레이어만 쌓는 것만으로도 가능
NLU task에 대해 학습 수행 중