pmi를 활용한 twitter 데이터에서의 이슈 키워드 추출

18
Point-wise Mutual Information을 활용한 Twitter 데이터에서의 이슈 키워드 추출 Team Herring (김영덕, 박치완, 조현제) 1. 개요 인터넷의 보급이 확산됨에 따라 소셜 네트워크 서비스(SNS)의 이용률이 매우 높다 는 결과가 발표되었다. 만6세 이상 인터넷 이용자의 67.1%가 최근 1년 이내 SNS를 이용한 사용자들이며, 20대의 경우에는 90% 이상의 이용률을 보였다.[5] 때문에 어떤 것들이 사람들 사이에서 이슈가 되고 있는지에 대해 알아내기 위해 SNS 데이터를 분 석하는 것이 새로운 방법이 될 수 있다. 이 문서에서는 SNS 데이터 분석을 통해 사 람들 사이에서 이슈가 되었던 것들이 무엇인지 추출하는 과정과 기법에 대해 소개하 고자 한다. 또한, 최근 많은 인터넷 사용자들이 주로 사용하는 SNS는 페이스북과 트위터이다. 이 둘 중에서 트위터는 페이스북에 비해 사용자들이 업로드 하는 내용이 공개되어 있 어서, 데이터를 수집하고 분석함에 있어 페이스북보다 더욱 많은 사용자들에 대해 분 석 할 수 있다는 장점이 있다. 때문에 이 연구에서는 2013년 3월 한 달 동안 발생한 우리나라에서의 트윗을 이용하여 분석하였다. 데이터를 분석할 때, Point-wise Mutual Information 알고리즘을 사용하였다. Point-wise Mutual Information 알고리즘은 두 데이터 사이의 상관도를 계산하는 알 고리즘인데, 이 알고리즘을 트위터 데이터에 적용하여 키워드 추출에 활용하였다. 또한, 모든 과정은 Hadoop 기반의 분산 환경에서 수행되었으며, Apache Pig과 Python Script를 활용하여 세부적인 데이터를 처리하였다. 2. Point-wise Mutual Information Point-wise Mutual Information(PMI)는 두 점 , 사이의 상관도를 확률론을 적 용하여 수치화하는 기법이다. PMI는 Mutual Information을 기반으로 한다. 각각의 발생 확률 , 를 갖는 두 점 , 에 대해 두 점 사이의 PMI 를 다음 과 같이 정의할 수 있다. log 이 PMI는 가 독립적으로 발생했다고 가정 했을 때의 동시 발생 확률과, 측정 의 동시발생 확률을 비교함으로써 두 변수가 얼마만큼의 상관도를 갖고 있 는지 판단한다.

Upload: jo-hyun-je

Post on 14-Apr-2017

2.206 views

Category:

Data & Analytics


9 download

TRANSCRIPT

Page 1: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

Point-wise Mutual Information을 활용한Twitter 데이터에서의 이슈 키워드 추출

Team Herring (김영덕, 박치완, 조현제)

1. 개요인터넷의 보급이 확산됨에 따라 소셜 네트워크 서비스(SNS)의 이용률이 매우 높다

는 결과가 발표되었다. 만6세 이상 인터넷 이용자의 67.1%가 최근 1년 이내 SNS를 이용한 사용자들이며, 20대의 경우에는 90% 이상의 이용률을 보였다.[5] 때문에 어떤 것들이 사람들 사이에서 이슈가 되고 있는지에 대해 알아내기 위해 SNS 데이터를 분석하는 것이 새로운 방법이 될 수 있다. 이 문서에서는 SNS 데이터 분석을 통해 사람들 사이에서 이슈가 되었던 것들이 무엇인지 추출하는 과정과 기법에 대해 소개하고자 한다.

또한, 최근 많은 인터넷 사용자들이 주로 사용하는 SNS는 페이스북과 트위터이다. 이 둘 중에서 트위터는 페이스북에 비해 사용자들이 업로드 하는 내용이 공개되어 있어서, 데이터를 수집하고 분석함에 있어 페이스북보다 더욱 많은 사용자들에 대해 분석 할 수 있다는 장점이 있다. 때문에 이 연구에서는 2013년 3월 한 달 동안 발생한 우리나라에서의 트윗을 이용하여 분석하였다.

데이터를 분석할 때, Point-wise Mutual Information 알고리즘을 사용하였다. Point-wise Mutual Information 알고리즘은 두 데이터 사이의 상관도를 계산하는 알고리즘인데, 이 알고리즘을 트위터 데이터에 적용하여 키워드 추출에 활용하였다.

