본문 바로가기

BERT 강의 필기 본문

딥러닝/자연어처리

BERT 강의 필기

jaegomhoji 2022. 5. 25. 22:20

BERT : Pre-training of Deep Bidirectional Transformers for Language Understanding 

서정연 교수님 강의를 필기한 내용입니다

 

 Introduction : word representation 

1) local representation

단어라는 것을 one-hot vector 로 표현하는 것은 문제가 많았다  ( local representation ) 

ex) abc -> a ( 1, 0, 0 ) b ( 0, 1, 0 ) , c(0,0,1) 

 

2) distributed word representation ( word2vec ) 을 가지고 전이학습 

간단한 방법이지만, local representation보다 효과가 있는 방법이였음 

ex) a -> ( 0.2, -0.54 ) vectors in a continuous vector space ( n개의 word -> n차원의 벡터로 표현 ) 

 

3) 단어간의 관계를 반영하도록 distribute ? 

일종의 language model 학습한다고 생각, task 수행을 위해 network를 train 

CBOW : 링크 

Skip-gram : 링크 

 

4)

a) traditional machine learning

-> 각각의 경우를 학습을 하고 각각 결과가 나왔다 ( task1 -> learning system1 , task2 -> learning system2 ..... )

-> MT 는 MT 용, QA는 QA용 ... 

 

b) transfer learning 

-> 방대한 양의 data를 가지고 (일반화된)학습시키고, target task에 pre-trained 된 knowledge를 가지고 (추가)학습 시키는 것 

-> 보통 학습 기법에서 변화를 주거나, domain이 변경되는 경우이다 ( 요즘 고성능 모델들은 모두 이런 구조 ) 

 

b-1) training process

1) 결론적으로는 LM(language model 예를 들어, word2vec)을 만들어 새로운 학습을 시킨다는 것 

2) fine-tuning( downstream task 해결이 goal로, pre-trained된 모델을 미세 조정하는 것 ) 을 하면 효과가 좋더라!! 

 

방대한 text-corpus로 word representation을 pre-train할 수 있고 , 

* QA : question - answer

* MT : machine translation

* NLI : 문장관계 

* NER : 고유명사 카테고리 등 개체 인식 

word2vec 에서부터~ GPT, BERT 까지 굉장히 다양한 pretraining word representation 방법도 나왔다 

text -> word2vec 은 unsupervised learning 이라고도 볼 수 있다 

* word2vec은 동음이의어 구별이 불가능하다. 같은 차원의 벡터값에 할당되기 때문

-> ELMO, BERT, GPT ( Context 를 이해하기 때문에 ) 

 

 

* 사전학습에는 두가지 큰 갈래가 있다 ( BERT 논문 기준 ) 

1) Feature-based approach  

2) Fine-tuning approach ( LM - fine tuning이 본체 공유 )

 

 

* Feature-based approach 

 대표적으로 ELMo ( biLMs - bidirectional LSTM layer들을 이용하여 방대한 corpus에서 트레이닝 , ELMo : task specific  )

 

biLSTM pretraining part + ELMo part 

 

1) GloVe, word2vec 에서는 polysemous words 는 context와 상관없이 same representation 으로 표현되기 때문에 구분이 안되었음 -> i am a big fan of Mozart , i need a fan for cooling  -> fan 팬? 선풍기? 

2) context에 따라서 다르게 word embedding을 한다 -> feature vector /// left - to - right , right to left /// 

-> mozart - of - fan , fan - of - mozart    그리고 fan for cooling  , fan - for - cooling 

3) target text의 각 단어에 맞도록  ELMo에서 인코딩된 내용(feature)을 붙여주는 것 ( 그림 참고, 하단의 Github 주소 출처 ) 

-> target (feature + ELMo Embedded feature ) 

 

https://jalammar.github.io/illustrated-bert/

* 여러가지 task 에 대한 평가 

SQuAD : 대표적인 QA task 중 하나 ( Stanford Question Answering Dataset ) 

