자연어처리 Task
- 단어/문장/문단/글을 이해하는 NLU
- 자연어를 상황에 따라 적절히 생성하는 NLG
자연어처리의 발전 과정
자연어처리를 하기 위해서는 주어진 텍스트 데이터를 단어 단위로 분리하고 각 단어를 벡터로 표현하는 과정을 거쳐야한다.
이를 벡터공간의 한 점으로 나타난다는 뜻에서 Word Embedding이라고 부른다.
문장 내의 각 Word를 벡터로 나타내면 이 문장은 Word vector들이 특정한 순서로 주어지는 Sequence라고 볼 수 있다.
이런 Sequence 데이터를 처리하는데 특화된 모델 구조로서 RNN이라는 딥러닝 모델이 자연어처리의 핵심 모델로 자리잡게 되었다.
그러다가 Attention is all you need라는 논문이 등장하면서 기존의 RNN기반의 모델을 Self Attention이라는 모듈로 완전히 대체할 수 있는 Transformer 모델이 등장하였다. 현재 대부분의 자연어처리 딥러닝 모델은 Transformer 모델 구조를 기본으로 하고 있다.
Transformer가 나오기 이전에는 Task별로 특화된 딥러닝 모델이 따로 존재하였다.
그러나 Transformer 등장 이후에는 Transformer 모델의 핵심인 Self-Attention 모듈을 단순히 계속 쌓아나가는 식으로 모델의 크기를 키우고 이 모델을 대규모 텍스트 데이터를 통해 자가지도학습(Task를 위한 별도의 레이블이 필요하지 않은)으로 사전학습하여 큰 구조 변화 없이도 원하는 Task에 Transfer learning의 형태로 적용했을 때 뛰어난 성능을 보여준다.
입력문장이 주어졌을 때 입력 문장 중 일부를 가려놓고 그 단어를 맞추도록 하는 Task 학습을 통해 언어의 문법적인, 의미론적인 지식을 모델이 학습할 수 있게 된다.
Bag-of-Words
1. 텍스트 데이터셋에서 unique한 단어를 모아서 사전을 구축한다.
"I love my cats and she love my cats"
→ {"I", "love", "my", "cats", "and", "she"}
2. 각 단어를 one-hot 벡터 형태로 인코딩한다.
- I : [1 0 0 0 0 0]
- love : [0 1 0 0 0 0]
단어의 의미에 상관없이 모두 동일한 관계를 가지는 형태로 단어의 벡터 표현형을 설정한 것이라고 볼 수 있다.
문장이나 문서는 아래와 같이 one-hot 벡터의 합으로 표현되고 이를 Bag-of-Words 벡터라고 부른다.
"I love my cats" : [1 1 1 1 0 0]
NaiveBayes Classifier
문서가 분류될 수 있는 카테고리가 C개 있다고 가정하자.
특정 문서 d가 주어져 있을 때 각각의 c에 속할 확률분포는 $P(c|d)$로 표현할 수 있다.
$$C_{MAP} = argmax_{c \in C} P(c|d)$$
가장 높은 확률을 갖는 Class c를 택하는 방식을 통해 문서 분류를 수행할 수 있다. (Maximum A Posteriori라고 불림)
$$= argmax_{c \in C} \frac{P(d|c)P(c)}{P(d)}$$
베이즈 룰에 의해 위와 같이 표현할 수 있다. 이 때 d는 어떤 고정된 한 문서라고 볼 수 있기 때문에 $P(d)$는 상수값으로 볼 수 있어 argmax operation 상에서 무시할 수 있다.
$$= argmax_{c \in C} P(d|c)P(c)$$
따라서 위와 같은 식이 도출될 수 있다.
$$P(d|c)P(c) = P(w_{1}, w_{2}, ... , w_{n}|c)P(c) → P(c)\prod_{w_{i} \in W}P(w_{i}|c) $$
$P(d|c)$ : 특정 카테고리 c가 고정이 되었을 때 문서 d가 나타날 확률
$d$는 첫번째 단어 $w_{1}$부터 마지막 단어 $w_{n}$까지 동시에 나타나는 사건으로 볼 수 있다.
c가 고정되어 있는 경우 서로 독립이라고 가정할 수 있다면 각 단어가 나타낼 수 있는 확률을 모두 곱한 형태인 $\prod_{w_{i} \in W}P(w_{i}|c) $로 나타낼 수 있다.
즉, 어떤 문서가 주어지기 이전에 각 클래스가 나타날 확률과 특정 클래스가 고정되어있을 때 각 단어가 나타날 확률들을 추정함으로서 NaiveBayes Classifier에서 필요로하는 파라미터를 모두 추정할 수 있게 된다.
NaiveBayes Classifier는 특정 클래스의 학습 데이터내에 어떤 특정한 데이터가 없을 경우에는 해당단어가 등장할 확률은 0이기 때문에 그 단어가 포함한 문장의 경우 다른 단어들이 그 클래스와 아무리 연관이 있어도 해당 클래스로 분류할 확률은 0이 된다.
부스트캠프 AI Tech 교육 자료를 참고하였습니다.