또한, 모든 과정은 Hadoop 기반의 분산 환경에서 수행되었으며, Apache Pig과 Python Script를 활용하여 세부적인 데이터를 처리하였다.

2. Point-wise Mutual InformationPoint-wise Mutual Information(PMI)는 두 점 , 사이의 상관도를 확률론을 적

용하여 수치화하는 기법이다. PMI는 Mutual Information을 기반으로 한다. 각각의 발생 확률 , 를 갖는 두 점 , 에 대해 두 점 사이의 PMI 를 다음과 같이 정의할 수 있다.

log

이 PMI는 와 가 독립적으로 발생했다고 가정 했을 때의 동시 발생 확률과, 측정된 와 의 동시발생 확률을 비교함으로써 두 변수가 얼마만큼의 상관도를 갖고 있는지 판단한다.

Page 2: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

두 변수 사이의 연관도가 높으면 당연히 는 에 비해 월등히 높을 것이다. 그리고 그 결과로 ≫ 가 될 것이다. 만약 두 변수 사이의 연관도가 매우 낮다면, 즉 독립적일 때와 비슷하다면 ≈ 이므로, ≈

이다. 또한 두 변수 사이의 관계가 상호 보완적인 관계라면, 는 에 비해 매우 작은 값을 갖게 될 것이다. 그 때의 는 보다 작은 값을 갖게 될 것이다.

0 0 0.1

0 1 0.7

1 0 0.15

1 1 0.05

표 1 PMI 계산의 예

와 가 위 와 같은 분포를 갖는다고 하면, 각각의 경우에 대한 PMI는 다음과 같이 계산될 수 있다.

그리고 두 변수 와 사이의 PMI의 합계를 나타내는 Mutual Information 는 다음과 같이 계산된다.

3. Twitter 데이터에서의 이슈 키워드 추출앞서 소개한 PMI를 이용하여 Twitter 데이터에서 이슈 키워드를 추출하기 위해서는

현재 가지고 있는 데이터와, 어떤 기준으로 이슈 키워드를 추출 해 줄 것인가에 따라서 PMI에 사용되는 변수를 조절해야 한다. 이 문서에서는 특정 기간 동안 발생한 한국어 트윗을 일별로 저장하고 있다고 가정한다. 또한, 그 단순히 그 전체 기간 동안

Page 3: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

발생한 Tweet을 분석하여, 그 중에서 가장 이슈가 되었던 키워드를 추출하는 것이 아니라, 각 일별로 발생한 Tweet들을 분석하여, 각 날짜별로 어떤 것들이 이슈였는지에 대해 그 키워드를 추출 해 주는 것이다. 때문에, 위 PMI에서 사용되었던 두 변수 와 를 명사와 해당 날짜로 정의해야 한다. 여기서 명사는, 형태소 분석을 통해 추출된 명사들이다.

위와 같이 정의했을 때 전체 Tweet의 수를 라 하면, PMI에 등장하는 기호들은 다음과 같이 계산될 수 있다.

단어가등장한횟수

날짜에작성된의수

날짜에작성된중에가등장한횟수

위 식을 PMI에 적용하여 가지고 있는 데이터의 날짜 수 와, 수집한 데이터에서 등장한 단어의 개수 에 대해 각각의 날짜 와 각각의 단어

쌍이 갖는 연관도 를 계산 할 수 있다.

계산된 를 이용하면, 단어별로 각각의 날짜와 어느 정도의 연관성을 갖는

지 알 수 있다. 각 날짜의 Tweet들에 등장하는 단어이 다른 날에 비해서 얼마

나 더 높은 연관도를 갖는가를 이용해 날짜 이슈 키워드를 추출한다. 이 과정을 정리하면 다음과 같다.

1. 날짜 에 등장하는 단어 중 가장 많이 등장하는 단어 개를 추출한다.

2. 추출된 모든 단어 에 대해 다음 2.1 ~ 2.3의 과정을 반복한다.

2.1 모든 날짜와의 연관도 를 계산한다.

2.2 의 평균 를 계산한다. (평균 대신 다른 지표 사용 가능)

2.3 날짜 과 사이의 편차 를 계산한다.

3. 편차 중에서 가장 높은 값을 갖는 단어 를 날짜 의 이슈 키워드로 한다.

4. 위 1 ~ 3까지의 과정을 모든 날짜 에 대해 반복한다.

