자연어처리

Sentiment 코딩 연습을 위한 IMDb 다운로드

coding art 2022. 7. 1. 16:50
728x90

자연어 처리 Sentiment 분석에 머신 러닝을 응용해 보자. Sentiment 분석은 한편으로는 opinion mining 으로 불리우기도 한다. 지금이야 말로 인터넷 소셜 미디어 시대이기 때문에 사람들의 견해, 검토, 추천사항들이 비즈니스나 정치 사회과학 전체에 있어서 가치가 넘치는 소스가 되었기에 그러한 데이터들을 수집하여 대단히 효율적으로 분석해 보도록 하자. 이 분야는 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개의 텍스트 파일들이 들어 있다. pos 폴더와 neg 폴더로 분리되어 있다는 점은 이들이 각각 class를 “1”과 “0” 으로 분류(classification)할 수 있다는 의미이다. 어떤 내용이 들어 있는지 텍스트 파일 내용에서 긍정적인지(positive) 또는 부정적인지(negative)를 판단할 수 있는 단어들의 포함 유무를 살펴보자.

 

사례 1: 돼지에 대해서 부자연스러운 느낌을 가지는 인간에 관한 스토리

    어처구니 없는 코미디끔찍한 사례로 이루어진 오프닝 신.... : negative example

사례 2: 시청자로 하여금 스스로  액션을 채워도록 여지를 남긴듯이 보일지라도 아주 훟률한 드라마임: posive example

아울러 이 짧은 문장들은 웹상에서 작성되므로 html 명령들이 포함되어 있어 앞으로의 preprocessing  단계에서 불 필요한 요소들을 걸러낼 필요가 있다.