단어 의미 중의성 해소(Word Sense Disambiguation) 기술들

Posted by 적분 ∫2tdt=t²+c
2017.07.04 16:40 그냥 공부

언어에는 다른 단어이지만 형태가 같은 동철이의어(또는 소리가 같지만 다른 단어인 동음이의어)도 많습니다. 그리고 같은 단어라 할지라도 맥락에 따라 쓰이는 의미가 다릅니다. 따라서 해당 글자가 여러 동철이의어 중 어떤 단어를 가리키는지, 더 나아가 각 단어에 있는 여러 가지 세부 의미(의미 갈래) 중 해당 맥락에서 사용한 세부 의미가 어떤 것인지 판별하는 것은 굉장히 중요한 작업이지요. 이를 단어 의미 판별(Word Sense Disambiguation, =단의 의미 중의성 해소, 갈래뜻 판별)이라고 부릅니다. 단어 의미 판별은 기계 번역이나 정보 검색, 정보 추출과 같은 자연언어처리 분야에 큰 도움이 될 수 있습니다. 본 포스팅에서는 Pal, A. R., & Saha, D. (2015). Word sense disambiguation: A survey. arXiv preprint arXiv:1508.01346. 논문 및 기타 논문들을 참조하여 단어 의미 판별을 위한 알고리즘에는 어떤 것이 있고 그것들의 장단점이 무엇인지에 대해서 살펴보고자 합니다.



단어 의미 중의성 해소(WSD)

앞서 언급했듯 단어 의미 중의성 해소(혹은 단어 의미 판별)은 특정 문장에 등장하는 단어들이 어떤 의미인지 판별하는 작업을 가리킵니다. 예를 들어 '밤'이라는 단어를 생각해봅시다.

  1. 오늘 은 비가 많이 오네요.
  2. 은 숯불에 구워먹어야 제맛이죠.
  3. 에는 좀 자라.
위 문장에서 밤은 각기 다른 의미로 쓰였습니다. 국립국어원 표준국어대사전에 따르면 1번, 3번에서 사용된 밤은 밤01에 해당하고, 2번의 밤은 밤02에 해당합니다. 사람이 문맥에 따라 이 단어들을 구분하듯 컴퓨터를 통해서 자동으로 이 작업을 수행하는 것이 WSD의 목표입니다.


WSD와 유사한 것으로 WSI(Word Sense Induction)이 있습니다. WSI는 단어 의미 추론이라고 번역되며, 해당 단어가 사전 상의 몇 번 단어인지를 찾아내는 대신, 사용 맥락에 따라 중의적이 문맥을 분리해내는 것에 집중하는 작업을 가리킵니다.


  • 단어 의미 추론(Word Sense Induction): 특정 단어가 같은 의미로 사용된 문맥들끼리 묶어서, 다른 의미로 사용된 문맥을 구별해내는 작업
    예: 1, 3번 문장의 밤 // 2번 문장의 밤 처럼 같은 의미의 문맥끼리 묶어냄
  • 단어 의미 중의성 해소(Word Sense Disambiguation): 해당 문맥에서 특정 단어가 사전적 의미 중 어디에 해당하는지 찾아내는 작업
    예: 1번 밤->밤01, 2번 밤->밤02, 3번 밤->밤01 처럼 각각의 단어에 대해 사전 상의 의미와 연결지음


단어 의미 중의성 해소의 경우 해당 단어의 의미를 사전의 각 의미와 연결하는 작업이 필수적이기 때문에 사전 자료나 기타 지식 기반 데이터베이스를 필요로 하게 됩니다. 따라서 대게 지식 기반 방법(Knowledge-based approach)이나 지도 학습 방법(Supervised approach)을 사용하게 됩니다. 반면 단어 의미 추론의 경우 굳이 단어의 의미를 사전 상의 의미와 연결하지 않아도 되므로 비지도 학습(Unsupervised)을 통한 접근이 다양하게 등장하고 있다고 하네요.




지식 기반(Knowledge-based) WSD

지식 기반 WSD는 컴퓨터가 읽을 수 있는 사전이나 시소러스 등을 바탕으로 단어의 의미를 추론하는 접근방식입니다. 당연히도 컴퓨터가 처리할 수 있는 형태로 방대한 데이터를 집어넣어야하기 때문에 굉장히 데이터베이스 구축이 어렵고 많은 노력이 필요합니다만, 사람이 직접 선별해서 데이터를 넣으므로 가장 높은 정확도를 낼 수 있다는 장점이 있습니다.

