[Python 텍스트 분석]
위의 책을 참고해서 공부한 내용입니다
<텍스트 분석의 영역>
- 텍스트 분류 (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