알고리즘 1 각 날짜의 이슈 키워드를 추출하는 알고리즘

Page 4: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

위와 같은 과정을 통해 추출된 날짜별 키워드의 예시는 다음과 같다. 다음 예시는 2013년 3월 17일에 생성된 트윗 중에서 추출된 이슈 키워드들을 PMI 편차 값을 기준으로 내림차순 정렬한 결과이다. “날짜:키워드,PMI 편찻값” 의 형태로 저장하였다. 3월 17일에 김연아 선수의 피겨 프리스케이팅 프로그램이 있었기 때문에 김연아와 피겨와 관련된 이슈 키워드가 높은 순위로 추출 될 것을 볼 수 있다. 또한, 그 대회에서 우승이 결정되었기 때문에, 우승이라는 키워드도 높은 순위에 올라와 있는 것을 볼 수 있다.

그림 1 3월 17일의 이슈 키워드

4. 추출된 키워드의 그룹화위 그림과 같이 3월 14일의 키워드가 추출 되었을 때, 단순히 추출된 키워드만 나

열하면 ‘화이트’라는 키워드와, ‘데이’라는 키워드가 동시에 높은 순위에 있다는 것을 알 수 있다. 하지만 사실 이 두 단어는 같이 ‘화이트데이’ 혹은 ‘화이트 데이’로 같이 하나의 키워드로 등장해야 하는 것이 적절하다. 때문에 추가적으로 두 단어를 하나의 연관된 단어로 인식하여 그룹화 해 주는 작업이 필요하다.

이 그룹화 과정에서도 앞서, 키워드를 추출하는 과정에서 사용한 PMI를 이용한다. 각 날짜에 이슈화 되었던 키워드들 이 추출되었으면, 각 날짜별 이슈 키워드들 사이의 유사도를 PMI를 이용하여 계산한다. 그리고 계산한 이슈 키워드들 사이의 PMI

Page 5: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

를 이용하여 키워드를 그룹화 한다. 이 과정을 정리하면 다음과 같다.

1. 임의의 날짜 에 발생한 트윗에 대해, 이슈 키워드 추출 알고리즘을 이용하여 추출된 키워드 중 상위 개를 추출 한다.

2. 날짜 의 트윗에서 추출된 키워드 에 대해 다음 과정을 반

복한다.

2.1 날짜 에 생성된 트윗을 대상으로, 키워드 가 등장

할 확률 을 계산한다.

3. 날짜 의 트윗에서 추출된 임의의 서로 다른 임의의 키워드

에 대해 모든 두 키워드 쌍이 날짜

에 발생한 트윗 중에서 동시에 등장할 확률

을 계산한다.

4. 계산한 확률 들과, 교집합에 대한 확률

들을 이용하여 두 키워드 사이의 날짜 에 대한 상관도 PMI

를 구한다.

log

5. 날짜 에 대해서, 임의의 키워드 에 대해, 해당 키워드가

포함된 모든 두 키워드 쌍의 PMI 값의 평균 를 구한다.

6. 키워드 쌍

의 상관도

와 의 차이, 즉

PMI와 그 평균 사이의 편차

를 계산한다.

7. 날짜 의 이슈 키워드 중에서 편차의 값이 큰 키워드 쌍을 연관된 키워드 쌍으로 저장한다.

8. 위 과정을 모든 날짜 에 대해 반복한다.알고리즘 2 각 날짜별 이슈 키워드를 그룹화 하는 알고리즘

위와 같은 과정을 통해 그룹화 된 키워드의 결과는 다음과 같다.

Page 6: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

그림 2 알고리즘 2를 활용해 그룹화한 2013년 3월 17일의 이슈 키워드

5. 분석 환경3월 한 달 동안 발생한 총 약 1억 6천만 개의 트윗을 분석하였다. 이 1억 6천만 개

의 데이터의 용량은 32.3기가바이트였으며, 다음과 같은 성능을 갖는 장비에서 수행되었다.

- CPU: Intel Xeon E3-1230 v2 3.30 GHz * 1- RAM: 32GB RAM- HDD: 1TB 7200rpm * 1, 500GB 7200rpm * 2 = 2TB

위 장비에서 다음과 같은 환경의 Xen 가상머신을 6개 생성하여 분석을 진행하였다.

- Centos 6.3 64bit- Apache Hadoop 1.2.0 (Hortonworks Hadoop Platform 1.3.2)- Apache Pig 0.11.0 (in HDP)- Python 2.7.6- MongoDB 2.6

