티스토리 뷰
자연어 처리(NLP) 분야에서 텍스트 데이터를 분석하고 분류하는 데 자주 사용되는 두 가지 기법인 나이브 베이즈(Naive Bayes) 분류기와 Bag of Words (BoW) 모델에 대해 알아보겠습니다. 이 두 가지는 함께 사용되며, 텍스트 분류 문제를 해결하는 데 매우 효과적입니다.
1. Bag of Words (BoW) 모델
Bag of Words 모델은 텍스트 데이터를 수치적으로 표현하는 방법으로, 각 문서에서 단어의 출현 빈도를 기반으로 합니다. BoW는 다음과 같은 특징을 가집니다:
- 문서 표현: 각 문서는 단어의 빈도를 나타내는 벡터로 변환됩니다. 이때 단어의 순서는 고려되지 않습니다.
- 특징 벡터: 각 단어는 고유한 인덱스를 가지고, 문서에서 해당 단어가 얼마나 등장했는지를 세어 벡터로 표현합니다.
예시
예를 들어, 두 개의 문서가 있다면:
- 문서 1: "나는 사과를 좋아합니다"
- 문서 2: "나는 배를 좋아합니다"
BoW를 사용하여 두 문서를 다음과 같은 벡터로 변환할 수 있습니다:
- 단어 목록: ["나는", "사과를", "좋아합니다", "배를"]
- 문서 1: [1, 1, 1, 0]
- 문서 2: [1, 0, 1, 1]
2. 나이브 베이즈 분류기
나이브 베이즈는 확률 기반의 분류기입니다. 이 알고리즘은 주어진 데이터의 특성이 서로 독립적이라는 가정하에 작동합니다. 각 특성이 클래스에 미치는 영향을 계산하여, 주어진 문서가 특정 클래스에 속할 확률을 추정합니다.
나이브 베이즈의 특징
- 독립성 가정: 각 특성이 독립적이라고 가정하여 계산의 복잡성을 줄입니다.
- 빠른 학습 및 예측: 상대적으로 간단한 알고리즘으로, 학습과 예측 속도가 빠릅니다.
3. BoW와 나이브 베이즈의 연결
BoW 모델로 변환된 텍스트 데이터를 나이브 베이즈 분류기에 입력하면, 각 단어의 출현 빈도에 기반하여 문서의 클래스를 예측할 수 있습니다. 이 조합은 텍스트 분류 작업에서 매우 효과적입니다.
4. Python 코드 예제
아래는 Scikit-learn 라이브러리를 사용하여 BoW 모델과 나이브 베이즈 분류기를 구현하는 예제입니다.
코드 구현
python
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn import metrics
# 예제 데이터
documents = [
"나는 프로그래밍을 사랑합니다",
"Python은 데이터 과학에 좋습니다",
"나는 새로운 알고리즘을 배우는 것을 즐깁니다",
"데이터 과학은 매력적입니다",
"나는 코드의 버그를 싫어합니다",
"디버깅은 재미없습니다"
]
# 레이블 (긍정, 부정)
labels = ['positive', 'positive', 'positive', 'positive', 'negative', 'negative']
# 1. Bag of Words 모델 생성
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)
# 2. 데이터 분할 (훈련/테스트)
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.3, random_state=42)
# 3. 나이브 베이즈 분류기 학습
model = MultinomialNB()
model.fit(X_train, y_train)
# 4. 예측
y_pred = model.predict(X_test)
# 5. 성능 평가
accuracy = metrics.accuracy_score(y_test, y_pred)
print(f'정확도: {accuracy:.2f}')
# 6. 예측 결과 출력
for doc, pred in zip(X_test, y_pred):
print(f'문서: {vectorizer.inverse_transform(doc)}, 예측: {pred}')
코드 설명
- 데이터 준비: 간단한 문서와 그에 대한 레이블(긍정/부정)을 설정합니다.
- BoW 모델 생성: CountVectorizer를 사용하여 문서를 BoW 형태로 변환합니다.
- 데이터 분할: 데이터를 훈련 세트와 테스트 세트로 나눕니다.
- 모델 학습: MultinomialNB를 사용하여 나이브 베이즈 분류기를 학습시킵니다.
- 예측: 테스트 세트에 대해 예측을 수행합니다.
- 성능 평가: 정확도를 계산하고 예측 결과를 출력합니다.
5. 결론
이번 포스트에서는 Bag of Words 모델과 나이브 베이즈 분류기의 연결에 대해 알아보았습니다. BoW는 텍스트 데이터를 수치적으로 표현하는 데 유용하고, 나이브 베이즈는 이러한 수치 데이터를 기반으로 확률적 분류를 수행하는 강력한 도구입니다. 이 두 가지 기법을 결합하여 텍스트 분류 문제를 효과적으로 해결할 수 있습니다. Python을 사용한 간단한 예제를 통해 이 과정을 직접 실습해 보시기 바랍니다.
'자연어 처리' 카테고리의 다른 글
(코사인 유사도)코사인 유사도를 구하는데 왜 값이 -1 ~ 1 사이가 나오나요? (1) | 2024.12.01 |
---|---|
Stanford Unv. Naive Bayes 교육자료 (1) | 2024.10.20 |
나이브 베이즈(Naive Bayes) 알고리즘에 대한 이해 (3) | 2024.10.15 |
Bag of Words(BOW) 모델 이해하기 (2) | 2024.10.13 |
표제어 추출(Lemmatization)과 어간 추출(Stemming) 비교 (3) | 2024.10.02 |
- Total
- Today
- Yesterday
- github action
- chat gpt 4o 예산
- chat gpt 모델 api 가격 예측
- Python
- chat gpt 가격 예상
- f-string
- TorchVision
- 로또 1164회 당첨
- GitHub
- 토치비전
- Django
- Numpy
- 1165회 로또
- 텍스트 마이닝
- chat gpt 모델 별 가격
- 인공지능 로또 예측
- python 문자열 슬라이싱
- 텍스트 전처리
- 클래스형 뷰
- chat gpt api 비용 계산
- python import
- chat gpt 모델별 예산
- 티스토리챌린지
- chat gpt 한국어 가격
- 장고 orm sql문 비교
- postgre
- 케라스
- 로또 ai
- 오블완
- 1164회 로또
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |