KT-Aivle School (AI)/딥러닝

[언어지능 딥러닝] RNN for NLP

똔똔똔 2022. 10. 8. 16:50

Chapter1. RNN 기반 자연어 처리

     Recurrent Neural Network (RNN)

 

RNN개요 (Recurrent Neural Network)

- 히든 노드가 방향을 가진 엣지로 연결되어 순환구조를 이루는 신경망모델
- 음성, 텍스트 등 순차적으로 등장하는 데이터 처리에 적합한 모델

- 하나의 파라미터 쌍(weights, bias)을 각 시간대 데이터 처리에 반복 사용

- 시퀀스 길이에 관계없이 input과 output을 받아들일 수 있는 네트워크 구조

     다양한 문제에 적용 가능한 장점

 

RNN 구조
RNN의 2가지 표현 방법

 

RNN 활용분야

• Image/Video Captioning
• Sentiment Classification
• Machine Translation
• POS Tagging
• Language Modeling
• Image/Music Generation (작곡 등)
• Conversation Modeling (챗봇)
• Speech Recognition

 

RNN 구조

https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/

 

 

하이퍼볼릭 탄젠트 함수 (쌍곡탄젠트, tanh)

 

 

= 실수 범위의 입력값을 받아 (-1, 1) 사이의 출력 값으로 변환
- 임의의 입력값을 절대값 1 미만 값으로 변환, 값의 범위를 제한하는 블로킹 효과
- 기울기가 양수, 음수 모두 나올 수 있기 때문에 시그모이드 함수보다 학습 효율성이 뛰어남
- 입력 절대값이 커지면 출력값이 1 또는 -1로 수렴
- 시그모이드 함수보다 출력값 범위가 넓기 때문에
- 출력값의 변화폭이 더 큼 > 기울기 소멸
    ➜ (Gradient Vanishing) 현상이 더 작음

 

 

- hidden state의 크기: Dh일 때, 각 벡터와 행렬의 계산

 

- RNN의 hidden layer 계산

- 자연어처리에서 RNN의 입력 Xt는 단어 벡터

- 단어 벡터의 차원 : d

 

 

RNN - 품사태깅 (POS Tagging)

- 같은 단어라도 문장 내 순서에 따라 품사가 달라질 수 있다

- 형태소분석의 기술적 이슈: 모호성

 

순서에 따라 달라지는 품사의 형태

 

히든 스테이트에 들어가는 순서에 따라 품사가 달라진다.

 

 

품사태깅은 분류문제

 

https://youtu.be/PahF2hZM6cs

 

 

RNN 동작 – 품사태깅 학습 과정

- 정답값(target)과 모델의 예측 값(prediction)을 비교하여 그 두 값의 차이를 줄여나가는 과정

- 학습 과정을 거치면서 Whh , Wxh , b의 값을 최적화

 

RNN 학습과정

 

 

RNN 동작 - 감성분석

시퀀스마다 히든 스테이드가 업데이트 되고 이를 기반으로 output을 출력

 

기본 RNN의 문제점 (바닐라 RNN)
- 긴 시퀀스를 가진 입력이 들어올 때 RNN의 성능이 저조
- 특정 시간대에 형성된 정보를 먼 시간대로 전달하기 어려움
- gradient vanishing, gradient exploding이 발생하여 모델이 최적화되지 않음
- 사람의 장기기억에 해당하는 요소가 RNN에서는 작동하기 어려움

 

 

= 두 단어 사의 거리가 먼 경우 gradient vanishing 문제 발생

https://colah.github.io/posts/2015-08-Understanding-LSTMs/

 

 

Long Short-Term Memory (LSTM)

- 기본 RNN에서 나타나는 gradient의 소멸 및 폭주 현상 해소
정보의 장거리 전달이 가능하여 기본 RNN에 비해 우수한 문제 처리 능력
- RNN을 구성하는 기본 단위를 기존의 퍼셉트론에서 좀 더 복잡한 구조로 바꾸는 방법
- Cell State, Forget Gate(망각 게이트), Input Gate를 이용

 

LSTM의 구조

= 잊을 건 잊고, 살릴 건 살리는 구조

