[Text Mining] 6. 텍스트 필터(Text filter)
안녕하세요, 오늘은 텍스트 필터에 대해 알아보는 시간을 갖도록 하겠습니다.
텍스트 필터는 텍스트 파싱이 완료된 뒤에 실행하는 노드로써,
분석된 단어들을 정렬하고 검색할 수 있는 기능을 보유하고 있습니다.
간단하게는 우리가 자주 사용하는 엑셀의 ‘필터’ 기능을 떠올려보시면 이해가 쉬울 것이라 생각이 듭니다.
텍스트 마이닝의 목적은 특정 문서(또는 댓글 등)를 걸러내어 다른 문서들과의 차이점을 부각시키는 과정을 통해
해당 문서들을 전체 데이터로부터 각각 분류해 내는 것이라고 볼 수 있는데요,
그렇기 때문에 어떤 문서를 특정지을 수 있는 어휘를 밝혀내는 작업이 수반되어야 하는 것입니다.
텍스트 필터에서는 이처럼 어떤 어휘가 구분자로써의 역할을 수행할 수 있도록 term frequency,
즉 용어 가중화라는 옵션을 사용합니다. 자세한 활용법은 조금 뒤에 알려드리도록 할게요.
그러면 우선 텍스트 필터의 메뉴부터 살펴보도록 하겠습니다.
메뉴를 보시면 여러 가지 기능들이 있음을 보실 수 있습니다.
오늘은 이 중에서 “빈도 가중화(Frequency Weighting)”와 “용어 가중화(Term Weighting)”에 대해서 살펴보도록 하겠습니다.
빈도 가중화에 대해 간략히 말씀드리자면 이런 거에요, 예를 들어 어떤 단어가 텍스트 속에서 등장한 횟수가 n번인데,
이 수치를 그대로 사용하게 되면 낮은 빈도로 등장한 단어와 높은 빈도로 등장한 단어 간의 가중치 격차가 커지겠죠?
그래서 빈도 가중화의 기본 설정(Default)은 로그(log)입니다.
등장 횟수 n에 로그를 씌우면 뭔가 부드러운 곡선이 만들어지면서 빈도 간의 고저차가 줄어들게 되기 때문에
로그를 사용하게 되는 것이죠.
용어 가중화는 말 그대로 단어, 또는 용어마다 가중치를 부여하는 방법인데요,
엔트로피(Entropy), IDF(Inverse Document Frequency), Mutual Information이 있습니다.
엔트로피를 먼저 살펴보면,,, 음 엔트로피,, 어디선가 들어보셨을 거에요. 엔도르핀?과는 다르구요,
어쨌든 엔트로피는 어떤 불순물? 순도? 이런 걸 이야기할 때 나오는 개념인데요,

위 그림을 한번 봐주시기 바랍니다. 이를테면 X축은 어떤 제품에 불순물이 끼어있을 확률이고
Y축은 엔트로피라고 가정해봅시다. X축이 0일 때, 그러니까 제품에 불순물이 끼어있을 확률이 0일 때와 X축이 1일 때,
불순물이 100% 포함되어 있을 때는 뭔가 상황이 깔끔하게 정리되지 않나요?
제품에 불순물이 하나도 없다면 이 물건은 판매할 수 있게 되는 것이고,
불순물로 가득 차있다면 폐기시켜 버리면 되는 것입니다. 그러나 불순물이 50% 확률로 끼어 있으면 어떻게 될까요;
이걸 버려야 하나요 팔아야 하나요;; 뭔가 애매하고 어렵습니다. 이 때 엔트로피가 증가하게 되는 것이구요,
이 개념을 텍스트 마이닝에 접목시키면 이렇게 되는 거죠.
특정 단어가 모든 문서에서 딱 한번씩 증가하게 되면 엔트로피가 가장 높게 되는 겁니다.
우리는 이런 단어를 거르는 것이 목적이기 때문에 이 때의 가중치는 0이 됩니다.
반면, 모든 문서 중에서 단 하나의 문서에 단 한번 포함되는 단어의 가중치는 1이 되죠.
이것이 엔트로피의 개념이라고 보시면 됩니다.
두 번째로 IDF인데요,, 생소합니다,, Inverse Document Frequency,,역문서빈도? 문서빈도의 역수?
정도로 해석할 수 있는데요 간단히 얘기하면 어떤 단어가 여러 문서에 포함될수록
이 단어의 가중치가 낮아진다는 이야기입니다. 반대로 이 단어가 소수의 문서에만 들어있다면 가중치가 높아지겠죠.
만약 각 문서 내에 몇 번 포함되었느냐에 관계 없이 모든 문서에 존재하는 단어의 가중치는 1이 됩니다.
계산하는 수식이 있긴 합니다만 여기서는 생략하도록 하겠습니다.
마지막으로는 Mutual Information인데요,, 생소합니다;
상호 정보? 그런데 인터넷에 검색해보니 존재하는 개념이더군요, 저의 무지함을 반성합니다.
최대한 간추려서 말씀드리자면, 비정형데이터와 정형데이터를 한꺼번에 분석할 때,
곧 타겟변수(범주형 변수)가 존재할 때 유용한 방법이라고 보시면 됩니다.
이 방법으로 산출된 가중치가 높을수록 이 단어가 타겟변수의 특정 범주에 속한 문서에서
더 자주 등장하는 경향이 있다, 라고 판단할 수 있게 됩니다. 어렵네요.
음,, 제가 사용중인 데이터는 60편 가량 되는 영화의 시놉시스(줄거리)이고
이 텍스트 데이터를 이용하여 영화를 분류하는 것이 목적이기 때문에 엔트로피를 이용해 보도록 하겠습니다.
예를 들어 스릴러 영화면 “추리” “살인” “사건” 이런 단어들이 집중되어 있지 않을까요?
하는 생각으로 엔트로피를 선택하였습니다.