레스크 알고리즘(Lesk Algorithm)

1980년대 후반에 등장한 최초의 지식 기반 WSD 알고리즘입니다. 이 분야에서는 고전이라고 할 수 있는듯합니다. 알고리즘은 간단합니다. 중의성을 해소할 어구에 포함된 단어들의 뜻풀이를 나열하고 그 뜻풀이 중에서 겹치는 단어를 최대로하는 뜻풀이들을 선택하는 것이죠. "비 구름"이라는 어구로 예를 들어보겠습니다.
구름에는 다음과 같은 뜻풀이가 있습니다. (표준국어대사전에서 2개씩만 뽑아보았습니다.)

  • 비01. 대기 중의 수증기가 높은 곳에서 찬 공기를 만나 식어서 엉기어 땅 위로 떨어지는 물방울
  • 비02. 먼지나 쓰레기를 쓸어 내는 기구
  • 구름01. 공기 중의 수분이 엉기어서 미세한 물방울이나 얼음 결정의 덩어리가 되어 공중에 떠 있는 것
  • 구름02. 귀룽나무, 참나무 껍질 따위를 약간 좁은 듯하고 길게 오린 것
즉 "비 구름"이라는 단어가 가질수 있는 의미조합은 4가지가 되는데 이중에서 뜻풀이들끼리 겹치는 단어가 가장 많은 경우를 택해봅시다. 비01, 구름01일때 "공기, 물방울"이라는 단어가 겹쳐서 겹치는 단어가 가장 많으므로 "비 구름"은 아마 "비01 구름01"의 의미일 것이라고 추론하는 것이죠. 

고전적인 방법이기 때문에 단순하지만 여러 약점이 있습니다. 먼저 결과가 사전의 뜻풀이에 굉장히 의존적입니다. 그리고 의미적으로 연관 있다고 해서 반드시 뜻풀이 단어가 겹치는 것도 아니라는 문제가 있죠. 이를 해결하기 위한 여러가지 변형 알고리즘도 많이 제시되었습니다.

의미적 유사성(Semantic Similarity)

위에서 지적한 레스크 알고리즘의 약점을 해결하기 위해 제시된 방법 중 하나가 의미적 유사성을 이용하는 것이었습니다. Patwardhan, S., Banerjee, S., & Pedersen, T. (2003, February). Using measures of semantic relatedness for word sense disambiguation. In CICLing(Vol. 2588, pp. 241-257). 논문에서는 레스크 알고리즘을 변형하여 WSD를 수행하는 방법을 제시했습니다. 다만 이를 위해서는 의미적 유사성을 계산할 수 있도록 WordNet과 같은 시소러스가 구축되어 있어야 합니다. WordNet을 이용하면 두 단어의 세부 의미가 얼만큼 떨어져 있는지를 계산할 수 있습니다.(의미적 유사도 산출 단락 참고) 이를 통해서 특정 어구 내에서 의미적 유사도를 최대로 하는 세부 의미쌍을 찾을 수 있겠죠. 이를 선택하는 것입니다. 즉 레스크 알고리즘에서 뜻풀이끼리 겹치는 단어 수를 기준으로 사용했다면, 여기에서는 의미적 유사성을 기준으로 사용했다는 것이죠.

선택적 우선 순위(Selectional Preferences, 선택 제약)

단순히 단어 간의 의미적 유사성을 가지고 WSD를 수행하는 것에서 더 나아가 문법적인 특성을 적극적으로 활용하는 방법도 있습니다. 선택적 우선 순위(Selectional Preferences, 또는 선택 제약, selection restriction이라고도 함)라는 언어학적 개념을 도입하는 것인데요 대표적인 것으로 Ye, P. (2004, December). Selectional preference based verb sense disambiguation using wordNet. In Proceedings of the Australasian Language Technology Workshop (pp. 155-162). 의 논문이 있습니다. 선택적 우선 순위는 특정 단어가 다른 단어를 지배할 때(예를 들어 목적어를 지배하는 동사), 지배하는 단어의 의미에 따라 지배받는 단어들을 다르게 고르는 경향이 있다는 것을 뜻합니다. 예를 들어 win이라는 동사는 자동사로 쓰일 경우 '이기다'는 뜻으로 목적어를 받지 않지만, 타동사로 쓰일 경우 대게 '얻다, 타다'는 의미로 쓰이며 목적어를 받습니다. eat라는 동사는 목적어로 먹을수 있는 대상을 받으며, walk의 주어로는 움직일 수 있는 대상이 주로 옵니다. 이와 같은 지배하는 단어와 지배 받는 단어 간의 특성을 자질로 사용하면, 단어가 가지는 의미가 무엇인지 추론하는데 도움이 되겠죠.

