안녕하세요~!
이번 포스팅은 자연어 처리(NLP)의 개념에 대해서 간략히 포스팅 해보겠습니다!

자연어 처리란 컴퓨터가 인간의 언어를 이해하고, 생성 및 조작할 수 있도록 하는 AI의 한 분야를 말합니다.
텍스트와 같은 비정형 데이터를 컴퓨터가 인식하는 정형화된 데이터인 숫자 형태로 바꾸는 과정을 NLP라고 합니다.
아래 자연어 처리 단위와 용어에 대해 살펴보겠습니다.
1. 단위 용어 정의
1) 토큰(Token)
- 자연어 처리하는 최소 단위
- 문장에서 분리된 단어, 조사, 형태소, 혹은 서브 워드 단위
- 토큰은 고정값이 아니라 모델에 맞게 최소 단위가 달라질 수 있음.
2) 문장(Sentence)
- 여러 개의 토큰으로 구성된 문장 단위
3) 문서(Document)
- 여러 개의 문장으로 구성된 하나의 글
4) 말뭉치(Corpus)
- 여러 개의 문서가 모인 거대한 텍스트 데이터셋
5) 어휘집합(Vocab)
- 말뭉치에서 등장한 중복되지 않는 토큰들의 집합
- 각 토큰에 인덱스를 부여 : 구분자(식별자) 역할
2. 처리 용어 정의
1) 토크나이즈(Tokenize)
- 텍스트를 작은 단위 즉, 토큰으로 분리하는 과정
- 데이터 전처리 과정에서 텍스트를 정제하고, 형태소를 분석하며, 텍스트를 모델이 이해할 수 있는 단위로 분리(토큰화)
2) 임베딩(Embedding)
- 컴퓨터가 이해할 수 있도록 단어를 숫자로 변환하여 벡터 형태로 표현하는 과정(단어 간 의미적 유사성 반영)
- 특징 추출 단계에서 전처리 된 텍스트를 벡터 형태로 변환해 모델에 입력할 수 있도록 만드는 과정
- 각 토큰에 의미를 부여하여 텍스트 수치화 => 결과물은 수치로 구성된 임베딩 벡터


* Transformer 기반 모델의 임베딩
- 오늘날은 문맥을 반영하는 임베딩으로, Transformer 기반 모델의 임베딩 방식을 사용.
- 모델 내부에 임베딩을 직접 생성
- 학습과정에 임베딩을 포함시킴으로써 모델에 맞는 임베딩 진행

3. LMM 활용 방법
1) 모델 그대로 사용 : API, huggingface
- 허깅페이스 : NLP 및 AI 분야에서 가장 인기 있는 오픈 소스 라이브러리와 모델을 제공하는 플랫폼
(transformers 라이브러리 제공)
- API를 이용해 LLM 모델을 파이썬으로 연결 후 사용 가능
* Request
- API 주소 + API KEY
- Request 형식에 맞춰 요청
* Response
- Response 형식에 맞춰 결과받아옴.


2) 나의 데이터로 추가 학습 시키기 : Fine-tuning
* 파인 튜닝이란?
- 사전 훈련된 모델을 특정 작업이나 데이터셋에 맞게 미세 조정하는 과정
- 기존 데이터에서 내 데이터(Small Data)를 가지고 조금 더 학습시킴.
* 파인튜닝 수행 절차
사전 훈련된 모델 선택 -> 데이터 준비 -> 모델 수정 -> 추가 학습
<데이터 준비>
- 이미 훈련된 모델(분류모델 BERT 등)을 선택하여 파인튜닝을 위해 데이터를 텐서 데이터셋으로 변환
- 일반 데이터프레임이나 넘파이의 array 형태로 파인튜닝이 불가
- 사전 훈련된 모델과 호환되는 형태로 전처리, NLP의 경우 텍스트 토큰화
> Test Dataset과 Train DataSet 분리

> 데이터프레임 -> 텐서 데이터셋으로 변환

> 토큰화 진행(배치단위) : 토큰==1(실제 유효값) / 토큰==0(패딩)
> 토크나이징 결과 : input_ids(토큰화 된 입력 시퀀스를 숫자 ID로 변환) / attention_mask(패딩된 부분 무시, 유용한 데이터에만 집중)

<모델 수정>
- 대부분의 경우, 사전 훈련된 모델의 출력 레이어를 특정 작업에 맞게 수정
- 텍스트 분류 작업 : 출력 레이어의 뉴런 수를 분류하려는 클래스의 수와 일치시킴
> AutoModel : 사전 훈련된 모델의 이름이나 경로 제공 => 적절한 모델의 아키텍처, 가중치 자동 로드
> SequenceClassification : 시퀀스 분류, 다중 분류와 유사(ex) 텍스트 분류, 감정 분석 등(생성형 AI는 대부분 다중분류모델)
> num_labels : (Output Layer의 노드수 == 다중분류 클래스 수) 이 부분만 조정해 주면 됨

>TrainingArgments : Trainer의 학습 세부 설정, 하이퍼 파라미터 셋 준비(학습률, 에폭, 배치 사이즈 등 조정)
weight decay : L2 규제 강도(0.01 ~ 0.1) : 가중치 규제 강도라고 보면 됨.
load_best_model_at_end = True : 가장 성능이 좋은 모델 저장

>Trainer : 모델 학습과 평가를 쉽게 할 수 있도록 도와주는 클래스(파이토치 방식)

<추가 학습>
- 준비된 데이터셋을 사용해 모델의 가중치 추가 학습
- 이미 학습된 모델에 추가 학습을 시키는 것이므로 보통 학습률과 에폭은 조금만 줌으로써 하이퍼 파라미터 셋팅
- 기존 모델이 습득한 지식을 유지 + 새로운 작업에 맞게 미세 조정
> trainer.train() , trainer.evaluate() 함수로 학습 및 평가 진행
> 학습 시 Best Model 저장, evaluate()을 통해 마지막 에포크 검증 평가 결과 확인 가능

3) 나의 데이터로 답변시키기 : RAG

RAG에 대해서는 다음 포스팅에 이어 설명하겠습니다!

'NLP 자연어처리' 카테고리의 다른 글
| Langchain Memory 종류 (0) | 2025.11.03 |
|---|---|
| Langchain 개념 및 활용(프롬프트 활용 LLM 응답 받아오기) (0) | 2025.10.30 |
| LoRA 기반 파인 튜닝 (0) | 2025.10.30 |