트랜스포머의 등장 : NLP의 새로운 시대?
1990 ~ 2000 -> 차원의 저주 -> 데이터의 차원이 증가할수록 알고리즘의 성능이 급격히 저하되는 현상을 말한다.
- 차원 축소 기법 : 주성분 분석 (PCA), (t-SNE)
2000 -> 자연어 처리에 통계적 방법론 적용
2013년 -> Word2Vec -> 단어 임베딩 기술 -> 단어의 의미를 저차원 벡터 공간에 매핑, 컴퓨터가 단어 간의 의미적 관계를 파악할 수 있게 됨.
2014년 -> GloVe (Global Vectors for Word Representation)가 소개. -> Word2Vec의 아이디어를 확장해 전체 말뭉치의 통계 정보를 활용해 더 풍부한 단어 표현을 만들어냄.
2014년 -> RNN (순환 신경망) -> 자연어 처리 분야에 적용됨 -> 시퀀스 데이터를 처리하는 데 특화된 신경망 구조 -> 문장이나 문단과 같은 연속적인 텍스트 데이터를 다루는 데 매우 효과적
2014년 이후 -> RNN 정보 기억 문제 발생 -> LSTM 사용
2015년 -> 어텐션 메커니즘 소개 -> 신경망이 입력 시퀀스의 특정 부분에 더 집중할 수 있게 해주는 기술
2017년 -> 트랜스포머의 메인 아이디어로 어텐션이 사용
2018년 -> BERT, GPT와 같은 사전 훈련된 언어 모델이 등장
GPT
- 언어모델의 작동원리는 어떻게 되는가?
- 언어 데이터에서 의미 있는 정보를 학습하고 생성하는 과정에 사용되는 핵심 기술들이 무엇이 이쓴ㄴ가?
- 마스크드 셀프 어텐션
- 멀티헤드 어텐션
- 레이어 정규화
- 잔차 연결
언어 모델-> GPT구조-> 모델 발전 ->어떤 구성요소가 모델의 성능에 영향을 미치나? -> 복잡한 언어 패턴을 어떻게 학습하나?
실습
데이터 준비와 모델 구성
1. 허깅페이스 제공 datasets 라이브러리 이용 - 데이터셋을 쉽게 불러오고 처리할 수 있게 해주는 도구
- 다양한 형식의 데이터를 지원
- 데이터셋의 로딩, 필터링, 변환 등 다양한 작업을 수행가능
- 데이터 셋 불러오기 (URL에 해당하는 데이터셋을 가져옴)
from datasets import load_dataset
dataset = load_dataset("URL")
- GPT 모델을 만들려면 텍스트 데이터들이 필요합니다.
학습을 위해 모든 텍스트 데이터들을 하나의 문자열로 합친다!
데이터 전처리
1. 데이터 중복을 제거하기
2. 데이터 정렬하기
3. 모든 텍스트 데이터 내의 고유한 한국어 문자 파악하기
4. 고유한 한국어 문자에 대한 id값 매핑하기
훈련 매개변수 설명
1. block_size
- 훈련 데이터는 block_size에 설정된 크기만큼의 청크 단위로 무작위 샘플링해 학습을 진행한다.
- block_size는 한 번에 모델이 처리할 수 있는 글자의 수를 정의합니다.
- ex) block_size가 8이면, 모델은 데이터의 연속된 8개 글자를 하나의 학습 단위로 사용합니다.
- 흔히 컨텍스트 길이라고 부릅니다.
- 모델이 한 번에 처리할 수 있는 토큰의 최대 길이를 의미합니다.
2. batch_size
- 한 번에 처리할 텐서의 개수를 설정합니다.
- 여러 개의 텐서가 함께 묶여 입력으로 제공됩니다. -> 이를 배치라고 합니다.
GPT 모델 만들기
semiGPT
- 이 클래스는 주로 두 가지 메서드로 구성됩니다.
1. __init__ -> 클래스의 초기화를 담당
2. forward -> 모델의 실제 연산을 수행
import torch
import torch.nn as nn
from torch.nn import functional as F
class semiGPT(nn.Module):
def __init__(self, vocab_length):
super().__init__()
self.embedding_token_table = nn.Embedding(vocab_length, vocab_length)
def forward(self, inputs, targets):
logits = self.embedding_token_table(inputs)
batch, seq_length, vocab_length = logits.shape
logits = logits.view(batch * seq_length, vocab_length)
targets = targets.view(batch*seq_length)
loss = F.cross_entropy(logits, targets)
print("logits의 shape는 : ", logits.shape, "입니다.")
print("targets의 shape는 : ", targets.shape, "입니다.")
return logits, loss
model = semiGPT(ko_vocab_size)
logits, loss = model(example_x, example_y)
print(loss)
nn.Embedding : 단어를 벡터로 변환하는 테이블을 만듭니다.
- vocab_length : 총 단어의 수를 의미
- vocab_length: 각 단어를 표현할 벡터의 크기
'인공지능 > LLM 거대모델' 카테고리의 다른 글
딥시크(DeepSeek)로 로컬 LLM 구축하기: 쉽고 빠른 AI 모델 활용법 (0) | 2025.03.02 |
---|---|
오퍼레이터 설계모델 (0) | 2025.02.24 |
LLM을 파인튜닝하다 (0) | 2025.02.17 |
LLM을 이용한 의미 기반 검색을 해보자! (0) | 2024.03.01 |
LLM ? (1) | 2024.02.27 |