본문 바로가기

IT/AI

[NLP] 자연어 처리: 트랜스포머 [기초]

728x90

자연어 처리는 컴퓨터가 인간의 언어를 이해하고 생성하는 분야로, 다양한 기술과 모델이 사용됩니다. 이 글에서는 자연어 처리에서 주로 사용되는 접근법과 모델 중에서 Autoencoding, Autoregressive, 시퀀스 투 시퀀스 모델, 그리고 트랜스포머에 대해 다뤄보겠습니다. 

1. Autoencoding vs. Autoregressive 
   - Autoencoding: 입력 데이터를 압축하여 의미 있는 표현을 학습하는 방식입니다. 인코더와 디코더로 구성되며, 데이터의 특징을 추출하고 잡음 제거, 차원 축소 등에 활용됩니다.
   - Autoregressive: 시퀀스 데이터를 이전 타임스텝의 정보를 활용하여 다음 타임스텝을 예측하는 방법입니다. 주로 시퀀스 생성 작업에 활용되며, 번역이나 음성 합성에서 사용됩니다.

 

더보기

예시
Autoencoding
예를 들어, 영상 데이터의 압축과 복원을 고려해보겠습니다. 자동 인코더는 입력된 영상 데이터를 인코더를 통해 압축된 표현으로 변환합니다. 이렇게 압축된 표현은 원본 데이터의 핵심적인 정보를 포함하게 됩니다. 이후 디코더는 이 압축된 표현을 사용하여 원본 영상을 재구성합니다. 이 과정을 통해 모델은 입력된 영상 데이터의 특징을 추출하고, 잡음이 제거된 영상을 생성하는 방법을 학습하게 됩니다. 이러한 오토인코딩 방식은 이미지 복원, 노이즈 제거, 차원 축소 등에 사용됩니다.

Autoregressive
문장 생성을 예시로 들어보겠습니다. Autoregressive 모델은 이전 단어들을 기반으로 다음 단어를 예측하고 생성합니다. 예를 들어, "나는"이라는 단어로 시작하는 문장을 생성한다면, 모델은 이어지는 단어들을 이전 단어들과 문맥을 고려하여 순차적으로 선택합니다. 이러한 방식으로 모델은 문장을 생성하면서 문맥과 의미를 이해하고 표현합니다. 이는 기계 번역이나 자연어 생성 작업에 활용됩니다. Autoregressive 모델은 문장의 의미를 보존하면서 새로운 문장을 생성하는 데 사용됩니다.



2. 시퀀스 투 시퀀스 $($Seq2Seq$)$ 모델
   시퀀스 투 시퀀스 모델은 입력 시퀀스를 다른 시퀀스로 변환하는 데 사용됩니다. 기계 번역과 같은 작업에 적용되며, 인코더와 디코더로 구성됩니다.
   - 인코더: 입력 시퀀스의 정보를 압축하여 벡터로 변환합니다. 이 벡터는 디코더의 초기 상태로 사용됩니다.
   - 디코더: 인코더의 출력 벡터를 초기 상태로 설정하고, 출력 시퀀스를 생성합니다. 이전 타임스텝의 결과와 디코더의 상태를 활용합니다.

 


장점:
- 다양한 작업에 적용 가능: Seq2Seq 모델은 입력 시퀀스를 다른 길이의 출력 시퀀스로 변환하는 범용적인 구조를 가지므로, 기계 번역, 음성 인식, 챗봇 등 다양한 자연어 처리 작업에 적용 가능합니다.
- 문맥을 고려한 번역: Seq2Seq 모델은 인코더를 통해 입력 문장의 문맥을 벡터로 추출하고, 이를 활용하여 디코더가 출력 문장을 생성함으로써 문맥을 고려한 번역을 수행할 수 있습니다.


단점:
- 고정된 문장 길이: Seq2Seq 모델은 입력과 출력의 길이를 고정해야 하므로, 긴 문장을 처리하기 어려울 수 있습니다.
- 정보 손실: 인코더의 출력 벡터에는 입력 시퀀스의 모든 정보가 압축되어 저장되기 때문에, 장기 의존성이나 문장의 전체적인 의미를 포착하기 어려울 수 있습니다.


2-1. 트랜스포머와 어텐션의 발전
트랜스포머는 기존의 Seq2Seq 모델의 한계를 극복하고 성능을 크게 향상시킨 혁신적인 아키텍처입니다. 트랜스포머에서 가장 중요한 개념 중 하나는 어텐션$($Attention$)$입니다. 어텐션은 특정 위치에서의 출력에 입력 시퀀스의 다른 위치들을 조금씩 가중치를 부여하여 중요도를 결정하는 메커니즘입니다. 이 개념은 Seq2Seq 모델의 문제점 중 하나인 정보 손실 문제를 해결하고, 장기 의존성을 처리할 수 있도록 도와주었습니다.

