Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,659 views

Published on

2013년 제 1회 빅데이터 경진대회 우수상 - Team Herring

Published in: Data & Analytics
  • Be the first to comment

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

  1. 1. 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는 와 가 독립적으로 발생했다고 가정 했을 때의 동시 발생 확률과, 측정 된 와 의 동시발생 확률을 비교함으로써 두 변수가 얼마만큼의 상관도를 갖고 있 는지 판단한다.
  2. 2. 두 변수 사이의 연관도가 높으면 당연히 는 에 비해 월등히 높을 것이다. 그리고 그 결과로  ≫  가 될 것이다. 만약 두 변수 사이의 연관도가 매우 낮다면, 즉 독립적일 때와 비슷하다면  ≈ 이므로,  ≈ 이다. 또한 두 변수 사이의 관계가 상호 보완적인 관계라면, 는 에 비해 매우 작은 값을 갖게 될 것이다. 그 때의 는 보다 작은 값을 갖게 될 것 이다.    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에 사용되는 변수를 조절해야 한다. 이 문서에서는 특정 기간 동안 발생한 한 국어 트윗을 일별로 저장하고 있다고 가정한다. 또한, 그 단순히 그 전체 기간 동안
  3. 3. 발생한 Tweet을 분석하여, 그 중에서 가장 이슈가 되었던 키워드를 추출하는 것이 아 니라, 각 일별로 발생한 Tweet들을 분석하여, 각 날짜별로 어떤 것들이 이슈였는지에 대해 그 키워드를 추출 해 주는 것이다. 때문에, 위 PMI에서 사용되었던 두 변수 와 를 명사와 해당 날짜로 정의해야 한다. 여기서 명사는, 형태소 분석을 통해 추출된 명사들이다. 위와 같이 정의했을 때 전체 Tweet의 수를 라 하면, PMI에 등장하는 기호들은 다음과 같이 계산될 수 있다.    단어가등장한횟수    날짜에작성된의수    날짜에작성된중에가등장한횟수 위 식을 PMI에 적용하여 가지고 있는 데이터의 날짜 수 와, 수집한 데이터에서 등장한 단어의 개수 에 대해 각각의 날짜   와 각각의 단어    쌍이 갖는 연관도 를 계산 할 수 있다. 계산된 를 이용하면, 단어별로 각각의 날짜와 어느 정도의 연관성을 갖는 지 알 수 있다. 각 날짜의 Tweet들에 등장하는 단어이 다른 날에 비해서 얼마 나 더 높은 연관도를 갖는가를 이용해 날짜  이슈 키워드를 추출한다. 이 과정을 정리하면 다음과 같다. 1. 날짜 에 등장하는 단어 중 가장 많이 등장하는 단어 개를 추출한다. 2. 추출된 모든 단어 에 대해 다음 2.1 ~ 2.3의 과정을 반복한다. 2.1 모든 날짜와의 연관도 를 계산한다. 2.2 의 평균 를 계산한다. (평균 대신 다른 지표 사용 가능) 2.3 날짜 과 사이의 편차 를 계산한다. 3. 편차  중에서 가장 높은 값을 갖는 단어 를 날짜 의 이슈 키워드로 한다. 4. 위 1 ~ 3까지의 과정을 모든 날짜 에 대해 반복한다. 알고리즘 1 각 날짜의 이슈 키워드를 추출하는 알고리즘
  4. 4. 위와 같은 과정을 통해 추출된 날짜별 키워드의 예시는 다음과 같다. 다음 예시는 2013년 3월 17일에 생성된 트윗 중에서 추출된 이슈 키워드들을 PMI 편차 값을 기 준으로 내림차순 정렬한 결과이다. “날짜:키워드,PMI 편찻값” 의 형태로 저장하였다. 3월 17일에 김연아 선수의 피겨 프리스케이팅 프로그램이 있었기 때문에 김연아와 피겨와 관련된 이슈 키워드가 높은 순위로 추출 될 것을 볼 수 있다. 또한, 그 대회에 서 우승이 결정되었기 때문에, 우승이라는 키워드도 높은 순위에 올라와 있는 것을 볼 수 있다. 그림 1 3월 17일의 이슈 키워드 4. 추출된 키워드의 그룹화 위 그림과 같이 3월 14일의 키워드가 추출 되었을 때, 단순히 추출된 키워드만 나 열하면 ‘화이트’라는 키워드와, ‘데이’라는 키워드가 동시에 높은 순위에 있다는 것을 알 수 있다. 하지만 사실 이 두 단어는 같이 ‘화이트데이’ 혹은 ‘화이트 데이’로 같이 하나의 키워드로 등장해야 하는 것이 적절하다. 때문에 추가적으로 두 단어를 하나의 연관된 단어로 인식하여 그룹화 해 주는 작업이 필요하다. 이 그룹화 과정에서도 앞서, 키워드를 추출하는 과정에서 사용한 PMI를 이용한다. 각 날짜에 이슈화 되었던 키워드들 이 추출되었으면, 각 날짜별 이슈 키워드들 사 이의 유사도를 PMI를 이용하여 계산한다. 그리고 계산한 이슈 키워드들 사이의 PMI
  5. 5. 를 이용하여 키워드를 그룹화 한다. 이 과정을 정리하면 다음과 같다. 1. 임의의 날짜 에 발생한 트윗에 대해, 이슈 키워드 추출 알고리 즘을 이용하여 추출된 키워드 중 상위   개를 추출 한다. 2. 날짜 의 트윗에서 추출된 키워드   에 대해 다음 과정을 반 복한다. 2.1 날짜 에 생성된 트윗을 대상으로, 키워드   가 등장 할 확률   을 계산한다. 3. 날짜 의 트윗에서 추출된 임의의 서로 다른 임의의 키워드          에 대해 모든 두 키워드 쌍이 날짜  에 발생한 트윗 중에서 동시에 등장할 확률     을 계 산한다. 4. 계산한 확률   들과, 교집합에 대한 확률       쌍 들을 이용하여 두 키워드 사이의 날짜 에 대한 상관도 PMI      를 구한다.       log           5. 날짜 에 대해서, 임의의 키워드   에 대해, 해당 키워드가 포함된 모든 두 키워드 쌍의 PMI 값의 평균   를 구한다. 6. 키워드 쌍     의 상관도      와   의 차이, 즉 PMI와 그 평균 사이의 편차     를 계산한다. 7. 날짜 의 이슈 키워드 중에서 편차의 값이 큰 키워드 쌍을 연 관된 키워드 쌍으로 저장한다. 8. 위 과정을 모든 날짜 에 대해 반복한다. 알고리즘 2 각 날짜별 이슈 키워드를 그룹화 하는 알고리즘 위와 같은 과정을 통해 그룹화 된 키워드의 결과는 다음과 같다.
  6. 6. 그림 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월 한 달간의 트윗을 분석하여 각 날짜별로 이슈가 되었던 키워드를 추출하고 그 룹화를 수행하는 과정은 다음 그림과 같은 과정을 통해 진행된다.
  7. 7. 그림 3 트위터 데이터를 분석하여 각 날짜별 이슈 키워드를 추출하는 과정 가장 먼저 JSON 형태의 데이터를 전처리 과정을 통해 불필요 한 값을 제거한다. 뿐만 아니라 전처리 과정에서는 각 트윗 데이터를 형태소 분석기를 이용하여 트윗 안 에서 등장하는 명사를 추출한다. 그리고 추출한 명사를 구분자로 구분하여 저장한다. PMI 전처리 과정에서는 추출된 명사들을 이용하여 PMI를 계산하는데 필요한 여러 값을 계산한다. PMI 계산 과정은 이전 단계에서 계산된 여러 값들을 수식에 대입함으 로써 이루어진다. 그리고 이 계산된 PMI는 단어별 PMI 평균과의 편차를 구하고, 그 편차를 날짜별로 분류한다. 날짜별로 분류된 키워드와 편차 쌍은 편차 값을 기준으로 정렬함으로써 해당 날짜에 이슈가 되었던 키워드를 추출한다. 마지막으로, 추출된 키 워드들을 이용하여 키워드들 사이의 그룹화를 수행함으로써 최종적인 결과물을 출력 한다. 6.1 데이터 전처리 데이터 전처리 과정은 데이터를 필터링 하고 형태소 분석을 수행한다. 트윗 데이터 는 다음과 같은 JSON 형태로 저장되어 있다. 그림 4 JSON 데이터의 예시 이 데이터를 모든 트윗에 대해 형태소 분석기를 이용하여 문장에서 단어를 추출한 다. 위와 같은 데이터의 형태소 추출의 결과로는, “우리, 민요, 김연아, 군밤, 제라블” 이 명사로 추출된다. 이 결과들을 이용하여 PMI 계산에 필요한 값을 구한다.
  8. 8. 그림 5 데이터 전처리 과정의 흐름도 위 다이어그램은 이러한 과정이 실제 Hadoop에서 어떤 형태로 진행되는지에 대한 것이다. Mapper에서 읽은 JSON 형태의 데이터를 바로 형태소 분석을 수행하지 않 고, 현재 트윗의 언어를 검출한다. 언어를 검출하지 않았을 때에는 실제 형태소 분석 과정에서 5배 정도 시간이 더 소모되었다. 때문에 형태소 분석을 수행하기 전에 미리 현재 트윗의 언어를 검출함으로써 수행시간을 크게 단축시킬 수 있었다. 언어를 판별하여 한글 트윗으로 분류된 트윗 데이터에 대해 가장 먼저 정규식 매칭 기법을 이용하여 불필요한 데이터를 걸러낸다. 걸러진 데이터는 트위터 내에 존재하 는 인터넷 웹 페이지의 주소, 어떤 사용자를 언급(mention)했을 때의 그 사용자의 고 유 번호, 해시 태그에 사용되는 특수문자, 그 외에도 이모티콘이나 전각 문자 등 형태 소 분석이 어려운 내용들이 포함된다. 이렇게 필터링 된 데이터를 이용하여 형태소 분석을 수행한다. 형태소 분석을 수행 할 때는, 크게 오픈 소스 라이브러리를 조사하였다. 그 두 라이브러리는 KAIST에서 제공하는 ‘한나눔 형태소 분석기’와 서울대학교에서 제공하는 ‘꼬꼬마 형태소 분석기’ 이다. 두 가지의 형태소 분석기를 비교하였는데, 비록 성능은 비교적으로 ‘한나눔 형 태소 분석기’가 좋았지만, 속도 면에서 ‘꼬꼬마 형태소 분석기’가 월등히 좋았기 때문 에 ‘꼬꼬마 형태소 분석기’를 채택하였다. 하지만 많은 양의 데이터에 대해 수행해야 했으므로, 실제 데이터를 Hadoop 기반 의 MapReduce를 수행하는 장비와 같이 수행하기는 힘들다고 판단되어서, 외부 장비 에 서비스 데몬을 띄우고, Hadoop의 Mapper에서 원격 장비에 XML-RPC, Thrift Protocol 등으로 접속하여 형태소 분석 결과를 반환 받는 형태로 구성하였다. 이러한 과정을 거친 형태소 분석 결과를 Mapper에서 미리 정의된 출력 형태에 맞 추어 출력한다. 6.2 PMI 전처리 앞서 설명 한 PMI를 이용한 이슈 키워드 추출을 수행하기 위해선 몇 가지 확률 값 을 미리 계산해야 한다. 때문에 이 과정에서는 전체 단어와 날짜에 대해 와 , 그리고 를 계산한다. 각 확률을 구하기 위해선 전체 날짜에 등장하는 단어의 개수와, 각각의 날짜에 등장하는 단어의 개수를 알아야 한다. 다음은 그 각각 의 결과에 대한 예시이다. 왼쪽은 전체 날짜에 대해 단어가 등장한 횟수를 계산한 결
  9. 9. 과이고, 오른쪽은 각 날짜별로 단어를 계산한 결과 중에서 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 값을 계산 할 때  를 계산하는 과정에서 이용된다.
  10. 10. 그림 7 PMI 전처리 과정에 대한 흐름도 6.3 PMI 계산 이 과정에서는 와 를 이용해 각 날짜에 대한 단어별 PMI를 계산한다. 다 음 화면은 ‘김연아’가 각 날짜와 얼마의 PMI 값을 갖는지에 대한 결과이다. 이 결과 를 통해 평소에는 ‘김연아’라는 단어가 평소에 비해 3월 15일과 17일에 이슈가 되었 다는 것을 예측 할 수 있다. 실제로 3월 15일과 17일에는 김연아 선수의 피겨스케이 팅 경기가 있는 날이었다. 그림 8 PMI 계산 결과 예시 이 PMI를 계산하는 과정은 한 번의 MapReduce 작업으로 수행된다. 먼저 앞서 계 산한 모든 날짜에 대한 단어 등장 횟수와, 날짜 별 단어 등장 횟수를 Mapper에서 읽
  11. 11. 는다. 이 때, 데이터의 Key를 단어로 하여 두 데이터를 Reduce-side Join을 수행한 다. Reduce-side Join의 결과로 각 단어를 기준으로 두 데이터가 합쳐진다. 합쳐진 결과가 Reducer로 병합되기 때문에, Reducer에서 PMI를 계산하게 된다. 위에서 설명하였듯이 모든 날짜에 대한 단어 등장 횟수는 로 계산되고, 날짜별 단어의 등장 횟수는 가 되며, 는 전체 트윗의 수에 비해 해당 날짜에서 얼마만큼의 트윗이 생성되었는가를 결정하는 확률이기 때문에 쉽게 PMI를 계산할 수 있다. Reducer에서는 계산한 PMI 결과를 다시 각 날짜에서 등장한 단어들이 갖는 PMI 쌍의 값을 출력한다. 그림 9 PMI 계산 과정에 대한 흐름도 6.4 PMI 편차 계산 각 단어별, 각 날짜별 PMI를 계산하고, 그 결과를 분석함으로써 3월 15일과 17일에 ‘김연아’라는 단어가 이슈가 되었을 것이라고 추측 할 수 있었다. 이 과정을 수행하기 위해서는 각 단어에 대해 전체 날짜에 대한 PMI의 평균을 계산하고, 각 단어가 평균 에 비해 날짜마다 얼마만큼의 차이를 갖는지 계산해야 한다. 다음 화면이, 그 평균에 대한 결과이다.
  12. 12. 그림 10 각 단어의 PMI 평균 예시 이 평균을 구하는 과정은 단순히 한번의 Map 과정과 Reduce 과정으로 수행된다. 먼저 Mapper에서 입력 데이터를 받을 때, 각 단어별 PMI의 평균을 계산 할 것이므 로 입력받는 데이터의 Key를 단어로 설정한다. 입력 Key를 단어로 설정하면, Mapper 에서 읽은 데이터가 Reducer로 전송 될 때 단어별로 전송이 된다. Reducer에서는 이 Mapper에서 전송된 단어별 그룹 데이터 사이의 평균을 구한다. 이 구한 값을 출 력 Key를 단어로 하여 출력한다. 다음 다이어그램은 이 과정에 대해 도식화 한 것이 다. 그림 11 각 단어별 PMI의 평균을 계산하는 과정 6.5 날짜별 분류 최종적으로 각 날짜에 등장한 단어들에 대해 계산된 PMI 값과 위에서 구한 PMI의 평균 사이의 편차를 이용해 해당 날짜에서 가장 높은 값을 갖는 단어순으로 정렬한 다. 그리고 그 결과가 하나의 날짜에 대한 이슈 키워드이다. 다음 화면은 3월 17일의 이슈 키워드를 PMI 편차의 내림차순으로 정렬한 결과이다. 앞서 계산된 PMI값과 평 균과의 편차가 정상적으로 계산되었음을 알 수 있다.
  13. 13. 그림 12 정렬된 날짜별 단어의 PMI값 편차 날짜별로 단어의 PMI값 편차를 구하는 과정 역시 한번의 MapReduce 과정으로 수행 된다. 계산된 날짜와 단어별 PMI와 앞서 구한 단어별 PMI의 평균값을 JOIN 연산을 수행함으로써 수행된다. 이 MapReduce 과정을 거치면, 각 날짜에서 등장한 단어에 대해 각 단어 PMI 평균값과의 편차가 계산되고, 그 결과를 편차의 크기에 맞추어 정 렬을 수행한다. 그 결과로, 각 날짜별로 단어의 PMI값 편차가 출력되며, 그 값들이 내림차순으로 정렬 된 결과를 보인다. 이 과정에서 정렬은 Apache Pig를 사용하였다. 그림 13 날짜별 단어의 PMI 편차를 계산하고 정렬하는 과정
  14. 14. 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보 다 큰 키워드 쌍을 선택하였다.
  15. 15. 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 화이트 데이, 모의고사, 화이트 솔로, 민혁 M4M 2013. 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에서 확인 할 수 있다. 웹 화면은 각각의 과정마다 나오는 데이터를 확인할 수 있도록 구현되어 있다. 맨 처음의 전처리 과정은 데이터가 너무 많아 웹으로 제공하는 것이 어려워 제외하였고, 나머지 데이터는 웹에서 확인할 수 있다. 그리고 결과를 출력 할 때, 그래프 형태로 출력하는 경우로 확장 가능성이 있기 때
  16. 16. 문에 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일 데이터에 대해서는 분석을 수행하
  17. 17. 지 못하였다. 그 이유는 실제 데이터에 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/
  18. 18. Appendix 1 - 3월 31일에 대한 트윗 데이터가 없는 사실에 대한 검증자료 다음 소스코드는 3월 31일에 대한 트윗 데이터를 검색하는 Python 스크립트이다. count = 0 for i in range(50): with open('part-r-%05d' % i, 'r') as f: for line in f: if 'Sun Mar 31' in line: count += 1 print line print count 그리고 다음 화면은, 전체 데이터에 대한 위 스크립트를 수행 한 결과이다. 출력 결과가 0 이므로, 제공된 데이터에서 3월 31일에 대한 데이터가 없다는 것을 알 수 있다.

×