[토픽 모델링] 대량의 문헌을 주제에 따라 클러스터링해보기

Posted by 적분 ∫2tdt=t²+c
2019.07.10 01:24 프로그래밍/NLP

대량의 문헌이 있는데 그 문헌 안에 어떤 내용이 들어 있는지는 잘 모릅니다. 이 문헌들을 좀더 편하게 찾아볼 수 있게 하려면 주제별로 묶어서 분류하는게 최고입니다. 그런데 문헌 수가 너무 많기 때문에, 문헌 전체를 읽어보면서 얘네 안에 어떤 주제가 있는지 일일히 확인하는 건 어렵고, 얘네들을 일일히 분류하는 건 더 어렵습니다. 이런 경우 어떻게 하는게 좋을까요?


이 문제는 라틴어 고문헌을 OCR하여 아카이브를 구축하면서 제가 겪은 상황입니다. 수십 만건의 문헌을 확보했고 이를 차근차근 OCR하면서 텍스트화시키고 있는데, 당췌 이걸 일일히 읽어보면서 이쁘게 분류할 엄두가 나질 않더라구요. 분류를 하고는 싶은데 분류 체계가 마땅히 없거나 분류기를 학습할 만한 학습 데이터가 없는 경우 클러스터링이 유용합니다. 클러스터링은 사전에 주어진 분류 체계 없이 알고리즘 상에서 유사한 것들끼리 스스로 묶어내는 작업이라고 생각하시면 됩니다.

텍스트 클러스터링에는 다양한 기법이 있지만, 유사한 주제의 텍스트들을 묶어내는 강력한 클러스터링 기법으로는 토픽 모델링이 있습니다. (이 블로그에서 여러 번 다루었던 주제이죠.) 주제에 따라 문헌들을 묶어서 정리하고 싶은 것이므로 위의 상황에서는 토픽 모델링을 사용하는 걸 고려해봄직합니다.


따라서 주저하지 않고 OCR이 완료된 약 1만 개의 문헌을 대상으로 LDA 토픽 모델링을 진행해봤습니다. (사실 상위 주제, 하위 주제를 추출할 수 있는 Hierarchical Pachinko Allocation도 사용해 보았는데 생각한것처럼 깔끔하게 상위 주제/하위 주제가 나뉘지 않아서 LDA로 선회했습니다.) 


토픽 모델링을 수행하면 각 주제별로 단어의 비중이 나오고, 동시에 또 각 문헌별로 주제의 비중이 나옵니다. 결과물 일부 예시를 보면 다음과 같아요.

1번 주제의 경우 주요 단어로 aqua, motu, corpora, ignis, caloris 등등이 나왔습니다. 이 주제를 많이 포함하고 있는 문헌은 81번, 6337번, 2810번 문헌 등이 있는 것으로 밝혀졌구요. 물, 불, 열, 공기, 움직임과 같은 단어가 나오는 걸로 보아 연금술과 관련된 주제라고 판단하여 이 문헌들에는 일괄적으로 화학이라는 주제를 부여했습니다.


2번 주제는 galenus, febris, hippocates 등의 단어가 핵심적으로 나왔고, 이런 주제를 많이 포함하는 문헌은 9772번, 3729번, 3308번 등이 있었습니다. 따라서 여기에는 생리 & 의학이라는 주제를 붙여줬구요.


혹은 이런식으로 라틴어 문헌만 모여 있었는줄 알았는데, 영어로만 구성된 주제가 발견되기도 합니다. 이런 경우 당연히 영어로 작성된 문헌이므로 주제를 부여하지 않고 가차없이 목록에서 제거해줬습니다.



총 주제의 개수를 정하는것은 다분히 임의적입니다. 몇이 최적인지는 데이터에 따라 다 다르고 정확한 값은 며느리도 모르기에 토픽 모델링 결과가 사용 목적에 적합하게 나오는 값을 잘 찾아야 합니다. 저의 경우 80으로 설정했는데 겹치는 주제 및 불용어로 구성된 주제를 제거하고 나니 총 26종류의 의미있는 주제를 발견할 수 있었습니다. 워낙 노이즈가 많은 데이터이기 때문에 의미 있는 주제가 적게 나왔는데, 노이즈를 좀 제거하고 다시 돌리면 더 나은 결과를 얻을 수 있을지도 모릅니다.


각 주제에 대해 중요 단어들을 보고 이 주제가 무엇을 의미하는지 파악하여 이름표를 다는 것은 사람의 몫입니다. 이 과정에서 쓸모 없는 토픽을 가려내는 것도 사람의 일이구요. 이 과정 역시 주관적인 부분이기에 같은 데이터를 같은 모델에 입력했다 하더라도 해석하는 사람에 따라 다른 결과가 나올 수 있습니다.


사실 이런 한계들은 작은 문제에 지나지 않습니다. 제일 큰 문제는 토픽 모델링이 생성한 클러스터가 사람이 생각하는 분류와 크게 다를 수 있다는 것입니다. 따라서 추구하는 명확하는 분류 체계가 있는 경우 토픽 모델링을 사용하면 오히려 실망스러운 결과를 얻을 수 있습니다. 토픽 모델링은 전체 데이터의 차원을 낮추어 대량의 문헌을 쉽게 훑어보는 용도로 사용해야 합니다.


정리하자면, 대량의 문헌을 주제별로 클러스터링하는 작업에 토픽 모델링을 사용하는 건 다음과 같은 장점과 단점이 있습니다.


장점

  1. 분류 체계가 없어도 된다. 분류기를 학습하기 위한 학습 데이터 역시 필요 없다.
  2. 주어진 데이터에 알맞는 클러스터를 발견할 수 있다. 즉, 분류 체계에 의한 편향이 발생하지 않는다.
단점
  1. 하이퍼 파라미터(대표적으로 주제 개수) 값에 따라 결과가 극단적으로 달라질 수 있다. 또한 확률적 과정이기 때문에 실행시마다 결과가 달라질 수 있다.
  2. 토픽 모델링 결과 생성되는 주제를 사람이 직접 평가하여 이름표를 달고 의미 없는 주제를 가려내야 한다. 이 과정에서 작업자의 주관이 개입된다.
  3. 토픽 모델링 결과가 생성하는 클러스터가 사람이 생각하는 분류와 다를 수 있다.


이 댓글을 비밀 댓글로
    • 탯뇽
    • 2019.11.12 23:08
    혹시 시각화는 어떤 프로그램으로 하셨나요?
    • 별도의 시각화는 수행하지 않았구요, 토픽 모델링 결과를 웹 서버에 연결해서 웹쪽에서 확인하고 라벨을 고칠수 있는 간단한 애플리케이션을 작성했습니다.
    • 탯뇽
    • 2019.11.13 01:15
    대단하시군요 ㅠ

    적분님 덕분에 비전공자이지만 토픽모델링 관련해서 간단한 포스터 발표했습니다~ 항상 좋은 자료 감사합니다 ^^!