그래프 기반

Agirre, E., & Soroa, A. (2009, March). Personalizing pagerank for word sense disambiguation. In Proceedings of the 12th Conference of the European Chapter of the Association for Computational Linguistics (pp. 33-41). Association for Computational Linguistics. 논문에서는 페이지랭크의 개량된 버전인 Personalizing Pagerank를 지식 베이스에 적용하여 WSD를 수행하는 방법을 제안했습니다. 일반적으로 PageRank에서는 랜덤서퍼 값으로 모든 노드에 일정하게 상수값(평탄화 상수)을 더해주는데 Personalizing Pagerank에서는 그 더해주는 상수값을 노드에 따라 다르게 줌으로써 노드의 중요성을 계산하는 방법을 조절할 수 있습니다. 먼저 WSD에 앞서 WordNet에서 각 의미를 정점, 의미 간의 연결 관계를 간선으로 표현함으로써 지식 기반 그래프를 형성해둡니다. 실제 문맥에서 WSD를 수행할때는 해당 문맥에 등장하는 단어의 평탄화 상수를 높이고 나머지를 0으로 두어 Personalizing Pagerank를 계산합니다. 그 결과 해당 문맥에서 연관있는 단어들과 가장 연결이 많이된 의미가 높은 점수를 받게 될 것이고, 이를 그 단어의 의미라고 볼 수 있는거죠.

휴리스틱 기법

가장 우세한 의미를 찾아서 해당 단어에 그 의미를 모두 부여하거나, 맥락당 하나의 의미를 부여하거나, 연어당 하나의 의미를 부여하는 등 여러 편법이 사용되기도 합니다. 우세한 의미를 찾는 방법은 이전 게시물을 참조하시길 바랍니다. 맥락당 한 의미 부여는 한 맥락에 쓰이는 같은 단어는 모두 같은 세부 의미를 지닐 것이라고 가정하는 방법을 가리킵니다. 마지막으로 연어당 한 의미 부여는 항상 쌍으로 같이 쓰이는 단어들은 언제나 같은 세부 의미로 쓰일것이라고 가정하는 방법을 말합니다.




지도 학습(Supervised) WSD

각종 기계 학습 알고리즘을 통해 단어 의미를 분류해내는 방법을 가리킵니다. 사실 지식 기반 WSD도 넓은 의미로 보면 지도학습의 한 부분입니다만, 보통 지도 학습 WSD라고 하면, 단어의 세부 의미가 부착된 말뭉치를 학습 데이터로 사용하여, 학습에 쓰이지 않았던 새로운 문장에서 단어 의미를 판별해내는 경우를 가리킵니다. 지식 기반 WSD와 마찬가지로 좋은 성능을 위해서는 태깅이 잘 되고, 크기가 큰 말뭉치가 필요하다는 단점이 있습니다만, 현재 널리 연구되고 있는 기계 학습 알고리즘을 사용할 수 있으므로 데이터만 충분할 경우 쉽게 구현하여 괜찮은 성능을 낼 수 있다는 장점이 있습니다.
아래의 기계 학습 방법들에 대한 설명은 이 글을 참조하시길 바랍니다.

분류기

결정트리나 베이즈 분류기, SVM과 같은 분류기를 사용할 경우 어떤 자질을 사용하여 어떤 데이터를 학습시키는가가 관건이 됩니다. 주로 사용하는 자질로는 주변 문맥에서 등장하는 단어나 그 단어들의 품사 등이 있고, 이를 어떻게 가공하여 전체 성능을 향상시키는가에서 차이가 발생합니다. 대표적인 예로 베이즈 분류기를 사용한 Le, C. A., & Shimazu, A. (2004, December). High WSD Accuracy Using Naive Bayesian Classifier with Rich Features. In PACLIC (Vol. 18, pp. 105-114). 논문에 따르면 세부 의미를 판별하는 자질로 1) 주변 문맥에서 등장하는 단어들의 집합, 2) 주변 문맥에서 등장하는 단어 목록(상대 위치 반영), 3) 해당 단어의 좌 혹은 우로 이어지는 연어들의 집합을 이용했을때 가장 성능이 좋았다고 합니다. 약 19만 셋으로 이뤄진 DSO Corpus로 실험해본 결과 약 70%의 정확도를 보였다고 하네요.

