What I study/Python

[Python 텍스트 분석]

데송 2022. 12. 11. 21:18

파이썬 머신러닝 완벽 가이드 개정2판

위의 책을 참고해서 공부한 내용입니다

 

 

<텍스트 분석의 영역>
- 텍스트 분류 (Text Classification / Text Catergorization) : 지도학습
- 감성 분석 (Sentiment Analysis) : 지도학습 / 비지도학습
- 텍스트 요약 (Summarization)
- 텍스트 군집화 (Clustering)와 유사도 측정

 


텍스트 분석 수행 프로세스

1. 텍스트 전처리 - 클렌징, 토큰화, 스톱워드 제거, 어근 추출(Stemming / Lennmatization)

2. 피처 벡터화

1) BOW(Bags of Words) - Count 기반, TF-IDF(Term Frequency - Inverse Document Frequency) 기반 벡터화

2) Word2Vec

3. ML 모델 수립 및 학습/예측/평가


       : 사용 라이브러리

1. 텍스트 전처리

클렌징 : HTML, XML 태그나 특정 기호 등 제거

문장 토큰화 (sent_tokenize) / 단어 토큰화 (word_tokenize)

스톱워드 제거

어근 추출 - Stemming / Lennmatization (정확도 높음, 시간 더 걸림,품사 입력해야함)

 

2. 피처 벡터화

1) BOW(Bags of Words)

Count 기반 (CountVectorizer)

TF-IDF 기반 (TtidfVectorizer)

 

2) Word2Vec

 

3. ML 모델 수립 및 학습/예측/평가

1) 로지스틱 회귀

2) 선형 서포트 벡터 머신

3) 나이브 베이즈

 


 

실습

텍스트 분류 (Text Classification)

라이브러리 임포트 및 실습 자료 다운로드

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import GridSearchCV


train_news = fetch_20newsgroups(subset = 'train', remove = ('header', 'footer', 'quotes'), random_state = 123)
test_news = fetch_20newsgroups(subset = 'test', remove = ('header', 'footer', 'quotes'), random_state = 123)

X_train = train_news.data
y_train = train_news.target

X_test = test_news.data
y_test = test_news.target

 

TF-IDF 기반 피처 벡터화

*fit_transform()으로 실행하면 안됨

반드시 X_train에 fit한 객체로 X_train과 X_test에 각각 transform해야함

tfidf_vect = TfidfVectorizer(stop_words = 'english', max_df = 300)
tfidf_vect.fit(X_train)
X_train_tfidf_vect = tfidf_vect.transform(X_train)
X_test_tfidf_vect = tfidf_vect.transform(X_test)

 

로지스틱 모델 수립 및 학습/예측/평가

lr_clf = LogisticRegression(solver = 'liblinear')
lr_clf.fit(X_train_tfidf_vect, y_train)
pred = lr_clf.predict(X_test_tfidf_vect)
print('accuracy_score :',accuracy_score(y_test, pred))

accuracy_score : 0.7762878385554965

 

GridSearchCV 이용해 로지스틱 회귀의 하이퍼 파라미터 최적화 수행

params = {'C' : [0.01, 0.1, 1, 5, 10]}
grid_cv_lr = GridSearchCV(lr_clf, param_grid = params, cv = 3, scoring = 'accuracy', verbose = 1)
grid_cv_lr.fit(X_train_tfidf_vect, y_train)
print('best params :',grid_cv_lr.best_params_)

Fitting 3 folds for each of 5 candidates, totalling 15 fits
best params : {'C': 10}

 

최적의 하이퍼 파라미터의 로지스틱 회귀 모델로 예측/평가

pred = grid_cv_lr.predict(X_test_tfidf_vect)
print('accuracy score :',accuracy_score(y_test, pred))

accuracy score : 0.791157727031333