BERT 톺아보기 · The Missing Papers (likejazz.com)
BERT 톺아보기 · The Missing Papers
BERT 톺아보기 17 Dec 2018 어느날 SQuAD 리더보드에 낯선 모델이 등장했다. BERT라는 이름의 모델은 싱글 모델로도 지금껏 state-of-the-art 였던 앙상블 모델을 가볍게 누르며 1위를 차지했다. 마치 ELMo를
docs.likejazz.com
BERT : Bidirectional Encoder Representations from Transformer
1) 대형 코퍼스에서 Unsupervised Learning으로 General-Purpose Language Understanding 사전모델을 구축
2) Pretraining Supervised Learning으로 fine-tuning을 진행해 QA, STS 등의 하위 NLP태스크에 적용
BERT는 왼쪽의 인코더만 사용한다고 한다.
# e = 각 인풋 임베딩 정보
e = self.tok_embed(x) + self.pos_embed(pos) + self.seg_embed(seg)
pos = 각 토큰의 위치정보: 위치에 따라 차례대로 값이 부여됨. range(0, max_len)
seg = 토큰 타입. : 위의 예에선 두 문장을 [SEP]으로 구분해 입력, 첫번째 문장위치엔 0, 두번째문장위치엔 1을 시퀀스길이만큼 부여. 이는 E_A, E_B로 표현된 걸 볼 수 있다.
여기에, 이 값에 대한 각각의 임베딩을 얻어와 합산하고(Position Embedding, Segment Embedding), 여기에 LayerNorm & Dropout한 최종결과를 인코더블럭의 입력값으로 함.
BERT는 N개의 인코더 블럭을 지니고 있다.
Base 모델은 12개, Large 모델은 24개로 구성되는데, 이는 입력 시퀀스 전체의 의미를 N번 만큼 반복적으로 구축하는 것을 의미한다고 한다. 이 인코더 블럭의 수가 많을수록 단어 사이에 보다 복잡한 관계를 더 잘 포착할 수 있을 것이다.
인코더 블럭은 RNN처럼 이전 출력값을 현재의 입력값으로 하며, 블럭내에서 각각의 입력과 처리 결과는 도식에서 보는 바와 같이 매 번 Residual connections로 처리하여(블럭 내 제일 좌측의 화살표), 이미지 분야의 ResNet이 보여준 것 처럼 그래디언트가 non-linear activations를 거치지 않고 네트워크를 직접 흐르게 하여 Exploding 또는 Vanishing Gradients 문제를 최소화 하고자 했다.
서로 다른 가중치 행렬을 이용해 어텐션을 h번 계산한 다음, 이를 연결(concat)한다.
BERT-base의 경우, 각각의 토큰벡터 768차원을 헤드수(=12)만큼 나눠, 64개의 12조각으로 분리한다.
여기에 Scaled Dot-Product Attention을 적용하고, 다시 768차원으로 합친다.
이러한 768차원 벡터는, 각각의 부위별로 Attention을 받은 결과를 보임.
이렇게 되면, Softmax에서는 e^n로 계산하기에 변동폭이 매우 크며 값이 큰 스칼라는 살아남고, 작은 스칼라는 0에 가까운 값을 multiply하게 되어 배제되는 결과를 낳는다고 함.
이렇게 얻은 Multi-Head Attention은 Scaled Dot-Product Attention을 h번 계산한 결과의 Concatenates 이다.
Scaled Dot-Product Attention은 입력값으로 Q, K, V 세 개를 받는다.
처음에는 임베딩의 fully-connected 결과, 두 번째 부터는 RNN과 유사하게 이전 인코더 블럭의 결과를 다음 인코더 블럭의 입력으로 사용한다.
원래 Transformer에서 Q는 주로 디코더의 히든 스테이트, K는 주로 인코더의 히든 스테이트, V는 K에 어텐션을 부여 받은 Normalized Weights가 되며, 초기값은 V와 K가 동일하다.
그러나 BERT는 디코더를 사용하지 않으며 Q, K, V의 초기값이 모두 동일하다. 물론 저마다 각각 다른 초기화로 인해 실제로는 서로 다른 값에서 출발하지만 입력값의 구성은 동일하다. BERT는 이처럼 동일한 토큰이 문장내의 다른 토큰에 대한 Self-Attention 효과를 갖는다.
이 때 Mask(마스킹): inference시에, 제로패딩으로 입력된 토큰에 대해 마스킹 처리 & 페널티를 부과해, 어텐션 점수를 못 받게 함. 아래는 예시 코드
# Since attention_mask is 1.0 for positions we want to attend and 0.0 for
# masked positions, this operation will create a tensor which is 0.0 for
# positions we want to attend and -10000.0 for masked positions.
adder = (1.0 - tf.cast(attention_mask, tf.float32)) * -10000.0
마지막으론, 어텐션의 결과를 Position-wise Feed-forward Network에 통과시킴.
이는 Linear Transformations로 구성되어 있으며, ReLU activation을 적용한 트랜스포머와 달리, BERT는 보다 부드러운 형태인 GELU를 적용했다. 이를 통해서, 음수에 대해서도 미분이 가능해 약간의 그래디언트를 전달할 수 있다.
Bert는 Bidirectional 하다. 이는 두 가지 방식(Masked Language Model과 Next Sentence Prediction)을 통해서 구현했으며, 이를 위해 BERT는 Input Embeddings에 특별한 식별자, CLS와 SEP을 추가했다.
[SEP] : 문장의 끝을 나타내는 식별자로, 두 문장을 구분하는 역할. 이를 통해 QA등의 문제 해결과 Pre-training시 Next Sentence Prediction 문제를 해결하는데 사용한다.
[CLS] : 문장 맨 앞에서, 클래스를 나타냄. 이를 통해 분류 문제를 해결하는 데 사용 및 두 문장의 유사도를 판별하는데도 이 레이어의 벡터를 사용한다.
(1) Masked Language Model(MLM)
문장의 다음 단어를 예측하는 것이 아니라, 문장내 랜덤한 단어를 마스킹하고 이를 예측하도록 하는 방식. 마스킹된 토큰을 맞추도록 학습한 결과를 직접 벡터로 갖는 특징이 있다. 이 때 마스킹은 전체 단어의 15% 정도만 진행하는데, 모든 토큰을 마스킹 하는게 아니라 80% 정도만 <MASK>로 처리하고 10%는 랜덤한 단어, 나머지 10%는 정상적인 단어를 그대로 둔다.
이에 대한 효과 - 만약 <MASK> 토큰에 대해서만 학습한다면 Fine-tuning시 이 토큰을 보지 못할 것이고 아무것도 예측할 필요가 없다고 생각해 성능에 영향을 끼칠 것이다. 때문에 <MASK> 토큰이 아닌 것도 예측하도록 학습하여 문장의 모든 단어에 대한 문맥 표현Contextual Representation이 학습되도록 한다.
(2) Next Sentence Prediction(NSP)
두 문장을 주고, 두 번째 문장이 코퍼스 내에서 첫 번째 문장의 바로 다음에 오는지 여부를 예측하도록 하는 방식이다. 두 문장이 실제로 이어지는지 여부는 50% 비율로 참인 문장과 랜덤하게 추출되어 거짓인 문장의 비율로 구성되며, [CLS] 벡터의 Binary Classification 결과를 맞추도록 학습한다.
임베딩
BERT는 다이나믹 임베딩이다. 즉, 문장 형태와 위치에 따라 동일한 단어도 다른 임베딩을 갖게 되어 이를 통해 중의성을 해소할 수 있다. 예를 들어 “bank account”와 “bank of the river”의 bank는 Word2Vec 또는 GloVe에서는 동일한 벡터를 갖는다. 그러나 이 단어는 문맥에 따라 전혀 다른 의미를 지녀야 하며 실제로 BERT에서는 전혀 다른 벡터를 갖는다.
RoBERTa · yun's blog (gityunjae.github.io)
RoBERTa · yun's blog
RoBERTa 16 Nov 2020 제목: RoBERTa: A Robustly Optimized BERT Pretraining Approach 저자: Y.Liu et al (UW with Facebook AI) 발행년도: 2019 Language model pretraining을 통해 성능의 향상이 가능하지만, 다양한 접근법 사이의 비교
gityunjae.github.io
RoBERTa : A Robustly Optimized BERT Pretraining Approach
[논문 서술]
RoBERTa : BERT모델의 hyper parameter 의 최적화를 이끌어낸 모델로, BERT모델을
(1) 사전 학습데이터 크기증가 -- (4.3)
(2) Batch Size 크기 증가 -- (3.2)
(3) Next Sentence Pred iction task 제거 -- (4.2)
(4) Sequence Length 길이를 최대로 고정 -- (3.1)
(5) Dynamic masking 기법 사용을 통해 개선하였다. -- (4.1)
1. Introduction
기존 BERT가 매우 undertrained 되었다고 판단하여 BERT 모델을 학습시키는 더 개선된 RoBERTa를 제안.
BERT와 다른 점 :
- 모델을 더 많은 데이터에 대해 더 오래, 더 큰 배치로 학습을 시켰고,
- next sentence prediction task를 없애고,
- 더 긴 sequences에 대해 학습하였으며(최대 512),
- 학습 데이터에 대한 마스킹 패턴이 다이나믹하게 바뀔 수 있게 했다.
2. Background
BERT의 pretraining 접근법과 학습 방법.
2.1 Setup
BERT의 segment : 하나 이상의 자연어 문장으로 이루어져 있는 sequence.
여기서 BERT는 두 segment를 [SEP]이라는 구분자를 끼고, concat한 것 앞에 [CLS], 뒤에 [EOS]를 붙인 것을 input으로 받는데 두 시퀀스의 길이의 합이 최대 길이를 넘지 않게 제약조건을 둔다.
BERT은 먼저 unlabeled text corpus에 대해 pretrain 되고, 이후 end-task labeled data로 파인튜닝을 진행한다.
2.2 Architecture
BERT는 transformer 구조를 사용하는데 레이어의 개수를 L, 셀프 어텐션 헤드의 개수를 A, 그리고 은닉 차원수(hidden dimension)를 H로 두고 사용하였다.
2.3 Training Objectives
BERT를 pretraining 할 때에는 Masked Language Modeling(MLM)과 Next Sentence Prediction(NSP) 두 가지를 사용.
Masked Language Model (MLM)
: 입력받은 시퀀스에서 토큰을 랜덤하게 뽑아 [MASK] 토큰으로 대체한다. 이 task는 masked token을 예측하는 cross-entropy를 줄이는 것이 목표.
Next Sentence Prediction (NSP)
: 두 세그먼트가 원 텍스트에서 연속적으로 나오는지 예측하는 binary classification을 수행한다. 실제로 연속된 세그먼트인 경우와 연속이 아닌 세그먼트인 경우를 같은 확률로 샘플링한다.
이 task는 문장 쌍의 관계를 추론하는 등의 downstream task에서의 성능을 향상시키기 위해 추가해준 것이다.
2.4 Optimization
BERT는 Adam optimizer를 사용하고 첫 10,000스텝에 warm up을, 그리고 모든 레이어에 0.1의 dropout를 사용하고 GELU 활성화함수를 사용한다. 모델은 100만 update동안 학습되며 미니 배치는 최대 512 토큰의 256 시퀀스를 사용한다.
3. Experimental Setup
3.1 Implementation
최적화에 관련해서는 peak learning rate와 warmup steps를 제외하고는 원 BERT 구현과 동일한 hyperparameter를 사용. 그 외에 상황에 따라 Adam optimizer를 살짝 tuning하거나 안정성을 위해 다른 값들도 조금 바꿔줌.
시퀀스의 최대 토큰 수는 512개로 지정하였고 full-length sequence만 사용하여 학습하였다.
3.2 Data
BERT 방식의 학습은 데이터 규모에 크게 영향을 받는다. 데이터 크기가 클수록 end-task 성능이 높아진다는 연구 결과도 있었다.
- GLUE (General Language Understanding Evaluation): 자연어 이해를 측정할 수 있는 9개의 데이터셋 집합으로 단일문장 분류 또는 문장쌍 분류 task로 이루어져있다. 학습 데이터와 검증 데이터 분할도 되어있고 제출 서버가 있어서 리더보드로 다른 모델들과 성능을 비교할 수도 있다. Section 4에서의 결과는 검증 데이터 기준이며 finetuning은 기존의 BERT와 동일하게 진행하였다. Section 5에서는 public leaderboard 기준의 성능 또한 첨부하였다.
- SQuAD (Stanford Question Answering Dataset): 문맥을 표현하는 문단과 질문을 주면 문맥에서 정답에 해당하는 span을 추출하는 task이다. 이 데이터 셋은 문맥이 언제나 정담을 포함하고 있는 V1.1과 몇몇 문제는 문맥상에서 정답을 찾을 수 없는 V2.0 총 두 가지 버전을 모두 사용하였다. SQuAD V1.1에서는 BERT와 같은 방식을 사용하였고 SQuAD V2.0에서는 질문이 대답할 수 있는 질문인지를 판단하는 이진분류기를 추가해주었다. 그리고 평가시에는 분류 결과 정답이 있다고 분류되는 문제들에 대해서만 정답 span을 예측하도록 하였다.
- RACE (ReAding Comprehension from Examinations): 28000 문단과 거의 10만 개의 질문으로 구성된 대규모의 독해 데이터셋이다. 이는 중국에서 시행되는 영어 시험으로 중고등생 대상이고, 각 문단은 하나 이상의 질문들에 대응된다. task는 4지선다에서 맞는 답 하나를 고르는 것이다. RACE는 다른 독해 데이터셋에 비해 문맥이 특히 더 길고 질문이 요구하는 추론의 정도가 매우 크다는 특징이 있다.
3.3 Evaluation
기존 BERT 연구와 동일하게 기학습 시킨 모델을 다음의 세 가지 benchmark를 사용하고 평가한다.
- GLUE (General Language Understanding Evaluation): 자연어 이해를 측정할 수 있는 9개의 데이터셋 집합으로 단일문장 분류 또는 문장쌍 분류 task로 이루어져있다. 학습 데이터와 검증 데이터 분할도 되어있고 제출 서버가 있어서 리더보드로 다른 모델들과 성능을 비교할 수도 있다. Section 4에서의 결과는 검증 데이터 기준이며 finetuning은 기존의 BERT와 동일하게 진행하였다. Section 5에서는 public leaderboard 기준의 성능 또한 첨부하였다.
- SQuAD (Stanford Question Answering Dataset): 문맥을 표현하는 문단과 질문을 주면 문맥에서 정답에 해당하는 span을 추출하는 task이다. 이 데이터 셋은 문맥이 언제나 정담을 포함하고 있는 V1.1과 몇몇 문제는 문맥상에서 정답을 찾을 수 없는 V2.0 총 두 가지 버전을 모두 사용하였다. SQuAD V1.1에서는 BERT와 같은 방식을 사용하였고 SQuAD V2.0에서는 질문이 대답할 수 있는 질문인지를 판단하는 이진분류기를 추가해주었다. 그리고 평가시에는 분류 결과 정답이 있다고 분류되는 문제들에 대해서만 정답 span을 예측하도록 하였다.
- RACE (ReAding Comprehension from Examinations): 28000 문단과 거의 10만 개의 질문으로 구성된 대규모의 독해 데이터셋이다. 이는 중국에서 시행되는 영어 시험으로 중고등생 대상이고, 각 문단은 하나 이상의 질문들에 대응된다. task는 4지선다에서 맞는 답 하나를 고르는 것이다. RACE는 다른 독해 데이터셋에 비해 문맥이 특히 더 길고 질문이 요구하는 추론의 정도가 매우 크다는 특징이 있다.
4. Training Procedure Analysis
BERT를 기학습 시키는 데에 어떤 요소들이 중요한지 알기 위해, 먼저 기존 BERT 학습과 동일한 조건으로 학습.
4.1 Static vs. Dynamic Masking
BERT는 masking을 랜덤하게 하여 토큰을 예측함으로써 학습을 하는데, 기존 BERT에서는 데이터 전처리시에 한번 마스킹을 해준다.
여기에서는 각 epoch마다 마스크를 달리 해주기 위해서 학습 데이터를 10배로 늘려서 각 sequence가 10번의 다른 마스킹이 되도록 해주었고, 각 sequence에 같은 마스크를 네번 사용하여 40 epoch으로 학습을 해주었다.
이 방법을 dynamic masking과 비교해보는데, 여기서 dynamic masking이란 각 sequence가 모델에 입력될 때마다 새롭게 마스킹을 해주는 방법이다. 이 방법은 학습을 더 많이 하거나 더 큰 데이터셋으로 학습할 때 더 중요해진다.
각각의 방법을 SQuAD, MNLI-m, SST-2에 적용하여 F1 점수를 비교해본 결과 dynamic masking으로 학습한 모델이 static masking으로 학습한 모델과 기존 BERT모델 상의 정확도보다 모두 더 높거나 비슷한 수준의 성능을 보였고, 이후 실험에도 dynamic masking을 사용하였다.
4.2 Model Input Format and Next Sentence Prediction
기존의 BERT모델에서는 연속된 두 개의 세그먼트를 받아서 해당 세그먼트들이 같은 document에 해당하는지를 예측하는 NextSentence Prediction(NSP) 보조 태스크를 수행한다. 해당 태스크는 학습에 큰 영향을 미친다고 논문에서 소개하였지만 최근 연구에서는 이 NSP 태스크가 꼭 필요하지 않을 수도 있다는 결과들이 있었다.
이를 확인해보기 위해서 몇 가지 학습 형식을 비교해보았다.
- Segment-pair +NSP: 기존의 BERT setting과 동일하다. 두 개의 sequence가 연속으로 나오고 NSP 태스크도 수행하지만 한 입력의 길이가 512 토큰만 넘지 않으면 된다.
- Sentence-pair + NSP: 기존의 BERT setting에서 세그먼트를 문장으로 바꿔준다. 즉 각 입력은 문장쌍으로 이루어져있다. 해당 입력은 512토큰보다 훨씬 작기 때문에 위와 비슷한 학습환경을 위해 batch-size를 키워주었다. NSP 태스크 또한 수행한다.
- Full-sentences : 각 입력은 하나 이상의 document에서 발췌하고 최대 512토큰 길이로 발췌하되 한 document가 끝나고 다음 document가 시작되는 경우 구분자를 추가해주었다. NSP 태스크의 경우 수행하지 않았다.
- Doc-sentences: 입력은 full-sentences와 유사하지만 document의 경계의 경우 다음 document로 넘어가지 않도록 하였고, 이러한 입력의 경우 512토큰보다 짧기 때문에 full-sentences와 비슷한 학습환경을 위해 batch size를 키워주었다. NSP 태스크는 수행하지 않았다.
결과를 비교해보면 NSP 태스크를 수행하는 경우 한 문장씩 샘플링하면 downstream task의 성능이 낮아지는데 이는 long-range dependency가 학습되지 않아서라고 생각한다.
다음으로 NSP를 수행하지 않는 경우와 비교해보면 NSP를 수행하는 경우보다 downstream task 성능이 비슷하거나 더 향상되었다. 특히 doc-sentences가 성능이 조금 더 좋았지만 배치 사이즈가 일정하지 않기 때문에 이후 연구에서는 full-sentences 형식의 입력을 사용하였다.
4.3 Training with large batches
이전 기계 번역 연구들을 보면 큰 규모의 미니 배치로 학습을 할 경우 learning rate를 적절하게 높일 경우 최적화 속도도 빨라지고 end-task 성능도 향상된다는 연구 결과가 있었다. 최근 연구에 따르면 BERT 또한 large batch training을 적용하여 효과를 볼 수 있다고 한다.
기존의 BERT는 256 sequence를 1M step동안 학습했는데, 이는 2K sequence를 125K step으로 학습하는 것, 그리고 8K sequence를 31K step으로 학습하는 것과 연산량이 동등하다.
각각의 경우로 학습을 시켜본 결과 더 큰 배치로 학습시킬 때 perplexity가 개선되고 end-task accuracy또한 개선되는 것을 확인할 수 있다. 또한 큰 배치는 병렬로 학습을 시키기에도 더 쉽다.
이후 실험에서는 8K sequences 배치로 학습을 하였다.
4.4 Text Encoding
Byte-Pair Encoding은 character-level과 word-level representation을 모두 사용하는 방식이다. BPE는 subword 단위를 사용하는데, 이는 학습 말뭉치에서 통계적 분석을 통해 추출한다.
BPE vocabulary의 크기는 10K ~ 100K 사이인데 유니코드 캐릭터가 많은 공간을 차지하기 때문에 bytes를 사용하는 연구 또한 시도되었다. 이를 통해 약 50K의 unit으로 unknown token 사용 없이도 어떠한 입력도 처리하는 것이 가능해졌다.
기존의 BERT implementation에서는 vocab size가 30K인 character-level vocabulary를 사용하였지만 이 연구에서는 50K sub-wrod unit의 byte-level BPE vocabulary를 사용하였다. 초기 연구에서는 이러한 인코딩의 차이로 인한 성능의 차이가 거의 없었지만 모든 인풋을 처리할 수 있다는 것이 성능이 조금 낮아지는 것보다 더 이득이라고 생각했기 때문에 이후 연구에서는 50K byte-level encoding 방식을 사용하였다.
5. RoBERTa
이전에 알아본 end-task performance를 개선할 수 있는 요소들을 모아서 성능을 측정해볼 것인데, 이를 Robustly optimized BERT approach를 줄여 RoBERTa라고 부른다. RoBERTa는 dynamic masking, FULL-SENTENCES without NSP loss, large mini-batches, larger byte-level BPE를 사용한다.
여기에서 BERT 논문에서 덜 고려되었다고 생각하는 두 가지 요소를 추가하는데 이는 pretraining 데이터 크기와 학습 정도이다. 먼저 BERT LARGE 구조와 동일한 크기의 모델을 비슷한 크기의 데이터셋인 BOOK-CORPUS + WIKIPEDIA 데이터셋에 100K step동안 학습을 시키고 이후 데이터셋을 추가하고 학습 step 수를 늘리는 등으로 확장해나갔다.
Result