SQuAD 2.0에 관한 블로그 글 https://dos-tacos.github.io/paper%20review/SQUAD-2.0/ 

 

SQUAD 2.0과 BERT(1)

SQUAD 2.0 데이터셋의 변화 내용과 최근 리더보드 상위권을 휩쓸고 있는 BERT 모델에 대해 알아봅니다

dos-tacos.github.io

* unanswerable question 이 있다는 것, 1.대 task에서 80%대 성능의 모델과 2.0이 f1 score 20%가 차이남 

 

SNLI : Hypothesis -> text -> judgment ( 두 문장 H, t 의 관계에 대해서 contradiction, neutral , entailment )  

( Natural Language Inference (NLI), also known as Recognizing Textual Entailment (RTE), is the task of determining the inference relation between two (short, ordered) texts: entailment, contradiction, or neutral (MacCartney and Manning 2008), https://nlp.stanford.edu/projects/snli/

 

SST-5 ( Stanford Sentiment Treebank , 5 클래스 미세 감정 분류 ) 

SRL (Semantic Role Labelling ) 

NER (Named Entity Recognition) ...

 

여러 task 와 벤치마크 테스트 셋 관련 정리 

https://hryang06.github.io/nlp/NLP/#snlistanford-natural-language-interence-corpus

 

NLP 이해하기

NLP(Natural Language Processing) 자연어 처리

hryang06.github.io

 

* Fine-tuning approach

굉장히 방대한 양의 pre-training으로 진행하나, target task자체는 상대적으로 간단하게 학습시킴 

그렇지만 실제로 language model 만들기 복잡하기 때문에 feature-based보다 성능이 굉장히 좋다 

> OpenAI GPT, BERT ( 거의 동일하다 ) 

> pre - training 내용 + target task(output)에 맞도록 input -> 짜잔! 

 

** BERT , ELMO 

https://jalammar.github.io/illustrated-bert/

 

The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning)

Discussions: Hacker News (98 points, 19 comments), Reddit r/MachineLearning (164 points, 20 comments) Translations: Chinese (Simplified), French 1, French 2, Japanese, Korean, Persian, Russian 2021 Update: I created this brief and highly accessible video i

jalammar.github.io

 

 

** BERT ( Transformer - attention mechanism ) 

LSTM 처럼 sequential하게 봤을때 죽일건 죽이고 살릴건 살린다 

-> 어떤 hidden layer를 중심적으로 학습할 것인지

 

Framework 

1) target 과 source의 hidden states를 비교한다 

2) 그 가중치의 평균 값을 계산하고 -> 이게 attention 임 

3) 그것을 반영한 context_vector ( weighted average ) 를 생성하고 

4) context-vector와 target vector가 같이 반영됨 ( 뒤의 벡터에 어떤것에 더 점수를 주어야 할지 ! -> 맥락이 고려됨 ) 

 

* attention ways 3가지 

1) Encoder-Decoder attention 

2) Encoder Self-attention ( 서로의 출력 layer의 출력값을 비교해서 bidirectional-attention )

Self-attention은 같은 문장끼리 비교에 대한 Query = Key = Value , sim = QK / sqrt(d)

** multihead attention

3) maskedDecoder self-attention ( decoder를 위한 attention, 뒤의 pivot을 기준으로 right to left ) 

self-attention 과정에서 동일한 단어(자신)의 유사도를 고려하지 않고 그 부분을 마스킹해서 맞추는 학습을 시키는 것 

 

3') Next Sentence Prediction task 

다음 문장의 적절함 / 부적절함 에 대해 classification 을 하여 의미적으로 비슷한지 안비슷한지 파악하는 방식의 아이디어로 

LM에 대해 학습이 된다고 보기 때문 

 

* Seq2Seq Model을 할때 attention mechanism 정의 

더 주의 집중해야 할 곳으로 예측되는 부분에 더 놓은 가중치를 반영하는 것 

* 적용 이유 ( 굉장히 DL에서 큰 의미를 가지는 이유 ) 

인코딩시 : 전체 source sentence를 요약하기 때문에 전체 정보를 가지나, 정보 병목 현상 문제로 정보 유실(LSTM)을 완화

