[AI 모델 탐험기] #12 뉴스 기사들의 댓글로 학습된 한국어 모델, KcBERT&KcELECTRA

AI Network
10 min readJul 19, 2021

--

[편집자주] 본 글은 커먼컴퓨터에서 Developer Relations Engineer를 맡고 있는 성창엽님이 오픈소스 AI모델을 정리하고 인사이트를 공유하는 글로 시리즈로 기획돼 발행되고 있습니다. 열두번째 글은 네이버 뉴스 기사들의 댓글로 학습된 한국어 모델, KcBERT와 KcELECTRA입니다.

제가 오늘 소개드릴 모델은 이준범님의 KcBERT와 KcELECTRA입니다.

이준범님께서 한국어 뉴스 기사들의 댓글과 대댓글 데이터 셋으로 BERT와 ELECTRA를 처음부터 pretrain 한 KcBERT, KcELECTRA를 공개해주셔서 이를 가지고 글을 작성해보겠습니다. 프로젝트를 바로 확인해 보시고 싶으신 분은 다음 링크를 참조해 주세요

KcELECTRA-NSMC Tutorial : https://link.ainize.ai/3CmJEaV

KcBERT Github : https://link.ainize.ai/3hNz8lZ

KcELECTRA Github : https://link.ainize.ai/3ezh2SS

최근 구글에서 발표한 BERT(Bidirectional Encoder Representations from Transformers) 모델과 ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately) 모델은 특정 분야에 한정된 모델이 아닌 모든 자연어 처리 분야에서 좋은 성능을 보여주는 모델로 알려져 있어 많은 관심을 받고 있는 모델입니다.

하지만 하나 아쉬운 점이 있습니다. GPT-2와 마찬가지로 영어를 기반으로 한 모델이기 때문에 한국어를 사용할 수 없었습니다. 이에 한국어 성능 한계 개선을 위해 KcBERT, KcELECTRA와 같은 한국어 모델들이 공개되었습니다.

BERT

BERT 이전에 발표된 GPT는 디코더 기반의 언어 모델로 입력받은 단어를 하나씩 읽어가며 다음 단어를 예측하는 방법으로 단방향 학습이 진행됩니다. 이는 논문 “Attention Is All You Need”에서 발표한 Transformer의 구조와 관련이 있는데, 인코더는 입력값을 양방향으로 처리하고 디코더는 입력값을 왼쪽에서 오른쪽으로 처리하게 됩니다. 이에 구글은 언어 모델은 문맥 이해가 중요한데 단순히 왼쪽에서 오른쪽으로 학습하는 방법으로는 문맥 이해에 약점이 있을 수 있다고 주장하며 인코더 기반의 BERT 모델을 공개하였습니다.

BERT는 MLM(Masked Language Model)과 NSP(Next Sentence Prediction)의 방법으로 학습을 진행합니다. MLM은 문장의 빈칸 채우기라고 생각하면 쉽습니다. 입력 문장에서 15%의 단어를 가리고(masking) 가려진 단어를 맞추는 방법으로 학습합니다. NSP는 두 문장이 주어졌을 때 문맥상 첫번째 문장의 다음에 두번째 문장이 올 수 있는지를 예측하는 방법입니다. 이 학습을 통해 문맥과 순서를 언어모델이 학습할 수 있습니다.

출처 : BERT(Bidirectional Encoder Representations from Transformers) 구현하기

하지만 BERT에도 문제가 있었습니다. BERT는 대략 입력의 15%를 마스크 토큰으로 치환하고 이를 원래의 토큰으로 복원하는 방법을 통해 학습을 진행하였습니다.

이러한 학습 방법은 데이터의 15%만 학습을 진행하기 때문에 원하는 성능이 나오기 위해서는 많은 데이터가 필요하고 그에 따라 학습량이 늘어납니다. 따라서 충분한 컴퓨터 자원이 없다면 BERT를 다루기가 힘들었습니다. 이러한 문제점을 해결하기 위해 나온 것이 ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)입니다.

ELECTRA

ELECTRA에서는 학습의 효율성을 위해 RTD(Replaced Token Detection)라는 학습 방법이 사용됩니다. RTD는 우선 일부 토큰을 Generator(small masked language model)에서 얻은 가짜 토큰으로 치환합니다. 그 후 Discriminator로 들어온 토큰이 실제 토큰인지 아니면 Generator를 통해 생성된 가짜 토큰인지 맞히는 과정을 통해 진행됩니다.

RTD를 진행하면 모든 토큰에 대해 이진 분류를 해야 하기 때문에 모든 토큰에 대해 loss를 구해야 합니다. 따라서 입력의 15%가 아닌 모든 토큰에 대해서 학습하기 때문에 효율적이면서도 효과적입니다. ELECTRA는 XLNet이나 RoBERTa 사전학습에 필요한 계산량의 1/4만 사용해도 비슷한 성능이 나온다고 합니다.

출처 : ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators
출처 : More Efficient NLP Model Pre-training with ELECTRA

KcBERT(Korean comments BERT)

