Tensorflow-text로 Sentencepiece 토크나이저 이용하기

이번 포스트에서는 tensorflow-text, tf_sentencepiece 모듈을 이용하여 학습 코드 상에서 토크나이징을 진행하고, 결과 모델을 export하는 과정까지의 경험을 기록한다. tensorflow-text는 텍스트 전처리 과정의 연산들을 Tensorflow 그래프 상에포함할 수 있도록 해주고, tf-sentencepiece는 자연어 처리에서 자주 이용되는 Sentencepiece 토크나이저를 tensorflow-text 토크나이저 형식에 맞춰 쉽게 이용할 수 있도록 해준다.

8 min read

2020년 상반기 회고

상반기를 되돌아 보고 하반기 계획을 세워보기. 2020년 상반기를 간단하게 되짚어보면, 2월말-3월까지 훈련소를 다녀오는 계획이 잡혀있었고, 1-2월은 진행하던 프로젝트의 마무리를 진행했다. 4-5월은 일과 이직준비를 병행, 6월은 기존의 일들을 마무리, 7월은 새로운 회사에서 적응을 하고있는 중이다. 쉴틈없이 빠르게 지나간 반년이였다. 2020년 시작 당시에 세웠던 목표들을 얼마나 달성했고, 어떤 부분들이 부족했는지 정리하고 남은 2020년의 목표를 다시 세워보자!

4 min read

Machine Learning Engineer 이직 후기

Machine Learning Engineer라는 역할로 지난 1년 4개월 정도를 근무했고, 동일한 역할로 타 회사로 이직하게 되었습니다. 이번 포스트에서는 이직 준비를 하면서 겪었던 경험들과 그에 대한 개인적인 느낌을 기록하려고 합니다.

7 min read

Google Cloud TPU를 이용해서 BERT 학습하기 - (2)

이번 글에서는 TPU를 이용하기 위해 코드레벨에서 어떤 작업들을 수행해야 하는지 알아봅니다. 데이터를 만드는 부분부터, 실제 학습 루프까지 간단한 구현체로 살펴봅니다. Tensorflow2.x 에서는Keras api를 사용하는 것이 공식적으로 권장되면서, 전반적으로 코드 작성이 매우 간편해졌습니다. 또한 학습 환경또한 Strategy 를 이용해 단일 GPU/ 여러 GPU에 걸친 분산 학습 / TPU를 이용한 학습을 간단하게 전환할 수 있습니다. 실제로 TPU학습을 해보면서 참고했던 코드들(ALBERT, BERT, ELECTRA)을 종합하여 유용했던 내용들을 기록합니다.

13 min read

Google Cloud TPU를 이용해서 BERT 학습하기 - (1)

뉴럴넷을 학습하기 위해서 일반적으로 GPU를 이용합니다. 하지만 최근에 많은 양의 데이터를 이용할 뿐만 아니라 엄청난 크기의 모델을 이용하는 연구들이 발표되고 있고, 이들은 GPU로 학습하기에 많은 시간이 소요됩니다. 이를 위해 Google Cloud에서는 TPU(Tensor Processing Unit)라는 연산장치를 제공하고 있고, TPU는 GPU에 비해 엄청난 성능을 보여줍니다. 또한 BERT 등 구글에서 공개한 많은 모델들은 이를 이용하여 학습되었습니다. TPU 자체에 대한 자세한 내용은 얼마전에 핑퐁팀 블로그의 포스트를 참고하면 더 많은 정보를 얻을 수 있습니다. 이번 포스트부터 3개의 포스트로 나누어 실제로 TPU를 이용해 모델을 학습하면서 경험했던 내용을 기록하려고 합니다.

3 min read

schuBERT Review

