과거에는 사람이 직접 Feature를 파악해서 분류했으나 복잡한 문제들의 경우는 분류 대상의 특징을 사람이 파악하기가 어렵다.
→ 이러한 특징을 컴퓨터 스스로 찾고(Feature extraction), 스스로 분류(Classification) 하는 것이 '기계학습'의 핵심이다.
자연어 단어 임베딩
▮ Sparse representation : One-hot Encoding
▮ Word2vec
단어의 의미를 벡터 공간에 임베딩하는 방법
한 단어의 주변 단어들을 통해, 그 단어의 의미를 추론하는 방식으로 학습
장점
단어 간의 유사도 측정과 관계 파악에 용이하다.
벡터 연산을 통한 추론이 가능하다.
단점
Out of Vocabulary 문제 학습에 사용된 단어가 아니면 벡터값을 출력할 수 없다.
단어의 subword information을 무시한다. (서울, 서울시, 고양시를 모두 다른 단어로 학습)
▮ FastText
Word2Vec의 경우 다양한 용언 표현들을 서로 독립된 vocab으로 관리한다.
ex) 모르다 / 모르지만 / 모르지 / 모르더라 ...
FastText는 단어를 n-gram으로 분리한 하고, 모든 n-gram vector를 합산한 후 평균을 통해 단어 벡터를 획득한다.
위 그림처럼 Orange라는 단어와 Oranges라는 단어는 유사한 벡터값으로 임베딩 될 수 있다.
또한 Word2Vec에 비해 OOV에 대해서도 성능의 강세를 보인다.
▮ 단어 임베딩 방식의 한계점
동형어, 다의어 등에 대해서는 Embedding 성능이 좋지 않다.
주변 단어를 통해 학습이 이루어지기 때문에 문맥을 고려하지 못한다.
언어모델
자연어의 법칙을 컴퓨터로 모사한 모델
주어진 단어들로부터 그 다음에 등장할 단어의 확률을 예측하는 방식으로 학습
▮ RNN
이전 state 정보가 다음 state를 예측하는데 사용됨으로써, 시계열 데이터 처리에 특화되어 있다.
마지막 출력은 앞선 단어들의 '문맥'을 고려해서 만들어진 최종 출력 vector (Context vector)이고 이 출력된 context vector 값에 대해 classification layer를 붙이면 문장 분류를 위한 신경망 모델이 된다.
▮ RNN 기반 Seq2Seq
Encoder : RNN 구조를 통해 Context vector를 생성
Decoder : 획득된 Context vector를 입력으로 출력을 예측
문제점
입력 sequence의 길이가 매우 긴 경우, 처음에 나온 token에 대한 정보가 희석
고정된 context vector 사이즈로 인해 긴 sequence에 대한 정보를 함축하기 어려움
모든 token이 영향을 미치니, 중요하지 않은 token도 영향을 줌
▮ Seq2Seq with Attention
인간의 정보처리와 마찬가지로, 중요한 feature는 더욱 중요하게 고려하는 것이 Attention 탄생의 모티브
문맥에 따라 동적으로 할당되는 encode의 attention weight로 인한 dynamic context vector를 획득
문제점
RNN 기반이기 때문에 순차적으로 연산이 이뤄지므로 연산 속도가 느림
▮ Transformer with Self-Attention
앞서 설명한 Seq2Seq2 with attention에서는 다음과 같이 동작한다.
Decoder의 특정 timestep의 Hidden state vector는 우리가 찾고자 하는 정보를 나타내는 벡터이고, 이 벡터와 Encoder 단에서 만들어진 Hidden state vector들과 각각 내적을 수행해 유사도를 계산하고 softmax를 취해 확률값을 도출한다. 그리고 해당 확률값을 encoder의 각각의 hidden state vector에 가중치로 적용함으로써 가중평균을 내어 Context 벡터를 만든다.
Transformer의 Self-attention 동작 방식은 아래와 같다.
"I"라는 단어의 encoding hidden state vector를 만든다고 가정하자.
"I" input vector는 Seq2Seq with attention의 Decoder의 특정 timestep의 Hidden state vector 역할인 우리가 찾고자 하는 정보를 나타내는 벡터로 볼 수 있다.
그리고 Seq2Seq with attention의 Encoder 단에서 만들어진 Hidden state vector 역할은 "I" "go" "home" input vector가 수행한다. ("I" 벡터가 자기 자신과 내적, 2번째, 3번째 input 벡터들과 내적 계산을 통해 input 벡터 3개와의 태적에 기반한 유사도를 구하게 된다.)
내적에 기반한 유사도에 softmax 값을 취해 확률값을 도출하고 해당 확률값을 input 벡터에 가중치로 적용함으로써 가중평균을 낸 결과를 "I"에 대한 encoding hidden state vector라고 볼 수 있다.
→ decoder의 hidden state vector와 encoder의 hidden state vector들 간의 구별 없이 동일한 set내의 벡터들로 계산을 할 수 있기에 self-attention 모듈이라고 부른다.
Query vector도 여러개가 주어져서 각각의 Query에 대한 attention 모듈의 output 을 계산해야하는 경우 각 query 벡터를 row vector로서 행렬을 구성한 후 행렬연산을 수행하면 각각의 Qeury vector에 대한 attention 모듈의 output vector를 한번에 계산할 수 있다.
→ 병렬적인 행렬연산이 가능하기 때문에 RNN 모델등에 비해 상대적으로 학습이 굉장히 빠르다.