자연어 처리(Natural Language Processing, NLP)는 컴퓨터가 인간의 언어를 이해하고 처리하는 능력을 갖추게 하는 분야로, 최근 딥러닝 기술의 발전과 함께 크게 주목받고 있다. 이번 포스트에서는 딥러닝과 그 핵심 개념인 전이 학습(Transfer Learning)에 대해 알아보자.
딥러닝은 기계 학습의 한 분야로서, 인공 신경망을 통해 복잡한 패턴을 모델링하고 예측할 수 있다. 이는 데이터에서 직접 학습하여 결과를 도출하기 때문에 'end-to-end' 학습 방식이라고도 정의할 수 있다. 딥러닝 모델은 대량의 데이터와 계산능력을 필요로 하는데, 이런 점에서 전이학습은 매우 중요한 역할을 담당한다. 아래의 예시를 보면서 하나씩 살펴보자.
기계의 자연어 처리

- 자연어(Natural Language) : 사람들이 일상적으로 쓰는 언어를 인공적으로 만들어진 언어인 인공어와 구분하여 부르는 개념
- 인공지능 이해의 본질은 계산(Computation)과 처리(Processing)으로, 인간의 이해(Understanding)와는 차이가 있음
자연어 처리 모델은 사람의 말, 즉 자연어를 입력으로 받아 모델을 거쳐 해당 입력이 특정 범주일 확률을 출력하는 확률 함수이다. 예를 들어서, 영화 리뷰의 감성(sentiment)를 추정하는 모델의 결과는 다음과 같다.

입력과 출력을 살펴봤으니, 이제 모델에 대해 알아보자. 모델의 종류는 정말 다양한데, 입/출력의 특성에 따라 최적의 모델을 선택해서 사용하면 된다. 그렇지만, 요즘은 기존의 구조보다 월등히 성능이 좋은 딥러닝 모델이 가장 인기가 많다. 딥러닝 가운데서도 BERT와 GPT 등이 대표적으로 주목받고 있는데, 이들도 사진속의 모델 구조와 동일하게 작동한다. 다양한 분야에서 모델을 활용할 수 있으며, 대표적으로는 문서 분류, 개체명 인식, 질의응답, 문장 생성 등의 과제를 수행할 수 있다.
딥러닝 모델의 학습

딥러닝 자연어 처리 모델을 만들기 위해서는 원하는 Task에 맞는 학습 데이터가 필요하다. 예를 들어, 감성 분석을 할려면 각 문장에 감성이라는 label이 달린 자료가 필요하다. 이러한 데이터가 바로 학습 데이터(Train data)이다. 모델은 데이터의 패턴을 익히며 학습을 진행한다. 위의 사진을 보면 처음에는 모든 감성의 확률이 1/n 이지만 긍정에 가까운 문구를 입력할 경우 정답에 해당하는 감성의 확률은 높이고, 그렇지 않은 감성의 확률은 낮춰가며 모델을 업데이트한다. 즉, 학습이란 출력이 정답에 가까워지도록 모델을 업데이트하는 과정이라고 정의할 수 있다.
Transfer Learning

전이 학습은 특정 Task를 학습한 모델을 다른 Task 수행에 재사용하는 기법으로, 기존의 사전 지식없던 학습보다 모델의 학습 속도가 빨라지고 새로운 Task를 더 잘 수행하는 경향이 있다. 그림을 보면 더 쉽게 이해할 수 있는데, 모델이 Task 2를 배운다고 가정하면 Train 과정에서 Task 1을 수행했던 경험을 재활용하면서 더 좋은 결과를 도출할 수 있다고 해석하면 된다. Task 1을 Upstream Task라고 하고, Task 2를 Downstream Task라고 하는데, 아래에 각각의 특징을 정리해보았다.
Upstream Task
- 대규모 말뭉치의 문맥을 이해하는 과제로, 다음 단어 맞히기, 빈칸 채우기 등을 수행할 수 있다.
- upstream task를 학습하는 과정을 사전학습(pre-train)이라고 하는데, 2가지 요소는 자연어의 풍부한 문맥을 모델에 내재화시키고, downstream task에 적용해 성능을 끌어올리는 역할을 수행한다.
1. 다음 단어 맞히기
- GPT 계열 모델이 Task로 사전 학습(Pre-train)을 수행
- 티끌 모아 ( ) 이라는 문장이 주어졌다고 가정해보자. '티끌 모아' 라는 문맥이 주어졌고 학습 데이터에 티끌 모아 태산이라는 구가 많을 때, 모델은 데이터를 바탕으로 다음에 올 단어를 태산으로 분류하도록 학습한다.
- 즉, 빈 칸에 '태산'이라는 단어가 들어갈 확률을 높이고 나머지 단어들의 확률은 낮추는 것
- 다음 단어 맞하기로 upstream task를 수행한 모델을 언어 모델(language model)이라고 한다.
2. 빈칸 채우기
- BERT 계열 모델이 Task로 사전 학습(Pre-train)을 수행
- 티끌 ( ) 태산의 빈칸에 맞는 단어를 많은 양의 데이터 반복 학습 후 문맥에 맞도록 삽입한다.
- 빈칸 채우기로 upstream task를 수행한 모델을 마스크 언어 모델(Masked language model)이라고 한다.
Downstream Task
- Downstream Task는 사전학습을 마친 모델을 그대로 사용하거나, Task module을 덧붙인 형태로 수행
- 교재에서는 Downstream Task의 본질을 분류(Classification)으로 소개
- 문장 생성을 제외한 대부분의 과제에서는 사전학습을 마친 BERT 계열의 모델을 주로 사용
- 아래의 Downstream Task 학습 방식은 모두 Fine-tuning을 사용
1. 문서 분류(Text Classification)