k-NN

세부 의미가 부착된 말뭉치에서 특정 단어가 포함된 문장을 뽑아낼 수 있고, 그 수가 충분하다면 이 방법을 써봄직합니다. 주어진 문장과 가장 유사한, 말뭉치 내의 k개의 문장을 뽑고 그 문장에 포함된 해당 단어의 세부 의미 비율을 보아 가장 높은 세부 의미를 그 단어에 부여하는 것이지요. 이 경우 관건은 유사한 문장을 뽑기 위해 어떤 거리 계수를 사용할지(서베이 논문에서는 해밍 거리를 사용하는 사례를 들었네요), 그리고 k값을 어떻게 설정할지입니다. 

신경망

계산력의 향상에 힘입어 신경망을 이용한 분류 시도도 늘어나고 있습니다. 역시 학습 자질로 사용하는 데이터는 기존 분류기와 유사하게 주변 문맥의 단어와 그 품사 등입니다. 특히 최근에는 딥 러닝 기술을 활용해 WSD를 해결하고자 하는데, 이는 대게 비지도 학습에 포함되니 아래에서 더 설명하도록 하겠습니다.



비지도 학습(Unsupervised) WSD

앞서 밝혔듯이 비지도 학습 WSD는 사실 대게 WSI 작업을 가리키는 경우가 많습니다. 문장에 등장하는 각 단어의 의미를 즉 사전적인 의미에 연결하지 않고, 세부 의미가 같은 맥락을 군집화하는 데에 그 초점이 맞춰져 있습니다. 비지도 학습인만큼 사람이 직접 제작한 학습 데이터가 없기에 그만한 성능을 내기가 어렵다는 단점이 있으나, 태깅된 말뭉치를 필요로하지 않으며 원시 말뭉치로부터 자동적으로 학습을 수행할 수 있기에 활용가능성이 높다는 장점이 있습니다.

문맥 군집화(Context Clustering)

특정 단어가 등장하는 문맥이 유사하면 그 단어의 세부 의미도 유사할 것이라는 가정을 바탕으로 하는 방법입니다. 가장 간단한 방법으로는 특정 단어 주변에 등장하는 단어의 빈도를 바탕으로 문맥 벡터를 생성하는 것입니다. 그러면 문맥 벡터 간의 유사도를 쉽게 계산할 수 있고 이 유사도를 바탕으로 유사한 문맥들을 클러스터링할 수 있겠죠. 문맥과 말뭉치가 충분히 크다면 결과로 얻어지는 각각의 클러스터는 특정 단어의 서로 다른 세부 의미를 가리킬 것입니다. 

단어 군집화(Word Clustering)

문맥 군집화 방법이 단어 주변의 문맥을 사용했다면, 단어 군집화는 해당 단어 자체의 의미 유사도를 계산하여 군집화하는 접근법을 취합니다. 그럼 해당 단어가 다른 단어와 같은 의미인지 어떻게 알 수 있을까요? 최근의 연구에서는 Word2Vec의 개량 모델을 사용하더라구요. 이는 딥러닝을 이용하여 단어들 간의 관계를 고려해 각각의 단어를 특정한 차원의 벡터로 매핑해줍니다. 이때 의미적으로 유사한 단어는 벡터 공간 상에서 가까운 거리에 위치하게 된다는 점이 강점이지요. 즉 비지도 학습을 통해 의미적으로 유사한 단어를 찾아낼 수 있다는 것입니다. 최근의 연구 Tian, F., Dai, H., Bian, J., Gao, B., Zhang, R., Chen, E., & Liu, T. Y. (2014, August). A Probabilistic Model for Learning Multi-Prototype Word Embeddings. In COLING (pp. 151-160) 에서는 Word2Vec을 학습할때 사용하는 알고리즘 중 하나인 Skip-gram을 개량하여, 같은 단어라도 서로 다른 의미로 쓰였을 경우 구분해서 다른 벡터로 매핑할 수 있는 Multi-Prototype Skip-gram을 제안했고, Bartunov, S., Kondrashkin, D., Osokin, A., & Vetrov, D. (2016, May). Breaking sticks and ambiguities with adaptive skip-gram. In Artificial Intelligence and Statistics (pp. 130-138).에서는 디리클레 프로세스를 이용하여 더욱 발전된 형태의 adaptive skip-gram을 제시했습니다. 충분한 양의 전처리된 코퍼스에 이 알고리즘을 적용하면 단어 간의 관계를 통해 자동적으로 같은 단어라도 의미적으로 차이가 있다면 다른 벡터로 매핑하게 됩니다.
국내에서도 해당 방법을 사용한 따끈따끈한 연구가 있는데 (홍수린, "딥 러닝과 한국어 사전을 이용한 비지도 단어 의미 중의성 해소", 2017., 연세대학교 대학원), Multi-Prototype Skip-gram을 이용하여 WSI를 수행한 뒤 각각의 의미 문맥이 사전에 어느 뜻풀이와 일치하는지 찾아냄으로써 WSD까지 수행하였다고 합니다.

