코퍼스를 이용하여 단어 세부 의미 분별하기

Posted by 적분 ∫2tdt=t²+c
2017.02.07 18:30 그냥 공부

단어 의미 판별(Word-sense Disambiguation)이라는 작업이 있습니다.  "가다"라는 동사를 예로 들어보죠. "집에 간다"는 문장에서 가다움직이는 것을 의미합니다. 반면 "저 세상으로 가셨다"는 문장에서는 죽었음을 뜻합니다. 이렇듯 같은 단어라도 맥락에 따라 사용되는 의미가 다르기에 보통 사전에 보통 1,2,3...번으로 세부 의미를 나눠서 뜻풀이를 합니다. 사전 이용자들은 사전을 살펴볼때 단어의 세부 의미 1번에 가장 자주 쓰이는 의미가 들어가 있기를 기대합니다. 그렇기에 세부 의미를 판별해서 어떤 세부 의미가 가장 자주 쓰이고 주된 의미인지 판별하는 작업이 사전 편찬 작업에서 중요하다 할 수 있겠습니다. 이 글에서는 D McCarthyr, 2004, Finding Predominant Word Senses in Untagged Text 논문에서 제시한 통계적 방법을 이용한 단어 의미 중의성 해소 방법에 대해 간략하게 소개하고자 합니다.


준비물

분포적 관련어 목록

예시로 star라는 단어를 들도록 하겠습니다. 영단어 star에는 별(1)이라는 뜻도 있고, 유명 인사(2)라는 뜻도 있지요. 그렇다면 과연 어떤 의미가 더 우세하게 쓰일까요? 논문에서는 이를 알아내기 위해 분포적 관련어를 찾아냅니다. star의 관련어로 player, actor, galaxy, sun 등이 있겠죠. 이런 분포적 관련어는 여러 가지 방법으로 구해낼 수 있습니다. 가장 쉬운 것은 공기어 통계를 통해 같이 등장하는 비율이 높은 어휘를 골라내도 되고, 점별 상호정보량(PMI)을 이용할 수도 있습니다. 최근 떠오르고 있는 신경망 기반의 Word2Vec을 사용할 수도 있겠죠. 논문에서는 함께 등장하는 빈도를 확장하여 이용하는 방법으로 관련도를 계산하고 있는데, 이에 대해서는 길게 설명하지 않겠습니다. 

자 여러가지 기법을 바탕으로 어찌어찌 star관련어 목록과 그 관련도를 뽑아냈다고 합시다. 이것이 첫번째 준비물입니다.


의미적 관련성 정보

세부 의미가 어떤 단어와 관련 있는지 보기 위해서는 의미적 유사성을 알아낼 수 있는 방법이 필요합니다. 다행히도 영어에는 WordNet이라는 시스템이 이미 구축되어 단어의 세부 의미들과 관련 어휘들을 쉽게 확인해볼 수 있습니다. 여기에서는 WordNet 데이터를 기반으로 두 의미 간의 유사도를 계산해볼 수 있어요. 

이 방법으로 얻어낼 수 있는 의미적 유사도 정보가 두번째 준비물입니다.


알고리즘

star라는 단어의 가장 우세한 세부 의미를 찾아보도록 합시다. (수치들은 예시를 위해 쉽게 잡았고, 실제 결과물과는 다를 수 있습니다.)

  1. star의 분포적 관련어 목록과 그 관련도를 구한다.
    Rel = {player(0.7), actor(0.5), galaxy(0.4), sun(0.6) ... }

  2. star의 세부 의미들과 분포적 관련어들 간의 유사도를 각각 구한다.

    <유사도>playeractorgalaxysum

    0.1

    0.2

    0.6

    0.7

    유명인사

    0.50.60.10.1

    합계

    0.6

    0.8

    0.7

    0.8

    (* WordNet에서 구할 수 있는 의미 간 유사도는 세부의미-세부의미에 대한 것임. 세부의미-단어의 유사도는 그 단어의 모든 세부의미에 대해 세부의미-세부의미 유사도의 최대치로 정의함.)

  3. 관련어별 유사도 크기가 다 다르므로, 합계로 나누어주어 유사도 스케일을 정규화시킨다.
    <정규화 유사도>playeractorgalaxysum

    0.167

    0.25

    0.86

    0.88

    유명인사

    0.833

    0.75

    0.140.12

    합계

    1

    1

    1

    1


  4. 각 세부 의미별로 유사도와 관련도를 곱하여 가중치 총합을 구한다.

    : 0.167 * 0.7 + 0.25 * 0.5 + 0.86 * 0.4 + 0.88 * 0.6 = 1.11
    유명인사: 0.833 * 0.7 + 0.75 * 0.5 + 0.14 * 0.4 + 0.12 * 0.6 = 1.09
  5. 유명인사보다 가중치가 더 크므로, 가장 우세한 세부 의미는 이라고 산출한다.


사실 알고리즘을 살펴보면 그렇게 어려운 건 없습니다. 각 세부의미가 관련어들이랑 가지는 비중을 비교해서 더 큰 비중을 가지는 쪽을 유도해내는 방식이지요. 큰 규모의 코퍼스를 바탕으로 위와 같은 알고리즘을 수행하면 사전에 실릴법한 대부분의 단어에 대해 세부 의미 비중을 추론할 수 있겠지요. 그래서 그 비중에 따라 뜻풀이 순서를 매기면 이용자들에게 더 편리한 사전을 만들 수 있을겁니다.


응용

만약 해당 단어의 관련어를 추출하는데 전체 코퍼스에서 분포적 유사성을 찾는게 아니라, 인접한 문맥에서만 찾도록 한다면 그 문맥에 속한 해당 단어가 어떤 뜻을 가질 확률이 높은지 추측할 수 있을 겁니다. 바로 단어 의미 중의성 해소 작업이지요. 더 나아가 꼭 단어 내의 세부 의미를 구별하는데 그치지 않고, 다른 단어이지만 형태가 같아서 형태상으로는 구분이 안되는 동형이의어(동철이의어)를 구별하는데에도 사용할 수 있을 겁니다. 혹은 거꾸로 시야를 좁혀서 일상적으로는 동일한 의미로 쓰이지만, 특정 학문 분야 내에서는 여러 의미로 쓰이는 단어들(field(장, 체), group(군) 등등)의 세부 뜻을 구분하는데에도 쓸 수 있겠죠.


이를 위해서 가장 중요한건 먼저 WordNet처럼 의미기반 단어 네트워크가 형성이 되어 있어야한다는 건데, 만약 이러한 의미기반 네트워크가 없다면 적용하기가 참 애매해집니다. 라틴어 사전의 동음이의어 분류를 위해서 써먹을수 있지 않을까 했는데, 난감하게 됐어요. 하지만 개념 간의 유사도는 언어에 독립적인 것이니깐 라틴어 단어에 대응하는 영단어를 찾아 WordNet을 연계하는 방법 등을 사용하면 어찌어찌 가능하지도 않을까 생각해봅니다.


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