Machine Learning/텍스트 마이닝

TfidfVectorizer와 knolpy를 이용한 감성분석 [ knolpy 환경설정 / dropna() 결측치 제거 / kkma.tagset, kkma.nouns( ), kkma.morphs( ), kkma.pos( ) ] [ 네이버 영화 리뷰 텍스트 ]

leehii 2022. 8. 17. 10:09

 

[ knolpy 사용을 위한 환경설정 ]

 

 

 

 

1. java 설치(1.7이상)  >>  cmd에서 java -version 확인

 

 

 

 

2. 시스템 환경변수 편집에 경로 설정 - Java Home

 

 

 

jvm.dll이 있는 폴더를 시스템 변수의 JAVA_HOME으로 추가하기

 

(ex) C:\Program Files\Java\jdk-16.0.1\bin\server

 

 

 

 

 3. JPype1(0.5.7 이상) 다운로드

 

https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype

 

Archived: Python Extension Packages for Windows - Christoph Gohlke

Archived: Python Extension Packages for Windows - Christoph Gohlke by Christoph Gohlke. Updated on 26 June 2022 at 07:27 UTC. This page provides 32 and 64-bit Windows binaries of many scientific open-source extension packages for the official CPython

www.lfd.uci.edu

 

파이썬 버젼 확인후 버전에 맞는 파일 다운

 

파이썬 버젼 확인 방법 >> 

 

 

import sys

print('파이선 버젼', sys.version)

 

 

 
 

4. pip install konlpy

 

JPype를 다운로드 받은 경로에서 아나콘다3 폴더로 옮겨서 해당 파일 설치후

아나콘다 명령프롬프트 실행>>

 

pip install konlpy

pip install JPype1-1.3.0-cp37-cp37-win_amd64.whl

 

 

 

--------------------------------------------------------------------------------

 

 

pd.read_csv로 파일 불러오기

 

 

 

 

 

data명.info( )로 내부데이터 및 결측치 확인

 

훈련셋과 테스트셋의 document에서 결측치가 확인됨

 

 

 

 

텍스트 형태의 데이터이므로 인코딩 X,

dropna( inplace = True )

함수를 이용해서 결측치가 있는 행을 삭제해줌

 

 

 

 

 

 

 

 

 

 

vect변수명 = CountVectorizer( )

vect변수명 = TfidfVectorizer( )

 

로 백터라이저 객체 생성

 

 

 

vect변수명.fit(data명) 

으로 단어사전 구축

 

vect변수명.vocabulary_

으로 구축된 단어사전 확인하기

 

 

vect변수명.transform(data명).toarray()

로 토큰화&수치화한후 빈도수 확인하기

 

 

형태소 / 명사 / 동사 등의 손쉬운 추출을 위해 konlpy 사용하기

 

from konlpy.tag import Kkma

도구 불러오기

 

kkma = Kkma()

객체생성

 

kkma.nouns( )

명사추출

 

kkma.morphs( )

형태소 추출

 

kkma.pos( )

품사를 부 착하여 형태소 추출하기

 

 

def 사용자 정의 함수로 konlpy를 이용해서 추출하는 함수를 만들어주고

 

vect변수명 = 사용할 백터라이저( tokenizer = ? )

 

으로 백터라이저와 konlpy를 연결해줌

 

 

vect변수명.fit(data명) 

으로 단어사전 구축

 

vect변수명.vocabulary_

으로 구축된 단어사전 확인하기

 

 

 

kkma.tagset

: 품사태그 종류를 확인하는 함수

 

vv 동사 / NNG 일반명사 / VA 형용사

 

 

kkma.pos(data명)

: 품사 태깅

 

 

df명.set_index('인덱스로 지정할 컬럼', inplace=True)

 

품사 태그를 인덱스로 지정해줌

 

 

 

df명.loc( df명.index.intersection( ['인덱싱할 값1','인덱싱할 값2', ...] ) )

 

 

kkma.pos( )로 품사 태깅을 한 값을 DataFrame화 한다

이때 컬렴명은 morphs와 tag이며

tag는 인덱스로 바꿔준다

 

또한  index, 즉 tag에 찾고자하는 값인 

vv 동사 / NNG 일반명사 / VA 형용사가 있을경우

해당하는 값이 있는 morphs 컬럼의 값만 인덱싱해서 values로 값만 불러온다

 

 

DataFrame명.values

: df의 값만 확인

 

 

 

 

vect변수명 = CountVectorizer()

vect변수명 = TfidfVectorizer()

 

로 백터라이저 객체 생성

 

 

 

 

vect변수명.fit(data명) 

으로 단어사전 구축

 

 

 

 

 

vect변수명.vocabulary_

으로 구축된 단어사전 확인하기

 

 

vect변수명 = 사용할 백터라이저()

객체생성

 

vect변수명.fit(data명)

단어사전 구축

 

vect변수명.transform(data명)

토큰화/ 수치화

 

 

10000개 데이터만 인덱싱/슬라이싱해서

Logistic_Regression모델로 학습시킴

이후 score로 모델의 일반화 성능 확인

 

선형분류모델의 규제(정규화)를 할때 사용하는 하이퍼 파라미터 C

 

C를 낮춰 규제를 높였으나 오히려 성능이 떨어짐 >> 과적합은 아니다

 

신뢰도를 높이기위해선 데이터의 양을 늘리거나 의미없는 단어를 삭제해아함!

 

 

 

 

 

 

 

model.predict_proba()

: 모델의 불확실성 확인

 

값이 클수록 불확실성이 낮고 작을수록 불확실성이 높음

 

y = ax + b

 

w 파라미터 (기울기 , 가중치 확인) : model.coef_

 

b 파라미터 : model.intercept_

 

 

 

가중치를 이용해서  Logistic Regression 모델에서 긍정.부정에서 각각 중요시한 단어를 확인함