위 표를 보면 추가적인 데이터셋 없이 학습을 시킨 결과만 보아도 기존의 BERT LARGE 모델보다 downstream task의 성능이 더 뛰어난 것을 확인할 수 있다.
여기서 앞에서 언급했던 추가적인 데이터셋 세개를 추가하여 학습을 시켜주었다. 데이터셋만 추가해주고 같은 step만큼 학습을 시켜줬을 때 추가적으로 성능이 더 좋아지는 것을 확인할 수 있다.
마지막으로 pretraining step 수를 300K, 그리고 500K로 늘려 학습을 시켜본 결과 XLNet LARGE 모델보다도 성능이 비슷하거나 더 좋은 결과를 얻을 수 있었다.
이후 결과에서 가장 좋은 성능이 나온 RoBERTa 모델(500K steps, all 5 datasets)을 GLUE, SQuAD, RACE benchmark에 적용해볼 것이다.
5.1 GLUE Results
GLUE에서는 두 가지 finetuning setting이 있는데, single-task finetuning에서는 RoBERTa를 각각의 GLUE task에 대해서 해당 task에 해당하는 training data만 사용해서 finetuning 시켰고 hyperparameter를 찾아주었다. 결과는 다섯번의 랜덤 초기화의 중간값을 사용하였다. 두 번째는 ensemble 방식으로 GLUE leaderboard에 올리는 test set에 모델을 적용하는 것이다. 많은 제출물들이 multitask finetuning을 사용했지만 RoBERTa는 single-task finetuning만을 사용했다.
GLUE task중 QNLI와 WNLI는 추가적인 finetuning이 필요했는데, QNLI의 경우 ranking approach를 적용을 시도했지만 BERT와의 비교를 위해 classification 접근의 결과를 report 하였다. WNLI의 경우 제공된 NLI 형식의 데이터는 사용하기가 어려워서 Super-GLUE의 reformatted WNLI 데이터를 사용하였다. margin ranking loss와 spaCy를 사용하여 모델을 finetuning 해서 긍정적인 referent phrase에 더 높은 점수를 주게 하였다.
결과적으로 single-task single models에서는 모든 task에 SoTA를 찍었고, ensemble setting에서도 9개 중 4개의 데이터셋에 대해서 SoTA 성능을 냈고, 평균점수 또한 현재까지 가장 높다.
5.2 SQuAD Results
SQuAD 데이터셋에 대해서는 RoBERTa를 제공된 SQuAD 학습 데이터로 finetuning만 해주었다. SQuAD v1.1에서는 BERT와 동일한 finetuning을 해주었고 SQuAD v2.0에서는 질문을 입력받았을 때 이 것이 대답할 수 있는 질문인지 구분하는 classifier를 같이 학습시켜주었다.
결과를 보면 SQuAD v1.1에서는 XLNet과 유사한 정도의 성능을 내었고, SQuAD v2.0에서는 아예 새 SoTA 성능을 찍었다. public SQuAD 2.0 leaderboard에도 제출을 한 결과 추가적인 데이터를 사용하지 않고 data augmentation을 사용하지 않는 모델들 중에서 성능이 가장 높은 축에 속한다.
5.3 RACE Results
RACE에서는 긴 지문에 질문과 선지 4개가 주어진다. 이를 위해 RoBERTa에 정답 후보와 질문, 그리고 지문을 concatenate해서 인코딩해서 나온 [CLS] 토큰을 완전연결망에 통과시켜 정답을 예측할 수 있게 하였다.
결과적으로 중학교 수준과 고등학교 수준 모두에서 SoTA 성능을 낼 수 있었다.
6. Related Work
Pretraining model들은 다양한 학습 목표를 가지고 설계되었었고 최근 연구에서는 finetuning을 위해 기본적인 recipe를 사용하거나 masked language model을 살짝 변형하여 pretraining을 하는 경우가 많았다. 더 최근에 연구된 방법들에서는 multi-task finetuning을 사용하여 성능을 향상시켰고, 또한 더 큰 모델을 더 많은 데이터로 학습시켜서 성능을 향상시키는 경향이 있다.
해당 논문의 목적은 이러한 최근 성능 향상에 기여하는 방법들을 더 잘 이해하기 위해 BERT를 재현하고 더 간단히, 다양한 방법으로 더 잘 튜닝해보는 것이었다.
7. Conclusion
이 연구를 통해 모델을 더 오래, 더 큰 배치에 학습시키면 성능이 향상된다는 것을 알 수 있었고, 그 외에도 next sentence prediction을 하지 않고, 더 긴 sequence로 학습하고 또 masking pattern을 dynamic하게 바꿔주는 것이 성능 향상에 기여한다는 것을 확인할 수 있었다.
이 RoBERTa라는 모델은 GLUE에서는 multi-task finetuning을 사용하지 않고 SQuAD에서는 추가적은 데이터를 사용하지 않았음에도 GLUE, RACE, SQuAD에서 SoTA를 냈다.
이 연구를 통해 BERT를 만들때 덜 고려된 방법들의 중요성과, BERT의 pretraining 방법이 최근 제안된 대안들과 충분히 견줄만 하다는 것을 보였다.
추가적으로 해당 연구에서는 이전에 사용된 바 없는 CC-NEWS 데이터셋을 사용하였고, RoBERTa 모델에 관련된 코드는 https://github.com/pytorch/fairseq”>https://github.com/pytorch/fairseq에서 확인할 수 있다.
CORD: A Consolidated Receipt Dataset for Post-OCR Parsing
1 Introduction
광학 문자 인식(OCR)은 문자의 이미지를 디지털화된 텍스트로 변환하는 기술이다. 사후 OCR 구문 분석의 목표는 주어진 OCR에서 사전 정의된 의미 레이블을 예측하는 것이다. 그러나 OCR 데이터 세트에는 일반적으로 추출된 텍스트에 대한 구문 분석 클래스 레이블이 없다. 구문 분석 데이터 세트는 일반적으로 OCR 프로세스의 잘못된 결과와 대조적으로 오류가 없고 잘 정렬된 디지털 텍스트를 포함한다. 구문 분석 데이터에 합성 노이즈를 추가할 수 있지만 분포 및 오류 패턴은 OCR 오류와 다를 수 있으므로 일반화 성능이 저하될 수밖에 없다.
지난 몇 년 동안, OCR 이후의 몇 가지 분석 데이터 세트는 OCR 이후의 과제를 통해 공개되었다[5]. 예를 들어, ICDAR 2019 Post-OCR Challenge는 스캔한 영수증 OCR 및 정보 추출(SROIE) 데이터 세트를 도입했다[6]. OCR 및 구문 분석 문제에 대한 텍스트의 수신 이미지와 두 가지 유형의 주석, (1) OCR용 상자 수준 텍스트 주석 및 (2) 구문 분석을 위한 문서 수준 구문 분석 주석을 제공한다. OCR과 구문 분석 정보의 가용성으로 인해 해당 분야 내에서 활발한 연구가 이루어졌지만, 여전히 제한된 데이터 크기와 박스 수준 구문 분석 주석의 부족과 같은 몇 가지 단점을 가지고 있다. SROIE 데이터 세트에 수백 개의 샘플만 제공된다는 점을 고려하면, 약한 문서 수준의 주석은 만족스러운 성능으로 모델을 훈련시키기에 충분한 감독을 제공할 수 없었다.
본 논문에서는 CORD라는 새로운 데이터 세트를 소개하는데, 이는 상자 수준의 텍스트와 구문 분석 클래스 주석을 제공한다. 구문 분석 클래스 레이블은 두 가지 수준으로 제공됩니다. 8개의 슈퍼클래스에는 매장, 결제, 메뉴, 소계, 토탈이 포함된다. 8개의 슈퍼클래스는 54개의 하위클래스로 세분화된다. 예를 들어, 스토어에는 이름, 주소, 전화, 팩스를 포함한 9개의 하위클래스가 있다.
또한 두 작업의 조합으로 새롭게 등장하는 문제인 직렬화 작업에 대한 라인 주석도 제공한다. 현재의 의미 분석 기술은 정렬된 텍스트만 처리할 수 있다. 그러나 OCR에 의해 획득된 텍스트는 2차원 공간에 있으므로 획득된 텍스트를 1차원 공간에 매핑하기 위한 적절한 직렬화 기술이 필요하다. 우리의 실험에서, 직렬화는 구문 분석 성능에 상당한 영향을 미친다. 간략하게 요약하자면, 본 논문의 주요 기여는 다음과 같습니다.
• OCR 및 구문 분석에 사용할 수 있는 새로운 대규모 영수증 데이터 세트를 소개한다.
특정 작업에서 엔드 투 엔드 작업에 이르기까지 다양한 작업을 수행할 수 있습니다.
• 우리의 데이터 세트는 약하고 강력하게 감독된 구문 분석 작업을 위한 다단계 레이블을 제공한다. 데이터 세트와 설명은 게시 시점에 https://github.com/clovaai/cord에서 제공됩니다.
3 데이터 사양
3.1 데이터 구조
영수증 데이터 세트는 11,000개 이상의 이미지와 JSON 쌍으로 구성된다. 이미지와 json 쌍의 예는 그림 1에 나와 있습니다. GT에는 메타(meta), 관심 영역(ROI) 및 유효 선(valid line)의 세 가지 주요 속성이 있습니다. 메타 필드에는 영수증 영역(4개의 좌표)를 포함한 이미지 크기, 이미지 URL 및 이미지 ID(ROI)와 같은 이미지의 전체 정보가 저장됩니다. 유효한 줄(valid line) 필드에는 OCR 이후 구문 분석을 위한 중요한 정보가 있습니다. 쿼드 필드는 4개의 사각형 좌표를 포함하며, 텍스트 필드는 해당 상자의 통합 텍스트를 포함한다. 쿼드 필드와 텍스트 필드는 각각 OCR 검출/국소화 및 인식 작업에 사용된다.
구문 분석 태스크(parsing task, 3.2)에는 카테고리(범주), is_key 및 row_id의 세 가지 추가 필드가 있습니다. 카테고리는 구문 분석 클래스 레이블을 나타냅니다. row_id는 선의 인덱스입니다. row_id가 동일한 텍스트 인스턴스가 같은 줄에 있습니다. 그림 1과 같이, BORNGA와 EXPRESS는 서로 옆에 위치하기 때문에 row_id가 동일합니다. is_key 플래그는 다른 텍스트 요소의 키 역할을 하는 단어를 식별하는 데 사용됩니다. 예를 들어, BORNGA 텍스트의 is_key 값은 키 역할을 하지 않고 값 역할을 하기 때문에 0입니다. 반면, Total 텍스트는 다른 텍스트 요소인 45,500에 대한 키 역할을 하기 때문에 is_key 값이 1입니다.
3.2 구문 분석 클래스의 정의
우리는 표 1에 데이터 세트 통계를 제시한다. 데이터 세트는 스토어, 결제, 메뉴, 보이드 메뉴, 서브 토탈, 보이드 토탈, 토탈 등 8개의 슈퍼 클래스로 구성된다. 이 8개의 슈퍼클래스는 54개의 서브클래스로 나뉘는데, 예를 들어 슈퍼클래스 메뉴에는 메뉴명, 수량, 단가, 할인가, 서브메뉴가 포함된 16개의 서브클래스가 있다.
NER 개론과 NER 데이터셋 모음 (한국어 개체명인식 포함) (tistory.com)
NER 개론과 NER 데이터셋 모음 (한국어 개체명인식 포함)
**아래 글은 A Survey on Deep Learning for Named Entity Recognition 논문을 읽고 작성한 글입니다.** 목차 NER이란? NE의 태깅 시스템 NE의 카테고리와 대표적인 데이터셋 NER에 대한 전통적인 접근법 딥러닝으로
stellarway.tistory.com
Named Entity Recognition
문자열을 입력받아 단어별로 해당되는 태그를 내뱉게 하는 multi-class 분류작업
태깅시스템은 아래와 같다.
여러 단어(토큰)가 하나의 엔티티인 경우, B(Begin) - I(Inside) - E(End)로 나뉜다.
하나의 단어(토큰)이 하나의 엔티티인 경우, S(Singleton)이다.
그 단어(토큰)이 엔티티(개체)가 아닌 경우, O(Outside)이다.
NER작업은 3단계 프로세스로 나뉘는데
Transformer을 활용하는 RoBERTa는 여기에서 2.Context Encoder을 사용한다고 할 수 있다.
작성 논문의 5. 향후 연구 및 결과 분석을 보면
본 논문은 간판 이미지에 대한 계층 구조로 된 정보를 제공하는 데이터 셋을 제시하였다. 또한 간단한 NER
실험을 통해 간판 이미지에 대한 Post OCR 가능성을 확인하였다. 이를 통해 간판 이미지에 대해 OCR 뿐만
아니라 Post OCR 과정까지 학습 및 평가가 가능해질 것이라 기대된다 향후 연구에서는 데이터 셋의 크기를
계속해서 늘려 제안한 데이터 셋을 활용하여 더 정확한 상가정보를 추출할 수 있는 Scene Text Detection 및
Recognition 시스템과 Post OCR 과정을 연구하고자 한다.
이라고 나와 있는데, 진행한 실험은 RoBERTa를 통해 NER 체크를 한 것이라 볼 수 있다.
BERT(RoBERTa)에다가 Dense layer == 토큰 분류기 합친 거라 함.
'블루아카이브' 카테고리의 다른 글
Forward-Forward 이해용 (0) | 2023.01.20 |
---|---|
HeadHunter 구조 살펴보기 (0) | 2023.01.05 |
에러 기록 (0) | 2022.11.18 |
Visual Transformer (0) | 2022.08.22 |
레이더 Tracking 로직 & 퍼지논리 (0) | 2022.02.14 |