Pandas로 데이터 불러오기

Bag of Words Meets Bags of Popcorn

bow

자연 언어 처리 - 위키백과, 우리 모두의 백과사전

  • 자연 언어 처리(自然言語處理) 또는 자연어 처리(自然語處理)는 인간이 발화하는 언어 현상을 기계적으로 분석해서 컴퓨터가 이해할 수 있는 형태로 만드는 자연 언어 이해 혹은 그러한 형태를 다시 인간이 이해할 수 있는 언어로 표현하는 제반 기술을 의미한다. (출처 : 위키피디아)

자연어처리(NLP)와 관련 된 캐글 경진대회

튜토리얼 개요

파트1

  • 초보자를 대상으로 기본 자연어 처리를 다룬다.

파트2, 3

  • Word2Vec을 사용하여 모델을 학습시키는 방법과 감정분석에 단어 벡터를 사용하는 방법을 본다.

  • 파트3는 레시피를 제공하지 않고 Word2Vec을 사용하는 몇 가지 방법을 실험해 본다.

  • 파트3에서는 K-means 알고리즘을 사용해 군집화를 해본다.

  • 긍정과 부정 리뷰가 섞여 있는 100,000만 개의 IMDB 감정분석 데이터 세트를 통해 목표를 달성해 본다.

평가 - ROC 커브(Receiver-Operating Characteristic curve)

Use Google's Word2Vec for movie reviews

  • 자연어 텍스트를 분석해서 특정단어를 얼마나 사용했는지, 얼마나 자주 사용했는지, 어떤 종류의 텍스트인지 분류하거나 긍정인지 부정인지에 대한 감정분석, 그리고 어떤 내용인지 요약하는 정보를 얻을 수 있다.
  • 감정분석은 머신러닝(기계학습)에서 어려운 주제로 풍자, 모호한 말, 반어법, 언어유희로 표현을 하는데 이는 사람과 컴퓨터에게 모두 오해의 소지가 있다. 여기에서는 Word2Vec을 통한 감정분석을 해보는 튜토리얼을 해본다.
  • Google의 Word2Vec은 단어의 의미와 관계를 이해하는 데 도움
  • 상당수의 NLP기능은 nltk모듈에 구현되어 있는데 이 모듈은 코퍼스, 함수와 알고리즘으로 구성되어 있다.
  • 단어 임베딩 모형 테스트 : Korean Word2Vec

BOW(bag of words)

  • 가장 간단하지만, 효과적이라 널리 쓰이는 방법
  • 장, 문단, 문장, 서식과 같은 입력 텍스트의 구조를 제외하고 각 단어가 이 말뭉치에 얼마나 많이 나타나는지만 헤아린다.
  • 구조와 상관없이 단어의 출현횟수만 세기 때문에 텍스트를 담는 가방(bag)으로 생각할 수 있다.
  • BOW는 단어의 순서가 완전히 무시 된다는 단점이 있다. 예를 들어 의미가 완전히 반대인 두 문장이 있다고 하다.
    • it's bad, not good at all.
    • it's good, not bad at all.
  • 위 두 문장은 의미가 전혀 반대지만 완전히 동일하게 반환된다.
  • 이를 보완하기 위해 n-gram을 사용하는 데 BOW는 하나의 토큰을 사용하지만, n-gram은 n개의 토큰을 사용할 수 있도록 한다.

  • Bag-of-words model - Wikipedia

파트 1

NLP는?
NLP(자연어처리)는 텍스트 문제에 접근하기 위한 기술 집합이다.
이 튜토리얼에서는 IMDB 영화 리뷰를 로딩하고 정제하고 간단한 BOW(Bag of Words) 모델을 적용하여 리뷰가 추천인지 아닌지에 대한 정확도를 예측한다.

시작하기 전에

이 튜토리얼은 파이썬으로 되어 있으며, NLP에 익숙하다면 파트2 로 건너뛰어도 된다.

import pandas as pd

"""
header = 0 은 파일의 첫 번째 줄에 열 이름이 있음을 나타내며
delimiter = \t 는 필드가 탭으로 구분되는 것을 의미한다.
quoting = 3은 큰따옴표를 무시하도록 한다.
"""
# QUOTE_MINIMAL (0), QUOTE_ALL (1), 
# QUOTE_NONNUMERIC (2) or QUOTE_NONE (3).

# 레이블인 sentiment가 있는 학습 데이터
train = pd.read_csv('data/labeledTrainData.tsv', 
                    header=0, delimiter='\t', quoting=3)
# 레이블이 없는 테스트 데이터
test = pd.read_csv('data/testData.tsv', 
                   header=0, delimiter='\t', quoting=3)
train.shape

(25000, 3)

train.tail(3)
id sentiment review
24997 10905\_3 0 "Guy is a loser. Can't get girls, needs to bui...
24998 10194\_3 0 "This 30 minute documentary Buñuel made in the...
24999 8478\_8 1 "I saw this movie as a child and it broke my h...
test.shape

(25000, 2)

test.tail()
id review
24995 2155\_10 "Sony Pictures Classics, I'm looking at you! S...
24996 59\_10 "I always felt that Ms. Merkerson had never go...
24997 2531\_1 "I was so disappointed in this movie. I am ver...
24998 7772\_8 "From the opening sequence, filled with black ...
24999 11465\_10 "This is a great horror film for people who do...
train.columns.values

array(['id', 'sentiment', 'review'], dtype=object)

# 레이블인 'sentiment'가 없다. 이 데이터를 기계학습을 통해 예측한다.
test.columns.values

array(['id', 'review'], dtype=object)

train.info()


RangeIndex: 25000 entries, 0 to 24999
Data columns (total 3 columns):
id 25000 non-null object
sentiment 25000 non-null int64
review 25000 non-null object
dtypes: int64(1), object(2)
memory usage: 586.0+ KB

train.describe()
sentiment
count 25000.00000
mean 0.50000
std 0.50001
min 0.00000
25% 0.00000
50% 0.50000
75% 1.00000
max 1.00000
train['sentiment'].value_counts()

1 12500
0 12500
Name: sentiment, dtype: int64

# html 태그가 섞여 있기 때문에 이를 정제해줄 필요가 있음
train['review'][0][:700]

'"With all this stuff going down at the moment with MJ i\'ve started listening to his music, watching the odd documentary here and there, watched The Wiz and watched Moonwalker again. Maybe i just want to get a certain insight into this guy who i thought was really cool in the eighties just to maybe make up my mind whether he is guilty or innocent. Moonwalker is part biography, part feature film which i remember going to see at the cinema when it was originally released. Some of it has subtle messages about MJ\'s feeling towards the press and also the obvious message of drugs are bad m\'kay.

Visually impressive but of course this is all about Michael Jackson so unless you remotely lik'

강의에 등록된 질문이 없습니다. 궁금한 부분이 있으면 주저하지 말고 무엇이든 물어보세요.