$($장기 의존성 문제는 이전의 정보가 마지막까지 전달되지 못하는, 즉 입력과 출력 사이의 거리가 멀어질수록 연관 관계가 적어지는 문제입니다.$)$

Seq2Seq 모델에서는 인코더의 출력 벡터에 모든 정보가 압축되어 저장되었지만, 트랜스포머에서는 어텐션 메커니즘을 사용하여 입력 시퀀스의 모든 단어들을 고려하며, 각 단어의 중요도를 계산합니다. 이로써 트랜스포머는 문장 내의 단어 간의 관계를 더 잘 파악하고, 더욱 정확한 문장 생성이 가능해졌습니다.

트랜스포머는 또한 인코더와 디코더 블록을 사용하여 문장을 처리하며, 순차적인 처리 없이 전체 문장을 동시에 고려합니다. 이로써 훨씬 더 빠른 속도와 높은 성능을 달성할 수 있게 되었습니다. 트랜스포머의 발전은 자연어 처리 분야에 혁신을 가져왔으며, 다양한 작업에서 뛰어난 성능을 보이고 있습니다.


3. 트랜스포머

   트랜스포머는 자연어 처리 분야에서 혁신적인 모델로, 인코더와 디코더 블록으로 구성됩니다. 세부적인 순차 처리 없이 전체 문장을 동시에 처리하는 특징이 있습니다.

   - 인코더: 입력 문장의 각 단어를 벡터로 변환한 후, 인코더 층을 거쳐 문맥 정보를 학습합니다.
   - 디코더: 출력 문장을 생성하는 단계로, 인코더의 출력과 이전 타임스텝의 결과를 활용하여 문장을 생성합니다.

 

The  encoder-decoder structure of the Transformer architecture Taken from “ Attention Is All You Need “

더보기

3-1. 어텐션

 


어텐션의 관련도를 계산하는 공식은 어텐션의 종류에 따라 다르지만, 가장 기본적인 형태는 어텐션 스코어$($attention score$)$라고 불리는 값을 계산합니다. 어텐션 스코어는 쿼리와 키의 유사도를 나타내는 값이고, 보통 내적$($dot product$)$이나 코사인 유사도$($cosine similarity$)$ 등을 사용합니다.

예를 들어, 내적을 사용하는 경우에는 어텐션 스코어를 다음과 같이 계산할 수 있어요.

 

$$score$($s_t, h_i$)$ = s_t^T h_i$$
여기서 $s_t$는 디코더의 특정 시점의 은닉 상태$($hidden state$)$이고, $h_i$는 인코더의 i번째 시점의 은닉 상태에요. 이렇게 구한 어텐션 스코어를 소프트맥스$($softmax$)$ 함수에 넣어서 정규화$($normalization$)$하면 어텐션 가중치$($attention weight$)$라고 불리는 값을 얻을 수 있어요. 어텐션 가중치는 쿼리와 키의 관련도를 확률로 나타내는 값이에요.

$$\alpha_t = softmax$($e^t$)$$$
여기서 $e^t$는 디코더의 특정 시점의 은닉 상태와 인코더의 모든 시점의 은닉 상태의 어텐션 스코어를 모은 벡터에요.

$$e^t = [s_t^T h_1, ..., s_t^T h_N]$$
여기서 N은 입력 시퀀스의 길이입니다. 마지막으로 어텐션 가중치와 인코더의 은닉 상태들을 곱해서 합하면 어텐션 값$($attention value$)$라고 불리는 값을 얻을 수 있습니다. 어텐션 값은 쿼리와 가장 관련된 정보를 담고 있는 벡터입니다.

$$a_t = \sum_{i=1}^{N} \alpha_{t,i} h_i$$

 


Q, K, V는 각각 쿼리$($query$)$, 키$($key$)$, 값$($value$)$의 약자입니다. 어텐션을 수행하기 위해서는 Q, K, V 벡터가 필요하고, 이 벡터들은 각 단어 벡터들로부터의 연산으로 얻을 수 있습니다. Q, K, V 벡터의 차원은 보통 입력 벡터의 차원보다 작고, 이는 어텐션의 효율성과 다양성을 높이기 위해 사용됩니다.

Q와 K 벡터를 사용해서 어텐션 스코어를 계산하고, 이를 정규화해서 어텐션 가중치를 구해요. 그리고 어텐션 가중치와 V 벡터를 곱해서 합하면 어텐션 값이 나옵니다.

Q, K, V 벡터를 연산하는 공식
$$Attention$($Q,K,V$)$ = softmax$($\frac{QK^T}{\sqrt{d_k}}$)$V$$

여기서 $d_k$는 Q와 K 벡터의 차원입니다. 이 공식은 스케일드 닷 프로덕트 어텐션$($scaled dot-product attention$)$이라고 불리는 방식이고 다른 종류의 어텐션도 있습니다.

 