6. 세부 구현과정3월 한 달간의 트윗을 분석하여 각 날짜별로 이슈가 되었던 키워드를 추출하고 그

룹화를 수행하는 과정은 다음 그림과 같은 과정을 통해 진행된다.

Page 7: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

그림 3 트위터 데이터를 분석하여 각 날짜별 이슈 키워드를 추출하는 과정

가장 먼저 JSON 형태의 데이터를 전처리 과정을 통해 불필요 한 값을 제거한다. 뿐만 아니라 전처리 과정에서는 각 트윗 데이터를 형태소 분석기를 이용하여 트윗 안에서 등장하는 명사를 추출한다. 그리고 추출한 명사를 구분자로 구분하여 저장한다. PMI 전처리 과정에서는 추출된 명사들을 이용하여 PMI를 계산하는데 필요한 여러 값을 계산한다. PMI 계산 과정은 이전 단계에서 계산된 여러 값들을 수식에 대입함으로써 이루어진다. 그리고 이 계산된 PMI는 단어별 PMI 평균과의 편차를 구하고, 그 편차를 날짜별로 분류한다. 날짜별로 분류된 키워드와 편차 쌍은 편차 값을 기준으로 정렬함으로써 해당 날짜에 이슈가 되었던 키워드를 추출한다. 마지막으로, 추출된 키워드들을 이용하여 키워드들 사이의 그룹화를 수행함으로써 최종적인 결과물을 출력한다.

6.1 데이터 전처리데이터 전처리 과정은 데이터를 필터링 하고 형태소 분석을 수행한다. 트윗 데이터

는 다음과 같은 JSON 형태로 저장되어 있다.

그림 4 JSON 데이터의 예시

이 데이터를 모든 트윗에 대해 형태소 분석기를 이용하여 문장에서 단어를 추출한다. 위와 같은 데이터의 형태소 추출의 결과로는, “우리, 민요, 김연아, 군밤, 제라블” 이 명사로 추출된다. 이 결과들을 이용하여 PMI 계산에 필요한 값을 구한다.

Page 8: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

그림 5 데이터 전처리 과정의 흐름도

위 다이어그램은 이러한 과정이 실제 Hadoop에서 어떤 형태로 진행되는지에 대한 것이다. Mapper에서 읽은 JSON 형태의 데이터를 바로 형태소 분석을 수행하지 않고, 현재 트윗의 언어를 검출한다. 언어를 검출하지 않았을 때에는 실제 형태소 분석과정에서 5배 정도 시간이 더 소모되었다. 때문에 형태소 분석을 수행하기 전에 미리 현재 트윗의 언어를 검출함으로써 수행시간을 크게 단축시킬 수 있었다.

언어를 판별하여 한글 트윗으로 분류된 트윗 데이터에 대해 가장 먼저 정규식 매칭기법을 이용하여 불필요한 데이터를 걸러낸다. 걸러진 데이터는 트위터 내에 존재하는 인터넷 웹 페이지의 주소, 어떤 사용자를 언급(mention)했을 때의 그 사용자의 고유 번호, 해시 태그에 사용되는 특수문자, 그 외에도 이모티콘이나 전각 문자 등 형태소 분석이 어려운 내용들이 포함된다.

이렇게 필터링 된 데이터를 이용하여 형태소 분석을 수행한다. 형태소 분석을 수행 할 때는, 크게 오픈 소스 라이브러리를 조사하였다. 그 두 라이브러리는 KAIST에서 제공하는 ‘한나눔 형태소 분석기’와 서울대학교에서 제공하는 ‘꼬꼬마 형태소 분석기’이다. 두 가지의 형태소 분석기를 비교하였는데, 비록 성능은 비교적으로 ‘한나눔 형태소 분석기’가 좋았지만, 속도 면에서 ‘꼬꼬마 형태소 분석기’가 월등히 좋았기 때문에 ‘꼬꼬마 형태소 분석기’를 채택하였다.

하지만 많은 양의 데이터에 대해 수행해야 했으므로, 실제 데이터를 Hadoop 기반의 MapReduce를 수행하는 장비와 같이 수행하기는 힘들다고 판단되어서, 외부 장비에 서비스 데몬을 띄우고, Hadoop의 Mapper에서 원격 장비에 XML-RPC, Thrift Protocol 등으로 접속하여 형태소 분석 결과를 반환 받는 형태로 구성하였다.

이러한 과정을 거친 형태소 분석 결과를 Mapper에서 미리 정의된 출력 형태에 맞추어 출력한다.

