일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 원신
- 피파온라인 API
- 블루 아카이브
- 옵티마이저
- 자연어 모델
- LDA
- 데이터리안
- KeyBert
- NLP
- 트위치
- 문맥을 반영한 토픽모델링
- 다항분포
- geocoding
- Tableu
- 구글 스토어 리뷰
- Optimizer
- 코사인 유사도
- 토픽 모델링
- CTM
- 블루아카이브 토픽모델링
- 개체명 인식
- Roberta
- 데벨챌
- 붕괴 스타레일
- 포아송분포
- BERTopic
- 데이터넥스트레벨챌린지
- SBERT
- 클래스 분류
- 조축회
- Today
- Total
분석하고싶은코코
NLP - 한국어 자연어 모델(Korean Language Model) 본문
이번에는 한국어 자연어 모델에 대해서 포스팅 해보려 합니다. 자연어 모델이 아닌 콕 찝어 한국어 자연어모델이라고 한 이유는 물론 제가 앞으로 처리할 데이터들이 모두 한국어이기때문도 있지만 한국어가 자연어처리에 있어서 난이도가 높은 축에 속하는 이유도 있기 때문입니다. 그렇다면 한국어가 자연어처리 분야에서 왜 난이도가 높은지에 대해서 알아보고 그럼에도 존재하고 있는 다양한 한국어 자연어모델을 알아보는 순서대로 진행해보겠습니다.
1) 한국어가 왜 자연어처리가 어려울까?
한국어의 자연어 처리가 어려운 이유는 크게 4가지가 있는데 먼저 해당 키워드들로 나열해보고 하나씩 살펴보겠습니다
- 교착어
- 어순
- 띄어쓰기
- 문장부호
1-1) 교착어
교착어는 언어의 유형론적 분류의 하나인 형태론적 관점에서의 분류에 따른 언어의 한 유형입니다. 교착어는 어근과 접사를 결합한 형태로 이뤄지는데 이 조합에 따라 다른 의미를 갖습니다. '그'라는 어근이 있고 뒤에는 '는', '를', '에게', '와' 등등 다양한 접사, 조사들이 올 수 있습니다. 이러한 조합에 따라 그 의미가 달라집니다. 심지어 이 조사들이 단독으로 쓰이는게 아니라 어근에 부착된 상태로 사용되기 때문에 이점 역시 영어와 다르죠. 그래서 한국어에 대한 자연어처리를 할때 전처리에서 조사나 접사를 분리해주는 작업이 중요도가 높은 작업중 하나입니다.
1-2) 어순
한국어는 어순이 바뀌어도 그 의미가 변하지 않고 이해하는데도 어렵지 않습니다. 아래 두 문장이 어순이 바뀌었다고 이해할 수 없다거나 의미가 다르다고 생각되시나요? 전혀 그렇지 안습니다.
- 어제 나 혼자 공부했어.
- 공부했어. 어제 나 혼자서.
두 번째 문장은 사실 구어체에서 더 많이 사용되는 형태이긴 합니다만 두 문장에서 사용하는 단어들은 똑같은데 어순만 바뀌었습니다. 그런데 우리는 어떤 문장을 들어도 같은 의미로 해석이 가능합니다. 그런데 컴퓨터는 그렇지 않습니다. 그 이유는 문장의 흐름인 문맥을 우리는 쉽게 이해할 수 있지만 컴퓨터는 이 문맥이라는 것을 이해하기 어렵기 때문입니다. 문맥을 파악하기 위한 다양한 방법들이 존재하지만 사람만큼 파악하게 하기는 쉽지 않습니다. 이런 어순에 크게 영향을 받지 않는다는 점이 한국어 자연어처리의 난이도를 높이는 이유 중 하나입니다.
1-3) 띄어쓰기
한국어는 띄어쓰기에 따라 문장의 의미가 달라지기도 합니다. 그런데 이 띄어쓰기의 규칙이 사용에 따라 변화합니다. 이 변화는 현재진행형이죠. 그리고 띄어쓰기를 완벽하게 해내는 사람 역시 매우 드뭅니다. 그럼에도 사람은 대화의 흐름이나 문맥을 통해서 띄어쓰기가 완전히 망가진 형태가 아니라면 문장을 이해하는데 큰 어려움을 겪지 않죠. 이런 점은 기계에게 혼란을 가져다 줍니다. 기계는 학습을 통해서 자연어처리를 진행합니다. 그런데 한국어 데이터들은 이 띄어쓰기가 가끔 오류가 있다고 치부하기에는 많은 데이터들이 띄어쓰기가 완벽하지 않습니다. 그래서 자연어처리에 있어서 어려움이 있는 이유라 할 수 있겠습니다.
1-4) 문장부호
한국어는 문장부호가 다른 언어들에 비해 큰 의미를 갖습니다. 이번에도 하나의 문장을 예시로 들어보겠습니다.
- 뉴진스 이번 앨범 수록곡 들었어[ ]
[ ]안에는 문장부호가 들어올 차례입니다. 많은 문장 부호들이 올 수 있지만 대표로 '.', '?' 2개의 문장부호로 확인해보겠습니다. 우선 온점이 들어온다면 평서문에 해당됩니다. 문장을 만들어낸 주체가 뉴진스의 노래를 들었다는 의미로 쉽게 해석이 가능합니다. 다음 물음표 입니다. 이제 문장을 만들어낸 주체가 아닌 상대방에게 질문을 던지는 의문문의 형태로 바뀝니다. 이렇게 문장부호 하나로 인해 문장의 의미가 달리지게 됩니다. 영어의 경우 어순의 변경으로 물음표가 없다하더라도 평서문과 의문문을 구분지을 수 있습니다. 그런데 한국어는 예시처럼 문장부호에 따라 문장이 갖는 의미가 달라지게 됩니다. 이 부분 역시 기계가 처리하기 어려워하는 문제점 중 하나라 할 수 있겠습니다.
2) 한국어 자연어 모델
위에서 언급한 어려운 점들이 있음에도 한국어의 자연어 모델들은 꾸준히 연구를 통해 발전해나가고 있습니다. 이제 그 훈련된 모델들에 대해서 알아보겠습니다.
KorBERT(Korean Bidirectional Encoder Representations from Transformers)
한국전자통신연구원에서 최초로 공개한 한국어 사전 훈련 모델입니다. 신문기사와 백과사전 등 23GB의 대용량 텍스트를 대상으로 47억개의 형태소를 사용하여 학습한 모델입니다. KorBERT는 한국어의 특성을 반영한 형태소분석 기반의 언어모델(Korean_BERT_Morphology)과 형태소분석을 수행하지 않은 어절 기반의 언어모델(Korean_BERT_WordPiece) 2가지 모델을 지원하고 있습니다. 두 모델 모두 torch와 tensorflow에서 사용할 수 있도록 제공하고 있습니다. 모델들의 대표적인 데이터들에 대한 성능은 아래 링크를 통해서 확인할 수 있습니다.
https://aiopen.etri.re.kr/bertModel
https://arxiv.org/pdf/1810.04805.pdf
KoBERT(KoreanBidirectional Encoder Representations from Transformers)
SKT에서 공개한 훈련된 모델로 구글 BERT base multilingual cased의 한국어 성능 한계로 인해 만들어졌다고 설명하고 있습니다. 위키피디아, 뉴스 등에서 수집한 5백만개의 문장, 5.4천만개의 단어로 학습된 모델로 한글 위키 기반으로 학습한 토크나이저(SentencePiece tokenizer) 기법을 적용하였으며 vocab 크기는 8002, 모델의 파라미터 크기는 92M입니다.
https://github.com/SKTBrain/KoBERT
KoGPT(Korean Generative Pre-trained Transformer)
카카오브레인에서 GPT-3를 벤치마킹하여 만든 한국어 모델입니다. 카카오브렌드에서는 이 모델을 필터링을 거치지 않은 원시적인 데이터를 통해 학습했다고 이야기했습니다. 욕설, 음란, 정치적 문장을 그대로 훈련에 적용했다는 이야기입니다. 그렇기 때문에 분류, 검색, 요약 또는 생성하는데 가장 적합하다고 이야기합니다. 그러나 학습 데이터에 나타나지 않았던 단어를 포함한 데이터에 대해서는 좋지 못한 성능을 낸다고 이야기하고 있습니다. Vocab 크기는 64,512, 임베딩 차원은 4,096으로 약 60억의 파라미터 크기입니다.
https://developers.kakao.com/product/kogpt
https://github.com/kakaobrain/kogpt
https://huggingface.co/kakaobrain/kogpt
KoBART(Korean Bidirectional and Auto-Regressive Transformers)
SKT에서 발표한 세번째 한국어 훈련 모델입니다. 한국어 위키피디아, 뉴스, 책, 모두의 말뭉치, 청와대 국민청원 등 다양한 0.27B의 데이터로 학습되었습니다. 토크나이저는 Character BPE tokenizer를 사용하였으며 Vocab 키기는 30,000입니다. 대표적인 예시로 문서에 대한 요약을 보여주면서 해당 기능에 대한 자신감을 보인 모델입니다.
https://github.com/SKT-AI/KoBART
KoreALBERT(KoreanA Lite BERT)
삼성SDS에서 공개한 모델로 ALBERT(A-Lite-BERT)에 한국어를 적용한 것입니다. 학습에는 BERT와 같은 Masked Language Model와 Sentence-Order Prediction 방법이 적용되었습니다. 한국어 위키피디아, 나무위키, 뉴스, 책 줄거리 요약 등 약 43G의 데이터를 학습했고, Vocab 크기는 32,000이며, 12M의 Base 모델과 18M의 Large 모델이 공개되었습니다.
https://arxiv.org/abs/2101.11363
Ko-GPT-Trinity
Ko-GPT-Trinity는 1.2B의 크기를 갖는 훈련 모델로 SKT에서 공개했습니다. 훈련된 데이터는 Ko-DAT이라 칭했는데 이는 SKT에 자체적으로 구축한 훈련 데이터라고 합니다. Ko-DAT의 350억개의 토큰과 72,000의 스텝을 거친 훈련된 모델이라고 소개하고 있습니다. 모델 소개를 보면 Ko-DAT 데이터에는 욕설, 음란, 정치적 비난 등 원시적인 데이터가 들어가 있기 때문에 모델을 통해서 나오는 결고가 정치적인 텍스트가 나올 수 있고 공격적인 결과가 나올 수 있다고 이야기합니다.
https://huggingface.co/skt/ko-gpt-trinity-1.2B-v0.5
KLUE-BERT
KLUE-BERT는 Korean Language Understanding Evaluation (KLUE) 베이스라인으로 사용되었던 모델로, 모두의 말뭉치, 나무위키, 뉴스, 청원 등 다양한 문서에서 추출한 63G의 데이터로 학습되었습니다. 토크나이저는 Morpheme-based Subword Tokenizer를 사용하였으며 Vocab size는32,000이고 모델의 크기는 111M이라고 합니다. 토픽 분류, STS, NLI, NER과 같은 작업이 가능하다고 소개하고 있습니다.
https://huggingface.co/klue/bert-base
KoELECTRA / KcELECTRA
ELECTRA는 generator에서 나온 token을 보고 discriminator에서 "real" token인지 "fake" token인지 판별하는 방법으로 학습방법입니다. BERT이후 등장한 학습 방법으로 KoELECTRA는 이 방법에 한국어 약 34G 데이터를 통해 학습 시킨 모델입니다. KcELECTRA는 똑같이 ELECTRA 학습 방법을 통해 한국어를 학습시킨 것이지만 다른점은 학습 데이터에 있습니다. KcELECTRA는 기존 모델들의 학습 데이터는 나름 잘 정제되어 있다는 점을 언급하며 네이버 뉴스의 댓글과 대댓글 데이터를 통한 학습을 강조한 모델입니다. KcELECTRA의 경우 약 17G 데이터를 통해 학습했고 모델의 크기는 475M입니다.
'머신러닝&딥러닝 > NLP' 카테고리의 다른 글
NLP - CTM(Contextualized Topic Models) 토픽 모델링 (1) | 2023.10.09 |
---|---|
NLP - KeyBert 토픽 모델링 (1) | 2023.10.09 |
NLP - SBERT(Sentence-Bert) (0) | 2023.10.05 |
NLP - BERT 실전 활용(2) (1) | 2023.10.03 |
NLP - BERT 실전 활용(1) (1) | 2023.10.01 |