[오피니언 마이닝의 개념 ]
수행단계는 긍정, 부정, 중립을 표현하는 단어 정보를 추출하는 단계, 세부 평가 요소와 그것이 가리키는 오피니언의 연결 관계를 포함한 문장을 인식하는 단계, 긍정, 부정, 중립 표현의 수 및 유용한 문장을 추출하여 리뷰 요약을 생성하면 선호도를 분류하는 단계로 되어 있습니다. 이 점을 잘 기억하고 학습을 시작하세요.
1. 개요
오피니언 마이닝 은 비정형 데이터 마이닝의 유형 중 하나입니다. 오피니언 마이닝은 사람들이 특정 제품 및 서비스를 좋아하거나 싫어하는 이유를 분석하며 어떤 사안에 대해 대중의 관심이나 여론이 실시간으로 어떻게 변하는지 확인합니다. 즉 오피니언의 흐름을 반영하여 주어진 조건과 상황에 따라 그에 맞는 '추천'을 하고자 하는데요. 오피니언 마이닝은 일반적으로 3단계의 의견분류의 과정을 가집니다. 먼저 긍정, 부정, 중립을 표현하는 단어 정보를 추출합니다. 다음으로 세부 평가 요소와 그것이 가리키는 오피니언의 연결 관계를 포함한 문장을 인식합니다. 마지막으로 긍정, 부정, 중립 표현의 수 및 유용한 문장을 추출하여 리뷰 요약을 생성하면 선호도를 분류할 수있습니다.
2. 수행단계
긍정 및 부정을 표현하는 단어 정보 추출
의견분류를 하는 세 단계가 즉 오피니언 마이닝의 수행단계가 되는데요. 오피니언 마이닝 각 단계별로 좀 더 자세히 살펴보겠습니다. 먼저 첫번째로 긍정/부정 표현에 해당하는 어휘 정보를 추출하는 단계입니다. 기존에 구축된 사전 등의 리소스를 이용하거나 수작업을 통합니다. 이를 통해 해당 도메인에서 높은 빈도로 긍정/부정을 표현하는 단어들을 확인할 수 있는데요. 아쉽게도 이런 리소스는 영어에 국한되어 있고 한국어에 대해서는 아직 활용할 만한 리소스가 존재하지 않습니다. 또한 학습 데이터에 대한 유용한 통계 정보를 활용하여 긍정 및 부정을 표현하는 어휘 정보를 추출하기도 합니다. 통계 정보를 활용하면 자동으로 어휘 정보를 얻을 수 있는데요. 단, 주어진 특정 도메인에 대해 긍정/부정 표현에 해당하는 단어들을 자동으로 생성하는 것은 쉽지 않습니다. 한국어로 작성한 사용자 별점을 활용하여 긍정 및 부정을 표현하는 단어 정보를 추출할 수도 있는데요. 별점이 아주 높은 리뷰에서는 높은 빈도 즉, 고빈도 단어를 긍정 표현으로 추출합니다. 그리고 사용자 별점이 아주 낮은 리뷰에서는 고빈도 단어를 부정 표현으로 추출할 수 있습니다. 하지만 한국어로 작성된 긍정과 부정에 대한 표현은 자동으로 분석했을 때 정확도는 약 80% 정도록 아주 높지는 않았습니다. 수작업을 최소화 하면서 유용한 어휘별 긍정/부정 감정 정보를 자동으로 생성하는 방법에 대한 연구가 계속 수행되어야 합니다.
세부 평가요소와 오피니언으로 구성된 문장을 인식
문장을 인식하는 것 또한 무척 중요한데요. 첫 번째 단계에서 구축된 어휘 정보를 사용하여 세부 평가요소와 긍정/부정 표현을 찾게 됩니다. 그리고 규칙기반 방법과 통계기반 방법을 동시에 활용할 수 있습니다. 형용사를 오피니언 단어로 간주하고 긍정/부정을 결정하기 위하여 다양한 규칙 및 통계량을 활용합니다. 문장 단위로 분류하기 위해서 여러가지 방법을 적용할 수 있는데요. 이는 긍정적인 오피니언인지 부정적인 오피니언인지 문장 단위로 분류하기 위함입니다. 그리고 대량의 레이블이 부착된 학습 데이터를 생성하여 다양한 기계학습 알고리즘을 적용하여 학습을 수행합니다.
규칙기반방법은 사용자에게 개인 신상, 관심 분야, 선호도 등을 질의하여 그 사용자의 정보 프로파일을 획득해 내는 기법입니다. 예를 들어, 우편 번호, 사용하는 컴퓨터의 종류, 취미, 어떤 특정 사항에 대한 선호도 등을 질문하게 되고 이러한 질문들을 통해 그 사람의 프로파일을 획득하게 되는데요. 이러한 정보를 기반으로 고객의 심리 정보와 고객의 선호도 정보에 알맞은 정보 및 상품을 추천 또는 제공하는 방법입니다.
[R을 활용한 오피니언 마이닝 수행 ]
1. 텍스트 파일 불러와서 긍정, 부정에 대한 단어 누적하기
R 프로그래밍 언어 패키지 중 twitter R패키지를 이용하여 분석을 해볼 텐데요. 텍스트 파일을 불러와서 긍정, 부정에 대한 단어를 누적하고 이에 대하여 score 부여 및 결과를 보는 것까지 살펴보겠습니다.
자, 지금부터 힐튼 호텔 평판에 대한 오피니언 마이닝을 수행 하여보겠습니다. 1번 박스 안 언어를 먼저 볼까요? library(twitteR)라고 되어 있습니다. library는 괄호 안의 파일을 불러오는데요. twitteR을 불러오는 것입니다. twitteR이라는 것은 R 프로그래밍 언어 패키지 중 하나로 twitter API에 접속해서 정보처리를 하는 것입니다. 다음 2번 박스에 hilton.tweets <- searchTwitter("@hilton", n=1500)를 보겠습니다. 우리는 화살표 왼쪽의 함수를 실행해서 얻은 결과를 맨 왼쪽의 변수에 담는다는 것을 알고 있습니다.
즉, hilton.tweets에는 @hilton을 언급한 내용을 최대 1500개의 message를 가져와서 저장하는 것입니다. 그러나 실제로는 대부분 1500개를 가져오지 못하는데요. 이는 일정시간 동안의 사용량을 접속한 계정인 IP address등으로 파악하여 자동적으로 제한하기 때문입니다.
텍스트추리기
트위터에서 가져온 텍스트를 추려보겠습니다. 3번 박스를 먼저 보면 library(plyr)라고 되어 있습니다. library는 괄호 안의 파일을 불러오죠. plyr을 불러옵니다. plyr은 데이터를 결합하고 쪼개서 해석 용이한 형태로 만들어 주는 패키지입니다. 즉, 빅데이터를 분석하기 전 분석하기 쉬운 형태로 데이터를 만들기 위한 패키지입니다. 이를 실행하고 hilton.text <- laply(hilton.tweets, function(t)t$getText())를 입력하면 앞서 hilton을 언급한 내용을 최대 1500개의 message를 가져와서 저장해놓은 hilton.tweet에서 text만을 추출해서 hilton.text에 저장합니다. 추린 텍스트 중에서 이제 긍정 단어와 부정 단어를 찾고 누적해보겠습니다. pos.word=scan("./positive -words.txt", what="character", comment.char=";“)와 neg.word=scan("./negative-words.txt",what="character", comment.char=";")는 긍정 단어와 부정 단어에 관련된 영어 관련 파일을 읽어서 pos.word, neg.word에 각각 저장한다는 것입니다. 그리고 pos.words < - c(pos.word,"upgrade") 와 neg.words <- c(neg.word, "wtf","wait", "waiting","epic fail","mechanical")는 기존 긍정과 부정 단어집에 내용에 따른 별도 정의나 추가 단어를 누적한다는 것입니다. pos.word에 upgrade를, neg.word에 wtf, wait, waiting, epicfail, mechanical 등을 추가로 누적합니다.
2. 긍정 및 부정에 대한 score 부여 및 결과보기
'빅데이터분석개론' 카테고리의 다른 글
제조업과 금융산업의 빅데이터 활용과 사례연구 (9) | 2016.01.03 |
---|---|
소셜 네트워크 분석의 이해 (8) | 2016.01.03 |
텍스트 마이닝의 이해 (12) | 2016.01.03 |
비정형 데이터 마이닝의 이해 (13) | 2016.01.03 |
R을 활용한 데이터 마이닝 분석 (9) | 2016.01.03 |