딥러닝

[DL]1. 텍스트 마이닝

CodeJaram 2023. 9. 6. 11:01

딥러닝_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