- RNN은 관련 정보와 그 정보를 사용하는 지점 사이 거리가 멀 경우

     역전파 시 그래디언트가 점차 줄어 학습능력이 크게 저하 (Vanishing Gradient Problem)
- LSTM은 RNN의 hidden state에 cell state (일종의 컨베이어 벨트) 를 추가하여 이를 해결 (별도의 저장 공간)
- LSTM은 forget gate, input gate를 이용하여 이전 정보를 버리거나 유지

LSTM의 구조

 


 

Gates

sigmoid 연상을 적용하면

= 생성된 시그모이드 값이 0에 가까 울수록 입력값을 무시, 1에 가까울 수록 입력값을 활용하는 효과

     0 means “let nothing through”

     1 means “let everything through!”

 

 

LSTM 연산기호

 

덧셈과 곱셈 연산


 

LSTM 구조 – forget gate

- cell state는 일종의 컨베이어 벨트로 작동하여 이전 셀의 값이 변하지 않고 전달되기 쉬운 구조임
- forget gate : to decide what information we’re going to throw away from the cell state
- 생성된 시그모이드 값이 0에 가까울수록 입력값을 무시, 1에 가까울수록 입력값을 활용하는 효과
- 가령 forget gate에서, 시그모이드 값이 0.8일 경우

     80%의 과거 정보만을 기억하고 20%의 정보는 망각함

forget gate의 값은 sigmoid라서 0에 가까운 값이면 망각함

 

LSTM 구조 – input gate

= 일종의 수도꼭지같은 역할

input gate: to decide what new information we’regoing to store in the cell state
1) sigmoid layer (called the “input gate layer”) decides which values we’ll update.
2) tanh layer creates a vector of new candidate values that could be added to the state.
3) 1) and 2) are combined to create an update to the state

 

이전 시점의 hidden state, 현 시점의 입력값을 가지고 임의의 가중치값 계산

 

 

LSTM 구조 – cell state 업데이트

 

- The old cell state update: Ct-1  Ct
- Multiply the old state by ft, forgetting the things we decided to forget. then add it∗
- This is the new candidate values, scaled by how much we decided to update each state value.

 

 

 

LSTM 구조 – hidden state 업데이트

시그모이드와 합쳐져 가중치를 결합

1) Run a sigmoid layer which decides what parts of the cell state we’re going to output

2) Put the cell state through tanh (to push the values to be between −1 and 1) and multiply it by the output of 1), so that we only output the parts we decided to.

= 이런식으로 연산장치를 추가하여 기본 RNN 구조가 가진 단점을 해결할 수 있음

 

 

근데, 꼭 왼쪽에서 오른쪽으로 방향이 이동되어야할까?

 

 

Bi-directional LSTM

= 현재시점의 예측을 더 잘할 수 있도록 양방향 RNN 도입

- 과거 시점의 입력 뿐만 아니라 미래 시점의 입력으로부터 정보를 얻어야 할 경우

     이전과 이후의 시점 모두를 고려해서 현재 시점의 예측을 더욱 정확하게 할 수 있도록 고안된 것이 양방향 RNN


- 양방향 RNN은 하나의 출력값을 예측하기 위해 기본적으로 두 개의 메모리 셀을 사용

 

- 첫번째 메모리 셀은 앞 시점의 은닉 상태(ForwardStates) 를 전달받아 현재의 은닉 상태를 계산 (주황색 메모리 셀)


- 두번째 메모리 셀은 뒤 시점의 은닉 상태(Backward States) 를 전달 받아 현재의 은닉상태를 계산 (초록색 메모리 셀)


- 이 두 개의 값 모두가 현재 시점의 출력층에서 출력값을 예측하기 위해 사용됨

 

 

 

Bi-directional LSTM이 필요한 경우

= 앞에서 뿐만 아닌 뒤에서 오는 정보도 필요한 경우

He said, “Teddy bears are on sale!”

"I can't believe that Teddy Roosevelt was your great grandfather!"

 

두 문장의 'Teddy'는 서로 다른 분류 (명사, 대명사)

 

두번째 문장에서 'Teddy'는 뒤의 단어 '루즈벨트'에서 정보를 얻어와야 함

 

 

 

 

 

