📘 한글 텍스트 전처리 & 감성분류 전체 요약
아래는 너가 학습한 내용을 “개념 흐름 → 실습 흐름 → 모델링 흐름” 순서로 간단하고 빠르게 이해할 수 있게 정리한 요약본이야.
✅ 1. 텍스트 전처리 개념 요약
① 텍스트 전처리 전체 흐름
텍스트 수집
오류 수정 / 결측치 처리(dropna, strip 등)
정규표현식(Regex)으로 불필요한 문자 제거
토큰화(Tokenization)
- 형태소 분석(Okt, Mecab 등)
- 어간 추출 / 표제어 추출
- POS(품사 태깅)
불용어 제거(Stopwords)
인코딩(Encoding)
- 정수 인덱스 부여
- 단어 빈도 기반 정렬
패딩(Padding)
- 시퀀스 길이 통일
임베딩(Embedding)
- 단어 의미를 벡터로 학습
✅ 2. 주요 개념 요약
토큰화(Tokenization)
- 텍스트를 단어 / 형태소 / subword 단위로 자르는 과정
- 한국어는 띄어쓰기만으로 토큰화 불가 → 형태소 분석기 필요(Okt, Mecab 등)
인코딩(Encoding)
토큰화된 단어 → 숫자로 변환
Tokenizer().fit_on_texts(): 단어 빈도 분석 & 인덱스 부여texts_to_sequences(): 정수 시퀀스로 변환pad_sequences(): 패딩 수행
임베딩(Embedding)
단순 숫자 인덱스를 모델이 이해할 수 있는 의미 벡터로 변환
Embedding Layer 사용:
Embedding(input_dim=단어수, output_dim=차원수)
✅ 3. 데이터 전처리 실습 흐름 요약
1) 데이터 로드
- 네이버 영화리뷰(200k)
- train/test 분리
2) 결측치 처리
dropna(how='any')
→ 하나라도 NaN 있으면 해당 행 삭제
3) 정규표현식 기반 클리닝
str.replace("[^가-힣 ]","", regex=True)
→ 한글/공백만 남기기
4) 형태소 분석(Okt) + 불용어 처리
okt.morphs(text, stem=True)
[word for word in tokens if word not in stopwords]
5) pickle로 저장 / 불러오기
토큰화 결과, 라벨 저장:
pickle.dump()
pickle.load()
6) 인코딩
Tokenizer(num_words=35000)
fit_on_texts()
texts_to_sequences()
7) 패딩
pad_sequences(maxlen=30)
✅ 4. 모델 요약 (감성 분류)
① DNN 모델
- Embedding → Dense
- 텍스트의 순서를 완전히 반영하지 못하는 단점
② LSTM 모델
시퀀스 정보 보존
RNN의 장점 + gradient 문제 개선
구조:
Embedding → LSTM → Dense(1, sigmoid)
③ BiLSTM
- 정/역방향 문맥 모두 학습
- 분류 정확도 ↑
- return_sequences=False 설정
④ Attention 적용한 LSTM
시점별 정보가 동일 비중이 아닌 “중요도 기반으로” 적용
핵심:
LSTM(return_sequences=True) Attention([x, x]) Dense(sigmoid)
⑤ Transformer
- RNN 완전히 제거
- Multi-head Attention 기반
- 인코더–디코더 구조
- Self-Attention(Q, K, V) 계산
⑥ BERT
- 양방향 문맥 학습
- Masked LM + Next Sentence Prediction
- 사전학습 → 파인튜닝 구조
- KoBERT·KoELECTRA·KoBART 등 다양한 한국어 버전 존재
🎯 최종 요약 한 문장
텍스트 전처리는 토큰화 → 인코딩 → 패딩 → 임베딩의 과정으로 숫자 시퀀스를 만들고, 이를 기반으로 DNN·LSTM·BiLSTM·Attention·Transformer·BERT 모델을 사용해 감성 분류를 수행한다.
🎉 한국어 텍스트 감성분류
어느 날, 너는 “사람들이 영화 리뷰에서 어떤 감정을 말하고 있는지” 알아내는 감성 탐정 AI를 만들기로 마음먹었어.
하지만 한국어는… 그냥 단순한 언어가 아니야. 한글은 마치 “변신합체 로봇” 같은 언어야.
- “먹었다” → “먹 + 었 + 다”
- “맛있다” → “맛 + 있 + 다”
- 띄어쓰기 없어도 문장 됨
- 자음/모음 단위로 분해되기도 함
- 인터넷에서는 “ㅋㅋㅋㅋㅋ”, “^^”, “핡” 이런 이모티콘이 범람함
그래서 영어처럼 “띄어쓰기만 기준으로” 토큰화가 절대 안 돼.
🤖 AI: “한국어 어렵다… 도움 필요…”
그래서 우리는 한국어 텍스트 전처리 여행을 시작해.
🚀 1단계. 텍스트 청소하기 — “화장실 청소 안 하면 요리는 못 한다!”
네이버 영화 리뷰에는 정말 별별 것들이 다 들어있어.
- “와ㅋㅋㅋ 이영화 개쩜^^b”
- “ㅁㄴㅇㄹ”
- “nomal? wow!”
- “....”
이걸 그대로 모델에게 먹이면? 👶 → 🍬 아기한테 페트병을 먹이는 꼴이야.
그래서 먼저 청소를 한다.
🧹 정규표현식(Regex) 청소
[^가-힣 ] → 한글과 공백만 냅두기
이 한 줄로 “ㅋㅋㅋㅋ 🤣🤣 123 abc ABC” 이런 애들이 싹 사라져.
리뷰가 “올바른 한국어”만 남는 순간이지.
🚀 2단계. 빈 댓글 잡아내기 — “국밥에서 거품 제거하기”
한글만 남기다 보면… 아예 아무 글자도 안 남는 불쌍한 댓글들도 있어.
예) “ㅋㅋㅋㅋㅋㅋㅋ ㅠㅠㅠㅠ” → 한글 없으니 빈 문장!
빈 문장은 모델에게 아무 정보가 없는 돌멩이 같은 존재라서 과감히 버린다(drop, dropna).
🚀 3단계. 토큰화 — “한국어를 해부해라!”
영어는 단어가 명확하다. 근데 한국어는 붙었다 떨어졌다 변했다 난리라서 형태소 분석기를 써야 해.
🧙♂️ 형태소 분석기 3형제
- Okt : SNS에 강함, 신조어에 강함
- Kkma : 연구소 스타일, 매우 정교, 느림
- Mecab : 한국어 처리 최강 속도, 대용량 처리에 최고
우리는 감성 분류니까 Okt를 사용한다.
✂️ 형태소 분석 결과 예시
“영화가 너무 재미있었다” → “영화”, “너무”, “재미있다”
하지만 여기도 잡다한 단어들이 섞여 있어:
- “은”, “는”, “이”, “가” → 조사
- “에”, “와”, “도” → 감정에 영향 없음
그래서 불용어 (stopwords) 제거!
이 과정은 “필요한 재료만 남기고 버리는 요리사의 선택” 같은 것.
🚀 4단계. 인코딩 — “단어에 번호를 배정하라!”
토큰화된 단어들을 모두 숫자로 바꿔야 모델이 이해해.
왜?
🐶 강아지 모델에게 "사랑"이라는 단어를 주면 “개껌인가?” 모름.
그래서 단어마다 번호를 매김.
예)
- 영화 → 1
- 최고 → 2
- 재미있다 → 3
- 별로 → 4
이걸 하는 게 바로
Tokenizer().fit_on_texts()
그리고 문장을 번호 리스트로 변환 → texts_to_sequences()
🚀 5단계. 패딩 — “모든 리뷰를 같은 길이로 맞추기”
문장은 길이가 제각각이야.
- “최고다” (2단어)
- “이 영화는 정말 최고의 명작이다” (7단어)
- “노잼” (1단어)
신경망은 정확히 같은 길이의 입력을 원해.
그래서 짧은 문장은 0을 넣고,
긴 문장은 잘라서
전부 길이를 맞춘다 → pad_sequences()
이 과정은 “도시락 틀에 밥을 깔맞춤하는 작업” 같은 느낌.
🚀 6단계. 임베딩 — “단어에 감정을 심어라! (의미 벡터 생성)”
정수 인덱스만으로는 아무 의미 없어. “5라는 숫자”는 그저 숫자일 뿐이지.
그래서 Embedding Layer가 등장.
Embedding은 마치 단어 하나하나에 성격, 분위기, 감정, 의미를 학습시키는 과정이야.
예)
- “재미있다” → [0.9, -0.1, 0.8]
- “슬프다” → [-0.7, 0.5, -0.3]
- “화난다” → [-0.8, 0.6, -0.4]
비슷한 단어끼리는 비슷한 벡터가 된다.
“모든 단어를 숫자 감정 덩어리로 바꾸는 마법”이지.
🚀 7단계. 감성분류 모델 4총사
앞 단계까지는 요리 준비, 이제 본격적으로 요리를 만드는 단계야.
🍰 1) DNN (심층 신경망)
그냥 입력을 다 섞어서 Dense층 통과. 문맥? 순서? 못 봄 😅 그래서 성능이 낮다.
🍜 2) LSTM — “문장 속 시간 흐름을 기억하는 모델”
“영화는 재미있지만 엔딩은 별로다”
이 문장을 이해하려면 순서가 중요해.
LSTM은 마치 단기 + 장기 기억을 동시에 가진 똑똑한 독서가 같은 모델.
문장의 순서를 따라가며 어떤 단어가 중요한지 기억한다.
🍱 3) BiLSTM — “앞뒤로 두 번 읽는 모델”
사람이 책 읽을 때도 “한 번 정독하고 다시 앞으로 살짝 넘겨 확인” 이런 행동을 하지?
BiLSTM은 앞에서 읽고 + 뒤에서 읽고 둘 다 합친 정보로 판단한다.
감성분류 성능 UP!
🎯 4) Attention — “중요한 단어에만 집중해라!”
Attention은 문장을 읽을 때 모든 단어를 똑같은 비중으로 보지 않는다는 원리야.
영화 리뷰 예시: “노잼이긴 했지만 배우 연기는 좋았다”
여기서 감정 판단에 진짜 중요한 건?
→ “노잼” → “좋았다”
이 두 단어에 집중해야지.
Attenton은 “감정에 중요한 단어만 하이라이트해서 읽는 기술”
그래서 성능이 확 올라간다.
🧠 5) Transformer / BERT — “NLP의 왕좌에 앉은 모델”
Transformer는 RNN을 버리고 Attention만 사용 → 병렬 처리 가능 → 속도/성능 모두 뛰어남
BERT는 그 Transformer를 양방향으로 학습한 괴물 모델
- 문장 가리고 맞추기(Masked LM)
- 문장 순서 맞추기(NSP) 이 두 개를 거대한 말뭉치로 학습
그래서 문장 의미를 사람처럼 자연스럽게 이해해.
🎉 최종 요약 — “전체 흐름 10초 만에 이해하기”
Korean NLP = 텍스트 청소 → 형태소 분석 → 인코딩 → 패딩 → 임베딩 → LSTM/BiLSTM/Attention/Transformer로 감성 분류
'학습 > AI' 카테고리의 다른 글
| 허깅페이스 활용 파인튜닝 (0) | 2025.11.18 |
|---|---|
| 언어지능(PLM) — 세상에서 가장 똑똑한 언어 비서가 만들어지는 과정 (0) | 2025.11.18 |
| 데이터 전처리 핵심 (0) | 2025.11.16 |
| 텍스트마이닝 - 한글 텍스트 전처리 (0) | 2025.11.16 |
| 한글 텍스트 전처리와 감성분류 (0) | 2025.11.15 |