6.2 PMI 전처리앞서 설명 한 PMI를 이용한 이슈 키워드 추출을 수행하기 위해선 몇 가지 확률 값

을 미리 계산해야 한다. 때문에 이 과정에서는 전체 단어와 날짜에 대해 와 , 그리고 를 계산한다. 각 확률을 구하기 위해선 전체 날짜에 등장하는 단어의 개수와, 각각의 날짜에 등장하는 단어의 개수를 알아야 한다. 다음은 그 각각의 결과에 대한 예시이다. 왼쪽은 전체 날짜에 대해 단어가 등장한 횟수를 계산한 결

Page 9: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

과이고, 오른쪽은 각 날짜별로 단어를 계산한 결과 중에서 3월 17일에 등장한 단어의 일부이다. 이 결과를 통해, 전체 단어 중에 ‘김연아’가 450번이 등장했는데, 3월 17일 하루에 200번이 등장함으로써, 약 45%의 비율을 3월 17일이 차지하고 있음을 알 수 있다. 또한 이를 이용해 김연아와, 일, 김연아 일을 구할 수 있다.

그림 6 PMI 전처리 수행 결과

다음 그림은 PMI 전처리에 대한 간단한 데이터 흐름도 이다. 앞 과정인 데이터 전처리 과정에서 생성된 데이터를 Hadoop 기반의 MapReduce 작업을 이용하여 Wordcount를 수행한다.

데이터 전처리 과정에서의 출력은 ‘날짜, 사용자 ID, 트윗 ID, 리트윗 여부, 오리지널 트윗, 명사, ...’ 형태이다. 이 데이터를 날짜를 Key로 하여 Hadoop의 Mapper에서 읽는다. 그리고 Key 별로 Reduce를 수행하는 과정에서 두 가지 형태로 동시에 출력을 수행한다.

하나는 모든 날짜에 대한 단어의 등장 횟수이다. 이 결과의 예시는 ‘개강, 257’, ‘김연아, 450’과 같이 각각의 단어가 전체 데이터에 걸쳐 얼마만큼 등장 했는지에 대한 결과를 가지고 있다. 이 결과는 PMI를 계산 할 때, 를 계산하는 데에 사용된다.

두 번째 출력 결과물은 각 날짜별 단어의 등장 횟수이다. 각각의 날짜의 트윗에 등장하는 단어들에 대해 등장 횟수를 계산하였으며, 이 결과는 PMI 값을 계산 할 때 를 계산하는 과정에서 이용된다.

Page 10: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

그림 7 PMI 전처리 과정에 대한 흐름도

6.3 PMI 계산이 과정에서는 와 를 이용해 각 날짜에 대한 단어별 PMI를 계산한다. 다

음 화면은 ‘김연아’가 각 날짜와 얼마의 PMI 값을 갖는지에 대한 결과이다. 이 결과를 통해 평소에는 ‘김연아’라는 단어가 평소에 비해 3월 15일과 17일에 이슈가 되었다는 것을 예측 할 수 있다. 실제로 3월 15일과 17일에는 김연아 선수의 피겨스케이팅 경기가 있는 날이었다.

그림 8 PMI 계산 결과 예시

이 PMI를 계산하는 과정은 한 번의 MapReduce 작업으로 수행된다. 먼저 앞서 계산한 모든 날짜에 대한 단어 등장 횟수와, 날짜 별 단어 등장 횟수를 Mapper에서 읽

Page 11: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

는다. 이 때, 데이터의 Key를 단어로 하여 두 데이터를 Reduce-side Join을 수행한다. Reduce-side Join의 결과로 각 단어를 기준으로 두 데이터가 합쳐진다.

합쳐진 결과가 Reducer로 병합되기 때문에, Reducer에서 PMI를 계산하게 된다. 위에서 설명하였듯이 모든 날짜에 대한 단어 등장 횟수는 로 계산되고, 날짜별 단어의 등장 횟수는 가 되며, 는 전체 트윗의 수에 비해 해당 날짜에서 얼마만큼의 트윗이 생성되었는가를 결정하는 확률이기 때문에 쉽게 PMI를 계산할 수 있다. Reducer에서는 계산한 PMI 결과를 다시 각 날짜에서 등장한 단어들이 갖는 PMI 쌍의 값을 출력한다.

그림 9 PMI 계산 과정에 대한 흐름도