4. 사전 훈련과 미세 조정$($Fine-Tuning$)$
   트랜스포머와 같은 모델은 사전 훈련과 미세 조정 과정을 통해 최적화됩니다.

더보기

사전 훈련과 미세 조정은 트랜스포머와 같은 딥 러닝 모델의 학습 절차를 두 단계로 나누는 이유

사전 훈련 $($Pre-training$)$
   - 대량의 데이터 학습: 사전 훈련 단계에서 모델은 대량의 텍스트 데이터를 사용하여 언어의 구조, 문법, 의미, 패턴 등을 이해하고 학습합니다. 이때, 대규모 데이터로 모델을 사전 훈련하면 모델은 일반적인 언어 이해 능력을 갖추게 됩니다.
   - 일반적인 특징 학습: 이렇게 사전 훈련된 모델은 많은 데이터에서 효과적으로 일반적인 특징을 학습하므로, 다양한 자연어 처리 작업에 활용할 수 있는 범용성을 가집니다.
   - 자원과 시간 효율성: 사전 훈련은 대량의 데이터와 계산 리소스를 요구하며, 이를 통해 얻은 모델은 다양한 작업에 활용 가능한 초기 가중치를 갖게 됩니다.

2. 미세 조정 $($Fine-tuning$)$:
   - 태스크 특화: 사전 훈련된 모델은 일반적인 언어 이해 능력을 갖추고 있지만, 특정 작업에 최적화되지는 않았습니다. 미세 조정은 이러한 모델을 특정 작업에 맞게 조정하여 태스크에 더 잘 적응하도록 만듭니다.
   - 적은 데이터 사용: 미세 조정 단계에서는 작은 양의 태스크 특화 데이터만을 사용하여 모델을 업데이트합니다. 이는 대규모 데이터를 다시 사용하는 것보다 훨씬 적은 데이터로도 모델을 특정 작업에 맞게 조정할 수 있는 장점을 갖습니다.
   - 빠른 학습: 사전 훈련된 모델은 이미 언어 이해 능력을 가지고 있으므로 미세 조정은 상대적으로 빠르게 이루어질 수 있습니다.

이렇게 사전 훈련과 미세 조정을 나누는 이유는, 대량의 데이터와 계산 리소스를 활용하여 범용적인 언어 이해 능력을 사전에 학습하고, 그런 다음 작은 양의 특화 데이터로 모델을 튜닝하여 특정 작업에 더 잘 적응하도록 하는 것입니다. 이는 보다 효과적이고 효율적인 학습 방법을 제공하며, 다양한 자연어 처리 작업에 활용되는 능력을 갖춘 모델을 구축하는 핵심적인 전략입니다.


   - 사전 훈련 단계: 트랜스포머 초기 가중치를 학습하는 단계로, 대량의 텍스트 데이터를 활용하여 언어의 구조와 패턴을 학습합니다. 예를 들어, 대량의 웹 문서나 문학 작품을 사용하여 모델을 사전 훈련시킬 수 있습니다. 모델은 다양한 언어 구조와 문법, 의미 관계를 이해하게 되며, 언어에 내재된 패턴과 의미를 인지합니다. 이러한 사전 훈련 단계에서 생성된 모델은 일반적인 언어 이해 능력을 갖추게 됩니다.

   - 미세 조정 단계: 사전 훈련된 모델을 특정 태스크에 맞게 조정하는 단계입니다. 작은 양의 데이터로 모델을 튜닝하여 태스크에 높은 성능을 얻을 수 있습니다. 예를 들어, 특정 분야의 텍스트 분류 작업을 수행하기 위해, 해당 분야의 텍스트 데이터를 활용하여 모델을 미세 조정할 수 있습니다. 예를 들어, 의료 분야에서 의료 보고서를 자동으로 분류하는 모델을 개발하려고 할 때, 의료 관련 데이터를 사용하여 모델을 조정합니다. 이 단계에서는 사전 훈련 단계에서 학습한 언어 이해 능력을 기반으로 하면서도, 특정 분야에 더 적합하도록 모델을 조정하여 더 나은 성능을 달성할 수 있습니다.

예를 들어, BERT 모델을 사전 훈련한 후 의료 분야의 의료 보고서 분류 작업에 적용하려고 할 때, 의료 보고서 데이터를 활용하여 모델을 미세 조정합니다. 이때 모델은 의료 용어나 문맥을 더 잘 이해하도록 조정되며, 의료 분야의 특정 패턴을 학습하여 정확한 분류를 수행하게 됩니다. 이렇게 미세 조정은 작은 양의 태스크 특화 데이터로 모델을 조정하므로, 학습 시간과 리소스를 효율적으로 활용할 수 있습니다.