brunch

You can make anything
by writing

C.S.Lewis

by 서진호 Jun 16. 2020

오픈소싱 BERT:자연어 처리를 위한 최첨단 사전훈련

2018년 11 월 2일(금)

자연어 처리(NLP, Natural language processing)에서 가장 큰 문제 중 하나는 훈련 데이터가 부족하다는 것입니다. NLP는 많은 고유한 작업이 있는 다각화된 필드이므로 대부분의 작업 별 데이터셋에는 사람이 레이블이 지정된 수십 또는 수십만 개의 훈련 예제만 포함되어 있습니다. 그러나 현대의 딥러닝 기반 NLP 모델은 훨씬 더 많은 양의 데이터를 활용하여 수백만 또는 수십억 개의 주석이 달린 훈련 예제를 학습할 때 향상됩니다. 데이터의 이러한 격차를 해소하기 위해 연구자들은 웹에서 주석이 없는 엄청난 양의 텍스트(사전 훈련(pre-training)이라고 함)를 사용하여 범용 언어 표현 모델을 훈련하기 위한 다양한 기술을 개발했습니다. 사전 훈련된 모델은 질문 응답(Question answering) 및 감정 분석(Sentiment analysis)과 같은 소규모 데이터 NLP 작업에 대해 미세 조정될 수 있으므로 이러한 데이터셋을 처음부터 훈련하는 것보다 정확도가 크게 향상됩니다.


이번 주에는 트랜스포머(Transformer)의 양방향 인코더 표현 또는 BERT라는 NLP 사전 훈련을 위한 새로운 기술을 오픈소스로 공개했습니다. 이 릴리스를 사용하면 전 세계 모든 사람이 단일 Cloud TPU에서 약 30 분 또는 단일 GPU를 사용하여 몇 시간 내에 자체 최첨단 질문 응답 시스템 (또는 다양한 다른 모델)을 훈련할 수 있습니다. 이 릴리스에는 TensorFlow 위에 구축된 소스 코드와 여러 가지 사전 훈련된 언어 표현 모델이 포함되어 있습니다. 관련 논문에서 우리는 경쟁이 치열한 Stanford Question Answering Dataset (SQuAD v1.1)을 포함하여 11개의 NLP 작업에 대한 최신 결과를 보여줍니다.


BERT가 어떤 차이점을 만듭니까? 

BERT는 Semi-supervised Sequence Learning, Generative Pre-Training, ELMo 및 ULMFit을 포함한 사전 훈련 상황 표현의 최근 작업을 기반으로 합니다. 그러나 이러한 이전 모델과 달리 BERT는 최초의 심층 양방향 비주도(deeply bidrectional, unsupervised) 언어 표현으로 일반 텍스트 코퍼스(Wikipedia 경우에만)를 사용하여 사전 학습됩니다.


이것이 왜 중요한가요? 사전 훈련된 표현은 상황에 맞지 않거나 상황에 따라 표현될 수 있으며 상황에 따른 표현은 단방향 또는 양방향 일 수 있습니다. word2vec 또는 GloVe와 같은 context-free 모델은 어휘의 각 단어에 대해 단일 word embedding 표현을 생성합니다. 예를 들어 "bank"라는 단어는 "bank account"와 "bank of the river"에서 동일한 context-free 표현을 갖습니다. 상황에 맞는 모델은 대신 문장의 다른 단어를 기반으로 하는 각 단어의 표현을 생성합니다. 예를 들어, “I accessed the bank account”라는 문장에서 일방적인 상황 모델은 "I accessed the bank"를 기반으로 "bank"을 나타내지만 "account"은 나타내지 않습니다. 그러나 BERT는 심층 신경망의 맨 아래부터 시작하여 이전 및 다음 콘텍스트( "I accessed the ... account")를 모두 사용하여 "bank"을 나타내며, 이를 양방향으로 만듭니다.


기존의 최신 상황별 사전 훈련 방법과 비교한 BERT의 신경망 아키텍처 시각화는 다음과 같습니다. 화살표는 한 계층에서 다음 계층으로의 정보 흐름을 나타냅니다. 상단의 녹색 상자는 각 입력 단어의 최종 콘텍스트화 된 표현을 나타냅니다.

[그림 1] BERT는 양방향이고 OpenAI GPT는 단방향이며 ELMo는 양방향입니다.

양방향의 힘

양방향성이 너무 강력하다면 왜 이전에 하지 않았습니까? 이유를 이해하려면 문장의 이전 단어에 따라 조정된 각 단어를 예측하여 단방향 모델을 효율적으로 학습할 수 있습니다. 그러나 이전 단어와 다음 단어에서 각 단어를 간단히 조정하여 양방향 모델을 학습할 수는 없습니다. 예측된 단어가 다층 모델에서 간접적으로 "see itself" 자체를 볼 수 있기 때문입니다.