6.4 PMI 편차 계산각 단어별, 각 날짜별 PMI를 계산하고, 그 결과를 분석함으로써 3월 15일과 17일에

‘김연아’라는 단어가 이슈가 되었을 것이라고 추측 할 수 있었다. 이 과정을 수행하기 위해서는 각 단어에 대해 전체 날짜에 대한 PMI의 평균을 계산하고, 각 단어가 평균에 비해 날짜마다 얼마만큼의 차이를 갖는지 계산해야 한다. 다음 화면이, 그 평균에 대한 결과이다.

Page 12: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

그림 10 각 단어의 PMI 평균 예시

이 평균을 구하는 과정은 단순히 한번의 Map 과정과 Reduce 과정으로 수행된다. 먼저 Mapper에서 입력 데이터를 받을 때, 각 단어별 PMI의 평균을 계산 할 것이므로 입력받는 데이터의 Key를 단어로 설정한다. 입력 Key를 단어로 설정하면, Mapper에서 읽은 데이터가 Reducer로 전송 될 때 단어별로 전송이 된다. Reducer에서는 이 Mapper에서 전송된 단어별 그룹 데이터 사이의 평균을 구한다. 이 구한 값을 출력 Key를 단어로 하여 출력한다. 다음 다이어그램은 이 과정에 대해 도식화 한 것이다.

그림 11 각 단어별 PMI의 평균을 계산하는 과정

6.5 날짜별 분류최종적으로 각 날짜에 등장한 단어들에 대해 계산된 PMI 값과 위에서 구한 PMI의

평균 사이의 편차를 이용해 해당 날짜에서 가장 높은 값을 갖는 단어순으로 정렬한다. 그리고 그 결과가 하나의 날짜에 대한 이슈 키워드이다. 다음 화면은 3월 17일의 이슈 키워드를 PMI 편차의 내림차순으로 정렬한 결과이다. 앞서 계산된 PMI값과 평균과의 편차가 정상적으로 계산되었음을 알 수 있다.

Page 13: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

그림 12 정렬된 날짜별 단어의 PMI값 편차

날짜별로 단어의 PMI값 편차를 구하는 과정 역시 한번의 MapReduce 과정으로 수행된다. 계산된 날짜와 단어별 PMI와 앞서 구한 단어별 PMI의 평균값을 JOIN 연산을 수행함으로써 수행된다. 이 MapReduce 과정을 거치면, 각 날짜에서 등장한 단어에 대해 각 단어 PMI 평균값과의 편차가 계산되고, 그 결과를 편차의 크기에 맞추어 정렬을 수행한다. 그 결과로, 각 날짜별로 단어의 PMI값 편차가 출력되며, 그 값들이 내림차순으로 정렬 된 결과를 보인다. 이 과정에서 정렬은 Apache Pig를 사용하였다.

그림 13 날짜별 단어의 PMI 편차를 계산하고 정렬하는 과정

Page 14: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

6.6 키워드 그룹화키워드 그룹화를 할 때에 전체 키워드에 대해서 수행할 수도 있으나, 기존에 계산

했던 PMI의 값이 높은 키워드를 선정하여 그룹화 작업을 진행하면 전체 알고리즘의 수행시간을 단축할 수 있다.

그리하여, 각 날짜별로 키워드의 PMI 편차를 내림차순으로 정렬, 편차가 큰 50개의 키워드를 선정하고 해당 키워드만을 사용해 그룹화를 수행하였다. 작은 규모의 데이터를 Hadoop Platform에서 다루는 것은 비효율적인 방법이므로, 여기서는 MongoDB와 Python의 조합으로 해당 작업을 수행하였다.

키워드 그룹화를 수행하기 위해, 먼저 Apache Pig에서 정렬된 데이터를 출력할 때, 50개의 레코드만 출력하도록 하였다. 해당 데이터를 Python으로 불러와 MongoDB에 저장한 뒤, 50개 단어의 쌍에 대해 PMI 계산을 수행하였다. 그 후, 50개의 단어의 PMI 평균을 구해 그 차이(그림 14의 diff 필드)를 계산하였고 아래는 그 결과물이다.

그림 14 MongoDB, Python을 활용한 키워드 그룹화 결과물

PMI의 값과 그 평균 사이의 차이가 0보다 크면, 이는 해당 키워드 쌍이 좀 더 자주 사용되는 조합임을 의미한다. 반면에, 편차가 0보다 작다면, 해당 키워드 쌍은 평균적으로 덜 사용되는 키워드 쌍임을 의미한다. 그리하여, 결과 리스트에서는 편차가 0보다 큰 키워드 쌍을 선택하였다.

