이 포스팅은 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을 이용한 긍정/부정 점수 전파 방법을 병행했습니다. 앞서 언급했듯이 WordNet의 synset들은 뜻풀이를 가지고 있습니다. 2
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 |
댓글 영역