SOTA를 달성한 Baidu의 NLU 모델
중국어 언어 모델 중 가장 성능이 좋은 것은 뭘까요? 기업마다 자체적으로 개발하여 공개되지 않는 경우도 있겠지만 일반적으로 Baidu가 중국어 NLP쪽에서는 가장 좋은 점수를 내는 경우가 많습니다. Baidu의 딥러닝 프레임워크인 PaddlePaddle 기반으로 ERNIE라는 NLU 모델을 계속해서 공개 해 왔었는데요, 최근에 ERNIE 3.0 모델을 공개하였고 이와 관련된 논문도 공개가 되었습니다.
주요한 내용은 SuperGLUE 벤치마크에서 SOTA를 달성하였고, human performance도 뛰어넘었다는 내용입니다. (물론 SuperGLUE에서 평균점수를 human level 넘은 모델들은 이미 몇가지 있었습니다.) 사실 소수점 차이 수준이라서 크게 인상깊은 것은 아니지만, 그래도 기존의 모델들과는 조금 다른 특성도 있기에 간단하게 소개해볼까 합니다.
이번에 Baidu가 내놓은 ERNIE 3.0은 Pretraining 기반으로 Knowledge를 학습하여 사용하는 Auto-encoder network과 Auto-regressive network 을 통합한 언어 모델입니다. 이 방법은 중국어/영어 관련 NLU와 text generation task 에서 SOTA를 달성하였습니다.
최근에는 Large-scale pretrained Language Model 들이 뛰어난 결과를 얻는 편입니다. 특히 GPT-3가 zeo-shot, few-shot learning에서도 능력을 입증했죠. 하지만 대부분의 이런 모델들은 그냥 plain text를 사용해서 어떠한 Knowledge enhancement 없이 autoregressive 하게 학습되었습니다. 이것의 장점은 따로 데이터가 필요 없이 그냥 큰 규모의 텍스트 데이터를 크롤링해서 학습하면 된다는 점인데요, 단점은 pretrained 된 모델을 downstream task에 적용할 때 특정 task에서 약한 모습을 보인다는 점입니다.
ERNIE 3.0 에서는 이러한 문제를 해결하기 위해서 pretrain framework 을 모두 통합하였고, NLU와 generation task 모두에 적용될 수 있는 방법을 제안하였습니다. 10B개의 파라미터 개수를 가지며 Large-scale로 학습한 후 NLU/NLG task에 성능을 측정하였는데 54개의 중국어 Benchmark 에서는 기존의 SOTA보다 좋은 성능을 냈으며 영어에 대해서는 SuperGLUE에서 가장 높은 점수를 얻었습니다.
ERNIE 3.0의 구조는 아래와 같습니다.
ERNIE 1.0 (Enhanced Representation through Knowledge Integration) 은 2019년 4월에 소개되었습니다. 이 모델은 Knowledge enhancement를 통해서 representation을 학습할 수 있도록 하였습니다. 다른 많은 모델들 처럼 masking 전략을 사용하였는데요, Entity-level masking과 Phrase-level masking을 모두 사용하였습니다.
ERNIE 2.0은 2019년 7월에 소개되었고, 이 모델은 pretraining 할 때 여러 가지 task를 추가해서 학습하는 방식으로 multi-task learning 하는 continual pretraining framework 였습니다. ERNIE 3.0은 이러한 것들을 모두 통합하여 pretraining을 할 때 다양한 task 들을 학습하여 Knowledge enhancement를 하게 됩니다. 즉, ERNIE 3.0은 plain text 뿐 아니라 Knowledge graph 도 학습을 하게 되는데, 이렇게 다른 데이터를 multi-task learning 하는 방식을 차용하였고 이는 ERNIE 1과 2 를 합쳐놓은 모델이라고 생각하면 될 것입니다.
그리고 위에 그림에 있는 것 처럼 Multi-task learning에 사용되는 아키텍쳐로 lower layer와 top layer가 나뉘어 있습니다. Lower layer는 모든 task에서 공유되는 Universal Representation Module 로, 말 그대로 text의 기본적 특성을 학습하게 되고, Top layer는 Task-specific Representation Module 로 task 특성에 따른 전용 네트워크를 가지게 됩니다. 즉 다양한 task에 학습함으로 lexical, syntatic, semantic representation을 모두 학습할 수 있습니다. 일반적으로 lower level일수록 lexical, syntatic 정보를 더 학습 할것이고, higher level일수록 semantic 정보들을 더 학습하게 될 것입니다.
ERNIE 3.0에서는 Multi-layer Transformer-XL을 backbone network으로 사용하였습니다. 다른 많은 Transformer 기반 모델들도 그러한데요, Transformer 보다 Transformer-XL을 사용한 것은 auxiliary reccurence memory module 이 있어서 더 긴 텍스트를 모델링 할 때 유리하기 때문입니다. 여기서는 lexical, syntatic 정보들을 잘 해석할 수 있도록 이 모델 크기를 늘렸다고 합니다.
앞의 모듈과 비슷하게 Transformer-XL 기반이며, 일반적으로 특정 task 에 대한 semantic representation 정보를 뽑아내게 됩니다. 여기에서는 base model 크기로 적당히 조정했다고 합니다. 보통 이렇게 lower layer 를 두고 top layer를 바꾸거나, 특정 task 용도로 쓰는 경우에는 shallow Transformer 나 MLP를 많이 사용하는데 여기서는 그냥 Multi-layer Transformer-XL을 썼다고 합니다. ERNIE 의 학습 task 들을 살펴보면 shallow 하게 만들면 잘 안될 것 같아 보이는 것들이 있는데 그 이유인듯 합니다. 또한 NLU 용도와 NLG 용도를 다르게 가지고 있는데, 전자는 bi-directional이고 당연하게도 후자는 uni-directional 입니다. (text generation을 할 때 앞의 값이 주어졌을 때 생성하기 때문입니다.)
앞서 말했듯이 pretrianing은 여러 task에 대해서 진행하였습니다.
Knowledge Masked Language Modeling
phrase masking, named entity masking을 통해 local context와 global context 에서의 의존성 정보를 학습하게 됩니다.
Document Language Modeling
GPT나 T5같은 LM처럼 geneative model 을 위한 학습을 진행한 것입니다. 추가로 긴 텍스트에 대해서 잘 되도록 하기 위해서 Enhanced Recurrence Memory Mechanism (기존의 ERNIE-Doc이라는 연구에서 소개한) 을 사용했다고 합니다.
Sentence Reordering
ERNIE 2.0 에서 소개된 방법으로, 문장을 랜덤한 M개의 segment로 나누어서 재조합 한 다음 이걸 원래 order를 찾아내도록 training 하는 방법입니다. k-class classification problem으로 볼 수 있는데 여기서 k는 가능한 segment 조합갯수 전체 합 입니다.
Sentence Distance
기존에 사용하던 Next sentence prediction task를 확장한 방법으로, pretrain model 에서 sentence level 에서의 성능을 높이기 위해서 많이 사용되는 방식입니다. 두 개의 문장이 adjacent 인지 (즉 A, B 문장이 있을 때 A다음에 B문장이 오면 어울리는지), 같은 document 내에서의 Non-adjacent인지, 아니면 다른 document 내의 Non-adjacent 인지 3-class classification 문제로 볼 수 있습니다.
Universal Knowledge-Text Prediction
Knowledge를 하나의 pretrained LM 에 넣기 위해서 사용하는 방법으로, 위에 있는 Knowledge Masked Language Modeling 을 확장한 방법입니다. 위에서는 un-structured 된 데이터를 사용하는 데 비해 여기에서는 un-structured 뿐 아니라 Knowledge Graph (KG) 까지 필요합니다.
KG로 부터 triplet 과 해당하는 백과사전 값이 있을 때 triplet의 relation이나 sentence word에 랜덤하게 masking을 진행합니다. 이 triplet relation을 predict하기 위해서 모델은 entity와 semantic relationship 등을 detect 하는 방향으로 학습을 하게 됩니다. 반대로 sentence words 를 predict 할 때는 의존 정보 뿐 아니라 triplet 에 있는 logical relationship 까지 고려하게 됩니다. 즉, 주어진 백과사전 데이터에 대해 KG에서 후보 triplet을 찾아서 head/tail entity 가 맞는 걸 매칭하여 학습에 사용하게 됩니다.
전체 과정을 정리하면 NLU network의 lexical 정보 학습을 위해서 Knowledge Masked Language Modeling을 활용하고, syntatic 정보를 위해서 Sentence Reordering/Distance를 활용하며, Knowledge memorization 과 Reasoning 을 위해서 Universal Knowledge-Text Prediction 을 사용하는 것입니다. 반면 NLG를 위해서는 Document Language Modeling 을 활용하게 됩니다.
Progressive training 방법을 사용했다고 하며 빠른 convergence를 위해 첫 10,000 step 까지는 progressive learning을 사용했다고 합니다. 작은 모델에서 부터 시작하여 규모를 키워가는 형태로 진행하였습니다.
데이터는 4TB 정도 되는 중국어 데이터셋을 사용했다고 하며, 50M개 이상의 fact가 있는 Baidu의 Knowledge Graph를 학습에 활용했다고 합니다. ERNIE 3.0에서는 375B 개의 token에 학습을 진행하였고, PaddlePaddle framework 기반으로 구현하여 384개의 V100 GPU로 학습했다고 합니다.
실험 결과 대부분의 기존의 모델들보다 좋은 성능을 보였다고 합니다. 실험 결과는 굉장히 다양한 데이터셋에 대해서 진행한 만큼 꽤 길지만 대충 요약하면 젤 잘 나온다 이런 내용이기 때문에, 자세한 내용은 논문을 참고하시길 바랍니다. 중국어 데이터셋은 둘째치고 SuperGLUE 에서도 1등을 했습니다.
다만 기존에 가장 잘 나왔던 모델 (T5+Meena, DeBERTa 등) 보다 낮은 task도 있고, 잘 나온 task도 있기는 합니다. 그래도 평균점수는 1등을 하였습니다.
ERNIE 3.0의 경우 기존의 모델들에 비해 구조가 특이하거나 많이 다른 것은 아닙니다. 다만 Knowledge를 좀 더 잘 이용할 수 있도록 multitask learning 방법을 활용하였고, 이러한 것들을 통해 특정 task에서 더 좋은 점수를 올릴 수 있었다는 점이 다른 점입니다. (물론 이걸 위해서는 Knowledge Graph 관련 데이터셋도 필요하고 학습과정도 더 길어지기는 합니다.)
영어 기반으로 학습된 모델은 많은 회사들이 앞다투어 좋은 모델들을 공개하지만, 중국어 기반으로 된 모델은 잘 없었는데요, Baidu가 만든 모델의 경우 성능도 뛰어나기 때문에 중국어 모델 기반으로 뭔가를 만들어 보려고 한다면 좋은 선택이 될 수 있을 것입니다. 다만 이 글을 쓰는 시점 기준으로 ERNIE 3.0의 경우 아직 코드와 모델이 공개되지는 않았습니다. 다양한 ERNIE의 이전 버전들의 경우 여기를 참고하여 사용해 볼 수 있는데요, ERNIE 3.0 도 곧 업데이트 되지 않을까 싶습니다. 중국어 텍스트 모델에 대해 참고할 만한 좋은 소스이니 다양하게 활용될 수 있지 않을까 기대됩니다.