Page 15: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

7. 실험 결과7.1 각 날짜별 주요 키워드

날짜 키워드2013. 03. 01 집회 무한대, 자몽 심심타파, 태극기, 독립2013. 03. 02 집회 무한대, 대표팀, 완전체, 전교, 난징2013. 03. 03 개학, 골 사연, 옥타곤, 개강, 그리스, 서영이, 영도2013. 03. 04 김종훈 사퇴, 김종훈, 개학, 첫날 바나들, 조국 헌신, 개강2013. 03. 05 정전 협정, 봄날 2am, 정전 백지, 주옥2013. 03. 06 담배값, 흡연 담배값, 찬성 야간, 찬성 Q7, 먹방2013. 03. 07 국회 대상, 리더 댄스팀, 미키, 이하이, 국회 상정2013. 03. 08 출국 자카르타, 제재, 불금, 단독, 요코하마, 태진아, 송대관2013. 03. 09 가을 방학, 쇼타, 포항 산불, 포항, 산타, 태연, 판타지2013. 03. 10 인도네시아 함성, 려욱, 우편 페레로, 슈키라, 태민 작가, 태민2013. 03. 11 과다 노출, 국무 회의, 자카르타 날밤, 경범죄 처벌, 예성2013. 03. 12 카니발, 저각, 모실수, 코스프레, 몬스타, 하림, 사칭2013. 03. 13 화이트 데이, 모의고사, 화이트 솔로, 민혁 M4M2013. 03. 14 화이트 데이, 사탕, 김명수, 신동, 파리, 컬렉션, 한명숙 총리2013. 03. 15 프리뷰 키랑, 태국 양해, 현아 코러스, 태국 카이, 태국 드리오2013. 03. 16 태국, 태국 프리뷰, 태국 입국, 방콕, 니엘, 하느님, 곰돌이2013. 03. 17 김연아, 박경 몸매, 애국가 합창단, 피겨, 김연아 우승, 피겨 선수권2013. 03. 18 비 가게, 국정원장 내부, 스타그램, 우산, 김연아, 국정원장 개입2013. 03. 19 지능, 귀욤, 슈프림, 카리스마, 세븐 동욱이2013. 03. 20 신한 은행, 전산 마비, 전산망, 신한 농협, 해킹, 아레나, 전산망 은행2013. 03. 21 폭로 병역, 리허설, 스튜디오, 엠넷 오픈, 와이드 엠넷2013. 03. 22 김병관 낙마, 2PM, 원본, 피해자 태형, 접대, 몰디브2013. 03. 23 원세훈 출국, 표절 김미화, 원세훈 미국행, 원세훈 국정원장2013. 03. 24 시크릿, 박근형, 오르카, 리리2013. 03. 25 규현 조미, 에프엑스, 회식, 규현 예성2013. 03. 26 김재철 해임, 김재철 사장, 천안함 용사, 김재철, 천안함, 김재철 방문진2013. 03. 27 기성용 한혜진, 심촹, 기성용, 칼로리, 김종운2013. 03. 28 엠카, 호야, 엠카운트다운, 드레스, 권지용, 엠카 이하이2013. 03. 29 뮤직 뱅크, 불금, 파스타, 스파게티2013. 03. 30 기광, 이외수, 개막전, 유희열 스케치북, 개막전 홈런2013. 03. 31 “데이터 부재”

표 2 각 날짜별로 추출된 주요 키워드 리스트

7.2 웹 기반 과정별 결과 데이터 출력 화면각 수행 단위(MapReduce, Apache Pig, Python 처리 등)별 결과를 확인할 수 있도