디코딩시 : 매번 디코딩 수행시에 생성하고자 하는 단어가 source sentence 어느 부분과 관련이 높은지를 계산해서 생성과정을 수행 

 

* BERT는 Google Transformer ( 목적은 기계번역 ) 에서 encoder 부분만 12layer 쌓음 

* example ) 

BERT BASE Layer(L) = 12, Hidden size(H) = 768 , Self - Attention head ( A ) =12 

BERT SMALL : L 6 

BERT LARGE : L = 24 , H = 1024 , A = 16느림 

 

* fine-tuning approach 

> input construction 

[CLS] + sentenceA + [SEP] + sentenceB 

 

start token = CLS token 

seperator = SEP token ( sequence 구분을 위한 , 문장 간 혹은 문장 내 분할 ) 

 

Input 

[cls] + [my] + [dog] + [is] +[cute] + [sep] + [he] + [likes] + .....

 

Token Embeddings ->

E[cls] + E[my] + E[dog] + E[is] + E[cute] + E[sep] + E[he] + E[likes] + .....

 

Segment Embeddings -> Sequence Embedding  

E[A] + E[A] +E[A] +E[A] + E[A] + E[A] + E[B] + E[B] + E[B] + .....

 

Position Embeddings -> 문장 내 단어 position 

E[1] + E[2] + E[3] + E[4] + E[5] + E[6] + E[7] + E[8] ...... 

 

Elementwise 하게 계산이 된다,  P.E(768) -> S.E(768) -> T.E(768) -> [CLS] 

 

* WordPiece embeddings ( Wu et al. 2016)

- 단어 갯수를 줄여서 vocab을 구성하는 방법 ( 60만 -> 30,522 ) 정도로 커버 가능한 장점 

 

등등 

** Pre-train task#1 Masked Language Model ( MLM ) 

- input의 a% ( 보통 15 % -> 그중 80%은 마스크 시킴, 10%는 랜덤으로 대체 , 10% 원래 있던 단어 그대로 ) 

- 결과물은 예를들어 3만개 중의 ~로 softmax를 통과하고 나온 probability이며 -> back propagation 되며 학습 

-> each batch에서 15% token 들만 predict 된다는 것? Left-to-right 보다 실제로 좋은것인가? -> 성능상으로 증명됨 

 

** Pre-train task#2 Next Sentence Prediction(NSP) 

- 마스킹하는것과 비슷하게 다음 문장으로 오는것과, 실제로 다음 문장이 아닌 것을 가지고 학습 시킴  ( 2차원 next seq? yes|no ) 

 

** Pre-train task#1 & #2 : joint training ( MLM + NSP ) 

 

 

* GPT는 language 생성에 효과가 좋고 , decoder 부분을 사용한다고 생각하면 된다 

굉장히 모델이 방대해서 학교 실험실 장비로도 힘들다

 

< 출처 : "Attention is all you need", Vaswani et al., arxiv, 2017>

* positional encoding 

 

 

 

*** transformer model에 관한 유원준님 설명 , 딥러닝을 이용한 자연어 처리 입문

https://wikidocs.net/35596

 

16. 트랜스포머(Transformer)

이번 트랜스포머 챕터에서는 seq2seq의 단점을 개선하면서도 여전히 인코더-디코더 구조를 유지하고 있는 트랜스포머 모델을 통해 챗봇을 구현해보도록 하겠습니다.

wikidocs.net

 

 

 

**** Sembert ( semantics aware bert ) 번역된 블로그 https://jeonsworld.github.io/NLP/sembert/

'딥러닝 > 자연어처리' 카테고리의 다른 글

문법과 파싱  (0) 2022.03.26
Grammars and Parsing  (0) 2022.03.23
N-gram model과 등장 배경 (1)  (0) 2022.03.23
ML/DL NLP에서의 접근 방법  (0) 2022.03.02
언어의 모호성과 해결 방법, NLP 기술의 발전사  (0) 2022.03.02
Comments