NLP 자연어처리

자연어 처리(NLP) 개념 정리 및 파인튜닝

수진97 2025. 10. 26. 22:18

안녕하세요~!

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

 

자연어 처리란 컴퓨터가 인간의 언어를 이해하고, 생성 및 조작할 수 있도록 하는 AI의 한 분야를 말합니다.

텍스트와 같은 비정형 데이터를 컴퓨터가 인식하는 정형화된 데이터인 숫자 형태로 바꾸는 과정NLP라고 합니다.

아래 자연어 처리 단위와 용어에 대해 살펴보겠습니다.

 

 

 

1. 단위 용어 정의

1) 토큰(Token)

- 자연어 처리하는 최소 단위

- 문장에서 분리된 단어, 조사, 형태소, 혹은 서브 워드 단위

- 토큰은 고정값이 아니라 모델에 맞게 최소 단위가 달라질 수 있음. 

 

 

2) 문장(Sentence)

- 여러 개의 토큰으로 구성된 문장 단위

 

3) 문서(Document)

- 여러 개의 문장으로 구성된 하나의 글

 

4) 말뭉치(Corpus)

- 여러 개의 문서가 모인 거대한 텍스트 데이터셋

 

 

5) 어휘집합(Vocab)

- 말뭉치에서 등장한 중복되지 않는 토큰들의 집합

- 각 토큰에 인덱스를 부여 : 구분자(식별자) 역할

 

 

 

 

2. 처리 용어 정의

1) 토크나이즈(Tokenize)

- 텍스트를 작은 단위 즉, 토큰으로 분리하는 과정

- 데이터 전처리 과정에서 텍스트를 정제하고, 형태소를 분석하며, 텍스트를 모델이 이해할 수 있는 단위로 분리(토큰화)

 

2) 임베딩(Embedding)

- 컴퓨터가 이해할 수 있도록 단어를 숫자로 변환하여 벡터 형태로 표현하는 과정(단어 간 의미적 유사성 반영)

- 특징 추출 단계에서 전처리 된 텍스트를 벡터 형태로 변환해 모델에 입력할 수 있도록 만드는 과정

- 각 토큰에 의미를 부여하여 텍스트 수치화 => 결과물은 수치로 구성된 임베딩 벡터

 

출처 : https://medium.com/@minji.sql/%EC%9E%84%EB%B2%A0%EB%94%A9-%EA%B9%8A%EC%9D%B4-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-rag%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B8%B0%EC%88%A0-6f077b8344e7

 

 

* 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

출처 : https://yozm.wishket.com/magazine/detail/2828/

 

 

 

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