Published by Luciano Floridi
단어와 단어는 어떻게 관련되었다고 할 수 있을까요? 한 단어가 다른 단어와 '연결'되었다고 말할 수 있으려면, 특정한 기준이 필요합니다. 여기서는 문장(!,? .) 별로 글을 나누고, 각 문장 내에서도 특정한 간격만큼 나누어 단어의 관련도를 파악합니다. 이때, 이 특정한 간격을 window 라고 합니다.
I love cat.
Cat is the most adorable creature in the world.
But cats mostly don't like me.
위와 같은 글이 있습니다. 먼저 온점(.) 에 따라 세 개의 문장으로 나뉩니다. window 가 3일 경우를 생각해보겠습니다. 첫 번째 문장 I love cat
에서 단어 I
,love
, cat
는 서로 연관이 있는 단어들입니다. 한편 두 번째 문장은 3 단어씩 잘리게 됩니다. Cat is the
, is the most
, the most adorable
, most adorable creature
... 이런 식으로 연속으로 나온 3 단어는 서로 관련이 있는 것으로 봅니다.
그렇다면 궁극적으로는 모든 단어가 연결되는 것일까요? 네 맞습니다. 하지만 단어 love
와 cat
이 연결되는 횟수와 love
와 I
가 연결되는 횟수는 다를 것입니다. 우리는 이 횟수를 가지고 textrank 라는 기법을 사용해 각 단어의 중요도와, 연결 정도를 계산합니다. 가장 많이 출현된 단어가 가장 중요할 것이고, 특정 두 단어가 함께 출현한 빈도가 높다면 두 단어는 연결되었다고 할 것입니다.
단어를 다룰 때 출현 빈도가 중요하기 때문에, 더 많이 출현할 수록 노드의 사이즈는 클 것이고, 더 적게 출현할 수록 노드의 사이즈는 작아집니다. 또한, 그래프에 선정된 100개의 단어 역시 출현 빈도에 따른 중요도가 높은 100개의 단어를 추린 것입니다.
우리는 이제 노드로 쓸 단어, 노드 사이를 연결하는 간선, 그리고 노드의 크기를 찾아냈습니다. 이 재료들로는 그래프를 충분히 그리지만, 약간은 밋밋할 수도 있습니다. 좀 더 시각적으로 그래프의 가독성을 높이기 위해 '색'을 추가하기로 합니다.
이때 색은 단어가 어떤 커뮤니티에 속하는지를 알려줍니다. 각 단어가 어떤 단어와 더 '근접'한지를 확인하는 과정을 통해 단어들을 몇 개의 그룹(커뮤니티)으로 나눕니다. 그리고 커뮤니티마다 색을 부여해 노드에 색을 입히면 되지요. 커뮤니티 분류 과정은 louvain 알고리즘을 사용했습니다.
노드에 적힌 단어만 보고는 이 단어가 어떤 맥락으로 쓰였는지 알 수가 없습니다. 도움을 주기 위해, 노드를 클릭하면 몇 줄의 글이 적힌 모달창이 뜨게 됩니다. 이는 그 단어가 가장 먼저 나온 문장을 선정하고, 그 문장의 앞뒤 문장을 보여주는 것입니다.
물론 단순히 그 부분만 확인해서는 단어에 대한 정보를 충분히 알지는 못하겠지만, 적어도 Ethical Information 을 접하는 데에 작은 도움이 될 것이라 생각합니다.