BERT기반의 모델들(XLNet, ALBERT 등)은 여러 NLP 테스크에서 좋은 성능을 보여주고 있지만, 이들 각각은 거대한 파라메터들로 구성되어 있습니다. 그래서 리더보드에 등록되어있는 크기의 모델들(일반적으로 Base/Large 모델들)은 서비스에 바로 적용하기에 무리가 있습니다. (BERT의 경우 이를 위해 더 작은 크기의 모델을 공개했습니다.) 최근에는 이를 해결하기위해 다양한 경량화 방법들이 연구되어지고 있는데요, 크게 Knowledge Distillation, Pruning, Quantization 3가지 종류의 방법으로 나눌 수 있습니다. 이번 포스트에서는 새로운 Pruning 방법을 이용하여 BERT 경량화를 진행한 “schuBERT: Optimizing Elements of BERT(ACL 2020)”를 리뷰하겠습니다.

11 min read

UniLM Review

Pre-trained LM은 많은 양의 데이터로 부터 컨텍스트를 반영한 representation을 학습합니다. 이를 통해 NLU-BERT, RoBERTa, NLG-GPT 와 같이 각각의 downstream 테스크에서 좋은 성능을 보여주고 있습니다. 이번 포스트에서는 NLU와 NLG를 함께 pre-train하여 하나의 pre-trained 모델이 각 테스크에 “모두” fine-tuning될 수 있는 방법인 “Unified pre-trained Language Model(UniLM)”를 제시한 논문 “Unified Language Model Pre-training for Natural Language Understanding and Generation (NeurIPS 2019)”를 리뷰하려고 합니다.

7 min read

Transformers for Learning Dialogue Review

이번 글에서는 “Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-based Question Answering”을 리뷰합니다. Transformer 기반의 컨텍스트를 반영한 임베딩을 만드는 접근법들(BERT, RoBERTa, XLNet 등)은 QA의 SOTA를 갱신해왔습니다. 하지만 일반적인 도메인에서 학습된 모델들로 대화를 잘 표현하기는 어렵고, 주어진 대화에 대한 QA 테스크에서 저조한 성능을 보입니다. 이 원인으로 두 가지를 꼽을 수 있습니다. 1) 대화들은 구어체인 반면에 대부분의 모델들은 격식이 갖춰진 문어체로 학습되었습니다. 2) 한 명의 저자가 관련이 있는 토픽에 관해쓴 wiki나 뉴스 기사와 같은 글과 달리 대화는 다른 주제와 각자의 방식을 가진 여려명의 화자들의 발화로 구성됩니다. 따라서 단순히 합치는 방법(concat)을 통해 보다는 내부적으로 서로 연결되어있는 방식의 표현법이 필요합니다. 본 논문에서는 이를 해결하기 위해 멀티파티(여러 명의 화자) 대화에서 “컨텍스트를 더 잘 이해할 수 있는” 토큰과 발화의 계층적 임베딩을 학습하는 Transformer를 제안합니다.

8 min read

XLNet Review

지난 포스트에서 “Transformer-XL”에 대한 리뷰를 진행했었는데요. Language Modeling 테스크에서 장기 의존성 능력을 높이기 위해, Transformer의 제한된 컨텍스트 길이를 recurrence한 구조로 늘려주는 방법이였습니다. 이번 포스트에서는 해당 논문의 후속으로 제안된 “XLNet: Generalized Autoregressive Pretraining for Language Understanding”을 리뷰하려고 합니다. 많은 양의 코퍼스로 Language Modeling에 대한 Pre-training을 진행하고 특정 테스크로 Fine-tuning을 진행하는 방법은 BERT 이후로 NLP 문제를 풀기위한 정석과 같은 방법이 되었습니다. XLNet에서는 BERT와 같이 Masked Language Modeling을 objective로 하는 Autoencoder(AE) 방식과 GPT와 같이 Auto-Regressive(AR) Language Modeling을 objective로 하는 방식의 장점을 유지하면서 단점을 보완하는 새로운 학습 방식을 제안합니다. 또한 Transformer-XL의 recurrence 알고리즘도 함께 적용하여 BERT를 능가하는 성능을 달성합니다. 약 9개월 전에 XLNet 리뷰를 팀블로그에 작성 했는데, 최근에 논문이 업데이트 되어 다시 한 번 공부하면서 글을 작성합니다.

16 min read