2007년 1월 20일 토요일

SpamBayes - 학습 가능한 스팸 메일 필터

연말연시에는 스팸 메일이 특히 극성을 부린다는 기사를 본 적이 있습니다.(비단 e-mail에만 해당되는 것은 아닐 겁니다. 우리 집 현관문 앞과 우편함에 날마다 끊임 없이 쌓이는 광고 전단들과 우편물들을 보면 말이죠. ㅡㅡ) 그래서 그런지 요즘 부쩍 스팸 메일이 많이 오는 것 같은데, 회사에서 업무 상 사용하고 있는 Outlook이 감당을 못하더군요. 자체 정크 메일 필터도 꽤 성능이 좋은 편이긴 하지만, 점점 더 교활해지고 점점 더 대량화 되고 있는 스팸메일들을 상대하다 보니 아무래도 한계가 있는 모양입니다.

궁하면 통한다고, 이런 상황이 반복되던 어느 날 웹서핑 중 우연찮게 알게 된 SpamBayes라는 놈이 어째 물건인 것 같은 느낌을 받아 한번 사용해보게 되었습니다. Python으로 만들어졌다는 점과 Source Forge에 등록된 open source project라는 점, Outlook Add-in 형식을 지원한다는 점, 이 세 가지 특징이 저를 붙든 주 요인이었습니다.

공식 홈페이지는 다음과 같습니다.

LINK: http://spambayes.sourceforge.net

공식 홈페이지에서 대강의 설명을 보니, Paul GrahamA Plan for Spam에서 소개된 Bayesian spam filtering 알고리즘을 바탕으로 Gary Robinson개선 사항을 반영하여 만들었다고 합니다.

알고리즘에 대한 설명 역시 날림으로 살펴본 바로는, 메일 내용을 token으로 쪼개어서 통계적 방법으로 점수를 매기고 이에 근거하여 spamham(spam mail이 아닌 good mail을 의미하는데, 언어 유희인가요?), unsure 등을 구분하는 방식인 것 같습니다.

그러면 그 통계적 방법의 근거는? 여기서 훈련(training)이라는 말이 나옵니다. 처음에는 spam과 ham을 구분할 수 없다는 것입니다. 속된 표현으로 똥인지 된장인지 먹어봐야 안다는 것이죠. 사용자의 판단으로 미리 구분해 놓은 spam과 ham을 가지고 훈련을 시켜주면 그 자료를 토대로 새로운 메일에 대해 점수를 매기게 되는 것입니다. 또한 훈련 부족으로 오판을 하게 되는 경우 사용자가 이것을 정정해주는 기능이 있습니다. 이것 역시 훈련의 한 부분이 됩니다. 아무 것도 모르는 아이를 하나 둘 가르쳐서 사리분별 할 수 있는 '사람'으로 만드는 과정에 비유한다면 좀 비약이 심한 것일까요? :)

뭐, 이론상 이 방법 역시도 100% 완벽할 수는 없겠지만, 'mistake-based training'이란 말에서 알 수 있는 것처럼 실수라는 중요한 경험을 통해서 학습하게 되고 점점 더 똑똑한 필터가 되어가기 때문에 훈련 회수를 거듭할수록 점점 완벽에 가까워지는 것입니다. 그리고, 사용자의 기준에 부합하는 스팸 필터를 만들 수 있다는 장점도 있습니다. 사용자마다 스팸을 구분하는 기준이 다를 수도 있는데, 훈련 과정에 이것을 충분히 반영해줄 수 있기 때문입니다.

SpamBayes는 Outlook Add-in 형식 외에도 POP3 Proxy, IMAP filter, procmail embedded filter 형식을 지원합니다. Outlook이 아닌 다른 메일 클라이언트를 사용하시는 분들도 좀 번거롭긴 하지만 사용할 수 있다는 말이죠.

자, 여러분들도 더 이상 스팸 메일 때문에 골치 아파하지 마시고, SpamBayes 한 마리 키워보세요. 얼마 지나지 않아서 필터를 뚫을 수 있는 대단한(?) 스팸 메일이 오기만을 학수 고대하는 자신을 발견할 수 있을 겁니다. ;-)


주의) 현재 alpha 버전인 1.1.3aHOMEPATH 내에 한글 문자가 있을 경우 초기화 오류가 발생하는 버그가 있습니다.(HOMEPATH 내에 한글 문자가 있다는 것은 Windows 로그인 계정을 만들 때 한글을 사용했다는 것을 의미합니다.) 안정 버전인 1.0.4는 문제 없이 잘 되더군요. 같은 팀에서 일 하고 계시는 대리님 한 분이 알려주셨습니다. ;-)

댓글 없음:

댓글 쓰기