머신 러닝을 Sentiment 분석에 응용해 보자. 지금이야 말로 인터넷 소셜 미디어 시대이기 때문에 사람들의 견해, 검토, 추천사항들이 비즈니스나 정치에 있어서 가치가 넘치는 소스가 되었기에 대단히 효율적으로 그러한 데이터들을 수집하여 분석해 보도록 하자. 이러한 분야는 Natural Language Propcessing 즉 약어로 NLP 분야의 한 분과인 샌티멘트 분석(Sentiment analysis)이라고 칭한다. Sentiment 란 심리, 감정, 정서 내지는 여론이라고 보면 될 것이다. 특히 콘텐츠를 생산한 작가의 자세 내지는 의중 즉 그것들의 양극방향으로의 쏠림에 근거한 문서들을 머신 러닝 알고리듬을 사용하여 분류해보기로 한다.
여타의 머신러닝 처럼 다음과 같이 단계별로 Sentiment 분석을 진행하자.
텍스트형 데이터 준비하고 텍스트 문서로부터 특징 벡터 추출 수립
긍정 또는 부정적인 영화 리뷰 의견 분류가 가능한 머신 러닝 모델ㅇ의 학습
Out of core 학습법 즉 컴퓨터의 메인 메모리 용량을 초과하는 대규모 텍스트 데이터세트에 대한 외부 메모리 알고리듬을 사용한 작업
카테고리 분류작업을 위해 수집된 문서들의 추론에 따른 토픽화
그러한 목적 달성을 위해서 긍정적이거나 혹은 부정적인 50,000개의 영화 리뷰로 이루어진 IMDB 즉 Internet Movie Database를 사용하여 긍적적인 면에서 부정적인 영역에 걸쳐 식별이 가능한 예측 용 코드 즉 predictor를 작성해 보기로 한다. 여기서는 필요한 IMDB는 스태포드대학 서버 주소에서 다운 받을 수 있다.
http://ai.stanford.edu/~amaas/data/sentiment/
윈도우즈 10에서 Sentiment 분석을 위한 폴더를 준비하여 Imdb 파일인 Large Movie Review Dataset v1.0 을 다운로드 받아 압축 해제를 위한 파이선 파일 extract.py를 아나콘다에서 실행시키면 다음과 같이 압축 해제된 폴더가 생성된다.
압축해제를 위한 실행 파일은 다음과 같이 2줄의 명령이면 충분하다. 각각의 명령을 셸(Shell)에서 실행해도 된다.
import tarfile
with tarfile.open('aclImdb_v1.tar.gz', 'r:gz') as tar:tar.extractall()
실행 완료 후 위 그림에서처럼 ‘aclImdb’ 폴더가 생성되었음을 확인하자.
그럼에도 불구하고 이어지는 코딩에서 ‘aclImdb’ 디렉토리를 읽어 들이는데 에러가 발생할 수도 있는데 정확한 원인은 알 수 없으나 이 디렉토리 명에서 3번째 철자를 정확하게 숫자 ‘1’로 다시 바꾸는 작업을 하도록 한다. 겉보기는 숫자 “1‘로 보이는 것이 사실이나 자신의 스파이더 편집기에서 ’1‘ 로 인식할 수 있도록 재입력하여 확인해 두도록 하자.
‘aclImdb’ 디렉토리에 포함되어 있는 폴더 train 과 test에는 neg 폴더와 pos 폴더에 각각 12500개의 텍스트 파일들이 들어 있다. pso 폴더와 neg폴더로 분리되어 있다는 저은 이들이 각각 class를 “1”과 “0” 으로 분류(classification)할 수 있다는 의미이다. 어떤 내용이 들어 있는지 텍스트 파일 내용에서 긍정적인지(positive) 또는 부정적인지(negative)를 판단할 수 있는 단어들의 유무를 살펴보자.