이제 텍스트 필터를 실행해보도록 하겠습니다.

텍스트 필터 실행이 끝나면 우선 확인 버튼을 눌러서 팝업창을 닫은 다음,
텍스트 필터 메뉴의 필터 뷰어 옆 “…” 버튼을 클릭하여 필터 뷰어를 불러옵니다.
필터뷰어를 실행하면 아래와 같은 화면이 나와요.

아래쪽 용어 창을 보시면,, 맨 위의 ‘되다’ 라는 단어는 당연히 각 시놉시스마다 자주 등장했겠죠?
그래서 가중치를 보시면 0.105로 낮은 것을 볼 수 있습니다.
자, 그럼 한번 “죽음” 이라는 단어를 검색해보도록 하겠습니다.

확인을 누르면 “죽음” 이라는 단어를 선택할 수 있습니다.
이 단어를 마우스 우클릭하여 컨셉링크 보기를 선택하시면 아래와 같은 화면이 나와요.

“죽음” 이라는 단어와 밀접한 관계에 있는 단어들을 보여줍니다. 글씨가 좀 작긴 합니다만
자세히 보시면 “삶” “인생” “전쟁” 이런 단어들이 있네요.
저번 텍스트 파싱 시간에 말씀드렸던 내용 중에 텍스트 필터로도 스타트 리스트를 작성할 수 있다는 말씀을 드렸는데요,
필터 뷰어의 용어창을 복사하여 엔터프라이즈 가이드에 붙여넣은 후 똑같은 작업을 진행하시면 됩니다.
다만 텍스트 파싱보다 나은 점이라면, 아래 그림처럼 가장 왼쪽 칼럼에는 “+”만 따로 떨어져 있기 때문에
데이터 핸들링이 조금 더 쉽다는 것 정도랄까요? 사실 큰 차이는 없지만 데이터 핸들링에 자신이 없으신 분들은
텍스트 필터를 이용하시는 것을 추천해 드립니다.

오늘 준비한 내용은 여기까지입니다. 텍스트 필터에서 기억해야 할 점이라면,
용어 가중화(Term Frequency)를 어떻게 활용할 것인가, 가 되겠네요.
사실 데이터 마이닝이 대부분 그렇듯 정답이 존재하는 것은 아닙니다.
연구자의 목적에 따라 얼마든지 유동적으로 변할 수 있다는 점 말씀드리고 싶네요.
텍스트 필터는 텍스트 파싱과 함께 묶여서 텍스트 분석을 하기 위해서 꼭 필요한 과정이 되겠구요,
다음 시간에는 지금까지 수행한 파싱과 필터 결과를 바탕으로 텍스트 토픽 노드를 돌려보도록 하겠습니다.
부족한 점 및 보완이 필요한 점에 대해서는 언제든지 댓글로 조언 부탁드립니다.
오늘도 좋은 하루 되세요!
감사합니다.