동시출현 그래프 & 신장 트리

Silberer, C., & Ponzetto, S. P. (2010, July). UHD: Cross-lingual Word Sense Disambiguation using multilingual co-occurrence graphs. In Proceedings of the 5th International Workshop on Semantic Evaluation (pp. 134-137). Association for Computational Linguistics. 에서는 동시출현 그래프와 최소 신장 트리를 이용하여 WSI를 수행하는 방법을 제안했습니다. 이는 단어의 세부 의미에 따라 같이 쓰이는 단어가 달라진다는 관찰에서 비롯되었는데요, 예를 들자면, 먹는 의 경우 주로 음식과 관련된 단어와 함께 등장하는 반면, 타는 의 경우 교통수단과 관련된 단어와 함께 등장한다는 것이지요. 따라서 배의 동시출현 그래프를 그릴 경우, 음식곽 관련된 것도 등장하고, 수상 교통과 관련된 것도 등장할 것입니다. 이 그래프를 이용해 WSI를 하는 것이죠. 대충 감이 잡히셨나요? 구체적인 과정은 다음과 같이 됩니다.

  1. 대상 단어를 포함하는 코퍼스에서 동시출현 그래프를 그린다. (정점은 단어, 간선은 동시출현비율(0~1))
  2. 동시출현 그래프에서 대상 단어가 아니고, 중심성 값이 높은 단어를 몇 개 뽑는다. 이를 허브라고 부르며, 대상 단어의 의미를 결정해주는데 힌트를 제공할 것이다.
  3. 대상 단어와 허브 사이의 간선은 가중치를 모두 0으로 설정한다.
  4. 해당 그래프의 최소 신장 트리를 구축하면 대상 단어를 조상으로 하고, 그 밑에 허브 단어들, 그리고 그 아래로 다른 단어들이 나타나는 트리를 얻을 수 있다.

만약 를 대상 단어로 했다면, 허브로는 과일, , 교통 등이 잡힐 것이라고 생각할 수 있습니다. 그리고 과일의 자손들로는 사과, 등이 등장할테고, 몸의 자손으로는 , 등이, 교통의 자손으로는 자동차, 기차 등이 등장하겠죠. 

이렇게 대상 단어의 WSI를 수행하는 트리를 구축했다면, 대상 단어가 등장하는 문맥을 보고 이 단어가 어떤 허브에 해당하는지를 찾을 수 있습니다. 문맥에 등장하는 단어를 찾고, 그 단어들이 어느 허브의 후손으로 속하는지 계산하고 그 가중치를 합함으로써 해당 문맥에서 유력한 허브를 찾을 수 있겠죠.



이렇듯 단어의미 중의성해소에 대한 연구는 날로 발전하고 있는데요 최근에는 특히 비지도학습 방법이 두드러지고 있는듯합니다. 비지도학습 방법은 한국어와 같이 아직 지식 기반이 제대로 구축되지 않은 환경에서도 널리 사용될 수 있기에 많이 기대가 되는 방법이라고 할수 있겠네요. Adaptive Skip-gram 알고리즘이 인상깊었는데, 수식이 어려워 아직 제대로 이해가 안 가길래 공부가 많이 필요하다는것을 다시 한 번 느끼며 조사 정리를 마치게 되었습니다.

저작자 표시 비영리 동일 조건 변경 허락
신고
이 댓글을 비밀 댓글로