자연어 처리는
- 문서 요약 - 워드클라우드, 동시 출현 그래프 등..
-> 그냥 툴 써라.
- 감성 분석
- 언어 번역
- 언어 생성
등으로 점점 발전할수록 툴화하기 어려움.
목차
- Embedding + RNN/LSTM
- Pretrained Model
- Natural Language Generation
Embedding
: 기계가 처리할 수 있는 숫자의 나열인 벡터로 바꾸는 것
Embedding이 걸어온 길..
Term-Frequency -(높을수록 의미없는 단어)-> TF-IDF -(순서가 없잖니)-> One-Hot Encoding -(차원이 너무 크잖니)-> 워드 임베딩 -(문맥 파악 더 잘하는 거)-> 문장 임베딩
* Word Embedding
: 단어 사이의 유사도를 계산하여 새로운 차원으로 변환하여 유사한 단어끼리 가까운 벡터를 주는 것
기계가 단어끼리 유사한지 어케 아느냐
: "앞뒤 단어"를 보면 알 수 있다.
1) 일단 One-Hot Encoding 함
2) 단어와 그 앞뒤 단어 그리고 각자 해당하는 원핫인코딩값을 딥러닝의 입력으로 줌
=> 원하는 차원의 vector로 출력해줌
딥러닝
: word2vec, Glove 등이 있고 hidden layer는 1개
결론
word2vec 등 워드 임베딩을 통해 임베딩한 벡터값을 모델의 입력으로 사용하면 성능이 훨씬 잘 나옴.
단어와 단어 사이의 유사도를 표현하는 것은 큰 의미가 있음
RNN / LSTM
RNN
이 세 가지를 갖추기 위해 나온 순환 신경망
RNN의 구조
- 입력층, 은닉층, 출력층을 가짐.
- 은닉층이 순환에지를 가짐 => 위의 조건을 모두 처리할 수 있음.
- 자기 회귀 모델임. (auto-regressive)
- t 순간에는 t-1의 영향을 가장 크게 받고 멀리 있을수록 덜 받음. (장기 의존성 문제)
- 디자인하기 나름이라 여러 가지 구조를 가짐.
LSTM
- RNN의 장기 의존성 문제를 해결
- 해결 방법 2가지 : LSTM , Attention
- 메모리셀에 정보를 저장하고 개폐를 조절하여 필요한 순간에 정보를 전달
- 개폐 정도도 학습으로 알아내야 하기 때문에 계산할 것이 많음
+) 위 두 모델은 시계열 데이터를 위한 model 이므로 언어에 집중한 Language Model들에 대해 알아보겠음.
Pretrained Model
Language Model의 큰 특징
: 문장 단위 임베딩
=> 문맥을 더 잘 파악하여 동음이의어에 대해 다른 벡터값을 할당할 수 있음. (단어 임베딩은 같은 값으로)
ELMo
- Embedding from Language Model
- 2018년 초
- Transfer Learning을 자연어 처리에 접목하면 성능이 좋아진다는 사실을 발견
- 문장을 기본 단위로 임베딩한 최초 (?)
- 내 모델 + ELMo 모델
- 3가지 layer로 구성됨
- 단방향 학습
세 가지 Layer로 구성
- 첫 번째 layer: 문자 단위 컨볼루션 신경망 (임베딩)
- 문자 단위인 이유: 문법 추출
- 두 번째 layer: Bidirectional-LSTM 사용하여 학습 (Pre-training)
- 단어 하나씩 슬라이딩해가며 그 다음 단어가 무엇인지 맞추는 방식을 반복하여 학습 (단방향)
- Bi-LSTM을 사용하여 최대한 문맥을 파악하려고 함
- 세 번째 layer: ELMo Layer, 사용자의 데이터를 학습 (다운스트림 태스크 학습)
- 2018년
- GPT + 추가적인 코드 + Fine-tuning ~ 뭔 말인지 몰겠음
- 단방향
- 자기 회귀 모델 (auto-regressive model)
- Attention을 사용한 Transformer Network의 Decoder를 사용 (?)
BERT
- Bidirectional Encoder Representation
- 2018년
- BERT + Fine-tuning (다운스트림 작업) 쨌든 사용자가 할 일도 제일 적음
- 양방향 => 문맥 파악에 좋음. (언어 생성 성능은 떨어짐)
- 엄청나게 큰 parameters를 학습함
=> BOLD: BERT의 성능이 갑인 이유
- 자기 인코딩 모델
- Attention을 사용한 Transformer Network의 Encoder를 사용
자세한 것은 다음에 Attention 이후로 설명할 예정