- 자연어를 입력받아 해당 입력이 어떤 범주에 속하는지 확률값을 반환
- 사전학습을 마친 BERT 계열 모델 위에 작은 모듈을 하나 더 쌓아 문서 전체의 범주를 분류
2. 자연어 추론(Natural Language Inference)

- 문장 2개를 입력받아 두 문장 사이의 관계가 참, 거짓, 중립 중 어떤 범주인지 확률값 반환
3. 개체명 인식(Named Entity Recognition)

- 자연어를 입력받아 단어별로 기관명, 인명, 지명 등 어떤 개체명 범주에 속하는지 확률값 반환
- 대표적으로 BIO Tag를 사용
4. 질의 응답
- 자연어(질문+지문)을 입력받아 각 단어가 정답의 시작일 확률값과 끝일 확률값을 반환
5. 문장 생성
- GPT 계열 모델을 주로 사용하며, 자연어를 입력받아 어휘 전체에 대한 확률값을 반환
- 여기서 확률값은 입력된 문장 다음에 올 단어로 얼마나 적절할지를 나타내는 점수
여기서 전이 학습과 파인 튜닝의 개념이 다소 혼동스러울 수 있다. 둘 다 사전학습을 활용하는 방법론이지만, 약간의 차이가 존재한다.
전이 학습(Transfer Learning)은 특정 문제를 해결하기 위해 이미 학습된 모델의 지식을 새로운 문제에 적용하는 방법이다. 예를 들어, 이미지 분류 문제에서 잘 훈련된 모델의 일부 계층(특히 초기 계층)은 다른 이미지 분류 문제에 대한 특징 추출기로 사용될 수 있다. 이런 경우, 기존 모델의 가중치를 고정하고 새로운 작업에 맞게 최상위 계층만 추가하거나 변경하여 새로운 작업을 위해 모델을 재학습시킨다.
파인 튜닝(Fine-tuning)은 전이 학습의 한 형태로서, 기본적으로 전이 학습과 동일한 접근 방식을 따르지만 일반적으로 전체 네트워크에서 몇몇 계층(때때로 전체 네트워크)의 가중치를 조정한다. 이렇게 하면 원래 문제와 관련된 정보와 새로운 문제와 관련된 정보를 동시에 포착할 수 있다.
따라서 차이점은 다음과 같다.
- 전이 학습 : 미리 학습된 모델에서 일부분만 가져와서 사용하며, 그 부분의 가중치는 고정된다.
- 파인 튜닝 : 미리 학습된 모델 전체 혹은 일부분을 가져와서 사용하지만, 그 부분의 가중치도 역시 업데이트되며 조정된다.
Downstream 학습 방식
앞서 언급한 문서 분류, 자연어 추론, 질의응답, 문장 생성 모델은 모두 파인튜닝 방식으로 학습한다. 하지만, Downstream Task를 학습하는 방식은 파인튜닝 말고도 다양한데, 크게 다음 3가지가 존재한다.
| 종류 | 특징 |
| 파인튜닝(Fine-Tuning) | Downstream Task 데이터 전체를 사용하고, 데이터에 맞게 모델 전체를 업데이트한다. |
| 프롬포트 튜닝(Prompt-Tuning) | Downstream Task 데이터 전체를 사용하고, 데이터에 맞게 모델 일부를 업데이트한다. |
인컨텍스트 러닝(In-context Learning) |
Downstream Task 데이터 일부를 사용하고, 모델을 업데이트 하지 않는다. |
파인튜닝 이외의 방식이 주목받는 이유는 비용과 성능 때문이다. 최근 초거대 언어 모델의 등장과 더불어 모델의 크기가 기하급수적으로 커지고 있고, 파인튜닝 방식으로 모델 전체를 업데이트 하려면 많은 비용과 시간이 필요하다. 그 뿐만 아니라, 프롬포트 튜닝이나 인컨텍스트 러닝으로 학습한 모델이 더 경쟁력 있는 Task 수행 성능을 보이는 경우가 많다. 인컨텍스트 러닝에는 3가지가 있는데, 데이터를 몇 건 참고하느냐의 차이가 있을 뿐 모두 모델을 업데이트 하지 않는다는 공통점이 있다. 아래의 표에 정리해보았다.
| 이름 | 특징 |
| 제로샷 러닝(zero-shot learning) | Downstream Task 데이터를 전혀 사용하지 않고, 모델이 바로 Downstream Task를 수행한다. |
| 원샷 러닝(one-shot learning) | Downstream Task 데이터를 한 건만 사용한다. 모델은 1건의 데이터가 어떻게 수행되는지 참고한 뒤에 Downstream Task를 수행한다. |
| 퓨샷 러닝(few-shot learning) | Downstream Task 데이터를 몇 건만 사용한다. 모델은 몇 건의 데이터가 어떻게 수행되는지 참고한 뒤에 Downstream Task를 수행한다. |
'Data Science' 카테고리의 다른 글
| [NLP] Tokenizer (0) | 2023.09.20 |
|---|---|
| [KNIME] python 설정 (0) | 2023.09.18 |
| [KNIME] 설치방법 (0) | 2023.09.16 |
| [시계열 분석] 시계열의 의미와 요인 (2) | 2023.08.23 |
| [시계열 분석] 가설과 검증방법 (0) | 2023.08.11 |