이 포스팅은 2017년 1학기 <빅데이터 분석기법의 이해와 활용> 수업에서 사용한 발표자료를 정리하여 작성하였습니다.
사람이 작성하는 텍스트 안에는 그 글의 주요 대상이 되는 주제(Topic)가 있을 것이고, 그 주제에 대한 글쓴이의 의견(Opinion)이 있게 마련입니다. 글의 대상이 되는 주제를 찾아내는 작업을 토픽 모델링(Topic Modeling)이라고 하며 이전에 다루었던 LDA와 같은 방법이 널리 쓰이지요. 이 기술은 자동적으로 텍스트가 다루는 주제가 무엇인지 계산해내는 방법을 제공합니다. 마찬가지로 그 주제에 대한 글쓴이의 의견을 파악하는 것을 감성 분석(Opinion Mining, 또는 감성분류, sentiment classification)이라고 합니다. 이 기술을 이용하면 어떤 글에 저자의 주관적인 의견이 반영되었는지, 아니면 객관적인 글인지, 만약 주관적이라면 긍정적인지 부정적인지를 판단해 낼 수 있습니다. 토픽 모델링과 마찬가지로 굉장히 넓은 분야에 활용할 수 있는 잠재력이 있는 기술이라고 할 수 있습니다.
감성 분석의 3가지 주요과제를 꼽자면 다음과 같은데요
| POS | ID | Pos. Score | Neg. Score | Synset Terms |
|---|---|---|---|---|
| a | 00001740 | 0.125 | 0 | able#1 |
| a | 00002098 | 0 | 0.75 | unable#1 |
| a | 00002312 | 0 | 0 | dorsal#2 abaxial#1 |
| a | 00005599 | 0.5 | 0.5 | unquestioning#2 implicit#2 |
어휘사전을 받아보면 위의 표와 같은 형식으로 구성되어 있다는 것을 알 수 있습니다. http://sentiwordnet.isti.cnr.it/ 에서 CC BY-SA 라이센스에 따라 자유롭게 배포되고 있습니다. Esuli 등이 이를 어떻게 구축하였는지 살펴보려면 먼저 WordNet에 대해서 알아봐야겠군요.
WordNet은 1985년 프린스턴 대학에서 시작된 영어 의미 어휘목록 구축 프로젝트입니다. 현재 3.1버전까지 개발되었고 http://wordnetweb.princeton.edu/perl/webwn 에서 확인해볼 수 있죠. 쉽게 풀어 설명하자면 거의 어지간한 영어 단어들을 같은뜻별로 묶어서 synset이라는 것을 만들고 그 synset들 간의 관계를 정리해놓은 사전입니다.
위 그림을 보시면 민트색 사각형들이 각각 하나의 synset입니다. 영단어 형용사 good을 예로 들자면 이는 단순히 '좋다'는 뜻 말고도 '건강하다, 건전하다' 등 여러가지 의미가 있을 수 있습니다. good이 어떤 의미인지 명확히 하기 위해 그것과 같은 의미를 가지는 동의어들을 묶어서 synset으로 만들고, 거기에 뜻풀이를 매겨놓죠. 위의 홀로 있는 good Synset은 '좋다'는 의미고, good, sound synset은 '건전하다'는 의미겠죠? 그리고 그 synset이 다른 synset과 어떤 관계가 있는지 다 연결해줍니다. 예를 들어 유사한 의미나 반의어도 있겠고, 상위어/하위어나 부분어 등도 표현합니다. 이로써 하나의 synset은 명확한 의미를 가지게 되고, 그 의미와 관계가 있는 다른 의미들도 쉽게 찾을 수 있게 됩니다. 현재 3.1버전에서는 명사, 형용사, 동사, 부사를 대상으로 약 11만개의 synset이 구축되어 있습니다.
(이 좋은 녀석을 구축해준 프린스턴 대학에 감사를 드릴뿐이죠)
Esuli와 Sebastiani의 전략은 다음과 같습니다.1
11만개의 synset마다 일일히 수작업으로 감성 스코어를 매기는 것은 불가능한 일입니다. 대신 일부 synset만 정확하게 긍정/부정을 매기고, WordNet의 synset 관계를 이용해 긍정/부정 단어 집합을 자동적으로 확장해보면 어떨까요?
편의를 위해 을 최초 긍정 단어 집합,
을 최초 부정 단어 집합이라고 하겠습니다. i번 확장을 거친 긍정 / 부정 단어 집합은
라고 할게요.
확장 과정은 다음과 같이 정의할 수 있습니다.
확장된 긍정 단어 집합 = 기존 긍정 단어 집합 + 기존 긍정 단어들의 유의어들 + 기존 부정 단어들의 반의어들
긍정적인 의미의 단어와 유의한 단어 역시 긍정적인 단어일것이고, 반대로 부정적인 단어의 반의어 또한 긍정적이겠죠. 이를 이용하여 긍정 단어 집합을 확장시키는 것입니다. 마찬가지로 부정 단어 집합도 확장시킬 수 있습니다.
이를 수식으로 쓰면 아래와 같겠죠.
이 확장과정을 여러번 거칠수록 전체 긍정 단어, 부정 단어 목록은 늘어날 것입니다. 대신 그 정확도는 조금 떨어질수도 있겠죠.
자 이제 중립인 단어 집합을 구해봅시다. 가장 간단한 것은 전체 synset 중에서 어느 쪽에도 속하지 않은 여집합들을 모두 중립이라고 정의할 수 있을 겁니다. Esuli 등은 여기에 General Inquirer lexicon에서 긍/부정 어디에도 분류되지 않은 어휘목록도 추가하여 중립 단어 집합을 구축했다고 하네요.
이렇게 최종적으로 긍정 단어 집합, 부정 단어 집합, 중립 단어 집합을 구했으니, 분류기를 생성할 차례입니다. 하나의 단어를 긍정/부정/중립 중 하나로 분류해야 하므로 다음과 같은 전략 중 하나를 고려해볼 수 있겠죠.
이 방법이 엄밀한지는 모르겠지만, 나쁘지 않은 발상인듯합니다.
WordNet이 업데이트됨에 따라 SentiWordNet도 같이 업데이트되었는데, 3.0버전에서 새로 도입한 방법이 아주 신박합니다. 기본적으로 위에서 제시한 방법을 사용하되, Random Walk Model을 이용한 긍정/부정 점수 전파 방법을 병행했습니다.2 앞서 언급했듯이 WordNet의 synset들은 뜻풀이를 가지고 있습니다.
bad : having undesirable or negative qualities
bad synset의 뜻풀이는 위와 같습니다. 여기서 bad는 정의당하는 항이므로 피정의항(definiendum)이라고 하고, having undesirable~~ 은 정의하는 항이므로 정의항(definiens)이라고 한답니다. (어려운 영어단어처럼 보이시겠지만 사실 라틴어 어미를 잘보면 의미가 뻔하게 보이는 단순한 라틴어 분사일뿐입니다 ^^) 여기서 재밌는 가정을 도입하는데요
그럴싸합니다. 이를 다르게 표현하면 정의항 -> 피정의항으로 향하는 네트워크를 그릴 경우 긍정/부정 점수는 정의항->피정의항으로 연결되는 링크를 타고 흐른다는 것이죠. 네트워크 이론을 공부하신 분들은 감이 오실겁니다. 어디선가 많이 본 그 모델. Random Walk Model(or Random Surfer Model)이죠. 이에 속하는 대표적인 것에는 PageRank(이전글을 참조)가 있고, 실제로 Esuli 등은 정의항 -> 피정의항으로 연결한 그래프에서 긍/부정 스코어를 전파하는 과정이 PageRank 변형의 일종이라는 것을 증명해냈습니다.3
다만 gloss는 단어로 구성되어있지 synset으로 구성되어 있는 것이 아니므로 정의항(synset) - > 피정의항(synset)으로의 그래프를 그리는데 바로 사용할 수가 없었습니다. 그래서 synset의 gloss도 synset으로 분석되어 있는 eXtended WordNet을 이용해 정의항 -> 피정의항으로 연결되는 그래프를 그릴 수 있었다고 합니다.
이렇게 얻은 synset 간 그래프를 바탕으로 긍정적인 단어에 대해서 한 번, 부정적인 단어에 대해서 한 번 PageRank를 계산함으로써 긍정 가중치 / 부정 가중치를 구할수 있겠죠. 하지만 널리 알려져 있다시피 PageRank로 구한 가중치 값은 멱법칙을 따르고, 또한 모든 노드의 가중치 합이 1이 되기 때문에, 각각의 노드들의 가중치는 1에 비하면 터무니 없이 작다는 것이죠. 이 값을 그대로 사용할 경우 대부분의 synset들은 중립으로 치우치게 결과가 나올 수 있으므로, 적절한 수치가 되도록 긍정 가중치 및 부정 가중치를 정규화했다고 합니다.
SentiWordNet은 위와 같은 방법대로 WordNet의 특성을 최대한 활용해서 효율적이면서 높은 품질의 감성 사전을 구축할 수 있었습니다. 논문 읽으면서 '같은 방법을 한국어 감성 사전 구축에 적용할수는 없을까?' 고민해보았는데요, 그전에 한국어에는 영어의 WordNet처럼 범용적이면서도 검증된 의미 어휘 사전이 부족해서 쉽지 않을 것 같습니다. 표준국어대사전을 날로 사용하기에는 어려움이 많을듯하구요, 한국어 NLP의 갈 길은 멀고도 험하다는 생각을 하며(하지만 그래서 할 일이 많다는 생각을 하며!!) 논문 읽기를 마치게 되었답니다.
| 빠른 구문 검색을 위한 인덱싱 기법 (2) | 2018.10.14 |
|---|---|
| 벡터 공간 모형에서의 효과적인 질의 평가 방법 - WAND를 활용한 2단계 검색 (0) | 2018.10.13 |
| 사회과학 연구방법론 (0) | 2018.06.28 |
| [고고학연구법] 고고학사, 발굴, 연대측정 (0) | 2016.10.20 |
| [문헌정보학입문] 시각화자료 (0) | 2016.06.11 |
| [문헌정보통계] 10. 카이제곱 검정 (2) | 2016.06.11 |
댓글 영역