1. NLU 개념
Natural Language Understanding이란? 인간의 자연어를 모델이 이해하도록 하는 분야
자연어를 모델이 곧바로 이해할 수 없기 때문에, 자연어를 모델이 이해할 수 있도록 데이터를 가공하는 과정을 포함한다.
1-1. 자연어 처리 프로세스
1) 토크나이징(Tokenizing)
토크나이징이란? "자연어를 분석하기 위해 각각 의미를 가지는 가장 작은 단위의 토큰으로 쪼개는 작업"
- 영어의 경우 : 띄어쓰기 단위, 어절 단위로 의미가 쪼개짐
- 한국어의 경우 : 조사 등으로 인해 띄어쓰기 단위가 아닌 형태소 단위의 분석을 주로 사용
(대표적인 Python 라이브러리 KoNLPy 패키지 제공)
ex)난 배가 고프다 -> 나 / 배 / 가 / 고프다
각 토큰은 확실한 각자의 의미를 가지고 있음
2) 인코딩(Encoding)
토크나이징을 통해, 자연어를 토큰으로 쪼개도 여전히 자연어 형태의 입력이므로, 모델이 인식하기 어려움
인코딩이란? "모델이 토큰을 인식할 수 있도록 벡터 형태로 바꾸는 과정"이다.
이 과정을 위해서, 각 토큰이 유니크한 정수 인덱스에 매핑되도록 "단어사전"을 구성합니다.
"단어 사전"에는 자연어 토큰-정수 형태로 매핑되어 있다고 보면 된다.
ex) 나 / 배 / 가 / 고프다 -> 0 / 3 / 7 / 5 -> [1,0,0,0,0,0,0,0] / [0,0,0,1,0,0,0,0] / [0,0,0,0,0,0,0,1] / [0,0,0,0,0,1,0,0]
실제로 모델에 전달될 때는 "one-hot" 벡터 형태로 전달 된다.
one-hot 형태란? 4개의 숫자가 존재한다고 할 때, 0은 [1,0,0,0], 1은 [0,1,0,0] 형식으로 표현하는 것을 의미한다.
- 단어사전 구축 프로세스
> 가지고 있는 데이터들(토큰?)의 중복을 제거 [사전에 똑같은 단어가 중복되면 안되므로..]
> 빈도수 순으로 단어를 나열하여, 상위 V개의 단어를 선택
> V는 단어사전의 크기를 나타내며, 이론적으로 모델은 단어사전에 있는 단어만 이해할 수 있습니다.(일반적으로 수만개 정도의 단어로 사전을 구축)
> 모든 단어를 담으면 좋겟지만, 단어사전이 커질 수록 모델도 커진다. 그렇다고, 너무 작으면 모델이 모르는 단어가 너무 많아짐
- 단어사전에 필수로 포함되는 특수 토큰
> [OOV] : Out Of Vocabulary의 약자로 "단어 사전에 없는 단어"를 의미
인코딩 과정에서 사전에 없는 단어는 전부 이 토큰의 인덱스로 인코딩, [UNK, Unkown]으로쓰이기도 함
> [PAD] : Padding을 의미
딥러닝에서 입력 데이터를 배치로 처리하려면, 배치 내의 모든 데이터가 같은 사이즈를 가져야 함
자연어 문장의 경우 길이가 제각각인데, 입력 데이터를 배치로 처리하기 위해, 상대적으로 짧은 문장은 PAD 토큰을 덧붙여 길이를 맞추고, 상대적으로 긴 문장은 앞이나 뒤를 잘라냄
3) 토큰 임베딩(Token Embedding)
지금까지 자연어를 토큰으로 쪼개고, 토큰을 정수로 매핑 후, one-hot 벡터 형태로 변환하는 과정을 수행함
그러나 one-hot 벡터는 단순히 단어사전에서 몇번째 위치한 단어인지를 나타내는 역할만 수행함
토큰 임베딩이란? "one-hot 벡터를 좀더 의미 있는 벡터로 변환하는 과정"을 의미한다.
임베딩된 벡터는 좀더 다양한 의미를 담을 수 있다.
비슷한 의미를 가지는 단어끼리 유사한 값을 가지기도 하고, 벡터끼리 연산도 가능해지고 임베딩은 데이터를 통해 학습된다.
최종적으로 얻어지는 임베딩 벡터가 생성된다.
2. RNN(Recurrent Neural Network) 개념
RNN이란? 순차적으로 들어오는 데이터를 처리하기에 적합한 네트워크이다.
동일한 가중치 (Wxh, Whh, Why)를 가지는 Recurrent Unit N개가 연결되어 있고, 순차적인 데이터(x1...xN)을 입력 받아
Hidden State(h1...hN)을 계산하고, 출력(y1....yN)을 생성하는 모델이다.
1) 처리 프로세스
- 각 hidden State(h1...hN)는 해당 step의 입력 Xt와 그 이전 step의 Hidden State(ht-1)를 통해 계산된다.
- 각 출력(Yt)은 해당 step의 Hidden State(ht)를 통해 계산된다.
- 최종 step의 출력 yn은 전체 입력 데이터 x1~xN이 모두 반영된 벡터가 된다.
즉 y1은 x0의 영향을 받고, y2는 x0, x1의 영향을 받는 모델이라고 할 수 있다.
언어 특성상 토큰간 서로 독립적인 것이 아니므로, RNN Model을 적용하는 것으로 볼 수 있다.
3. RNN 성능 향상 팁
RNN이 "자연어"와 같이 순차적으로 들어오는 데이터를 처리하기에는 적합하지만,
기본적으로 RNN만으로는 성능의 한계가 있다.(단순하기 때문?)
기존 RNN 모델의 경우, 데이터가 한 방향으로만 흐르도록 구성되어 있음.
자연어 데이터의 경우, 문맥상 나중에 나오는 정보가 앞쪽의 내용을 이해하는데 도움이 될 수가 있다.
즉 y0~y4 출력 결과에 x5~x9가 영향을 줄수도 있도록 모델이 구성되면 정확도(자연어 이해, 의도파악)가 더 올라가는 것이다.
Bidirectional RNN이란?
기존 Ht가 Ht-1과 Xt의 영향을 받고, Yt는 Ht의 결과로 산출하는 단방향 RNN이라고 한다면?
Hidden Layer를 Forward 방향과 Backward 방향으로 둘다 둔 상태에서, Yt를 산출할 때, Forward 방향의 Ht값과 Backward 방향의 Ht값을 동시에 반영하는 것이다.
Multi Layer Perceptron처럼 RNN도 Layer를 깊게 주어서 경우의 수를 더 늘려 정확하게 해줄 수 있음
층을 쌓는다는 것은 기본 RNN이 Yt가 Ht의 영향을 받아 바로 산출받는 것에 비해,
Yt를 다시 새로운 Xt로 보고 RNN 방식으로 Network를 형성하는 것이다.
4. RNN의 특징
이전 입력값이 다음 출력값에 영향을 주고, X1~Xn개의 입력을 통해, Y1~Yn개의 출력을 받아내는 경우에 사용된다.
'Certificates' 카테고리의 다른 글
[TDC] Time Series Forecasting 개념 (0) | 2021.05.25 |
---|---|
[TDC] 이미지 분류 구현 - CNN (0) | 2021.05.25 |
[TDC] Multi Layer Perceptron 개념 및 실습 (0) | 2021.05.25 |
[TDC] TDC 시험 준비 전략 및 환경구성, TensorFlow 개요 (0) | 2021.05.25 |
최근댓글