언어 모델 (Language Model)

Language Model

= 앞 단어(문장의 일부)를 보고 다음에 출현할 단어를 예측하는 모델

 

키워드 자동완성이 곧 언어모델

 

 

Language Model(언어 모델)은 학습데이터에 따라 달라진다

= 어떤 학습데이터로 학습시키는 것이 정말 중요하다.

자동완성 키워드는 데이터에 따라 달라진다

 

 

Statistical LM (N-gram Language Model) (통계 기반, 확률 기반 언어모델)
- These models use traditional statistical techniques like N-grams,
Hidden Markov Models (HMM) to learn the probability distribution of words.

(N개의 이전 시점 단어를 통해 단어 예측)

 

"오늘 서울 날씨가 OOO"

오늘 + 서울 + 날씨 라는 시퀀스들을 모두 합쳤을 때 가장 많이 나온 단어로 예측

 

= ex) 오늘 서울 날씨가 좋아요

 

(마르코브 가정을 사용)

 

 

N-gram Language Model의 문제점 - Data Sparsity

"감독관이 시간체크를 시작하자 학생들이 그들의 OO을 폈다(시작했다)"

 

4단어만 사용한 경우 가장 높은 확률값을 가지는 단어는 'BOOK'

그러나 '감독관(Procter)'이라는 단어까지 고려한 경우 가장 알맞은 단어는 'EXAM'

 

 

N을 크게 할수록 sparcity도 커진다!

      아무리 거대한 말뭉치가 존재한다고 해도 세상의 모든 단어 시퀀스를 담고 있을 수는 없다.

 

 

N-gram Language Model의 문제점 - Storage

N을 크게 할수록 저장공간도 커진다!

      세상의 모든 단어의 시퀀스 데이터를 저장할 수는 없다!

 

 

 


신경망 기반의 LM - RNN Language Model  (신경망 기반 언어모델)
- These are new players in the NLP town and have surpassed the statistical language models in their effectiveness.

They use neural networks to model languages.

(HMM보다 더 고성능)

 



* Ex) Obama style

오바마 연설문 데이터를 바탕으로 오바마 화법 스타일로 단어를 예측

오바마 화법 특유의 뉘앙스가 있지만 문법이나 단어 구성이 어색하기도 하다.

 

* Ex) Shakespeare style

인공지능 시인은 이미 존재한다.

 

 


 

 

Language modelling using an RNN

A. Prepare a training set
    - A LARGE corpus of text
    - Language : Korean, English, other languages
    - Domain : newspapers, emails, conversations/chats, novels/poems, …

 

B. Tokenize each sentence to build a vocabulary
    - (≅ 형태소분석하여 사전 구축)
    - Add additional tokens
    - <BOS>, <EOS>, <UNK>, punctuation (. , ?, !, , …)


C. Map each word in the sentence using any encoding mechanism


D. Build an RNN model where output is the softmax probability for each word in thedictionary

 

 

 

시각화 예시

예문: what will the fat cat sit on

 

이 문장과 같은 학습데이터가 있을 때, what, will, the, fat 시퀀스를 순서대 로 모델의 입력으로 넣으면

      will, the, fat, cat 을 순차적으로 예측 하도록 학습됨

 

 


언어모델의 데이터 편향성과 위험성

= 언어모델 기술은 실제 사실과 만들어 낸 것을 구별할 수 없는 기술

= 학습 데이터에 기반한 본질적인 편향성이 있을 수 밖에 없음

 

GPT-2 Model Card 내용

https://github.com/openai/gpt-2/blob/master/model_card.md#out-ofscope-use-cases

 

GitHub - openai/gpt-2: Code for the paper "Language Models are Unsupervised Multitask Learners"

Code for the paper "Language Models are Unsupervised Multitask Learners" - GitHub - openai/gpt-2: Code for the paper "Language Models are Unsupervised Multitask Learners"

github.com

 

 

 

 

 

 

 

 

Sequence-to-Sequence

sequence-to-sequence (seq2seq) 적용 분야

 

기계번역에 주로 활용되는 seq2seq

 

seq2seq 모델