BERT가 공개된 이후 BERT의 한국어 성능 한계를 위해 많은 한국어 BERT들이 공개되었습니다. 하지만 대부분의 모델들이 뉴스 기사, 백과사전과 같이 잘 정제되어있는 데이터들로 학습을 진행하였습니다. 이는 커뮤니티의 댓글과 같이 잘 정제되어있지 않고 구어체 특징에 신조어와 오탈자가 많은 데이터 셋을 다루기에는 적절하지 않습니다. 이러한 문제를 해결하기 위해 공개된 것이 이준범님께서 만드신 KcBERT입니다.

KcBERT는 Korean comments BERT의 줄임말로 한국어 댓글을 이용하여 학습한 BERT 모델입니다. 학습에 사용된 데이터는 2019.01.01 ~ 2020.06.15 사이에 작성된 뉴스 기사들의 댓글과 대댓글을 수집한 데이터 셋으로 데이터 사이즈는 약 15.4GB, 1억1천만개 이상의 문장으로 이뤄져 있습니다. 해당 데이터는 이준범님께서 Kaggle에 공유를 해주셔서 link에서 확인하실 수 있습니다.

KcBERT에서 사용된 tokenizer는 BPE(Byte Pair Encoding)과 비슷한 WordPiece를 사용하였습니다. WordPiece는 가장 등장하는 빈도가 높은 쌍을 선택하는 BPE와 달리 단어 집합(Vocabulary)에 추가 된 학습 데이터의 가능도(likelihood)를 최대화하는 쌍을 선택하는 방법입니다.

KcELECTRA(Korean comments ELECTRA)

KcELECTRA는 Korean comments ELECTRA의 줄임말로 한국어 댓글을 이용하여 학습한 ELECTRA 모델이며, KcBERT의 연장선으로 ELECTRA의 한국어 성능 한계를 위해 이준범님께서 공개해주셨습니다.

학습에 사용된 데이터는 2019.01.01 ~ 2021.03.09 사이에 작성된 뉴스 기사들의 댓글과 대댓글을 수집한 데이터 셋으로 데이터 사이즈는 약 17.3GB, 1억8천만개 이상의 문장으로 이뤄져 있습니다. 이는 KcBERT에 비해 약 7천만개 더 많은 데이터 셋입니다. KcELECTRA의 Vocab 역시 주목해야할 부분인데, KcBERT 대비 KcELECTRA의 Vocab이 약 1.5배 더 크다고 합니다. 이는 단순히 뉴스 기사들의 댓글들로 이루어진 것이 아닌 KoELECTRA의 Vocab 중 겹치지 않은 부분을 포함하여 구성했다고 합니다.

KcELECTRA는 KcBERT-base, KcBERT-large와 Downstream task 성능을 비교했을 때 모든 데이터셋에 대해 KcELECTRA가 더 높은 성능을 보입니다. KcBERT에 비해 KcELECTRA의 성능이 좋은 이유는 데이터 셋의 증가와 Vocab의 증가로 볼 수 있을 거 같습니다.

출처 : KcELECTRA Github

이제 직접 KcELECTRA를 가지고 NSMC(Naver Movie Review Sentiment Analysis) 데이터로 학습하여 긍정/부정 분류를 해보겠습니다. 해당 과정은 Ainize Workspace에서 진행되었는데, 이는 클라우드 기반의 주피터 노트북 개발 환경으로 GPU(T4)를 무료로 사용할 수 있는 환경입니다. link를 통해 사용해 볼 수 있습니다.

이렇게 해서 KcBERT와 KcELECTRA를 살펴보았습니다. 모델을 공개해주신 이준범님께서는 원래 오픈 소스 활동을 좋아하신다고 합니다. 앞으로 이렇게 오픈소스로 데이터와 모델을 공유해주시는 분들이 늘어 한국어 자연어처리 분야가 한 걸음 더 발전할 수 있으면 좋을 거 같습니다.

Reference

AI 네트워크는 블록체인 기반 플랫폼으로 인공지능 개발 환경의 혁신을 목표로 하고 있습니다. 수백만 개의 오픈 소스 프로젝트가 라이브로 구현되는 글로벌 백엔드 인프라를 표방합니다.

최신 소식이 궁금하시다면 아래 커뮤니케이션 채널을 참고해주시기 바랍니다. 다시 한 번 감사합니다.

AI네트워크 공식 홈페이지: https://ainetwork.ai/

공식 텔레그램: telegram.com/ainetwork_kr

아이나이즈(Ainize): https://ainize.ai

유튜브: https://www.youtube.com/channel/UCnyBeZ5iEdlKrAcfNbZ-wog

페이스북: https://www.facebook.com/ainetworkofficial/

포럼: https://forum.ainetwork.ai/

AIN Price chart: https://coinmarketcap.com/currencies/ai-network/onchain-analysis/

--

--

AI Network
AI Network

Written by AI Network

A decentralized AI development ecosystem built on its own blockchain, AI Network seeks to become the “Internet for AI” in the Web3 era.

No responses yet