for textmining

그래프로 중요 기사 걸러내기

|

이번 포스팅에서는 ‘그래프’로 중요 기사를 걸러내 보도록 하겠습니다. 같은 시간대에 비슷한 제목의 기사가 많으면 중요한 이슈를 다루는 보도일 것이라는 가정이 깔려 있는 분석 방법론인데요, 매우 간단한 방법론이지만 생각보다 퍼포먼스가 좋아서 써먹을 일이 많을 것 같습니다. 자 시작해 볼까요?

Structured Journalism

하루에도 수백 수천건의 기사가 쏟아지는 ‘뉴스의 홍수’ 시대입니다. 소비자 입장에선 어떤 기사가 중요하고 그렇지 않은지 알기 어렵고 생산자 입장에선 공들여 만든 뉴스가 단 하루만 지나도 쓸모 없어지기 때문에 대단히 비효율적입니다. 생산자든 소비자든 뉴스의 맥락을 짚기가 매우 어려운 것이 요즘 현실입니다. 예를 들어볼까요? 대한민국 대표기업 ‘삼성’에 관련된 이슈를 찾아보고 싶다고 칩시다. 네이버에 삼성 키워드를 넣어서 뉴스를 검색해봤습니다.

많이들 검색해보셔서 아시겠지만 지금 당장 벌어지고 있는 이슈는 비교적 쉽게 알 수 있지만 과거 이슈는 시간과 노력을 들이지 않으면 알기 어렵습니다. 또 ‘공채’, ‘최순실 수사’, ‘삼성전자의 하만 인수’ 등은 시간의 흐름에 따라 진화, 발전하는 이슈지요. 저는 뉴스 소비자에게 중요한 기사를 걸러 보여주면서도 뉴스의 맥락(context)을 알 수 있게 하면 좋겠다는 생각을 했습니다. 이와 관련된 개념이 바로 스트럭처 저널리즘(Structured Journalism)입니다.

스트럭처 저널리즘은 언론학계에 최근 제시되고 있는 개념으로 기사 및 기사 속에 내재된 정보를 계속 누적시켜 재맥락화(recontextualize)하려는 노력을 총칭합니다. 위 그림에서처럼 단순 팩트나 기존 기사들을 재조합하여 새로운 가치, 맥락을 만들어보려는 시도입니다.

중요기사의 기준

중요한 기사란 무엇일까요? 야구를 좋아하는 사람은 메이저리그 기사, 정치에 관심있는 독자는 박근혜 전 대통령 탄핵 관련 보도가 중요하겠지요. 이렇듯 각자가 중요하다고 생각하는 기사는 저마다 다를 겁니다. 기사 중요도 판단은 어느 정도는 주관적인 영역이라는 거지요. 그런데 저는 중요 기사의 조건을 아래처럼 양적으로 접근해 보기로 했습니다.

언론은 특종 경쟁에 매몰돼 있다. 같은 사실을 보도하더라도 어제와 ‘다른’ 뉴스, 남들과는 ‘차별화한’ 시각을 추구한다. 그런데 많은 언론사들이 유사한 제목의 비슷한 기사를 보도한다면 해당 사건이나 이슈는 사회에 파급력이 클 가능성이 높다. 바꿔 말해 해당 기사는 차별성을 다소 포기하더라도 보도할 만한 가치가 있는 중요한 아티클이라는 이야기다.

위 가정을 제가 기자 생활을 할 때 경험과 연관지어 이야기해보겠습니다. 대부분의 편집국, 보도국은 24시간 365일 체제로 운영됩니다. 국내외 사건사고들이 9 to 6 근무시간에만 발생하지는 않기 때문입니다. 근무시간에는 모든 기자들이 출근해 사건을 취재해 기사를 쓰고, 심야나 휴일 사건은 당직기자들이 커버하는 구조입니다. 저도 기자일 때 평일 심야, 휴일 당직을 여러번 서 봤는데요. 이때 선배들이 입버릇처럼 강조한 말이 있습니다.

물 먹지 마라.

‘물 먹는다’는 표현은 ‘낙종’을 뜻하는 언론계 은어입니다. 낙종은 특종과 반대되는 개념인데 모든 언론사가 취급하는 중요 이슈를 보도하지 않(못)한 경우 이런 말을 씁니다. ‘박근혜 대통령 탄핵’, ‘북한 핵실험’, ‘삼성그룹 미래전략실 폐지’ 같은 중요 사건이 터졌을 때 담당 기자가 넋 놓고 있다가 이를 보도하지 않았(못했)을 때는 시말서를 쓸 각오를 해야 합니다. 그래서 편집국을 대표해 당직을 설 때에는 상당한 긴장감을 갖고 근무를 해야 했습니다.