Seq2seq 모델은 글자, 단어, 이미지의 feature 등의 아이템 시퀀 를 입력으로 받아 또 다른 아이템의 시퀀스를 출력

= 시퀀스 입력 데이터에 대해 적절한 시퀀스 출력을 학습하기 위한 모델

 

 


- 두개의 RNN을 이용해 모델링(Encoder-Decoder 모델)
- 입력 문장을 받는 RNN 셀이 인코더, 출력 문장을 출력하는 RNN 셀은 디코더
- 인코더는 입력 문장의 모든 단어들을 순차적으로 입력받은 뒤에 이 모든 단어 정보들을 압축해서 하나의 벡터로

      컨텍스트 벡터 (context vector)
- context vector는 인코더 RNN 셀의 마지막 시점의 hidden state
- 인코더가 컨텍스트 벡터를 디코더로 전송하면 디코더는 컨텍스트 벡터를 받아서 단어를 하나씩 순차적으로 출력

seq2seq 모델, 문장의 처음을 나타내는 'SOS' 스페셜 토큰 사용

- seq2seq에서 사용되는 모든 단어들은 임베딩 벡터로 변환 후 입력으로 사용

 

- 디코더에서 각 시점(time step)의 RNN 셀에서 출력 벡터가 나오면

 

- 해당 벡터는 소프트맥스 함수를 거쳐서 각 단어별 확률값으로 변환

 

- 그 때 가장 높은 확률 값을 가진 단어가 출력

 

 

 

seq2seq for machine translation

 

* 독 - 영 번역 구조

 

Encoder-Decoder (Sequence-to-Sequence)

seq2seq 모델의 단점

- 하나의 고정된 크기의 벡터 (context vector)에 모든 정보를 압축

      정보 손실

- RNN의 고질적 문제인 기울기 소실(vanishing gradient)이 발생

 

 

 

신경망 기계번역 (Neural Machine Translation, NMT)

= 대표적인 딥러닝 기반 기계번역

- The approach of modeling the entire MT process via one big artificial neural network (End-to-End fashion)

대량의 언어번역 데이터를 이용한 딥러닝

 

 

- 딥러닝을 이용한 번역 ➔ 인간수준으로 근접

 

인간 수준에 가까운 딥러닝 기반 번역

 

- seq2seq 모델의 단점은 context vector 가 일종의 bottleneck이 되어 긴 문장에서 long-term dependency 문제 발생
(은닉층의 과거 정보가 마지막까지 전달되지 못하는 현상)
      긴 문장을 번역할 경우 성능 하락


- 번역 시, 입력문장 내 특정 단어의 정보를 더 참조할 수 있도록 처리
     Attention mechanism으로 성능 개선


- Attention은 입력문장 내에 현재 출력될 단어와 관련된 부분에 가중치를 부여하는 기법

밝은 부분이 관련이 깊은 단어 (프-영)

 

 

 

Attention

?

 

 

Attention 기법

Attention: 시퀀스 데이터 모델에 서 단어 간 거리에 무관하게 입력, 출력 간의 의존성을 보존해주는 기법

 

Encoder-Decoder (Sequence-to-Sequence)

 

 

 

- 디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 한번 참고


- 전체 입력 문장을 동일한 비율로 참고하는 것이 아닌, 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분에 더 집중       디코더에서 t번째 단어를 예측하기 위한 어텐션 값(Attention Value)을 계산

 

Attention(Q, K, V) = Attention 값
Q = Query : t 시점의 디코더 셀에서의 은닉 상태 ( St )
K = Keys : 모든 시점의 인코더 셀의 은닉 상태들 ( hi )
V = Values : 모든 시점의 인코더 셀의 은닉 상태들

 


• 어텐션 함수는 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 계산 (가중치 매트릭스로 계산)
• 계산된 유사도를 가중치로 하여 키와 맵핑되어 있는 각각의 '값(Value)' 에 반영
• 유사도가 반영된 '값(Value)'을 모두 더해서 반환한다.

 

 

 

softmax 결과, 그 단어를 예측하는데 도움이 되는 정도를 어텐션 밸류라고 한다.

 

  인코더의 소프트맥스 함수를 통해 나 온 결과값 (그림의 타원 부분) 은

      I, am, a, student 단어 각각이 출력 단어 를 예측할 때 얼마나 도움이 되는지의 정도를 수치화한 값