이 문제를 해결하기 위해 입력에 포함된 단어 중 일부를 마스킹한 다음 각 단어를 양방향으로 조정하여 마스크 된 단어를 예측하는 간단한 기술을 사용합니다. 예를 들면 다음과 같습니다.

이 아이디어는 오랫동안 사용되어 왔지만 BERT는 심층 신경망을 사전 훈련하는 데 성공적으로 사용되었습니다.


BERT는 또한 텍스트 코퍼스에서 생성될 수 있는 매우 간단한 작업에 대한 사전 훈련을 통해 문장 간의 관계를 모델링하는 방법을 배웁니다. 두 문장 A와 B가 주어지면, B는 코퍼스에서 A 다음으로 실제 다음 문장입니까? 아니면 무작위 문장입니까? 예를 들면 다음과 같습니다.

Cloud TPU를 사용한 훈련

지금까지 설명한 모든 내용이 매우 간단 해 보일 수 있으므로 제대로 작동하지 않는 부분은 무엇입니까? 클라우드 TPU(Cloud TPU)를 사용하면 모델을 신속하게 실험, 디버깅 및 조정할 수 있는 자유를 얻게 되었으며 이는 기존의 사전 훈련 기술을 뛰어넘는 데 매우 중요했습니다. 2017 년 Google 연구원이 개발한 Transformer 모델 아키텍처는 BERT를 성공적으로 수행하는 데 필요한 기초를 제공했습니다. Transformer는 오픈소스 릴리스와 tensor2tensor 라이브러리에서 구현됩니다.


BERT으로써 결과

성능을 평가하기 위해 BERT를 다른 최신 NLP 시스템과 비교했습니다. 중요하게도 BERT는 신경망 아키텍처에 대한 작업 별 변경 없이 거의 모든 결과를 달성했습니다. SQuAD v1.1에서 BERT는 93.2% F1 Score(정확도 측정)를 달성하여 이전의 최첨단 점수 91.6 % 와 인간 수준 점수 91.2 %를 능가합니다.


BERT는 또한 9 가지 다양한 자연어 이해(NLU) 작업 세트인 매우 까다로운 GLUE benchmark에서 최첨단 7.6% 절대 성능을 향상시킵니다. 이 작업에서 사람이 표시한 훈련 데이터의 양은 2,500개의 예에서 400,000개의 예에 이르며 BERT는 모든 기술의 최신 정확도를 크게 향상시킵니다.


BERT를 활용해보세요

우리가 발표하고 있는 모델은 몇 시간 이내에 다양한 NLP 작업에서 미세 조정할 수 있습니다. 오픈 소스 릴리스에는 사전 교육을 실행하는 코드도 포함되어 있지만 BERT를 사용하는 대다수의 NLP 연구원은 자체 모델을 처음부터 사전 훈련할 필요가 없다고 생각합니다. 오늘 발표하는 BERT 모델은 영어로만 제공되지만 가까운 시일 내에 다양한 언어로 사전 훈련된 모델을 출시할 예정입니다.


오픈 소스 TensorFlow 구현 및 사전 훈련된 BERT 모델에 대한 포인터는 http://goo.gl/language/bert에서 찾을 수 있습니다. 또는 "BERT FineTuning with Cloud TPU" 노트북과 함께 Colab을 통해 BERT를 시작할 수 있습니다.


자세한 내용은 "BERT: Pre-training of Deep Bidrectional Transformers for Language understanding" 문서를 참조하십시오.


원본 제목: 오픈소싱 BERT: 자연어 처리를 위한 최첨단 사전 훈련(Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing)
게시자 : Jacob Devlin 및 Chang Ming-Wei Chang, Google AI 언어 연구 과학자
원본 링크: https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html
Google Research BERT 오픈소스: https://github.com/google-research/bert
Transformer: A Novel Neural Network Architecture 블로그(영문): https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 논문: https://arxiv.org/abs/1810.04805
OpenAI : https://openai.com/blog/language-unsupervised/
ELMo(Deep Contextualized word representations): https://allennlp.org/elmo
Glove: Global Vectors for Word Presentation: https://nlp.stanford.edu/projects/glove/
Word Embeddings 자습서: https://www.tensorflow.org/tutorials/text/word_embeddings
Cloud Tensor Processing Units(TPU) 문서: https://cloud.google.com/tpu/docs/tpus 
Tensor2Tensor 라이브러리 오픈소스: https://github.com/tensorflow/tensor2tensor
GULE(General Language Understanding Evaluation) benchmark: https://gluebenchmark.com
SQuAD 2.0 (The Stanford Question Answering Dataset) 웹사이트: https://rajpurkar.github.io/SQuAD-explorer/
이 블로그는 2018년 11월 2일(금), Google AI 리서치 블로그 기사를 영한 번역한 것입니다. 또한 이 번역 글은 정보 공유 목적으로만 작성했으므로 어떠한 상업용으로 사용할 수 없으며, 원본 저작물 모두 구글에게 저작권이 있음을 알려 드립니다. (First Draft Version)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari