
자연어 처리(NLP) 분야에서 가장 기본적인 태스크 중 하나인 **문서 분류(Text Classification)**를 수행하는 표준적인 딥러닝 아키텍처입니다.
코드가 이러한 순서로 진행되는 근본적인 이유는 컴퓨터가 **텍스트(단어)**를 직접 이해할 수 없기 때문이며, 딥러닝 모델이 예측을 수행할 수 있도록 데이터를 준비하고 구조화해야 하기 때문입니다.
진행된 순서와 각 단계의 이유를 기초부터 천천히 설명해 드릴게요.
1. ⚙️ NLP 파이프라인의 3단계
문서 분류를 포함한 대부분의 딥러닝 기반 NLP 작업은 크게 세 가지 핵심 단계를 거칩니다.
- 전처리 (Pre-processing): 원본 텍스트를 모델이 처리할 수 있는 형태로 정제하고 분해합니다.
- 임베딩 (Embedding): 분해된 단어를 컴퓨터가 이해할 수 있는 숫자 벡터로 변환합니다. (가장 핵심적인 단계입니다.)
- 모델링 (Modeling): 숫자 벡터를 입력받아 문맥을 이해하고 최종 분류(예측)를 수행하는 신경망을 구성하고 학습시킵니다.
작성하신 코드는 이 세 단계를 명확하게 따르고 있습니다.
2. 📝 텍스트 전처리 (Preprocessing)의 이유
| 코드 단계 | 역할 | 진행 이유 |
| fetch_20newsgroups | 대규모 텍스트 데이터셋 로드 | 딥러닝 학습을 위한 대량의 예제 데이터가 필요합니다. |
| clean_text 함수 | 소문자 변환, 특수문자 제거, 불용어 제거 | 텍스트의 노이즈를 줄여 모델이 불필요한 정보(대소문자 차이, 구두점, 'a', 'the' 같은 무의미한 단어)에 현혹되지 않고 핵심 내용에 집중하도록 만듭니다. |
| word_tokenize | 문서를 단어 단위로 분리(토큰화) | 임베딩은 단어 단위로 이루어지므로, 텍스트를 Word2Vec 등이 처리할 수 있는 개별적인 단어 목록으로 만들어야 합니다. |
| 길이 분석 및 max_len=280 | 문서의 최대 길이를 통일 (패딩/절단) | 딥러닝 모델은 고정된 길이의 입력만 처리할 수 있습니다. 95분위수(280)를 기준으로 문서 길이를 맞추어 효율적인 배치 학습을 가능하게 합니다. |
3. 🔢 단어 임베딩 (Word Embedding)의 이유 및 비교
이 단계가 코드의 가장 중요한 부분입니다. 단어를 숫자 벡터로 바꾸는 방법에 따라 세 가지 모델(Word2Vec, FastText, GloVe)을 비교한 것입니다.
컴퓨터에게 '사과'는 그저 문자열(string)일 뿐이지만, 이 단어를 $N$차원의 숫자 벡터로 변환하면 의미적 관계를 표현할 수 있게 됩니다. (예: 벡터(킹) - 벡터(남자) + 벡터(여자) = 벡터(퀸))
| 임베딩 방식 | 근본 원리 | 코드에서 비교하는 이유 |
| Word2Vec (Skip-gram) | 주변 단어를 예측하도록 학습하여 단어의 로컬 문맥을 포착합니다. | 가장 기본적인 방법으로, 데이터셋 내에서 단어의 의미적 유사성을 파악하는 기준 모델(Baseline) 역할을 합니다. |
| FastText | 단어를 서브워드(Sub-word/N-gram) 단위로 분해하여 학습합니다. | Word2Vec의 단점인 OOV (Out-Of-Vocabulary) 문제를 해결하고, 형태소 정보를 반영하여 성능을 개선할 수 있는지 확인하기 위함입니다. |
| GloVe (사전 학습) | 전체 코퍼스의 단어 동시 출현 빈도 통계를 기반으로 학습합니다. | 대규모 외부 데이터에서 이미 학습된 풍부한 언어 지식(일반적인 상식)을 활용하여, Word2Vec/FastText(내 데이터로 학습)보다 더 좋은 성능을 낼 수 있는지 확인하기 위함입니다. |
4. 🧠 LSTM 모델링 (Modeling)의 이유
임베딩을 통해 텍스트가 숫자 시퀀스($[\text{벡터}_1, \text{벡터}_2, \dots, \text{벡터}_N]$)로 변환되면, 이제 이 시퀀스를 이해하고 최종 분류(20개 뉴스그룹 중 하나)를 수행할 딥러닝 모델이 필요합니다.
| 코드 단계 | 역할 | 진행 이유 |
| EmbeddingLSTM 클래스 | 딥러닝 신경망 구조 정의 | 임베딩된 시퀀스를 입력받아 문맥을 이해하고 분류합니다. |
| nn.Embedding | 임베딩 행렬 로드 | 사전에 준비한 Word2Vec, FastText, GloVe 벡터를 모델의 입력 계층으로 사용합니다. |
| nn.LSTM (양방향) | **순환 신경망(RNN)**의 한 종류 | 텍스트는 시간적 순서를 가진 시퀀스 데이터입니다. LSTM은 이 시퀀스를 순차적으로 처리하여 장기적인 의존성을 기억하고, **양방향(Bidirectional)**으로 설정하여 문장의 앞뒤 모든 문맥을 파악하도록 합니다. |
| nn.Linear (FC) | 최종 분류 계층 | LSTM이 파악한 문서의 최종 문맥 정보($h_N$)를 입력받아, 이를 20개의 클래스 중 하나로 예측하는 최종 결정(Decision)을 내립니다. |
| train / evaluate | 모델 학습 및 평가 | **최적화 도구(Adam)**와 **손실 함수(CrossEntropyLoss)**를 사용하여 모델의 예측이 정답 레이블에 가까워지도록 가중치(Weights)를 조정하는 핵심 학습 과정입니다. |
결론적으로, 작성하신 코드는 세 가지 주요 단어 임베딩 방법을 비교하면서, 현재 NLP에서 널리 사용되는 LSTM 신경망을 분류기로 사용하여 어떤 임베딩이 이 문서 분류 태스크에서 가장 효과적인지 실험하는 잘 구조화된 딥러닝 파이프라인입니다.
'AI 엔지니어준비' 카테고리의 다른 글
| 🚀 LangSmith 사용 여부의 차이점 (0) | 2025.12.04 |
|---|---|
| 💡 Word2Vec: GPT의 조상, 단어의 의미를 담는 벡터 (0) | 2025.11.14 |
| ❓ 전이 학습(Transfer Learning)이 무엇인지와 이미지 분류 모델에서의 활용 방법에 대해 (0) | 2025.09.29 |
| ❓ 데이터 증강(Data Augmentation)이 무엇인지 그리고 이미지 데이터에 주로 사용되는 증강 기법에 대해 (0) | 2025.09.29 |
| ❓ 모델에 이미지를 입력하기 전에 크기 조정(Resizing)과 정규화(Normalization)를 하는 이유 (0) | 2025.09.29 |