Graph-based News Representation

지금까지 논의한 걸 바탕으로 모델을 만들어보기로 했습니다. 대전제는 딱 두 줄로 요약됩니다.

  • 중요한 뉴스라면 모든 언론사가 취급할 것이다
  • 중요 기사는 제목이나 키워드가 비슷할 것이다

저의 경우 위 두 가지 전제를 모델링하기 위해 그래프(graph)를 써보기로 했습니다. 뉴스 제목을 노드(꼭지점)엣지(간선)로 표현하는 것입니다. 무슨 말인지 알쏭달쏭하시죠? 예를 들어보겠습니다.

이날 대부분의 신문은 ‘사드’ 관련 기사를 비중있게 보도했습니다. 그만큼 중요한 사안이라는 이야기죠. 우선 뉴스 제목을 포스태깅하고 조사 등 불필요한 품사를 제거했습니다. 그리고 중복 단어 숫자를 웨이트(가중치)로 하는 무방향 엣지를 연결했습니다.

조선일보 1면 톱기사 ‘사드, 경북 성주에 배치한다’는 제목의 노드는 경향신문의 1면 톱기사 ‘사드 배치 경북 성주 사실상 결정’과 단어 중복수가 4개입니다(사드 경북 성주 배치). 조선일보의 1면 톱기사 제목은 한겨레의 1면 톱기사 ‘외교장관 만류에도 사드 결정 강행했다’는 기사와 2개 단어가 겹칩니다(사드, 하다), 경향신문과 한겨레 기사의 경우엔 1개(사드)가 겹칩니다. 이를 그래프로 그리면 위 그림과 같습니다. 단어 중복수를 웨이트로 한 그래프에선 조선일보 ‘사드, 경북 성주에 배치한다’가 중심 노드가 되겠네요.

그래프 이론에서는 노드의 중요도를 뽑는 데 중심성(cetrality) 개념을 제시합니다. 가장 대표적인 것이 간선중심성(degree centrality)입니다. 비교적 직관적으로 이해할 수 있는데요, 각 노드의 중심성 스코어는 엣지에 해당하는 웨이트들의 합입니다. 위의 그림 예시에서 보면 조선일보 1면 톱기사인 ‘사드, 경북 성주에 배치한다’는 노드의 간선중심성은 6입니다.

또 다른 지표는 고유벡터 중심성(eigenvector centrality)를 꼽을 수 있습니다. 중요한 노드에 연결된 노드가 중요하다는 관점에서 창안된 개념인데요. 그래프의 엣지로 이뤄진 인접행렬(i번째 노드와 j번째 노드가 연결돼 있을 경우 $A_{ij}=1$, 아닐 경우 0)을 고유값 분해(eigenvalue decomposion)를 하여 얻을 수 있습니다. 이렇게 구해진 i번째 노드의 고유벡터 중심성 점수($X_i$)와 그 의미는 다음과 같습니다. (n=전체 노드 개수)

\[{ x }_{ i }=\frac { 1 }{ \lambda } \sum _{ i=1 }^{ n }{ { A }_{ ij }{ x }_{ j } }\] \[\begin{pmatrix} { A }_{ 11 } & { A }_{ 12 } & ... & { A }_{ 1n } \\ { A }_{ 21 } & { A }_{ 22 } & ... & { A }_{ 2n } \\ ... & ... & ... & ... \\ { A }_{ n1 } & { A }_{ n2 } & ... & { A }_{ nn } \end{pmatrix}\begin{pmatrix} { x }_{ 1 } \\ { x }_{ 2 } \\ ... \\ { x }_{ n } \end{pmatrix}=\begin{pmatrix} { A }_{ 11 }{ x }_{ 1 }+{ A }_{ 12 }{ x }_{ 2 }+...+{ A }_{ 1n }{ x }_{ n } \\ { A }_{ 21 }{ x }_{ 1 }+{ A }_{ 22 }{ x }_{ 2 }+...+{ A }_{ 2n }{ x }_{ n } \\ ... \\ { A }_{ n1 }{ x }_{ 1 }+{ A }_{ n2 }{ x }_{ 2 }+...+{ A }_{ nn }{ x }_{ n } \end{pmatrix}=\begin{pmatrix} { \lambda x }_{ 1 } \\ \lambda { x }_{ 2 } \\ ... \\ \lambda { x }_{ n } \end{pmatrix}\]

