전통적인 프로그래밍 기법을 사용해 어떻게 스팸 필터를 만들 수 있을지 생각해 봅시다.
1. 먼저 스팸에 어떤 단어들이 주로 나타나는지 살펴봅니다. 그러면 '4U', '신용카드', '무료', '굉장한' 같은 단어나 구절이 제목에 많이 나타나는 경향이 있다는 것을 알 수 있습니다. 어쩌면 보낸이의 이름이나 메일 주소, 본문 등에서 다른 패턴을 감지할 수도 있습니다.
2. 발견한 각 패턴을 감지하는 알고리즘을 작성하여 프로그램이 이런 패턴을 발견했을 때 그 메일을 스팸으로 분류하게 합니다.
3. 프로그램을 테스트하고 충분한 성능이 나올 때까지 1단계와 2단계를 반복합니다.
전통적인 접근 방법에서는 문제가 단순하지 않아 규칙이 점점 길고 복잡해지므로 유지 보수하기 매우 힘들어집니다
반면 머신러닝 기법에 기반을 둔 스팸 필터는 일반 메일에 배해 스팸에 자주 나타나는 패턴을 감지하여 어떤 단어와 구절이 스팸 메일을 판단하는 데 좋은 기준인지 자동으로 학습합니다. 그러므로 프로그램이 훨씬 짧아지고 유지 보수하기 쉬우며 대부분 정확도가 더 높습니다.
더군다나 스팸 메일 발송자가 '4U'를 포함한 모든 메일이 차단된다는 것을 안다면 '4U' 대신 'For U'를 쓰기 시작할지도 모릅니다. 전통적인 프로그래밍 방식의 스팸 필터는 'For U' 메일을 구분하기 위해 수정이 필요합니다. 스팸 메일 발송자가 스팸 필터에 대항해 계속 단어를 바꾸면 영원히 새로운 규칙을 추가해야 합니다.
하지만 머신러닝 기반의 스팸 필터는 사용자가 스팸으로 지정한 메일에 유독 'For U'가 자주 나타나는 것을 자동으로 인식하고 별도의 작업을 하지 않아도 자동으로 이 단어를 스팸으로 분류합니다.
머신러닝이 유용한 또 다른 분야는 전통적인 방식으로는 너무 복잡하거나 알려진 알고리즘이 없는 문제입니다. 음성 인식speech recognition을 예로 들 수 있습니다. 'one'과 'two'두 단어를 구부하는 프로그램을 작성한다고 합시다. 단어 'tow'는 높은 피치pitch의 사운드('T')로 시작하므로 높은 피치의 사운드 강도를 측정하는 알고리즘을 하드코딩해서 'one'과 'two'를 구분할 수 도 있습니다. 당연히 이 방법은 소음이 있는 환경에서 수백만명이 말하는 여러 언어로 된 수천개의 단어를 구분하는 것으로 확장하기 어렵습니다. 각 단어를 녹음한 샘플을 사용해 스스로 학습하는 알고리즘을 작성하는 것이 현재 가장 좋은 솔루션입니다.
우리는 머신러닝을 통해 배울 수도 있습니다. 즉, 머신러닝 알고리즘이 학습한 것을 조사할 수 있습니다. 예를 들어 스팸 필터가 충분한 스팸 메일로 훈련되었다면 스팸을 예측하는데 가장 좋은 단어와 단어의 조합이 무엇인지 확인할 수 있습니다. 가끔 예상치 못한 연관 관계나 새로운 추세가 발견되기도 해서 해당 문제를 더 잘 이해하도록 도와줍니다.
머신러닝 기술을 적용해서 대용량의 데이터를 분석하면 겉으로는 보이지 않던 패턴을 발견할 수 있습니다. 이를 데이터 마이닝(data mining)이라고 합니다.
요약하면 머신러닝은 다음 분야에 뛰어납니다.
- 기존 솔루션으로는 많은 수동 조정과 규칙이 필요한 문제: 하나의 머신러닝 모델이 코드를 간단하고 더 잘 수행되도록 할 수 있습니다.
- 전통적인 방슥으로는 전혀 해결 방법이 없는 복잡한 문제: 가장 뛰어난 머신러닝 기법으로 해결 방법을 찾을 수 있습니다.
- 유동적인 환경: 머신러닝 시스템은 새로운 데이터에 적응할 수 있습니다.
- 복잡한 문제와 대량의 데이터에서 통찰 얻기
댓글 없음:
댓글 쓰기