딥러닝_01_텍스트 마이닝
[네이버 영화리뷰 감정분석]
1. 문제정의
- 영화리뷰데이터를 활용하여 긍정/부정 감성분석
- 감성분석: 특정 주제를 가지고 글에 대한 감성, 태도를 파악하는 것(긍정/부정)
- 텍스트 데이터를 다루는 과정 학습
2. 데이터 수집
#파일 불러오는 객체(load_files)
from sklearn.datasets import load_files
import numpy as np
import pandas as pd
1)train 데이터 불러오기
data_url='data/aclImdb/train/'
rv_train=load_files(data_url, shuffle=True)
#bunch 객체(머신러닝 자료구조 형태)
#딕셔너리와 비슷한 형태(key&value)→key로 데이터 추출
#train 데이터의 key값 확인
rv_train.keys()
#학습용 문제데이터→문자열 형태
txt_train=rv_train['data']
#학습용 정답데이터
y_train=rv_train['target']
2)test 데이터 불러오기
test_url='data/aclImdb/test/'
rv_test=load_files(test_url, shuffle=True)
#test 문제 데이터→문자열 형태
txt_test=rv_test['data']
#test 정답 데이터
y_test=rv_test['target']
3. 데이터 전처리
- 불용어 제거
- 오탈자, 띄어쓰기 교정
- 정제, 정규화, 어간추출, 표제어 추출
# 데이터 <br> 태그 제거
#리스트 내부에서 반복문을 작성하여 함수를 적용할 결과값을 리스트에 누적하기
#[누적하고 싶은 결과값 for i in 대상 범위]
txt_train=[i.replace(b'<br />', b'') for i in txt_train]
#test 문제 데이터 <br> 태그 제거
txt_test=[i.replace(b'<br />', b'') for i in txt_test]
4. 토큰화 및 BOW
#CountVectorizer: 빈도 수 기반 벡터화 도구
#오직 띄어쓰기 기준으로 단어를 자른 후 BOW를 만듦
from sklearn.feature_extraction.text import CountVectorizer
#CountVectorizer 객체 생성
vect_fin=CountVectorizer()
#1. 단어사전 구축
vect_fin.fit(txt_train)
#2. train, test 문제데이터 수치화하기
X_train=vect_fin.transform(txt_train)
X_test=vect_fin.transform(txt_test)
5. 모델 학습 및 평가
#로지스틱 회귀모델을 사용하여 긍정/부정 분류
from sklearn.linear_model import LogisticRegression
logi_model=LogisticRegression()
#모델 학습
logi_model.fit(X_train, y_train)
#모델 평가(score)
logi_model.score(X_test, y_test)
6. 모델 테스트
#임시 리뷰로 모델 예측 테스트
data = ["This was a horrible movie. It's a waste of time and money. It was like watching Desperately Seeking Susan meets Boo from Monsters Inc."]
#데이터 수치화
tf_data=vect_fin.transform(data)
#예측
logi_model.predict(tf_data)
→예측결과: 0(부정)
7. TF-IDF
- TF-IDF 벡터화
#1. TfidfVectorizer 객체 생성
from sklearn.feature_extraction.text import TfidfVectorizer
tf_vect=TfidfVectorizer()
#2. 단어사전 구축
tf_vect.fit(txt_train)
tf_vect.fit(txt_test)
#3. 데이터 수치화
X_train=tf_vect.transform(txt_train)
X_test=tf_vect.transform(txt_test)
- 모델링
#1. 로지스틱 회귀모델 생성
from sklearn.linear_model import LogisticRegression
logi_model2=LogisticRegression()
#2. 모델 학습
logi_model2.fit(X_train, y_train)
#3. 모델 평가(score)
logi_model2.score(X_test, y_test)
#CountVectorizer 평가점수: 0.86684
#CountVectorizer보다 정확도가 높아짐
#4. 교차검증
from sklearn.model_selection import cross_val_score
rs=cross_val_score(logi_model2, X_train, y_train, cv=5)
print('교차검증 점수', rs)
#5개의 점수가 큰 차이가 없으므로 일반화가 잘 된 모델임을 확인
'딥러닝' 카테고리의 다른 글
[DL]6. CNN (0) | 2023.09.20 |
---|---|
[DL]5. 오차 역전파 (0) | 2023.09.15 |
[DL]4. 다중분류 (0) | 2023.09.14 |
[DL]3. 퍼셉트론, 다층퍼셉트론 (0) | 2023.09.11 |
[DL]2. 딥러닝 개요 (0) | 2023.09.09 |