자연어처리 중에서 감성분야는 사회적으로나 상업적으로 유용한 분야 중 하나라고 생각합니다. 사용자들에 대한 감성을 파악하는 것은 우리가 인지할 수 있지만 컴퓨터는 이를 인간처럼 이해하기 힘든 분야죠. 오늘은 쉬운 논문 중 하나인 "A Clustering Analysis of Tweet Length and its Relation to Sentiment" 을 리뷰하고자 합니다.
주장의 근거를 빠르게 접근하기 위해서 맨 뒤에서 처리하지 않고 바로 문단의 끝에 적었습니다. 저자가 너무 많을 경우 가독성이 떨어져서 2명까지만 적었습니다. Reference에 대한 자세한 내용은 해당 논문을 참조해주세요. (저처럼 논문이 익숙하지 않은 사람들을 위해서 적었습니다.)
Abstract
논문에서는 두 가지 주제를 다루고 있습니다.
1. 기존 딕셔너리를 사용해서 감성점수 사전을 만드는 혁신적인 방법.
2. 트위터 길이을 기반으로 한 감성 점수 Clustering
1 Introduction
2006년도에 시작한 트위터는 2014년까지 645 million 유저가 하루에 58 million개의 트윗을 만든다고 합니다. 9000개의 트윗이 매 초마다 전세계에서 보내집니다 [6]. 주관적인 텍스트에 대한 감성분석을 위한 다양한 방법이 있지만 Binary Classification(Good vs Bad, Positive vs Negative)와 감성 점수를 위한 scale-based system을 사용하는 방법이 가장 유명한 2가지 방법이라고 합니다 [9]. 트위터는 140개의 단어 제한이 있으므로 의미를 전달하기 위해서 기발한 방법을 사용하기도 합니다. 다양하고 방대한 양을 지니고 있으므로 감성 분석을 위한 타겟이 되는 것은 자연스러운 일입니다.
[6] [_Statistics Brain. (2014). Twitter statistics_]
[9] [Mullen, T. (2012). Introduction to sentiment analysis_]
2 Research Description
Twitter에는 이미 다양한 감성분석이 존재합니다. 선거 [1], 제품리뷰 [2], 트위터 사용자의 시간에 따른 기분 변화 [5].
프로젝트에서 처음으로 하는 일은 Twitter Tweet Application Programming Interface(API)를 통한 트윗을 가져오는 일입니다. 그 다음에는 잘 알려진 감성분석사전을 이용해서 맞춤감성사전을 만듭니다. 트윗의 감성점수는 각 단어의 감성점수들에 대한 합으로 구해집니다. 여기서 데이터는 영어와 US의 트윗만을 사용하였습니다.
데이터 준비가 끝나면 Weka (머신러닝 workbench)에서 k-means알고리즘을 이용한 clustering 을 진행합니다.
[1] [ Bakliwal, A., Foster, J(2013). Sentiment analysis of political tweets: Towards an accurate classifier]
[2] [Bukherjee, S. & Bhattacharyya, P. Feature specific sentiment analysis for product reviews. ]
[5] [Mislove, I., Lehman, S., Ahn, Y.(2010). Pulse of the nation: US mood throughout the day inferred from Twitter ]
3 Data Description & Processing
데이터를 받아오기 위해서는 트위터 계정이 필요하며 이를 통해서 JSON(JavaScript Object Notation)형식으로 파일을 받을 수 있습니다. 트위터에서 데이터를 받아올 수 있는 부분도 한정적입니다. 해당 논문에서는 일주일 중 가장 행복한 부분 2 부분과 가장 불행한 2부분을 선택했습니다.
커스텀 단어 사전에 대한 시작은 AFINN-111 [7] 사전을 이용해서 했습니다. 일반 사전보다 도메인을 적용한 'Domain specific sentiment lexicons]의 성능이 더 우수합니다 [4].
Custom Sentiment Dictionary: AFINN-111에서 감성점수가 0인 단어의 감성은 Domain의 감성 점수 평균으로 대체합니다. 이는 감성점수가 없는 단어도 연관관계가 있다는 가정에 의해 시도된 것 입니다.
해당 데이터는 14763 개의 트윗길이-감성점수 쌍으로 이루어져 있습니다.
다음으로 Unsupervised algorithm인 k-means clustering으로 분류를 진행합니다 [3].
[7] [ Nielsen, F. A. (2011). A new ANEW: Evaluation of a word list for sentiment analysis in microblogs.]
[4] [Minocha, A. & Signh, N. (2012). Generating domain specific sentiment lexicons using the Web
[3] [Han, J., Kamber, M., & Pei, J. (2012). Data mining: Concepts and techniques (3rd ed.). Waltham]
4 Experiments & Discussion
Weka의 단순한 k-means 알고리즘을 모두 default값으로 놓고 cluster의 개수를 2개로 설정해서 사용하였습니다.
67/33 퍼센트로 데이터가 분할되었고 9950/4813개의 데이터 분할이 있었습니다.
길이와 감성점수에 대한 분포는 Cone-Shape을 띄고 있습니다.
만일 길이와 감성점수에 대한 관계가 없다고 가정한다면 확률적으로 긍정과 부정이 나타나는 정도는 비슷하며 두 클러스터의 분포는 비슷해야 합니다. 그러나 문장의 길이가 길어짐에 따라서 variability가 증가하는 것을 볼 수 있습니다. 긍정은 긍정으로, 부정은 극단적인 부정으로 나타납니다.
데이터의 감성점수에 대한 전처리가 아주 조금만 이루어졌습니다. 그러나 custom sentiment dictionary에 대한 연구분야는 아직 진행중이며 확장하고 있습니다. 따라서 이에 대한 정답은 아직 정해지지 않았고 계속 연구되어야 하는 분야입니다.
Review> 해당 리뷰는 작성자의 주관이 많이 포함되어 있으므로 이에 대한 반론이나 생각은 언제나 환영입니다.
해당 논문에서 감성점수를 매기는 방법이 프로젝트의 핵심인 것 같습니다. 하나의 트윗에 대한 감성점수가 Variation이 크게 나타나지 않았다면 해당 논문의 결론도 이끌어 낼 수 없었을테니까요. 그래서 Score를 구하는 방법을 다시 생각해봤습니다. Domain Specific Dictionary는 아무래도 기존 감성이 확실한 단어들을 바탕으로 감성이 없는 단어도 그 도메인이 지배하는 전체적인 감성점수를 반영하는 것 같습니다. 트위터에서 '초코송이'라는 단어는 Base Dictionary에서는 아뭉 의미도 없지만 Custom Dictionary 에서는 트위터의 평균 감성점수를 지니고 있을 것 같습니다.
Domain은 그 유저들이 공유하는 감성점수가 있으므로 아이디어가 아주 좋은 것 같습니다. 한 가지 아쉬운 점은 트위터라는 도메인이 굉장히 크기 때문에 이를 더욱 세분화 했다면 좋았을 것 같습니다.
한 가지 의문점은 왜 단어의 길이가 길어질수록 감성점수가 극단적으로 나타나는지 입니다. 이에 대해서 다음과 같은 가정을 조심스럽게 해봅니다.
* 감성이 극단적인 사람들은 말이 많다.
* 단어의 길이가 길어야지 감성 점수가 올라간다.
이에 대한 궁금점을 해소하기 위해서 하나의 트윗의 감성점수를 구하는 방법을 찾아봤습니다.
" assign each tweet a sentiment score based on
the sum of the scores of its individual term sentiment scores"
해당 연구에서는 트윗의 감성점수를 평균이 아닌 Sum으로 했습니다. 따라서 긴 문장에 부정적인 단어가 많이 포함되고 이는 필연적으로 더 낮은 감성점수로 이어집니다. 예를 들어, 아래 두 문장 중 뒤에 있는 문장이 감성점수가 더 낮습니다.
/기분이 나쁘다. / 나쁘다 기분이 나쁘다/
'딥러닝 > 자연어(NLP)' 카테고리의 다른 글
나만의 자연어처리 공부방법 (0) | 2020.08.24 |
---|---|
About NLP (0) | 2020.07.23 |
Colab에서 한글 사용하기 (0) | 2020.07.17 |
Word2Vec을 활용한 단어 유사성 (0) | 2020.07.15 |
Word2Vec Gensim 실습 코드 (0) | 2020.06.11 |