위 수식과 행렬을 곱씹어 보면 $i$번째 노드의 고유벡터 중심성 점수($x_i$)는 자기 자신의 중심성 점수($x_i$)와 모든 이웃들의 중심성 스코어 점수의 합으로 표현할 수 있습니다. 바꿔 말하면 중심성 점수가 높은 중요한 이웃과 연결된 $i$번째 노드 또한 중심성 점수가 높아지게 된다는 얘기입니다. 반대로 생각하면 $i$번째 노드가 중요한 노드라면 $i$번째 노드와 연결된 이웃들의 중심성이 커지게 됩니다. 즉 중요한 노드에 연결된 노드가 중요하다는 말이 되는 셈이죠.

실험설계 및 결과

이상 논의한 내용을 바탕으로 뉴스 제목의 중복 단어를 가중치로 하는 그래프를 구축했습니다. 각 노드의 중심성은 간선중심성과 고유벡터중심성 두 가지 지표를 구해 이를 곱하여 모두 고려했습니다. 분석 대상은 조선일보, 한겨레 등 10개 주요 조간 매체 10개월치 기사(2016년 1~10월) 20만7729건입니다. 위에서 예시로 든 2016년 7월 13일치 결과를 한번 보겠습니다.

위 표에서 degree는 간선중심성, eigen은 고유벡터중심성, result는 이 둘을 곱한 스코어를 뜻합니다. result 기준으로 정렬해 상위 7개를 뽑았습니다. 이날은 ‘사드’가 중요한 이슈였던 모양입니다. 상위 기사에 ‘사드’ 관련 기사가 모두 포진해있군요. section을 보시면 1~5면 사이의 기사가 상위에 랭크돼 있어 비교적 중요한 기사들이 뽑혔다는 사실 또한 알 수 있습니다.

위 그림은 같은 날짜 스코어 하위 기사들입니다. 보통 중요하지 않은 기사들이 대부분인데요, 빨간색으로 표시한 기사가 눈에 좀 띕니다. 스코어는 낮은데 1면에 보도된 기사입니다. 아무래도 이건 다른 언론사 기사와 제목이 완전히 다른 ‘차별성 있는 기사’인 것 같습니다. result 스코어를 section 정보와 동시에 고려한다면 중요도 지표가 낮은(제목이 특이한) 기사 가운데 앞쪽면 기사는 해당 언론사의 특종이나 단독기획 기사일 가능성이 높다고 해석해도 나쁘지 않을 것 같다는 생각이 듭니다.

중심성 지표 기준 상위 3%를 중요기사라고 분류했습니다. 분석 대상 전체 기사 20만7729건 가운데 해당 면이 차지하는 비중과 비교한 그림은 다음과 같습니다. 지금까지 설명한 방법론이 앞쪽 면(비교적 중요) 기사를 걸러내는 데 효과적임을 알 수 있습니다.

이제 ‘삼성’을 알아볼까요. 중요도 상위 3%에 뽑힌 기사들 가운데 ‘삼성’이라는 키워드가 들어간 기사의 제목을 쭉 나열해봤습니다. 삼성은 대한민국 대표기업인 만큼 회사 측 공식발표도 많고 매일 기사가 쏟아지는데도 중요한 이슈(지배구조 변화, 분기별 실적 등)가 비교적 잘 걸러짐을 확인할 수 있습니다.

samsung

samsung

마치며

Graph-based News representation이 스트럭처 저널리즘의 완벽한 구현이자 종착역은 아닙니다. 다만 단순 팩트나 기존 기사들을 재조합하여 새로운 가치, 맥락을 만든다는 이상에 다가가기 위한 첫 단추로 역할을 할 수 있다면 더할 나위 없이 좋을 것 같습니다. 이외에도 옛날 기사를 어떻게든 되살려보려는 여러 가지 방법론들을 고민하고 있는데요, 지적하실 내용이나 아이디어, 질문 있으시면 언제든지 메일이나 댓글로 알려주시기 바랍니다. 여기까지 읽어주셔서 진심으로 감사드립니다.



Comments