자연어 처리(NLP)의 핵심 단계와 실무 적용 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
데이터 분석
대상자
- 데이터 과학자, NLP 엔지니어, 머신러닝 개발자
- 초보자 및 중급자 대상 (문서 변환, 토큰화, 벡터화 등 기초부터 고급 기법까지 설명)
핵심 요약
- 문자열 분할:
tokenize()
함수를 통해"Natural Language Processing"
→["Natural", "Language", "Processing"]
- 형태소 분석:
lemmatization
은"running"
→"run"
(사전 기반 정확한 어근 추출) - 임베딩 기술:
Word2Vec
,GloVe
,FastText
로 단어 의미를 밀집 벡터로 변환 - 전형적인 파이프라인:
TF-IDF
→Transformers
모델 적용 (예:pipeline("sentiment-analysis")
)
섹션별 세부 요약
1. 🔤 토큰화(Tokenization)
- 텍스트를 단어, 구, 문장 단위로 분할
- 예시:
"AI is transforming the world."
→["AI", "is", "transforming", "the", "world"]
"NLP is fascinating. It has endless applications!"
→ 두 문장으로 분할
2. ✂️ 어간 추출(Stemming)
- 접두사/접미사 제거로 어간 도출 (예:
"running"
→"run"
) - 제한: 비정규어(예:
"runner"
→"runner"
) 발생 가능
3. 🧬 어근 추출(Lemmatization)
- 사전 기반 정확한 어근 분석:
"ran"
→"run"
,"running"
→"run"
- 적용 분야: 감정 분석, 텍스트 분류
4. 🛑 불용어 제거(Stop Word Removal)
"the"
,"is"
,"and"
등 일반적인 단어 제거- 예시:
"AI is transforming the world."
→"AI transforming world"
5. 📷 품사 태깅(Part-of-Speech Tagging)
- 각 단어의 문법적 역할 분류 (예:
"AI"
→'NNP'
,"transforms"
→'VBZ'
)
6. 🔢 텍스트 정규화
- 처리 단계:
- 소문자 변환
- 특수문자/숫자 제거 (
re.sub(r"[^a-zA-Z\s]", "", text.lower())
) - 공백 정리
7. 🔠 TF-IDF 벡터화
- 코드 예시:
```python
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
matrix = tfidf.fit_transform(["AI is the future", "AI transforms industries"])
```
- 문서 내 중요도 기반 단어 가중치 할당
8. 🌐 단어 임베딩(Word Embeddings)
- 모델 특징:
Word2Vec
: 맥락 기반 학습GloVe
: 로컬 + 글로벌 맥락 통합FastText
: 접두사/접미사 정보 활용
9. 🤖 Transformer 기반 모델
- 예시 코드:
```python
from transformers import pipeline
clf = pipeline("sentiment-analysis")
print(clf("I love NLP and transformers!")) # {"label": "POSITIVE", "score": 0.999}
```
- 적용 사례: 감정 분석, 요약, 번역
10. 🔧 실무 NLP 파이프라인 구축
- 순서: 토큰화 → 정규화 → 벡터화 → 모델 적용
- 도구:
scikit-learn
,Hugging Face Transformers
결론
- 핵심 팁:
lemmatization
보다stemming
은 정확도가 낮을 수 있음TF-IDF
는 텍스트 분류에 적합,Transformers
는 의미 분석에 강력re.sub()
과TfidfVectorizer()
를 활용한 전처리가 성능 향상에 기여pipeline("sentiment-analysis")
로 빠르게 모델 테스트 가능