NLP에서 language model의 역사 훑어보기
1. language model
앞의 주어진 문맥을 활용해 다음에 나타날 단어를 예측하는 모델
사람의 언어를 이해하는 것은 쉬운 일은 아니지만
통계적 관점, 딥러닝적 관점에서 문맥이 주어질 때 다음 단어를 잘 예측했다면 언어의 패턴을 잘 학습한 것이다.
2. 확률적 관점
언어 모델은 문장에 대한 확률을 부여하는 task
조건부확률을 이용하여 생성확률을 부여
’오늘은 햇살이 좋다’라는 문장에 대한 확률은 ‘오늘은’이 먼저 나올 확률에
‘오늘은’이 주어질때 ‘햇살이’가 나타날 확률에
‘오늘은 햇살이’ 주어질 때 ‘좋다’가 나타날 확률을 곱한 것
3. RNN을 활용한 예측
x는 input이고 y는 현재 시점의 예측값, h는 각 시점에서 모델이 기억하는 잠재적인 정보
U,V,W는 RNN의 parameter
이전 시점의 예측값 y를 이전 시점에 기억하는 잠재적 정보 h와 함께 다음 시점의 input으로 넣어
예측을 잘하게 만드는 방식으로 RNN을 학습시킴
4. 양방향 언어 모델링 ELMo 등장
‘Embeddings from Language Models’
각 text에 대응하는 embedding을 뽑아 이것을 재료로 다양한 task를 수행하면 효과적이다
언어모델링 task는 다른 자연어 과제에 유용하게 쓰일 수 있다는 것을 보인 최초의 아이디어
다음은 ELMo의 기본 구조
forward LM과 backward LM 2개를 사용하여 embedding을 각각 뽑아내고 최종적으로 합쳤다
forward LM은 사람이 읽는 순서대로 앞에서부터 읽어들여 다음 단어를 예측
backward LM은 문장을 반대로 읽어들여 다음 단어를 예측
각각에서 embedding을 만들어서 최종적으로 합쳐서 각 text에 대응하는 embedding을 만들어냈다
5. ELMo는 무엇을 보여주었는가?
previous sota는 이전에 각 과제에 대해 보고된 점수들
우측에 ELMo의 성능 평가 점수들이 나타남
ELMo가 모든 과제에서 성능이 더 좋았음을 보여줌
SQuAD는 주어진 지문을 이해하고 질문의 답을 찾는 과제
SNLI는 2개의 문장 사이에 모순이 있는지 없는지 찾는 과제
SRL은 의미역 결정(semantic role labeling) 과제로 특정 명사구가 서술어와 관련하여 지니는 의미 기능을 결정하는 과제
Coref는 문맥안에서 지시대명사들이 가리키는 단어를 찾는 과제
NER은 개체명 인식 과제로 단어가 사람명인지, 기관이름인지 맞추는 과제
기존에는 이러한 task들을 잘하는 방법론들이 각각 따로 존재했다.
ELMo가 기존의 자연어 과제에서 전부 높은 성능을 보여줌으로써
언어모델링의 힘을 빌리면 모든 task를 한번에 잘하는 방법이 있다는 것을 알게 됨
언어 모델은 단순히 다음 단어를 예측하는 task를 넘어서 잘 활용하면 실용적인 결과를 낼 수 있다는 것
6. BERT 등장
‘Bidirectional Encoder Representation from Transformers’
BERT의 encoder는 transformer의 self-attention을 이용하여 순방향과 역방향 동시에 문맥을 이해하여 embedding을 뽑아냄
각각의 서로 다른 task를 잘 하기위해 서로 다른 모델들을 쓰는 것이 아니라
대량의 text data를 language model로 사전학습한 BERT를 이용
거기에 task에 대해 fine-tuning을 조금 해주면, task에 특화된 모델보 훨씬 과제 수행을 잘하더라
이후 자연어 처리 task는 대량의 text데이터로 pre-train후 각 task에 대해 fine-tuning해야한다는 것이 상식처럼 이어짐
7. semi-supervised learning
BERT이후 자연어 처리의 상식으로 자리 잡은 training 방식
거대한 text data로부터 language modeling 과제를 사전학습한 모형은 언어에 담긴 패턴을 통째로 암기해버렸고
잘하고싶은 다른 task에 대해 fine-tuning을 수행하는 것이 semi-supervised learning
fine-tune은 대량의 데이터를 학습한 사전학습과는 달리 원하는 task에서는 상대적으로 적은 데이터가 존재하며
이것을 학습할 때 parameter를 미세하게 조정한다는 의미에서 붙여짐
각 task MNLI,QQP,QNLI 등등 별로 검증된 모델을 따로 따로 들고올 필요 없이 BERT라는 사전학습된 모델을 들고와
각각 dataset에 fine-tuning만 했더니 결과가 성능은 향상되었고 심지어 사용법도 간단해졌다
'딥러닝 > NLP' 카테고리의 다른 글
Vanilla RNN에서 hidden vector로 예측값을 만드는 과정 (0) | 2023.07.11 |
---|---|
word embedding을 하는 또 다른 모델 Glove의 아이디어 (0) | 2023.07.05 |
text data를 다루는 NLP + computer vision과의 활용 - image captioning 기본 배우기1 (0) | 2023.02.27 |
RNN(Recurrent Neural Network)과 LSTM(Long Short-term Memory) 기본 개념 되돌아보기 (0) | 2022.12.19 |
NLP에서 경량화를 시도하려는 연구들 알아보기 (0) | 2022.10.28 |