록 웹으로 접근 가능한 화면을 작성하였다. Python 웹 프레임워크인 flask(http://flask.pocoo.org)를 사용해 구현하였다. 현재 http://222.106.121.214:5000에서 확인 할 수 있다.

웹 화면은 각각의 과정마다 나오는 데이터를 확인할 수 있도록 구현되어 있다. 맨 처음의 전처리 과정은 데이터가 너무 많아 웹으로 제공하는 것이 어려워 제외하였고, 나머지 데이터는 웹에서 확인할 수 있다.

그리고 결과를 출력 할 때, 그래프 형태로 출력하는 경우로 확장 가능성이 있기 때

Page 16: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

문에 PMI 값을 양수로 표현하였다.

그림 15 Flask로 구현한 웹 기반 과정별 데이터 화면

8. 결론비록 결과가 자연스럽게 일치하지는 않았지만, 3월 중에서 어느 정도 이슈가 되었

을 만한 날에 대해서는 이슈 키워드가 정확하게 추출 된 것을 알 수 있었다. 그 예를 들면 3월 3일 ‘개학’, 3월 14일 ‘화이트 데이’, 3월 17일 ‘김연아 우승’, 3월 26일 ‘김재철 해임’ 등이 그 예시이다. 가장 높은 점수값을 갖는 키워드가 아닌 경우에는 3월 1일 ‘태극기’, ‘독립’, 3월 9일 ‘포항 산불’, 3월 11일 ‘경범죄 처벌’, 3월 20일 ‘전산망 마비’ 등이 있다.

이 키워드를 추출하는 과정에서는 기존에 두 변수 사이의 연관도를 계산하는 데에 사용되는 Point-wise Mutual Information 기법을 사용하였다. 이것은, 기존에 사용되던 기법을 새로운 부분에 적용하였다는 데에 의의가 있다. 이 문서에서 제시하고 있는 이슈 키워드 방식은 단순히 PMI값만을 계산한 것이 아니라 다른 날짜에 등장한 같은 단어의 PMI 값과 비교하는 것이다. 이러한 접근법은, 기존에 알려져 있지 않은 방식이다.

또한 이 결과를 웹페이지에 시각적으로 제공하여, 일반 사용자들도 데이터의 분석 결과를 한눈에 알아 볼 수 있다. 하지만 3월 31일 데이터에 대해서는 분석을 수행하

Page 17: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

지 못하였다. 그 이유는 실제 데이터에 3월 31일의 트위터 기록이 존재하지 않았기 때문이다. 이에 대한 검증 소스 코드와 분석 결과물은 Appendix에 추가하였다. 또한, 제공받은 데이터의 시간이 실제 우리나라의 시간대와 9시간 차이가 발생하여, 그에 따른 키워드 추출이 정확하게 이루어지지 않았다.

데이터 분석 과정에서는 많은 양의 데이터를 처리하기 위해 Apache Hadoop을 적용하였다. Apache Hadoop 기반으로 MapReduce 흐름을 구성하고 구현함으로써 최근 각광받고 있는 빅데이터 기술을 적용해 보는 기회가 되었다.

이 문서에서 적용한 기술을 이용하여 트위터 데이터에 대한 배치 프로세싱 형태의 키워드 추출뿐만 아니라, 다른 데이터를 분석 한다던가, 배치가 아닌 실시간 프로세싱 형태의 키워드 추출도 가능 할 것이라 예상한다.

9. 참고문헌[1] Church, K. W., & Hanks, P. (1990). Word association norms, mutual

information, and lexicography. Computational linguistics, 16(1), 22-29.[2] Das, B., Pal, S., Mondal, S. K., Dalui, D., & Shome, S. K. (n.d.). Automatic

키워드 Extraction From Any Text Document Using N-gram Rigid Collocation.

[3] http://en.wikipedia.org/wiki/Pointwise_mutual_information[4] Bouma, G. (2009). Normalized (pointwise) mutual information in collocation

extraction, 31-40.[5] 인터넷 통계정보검색시스템, 2012년 인터넷 이용실태조사 최종보고서,

2013.02.22.[6] http://en.wikipedia.org/wiki/Language_identification[7] https://code.google.com/p/language-detection/[8] http://kkma.snu.ac.kr/documents/[9] http://kkma.snu.ac.kr/kkma_manual.pdf[10] http://kldp.net/projects/hannanum/[11] http://kldp.net/projects/hannanum/forum/316173/698/[12] http://pig.apache.org/[13] http://hadoop.apache.org/[14] http://docs.mongodb.org/manual/

Page 18: PMI를 활용한 twitter 데이터에서의 이슈 키워드 추출

Appendix 1 - 3월 31일에 대한 트윗 데이터가 없는 사실에 대한 검증자료

다음 소스코드는 3월 31일에 대한 트윗 데이터를 검색하는 Python 스크립트이다.

count = 0for i in range(50):

with open('part-r-%05d' % i, 'r') as f:for line in f:

if 'Sun Mar 31' in line:count += 1print line

print count

그리고 다음 화면은, 전체 데이터에 대한 위 스크립트를 수행 한 결과이다. 출력 결과가 0 이므로, 제공된 데이터에서 3월 31일에 대한 데이터가 없다는 것을 알 수 있다.