자연어의 경우, 단어가 나타나는 순서가 중요해서 시간개념이 중요하다.

[RNN LSTM] _ NLP

🧐  RNN (Recurrent Neural Network)
일반적으로 i의 단어는 그 이전에 발생한 i-1개 단어와 상호작용한다.
RNN



🧐  Long Term Dependency과  LSTM(Long Short-Term-Memory)

Long Range Dependency : RNN은 시간을 처리할 수 있는 능력을 갖추지만 길이가 긴 sample에는 한계가 있다.
hi는 1, 2, ..., i 순간에 발생하는 단어의 정보가 혼합되기에 오래된 단어의 정보는 희미해진다.
즉, 앞쪽단어와 멀리있는 단어가 밀접하게 상호작용하는 long-range dependency를 제대로 처리하지 못하는 문제가 발생한다.

LSTM : RNN을 개조해 long-term dependency를 처리하는 능력을 강화한다.
input과 output을 열거나 막는 gate를 두어 선별적으로 기억하는 기능으로 여닫는 정도를 조절한다.
이때, 여닫는 정도는 학습으로 알아낸 가중치로 결정된다.

 

 

[seq2seq ] _ NLP

🧐  seq2seq

seq2seq : Sequence to Sequence[Sutskever2014; https://arxiv.org/abs/1409.3215]의 혁신성은 "가변길이의 문장을 가변길이의 문장으로 변환"할 수 있다는 것이다.

ex) 한국어→영어로 번역 시, 둘의 문장길이가 달라 seq2seq model이 필요하다.
- 학습 시 Decoder의 input부분과 output부분이 모두 동작한다. 
즉, 정답에 해당하는 출력을 알려주는 교사강요(teacher forcing)방법을 사용한다.

- 예측 시 정답을 모르기 때문에  위의 회색표시한 input 부분을 제외하고 자기회귀(auto-regressive) 방식으로 동작한다.
자기회귀에서 <SOS>가 입력되면 첫 단어 'That'을 출력하고 'That'을 보고 그 다음 둘째 단어 'can't'를 출력한다.
즉, 이전에 출력된 단어를 보고 현재단어를 출력하는 일을 반복하며, 문장끝을 나타내는 <EOS>가 발생하면 멈춘다.


- 한계 : 가장 큰 문제는 encoder의 마지막 hidden state만 decoder에 전달한다는 점이다.
그림에서 보면 h5만 decoder로 전달된다.
따라서 encoder는 마지막 hidden state에 모든 정보를 압축해야하는 부담이 존재한다.

 

 

 

[query-key-value로 계산하는 attention] _ NLP

🧐  query-key-value

QKV : attention을 계산하는 방법을 여러가지인데, 최근에는 query가 key와 유사한 정도를 측정하고 유사성 정보를 가중치로 사용해 value를 가중합하는 방법을 주로 사용한다.

Non-local Neural Networkex) f(xi, xj)의 xi와 xj가 query와 key에 해당하고, g(xj)가 value에 해당한다.


query-key-value로 attention 계산하기
query와 key의 유사도 벡터 s는 벡터의 내적으로 계산한다 가정하며
attention 벡터 a는 유사도벡터 s에 softmax를 적용한 벡터이다.
이때, s = (s1, s2, s3, s4)이고 a = (0.1895, 0.1843, 0.4419, 0.1843)이 된다.

이제 a를 가중치로 사용해 value의 가중합을 구하면 context 벡터 c
c = 0.1895*(1 2 5) + 0.1843*(1 1 5) + 0.4419*(3 2 4) + 0.1843*(6 1 2)
   = (2.8053  1.6314  4.0052).

벡터의 차원을 d라 하면, q는 1xd행렬이고 K V nxd행렬이다.
이때, n은 key와 value가 갖는 벡터의 개수이다.

 

 

 

[seq2seq  with Attention] _ NLP

seq2seq는 입력문장의 모든 정보를 encoder의 마지막 hidden state h5에 압축해 넣어야하는 부담이 있다.
Bahdanau는 아래 식의 attention을 이용해 decoder가 encoder의 모든 state(
h1, h2, ... , h5)에 접근할 수 있게 허용하여 성능을 향상한다.[Bahdanau2014; https://arxiv.org/abs/1409.0473]


🧐 Bahdanau Attention
위의 seq2seq의 경우, decoder는 i=6일 때, encoder가 i=2일 때, 단어 '저절로'에 주목해야 'itself'라는 단어를 제대로 생성할 수 있다.
decoder가 i=6일 때, (.01  .9  .02  .03  .04)처럼 2번째 원소값이 큰 attention vector a를 생성하면 encoder의 두번째 단어 '저절로'에 더 주목할 수 있어 성능이 향상될 수 있다.

- 이에 대해 query, key, value가 무엇이 되어야 위와 같이 될 수 있는지 살펴보자.

<Attention Map>

 

 

'A.I > 자연어 처리' 카테고리의 다른 글

self.NLP(3-2). Transformer with pytorch  (0) 2023.06.30
self.NLP(3-1). Pytorch 기본설명.  (0) 2023.06.29
self.NLP(3). Transformer & etc.  (0) 2023.06.29
self.NLP(1). tokenization  (2) 2022.12.29
self.NLP(0). 자연어 처리란?  (0) 2022.12.28

+ Recent posts