소프트맥스 결과값이 클수록 디코더 에서 출력 단어를 예측하는 데에 도움됨

• 각 입력 단어가 디코더의 예측에 도움이 되는 정도를 하나의 정보 (Attention Value)로 담아서 디코더로 전송

(초록색 삼각형 부분)

 


1) Attention score 계산

 

 

- 인코더의 시점(time step)을 각각 1, 2, ... N이라고 하였을 때 인코더의 은닉 상태(hidden state)는 h1 , h2 , ... hN

- 디코더의 현재 시점(time step) t에서의 은닉 상태(hidden state)를 St

- 인코더의 은닉 상태와 디코더의 은닉 상태의 차원이 동일 (예시에서 각 은닉상태의 차원수는 4)

 

 

- 시점 t에서 출력 단어를 예측하기 위해서 디코더의 셀은 두 개의 입력값을 필요로 함

      이전 시점인 t-1의 은닉 상태 (hidden state)와 이전 시점 t-1에 나온 출력 단어


- Attention score : 현재 디코더의 시점 t에서 단어를 예측하기 위해

인코더의 모든 은닉 상태 (hi)가 디코더의 t-1 시점의 은닉 상태 St-1 와 얼마나 유사한지를 판단하는 스코어


- Dot product 연산으로 값을 계산 :디코더의 현 시점의 은닉 상태 St-1 를 전치(transpose)

인코더의 각 은닉 상태와 내적(dot product)을 수행

cosine similarity에서 문서 유사도와 비슷한 개념

 

2) Attention distribution 계산 (by Softmax)

 

Attention Score에 Softmax를 적용, 확률분포를 얻음   Attention weight

 

- Attention score의 모음값인 e^t 에 softmax 적용

       모든 값을 합하면 1이 되는 확률분포가 된다

- 이 값을 attention weight (어텐션 가중치) 𝜶^t 이라 고 한다.

 

 

3) Attention Value 계산

 

인코더의 각 은닉 상태와 attention weight를 가중합     Attention Value

 

- 어텐션의 최종 결과값을 얻기 위해서 각 인코더의 은닉 상태와 어텐션 가중치값 𝜶^t 을 곱한 후 모두 더한다

   가중합(Weighted Sum)


- Attention Value (=디코더 t 시점의 context vector) a^t 는 다음과 같이 정의된다.

Attention Value

 

 

4) Attention concatenate

현재 디코더에 있는 t시점의 은닉상태와 결합하여 벡터가 커짐

• Attention Value (어텐션 값) at 가 구해지면, at와 디코더의 현재 시점 t의 은닉상태 st 를 결합(concatenate)하여 하나의 벡터로 만든다
   Vt
• Vt 를 디코더의 출력 단어 예측 연산의 입력으로 사용하여 예측을 더 정확하게 할 수 있다.

 

 

5) 하이퍼볼릭 탄젠트 적용 (tanh)

Vt를 그냥 쓰진 않고 활성화 함수를 한 번 거쳐 사용한다.

- Vt 를 바로 출력층으로 보내기 전에 가중치 행렬 Wc 와 곱한 후에 tanh 함수를 적용

   이 값이 출력층의 입력값이 된다

- 비선형함수 tanh를 적용함으로써 학습을 더 깊게 할 수 있다

 

 


 

 

대표적인 Attention 기법

1. Bahnadau Attention (바나다우 어텐션)

decoder의 t 시점의 hidden state St 는

이전 시점의 hidden state St-1

• 이전 시점의 출력값 Yt-1

• 현재 시점의 컨텍스트 벡터 Ct 에 의해 계산된다

 

 

2. Luong Attention

 decoder의 t 시점의 hidden state St를 먼저 계산한 후에

(이전 시점의 hidden state St-1 과 이전 시점의 출력값 Yt-1로 계산)

• 계산된 St값을 이용하여 현재 시점 t의 컨텍스트 벡터 Ct 를 계산함

 

두 기법의 차이 =디코더에서 타임스텝으로  t시점을 사용하는 지 t-1 시점을 사용하는 지