Apache Mahout 소개
Apache Mahout
현대 정보사회에서는 하루에도 수백, 수천의 새로운 도서, 논문, 특허 등의 정보가 쏟아지고 있다. 이로 인해 방대한 데이터에서 사용자가 원하는 정보를 찾아서 제공하는 서비스의 중요성은 점점 더 증가하고 있다. 기계학습은 이러한 분야에서 중요한 역할을 담당할 수 있으며 Amazon, Netflix, Facebook, Google 은 사용자에게 추천을 하거나 유사한 뉴스 또는 항목을 찾아 주는데 사용하고 있다. 그런데 기계학습 솔루션은 흔히 고가의 비용이 소요되어 그 동안은 쉽게 도입하기가 어려웠다.
Apache Mahout은 Apache Software Foundation(ASF)에서 오픈소스로 제공하는 기계학습 Framework 이다. 그래서 기계학습에 대한 간단한 지식만 있다면 무료로 업무에 적용할 수 있다. 기계학습 관련 지식이라고 하여 겁 먹을 필요는 없다. Apache Mahout은 이미 많은 기능을 구현해 놓았기 때문에 어려운 통계학, 알고리즘, 수학공식을 들여다 볼 필요 없이, 요구되는 비즈니스 시나리오에 필요한 기능을 가져다 사용하면 된다.
현재 Mahout에 구현되어 있는 기능은 세 가지로 구분되며 이러한 기능은 실제 어플리케이션에서 매우 일반적으로 사용되고 있다.
- 협업필터링(Collaborative Filtering)
- 클러스터링(Clustring)
- 분류(Classification or Categorization)
Mahout은 비교적 쉽게 시작하고 실행할 수 있다. 시작하려면 먼저 다음과 같은 프로그램을 설치하여야 한다.
- JDK 1.6이상
- Ant 1.7이상
- Maven 2.0.9 또는 2.0.10 (Mahout 소스를 작성하려는 경우)
- Hadoop 0.20.0 이 (분산환경에서 실행할 경우)
협업필터링(Collaborative Filtering)
협업필터링(Collaborative filtering)은 등급, 클릭 수 및 도서 대여 수 등과 같은 사용자 정보를 활용하여 사용자에게 추천항목을 제공하는 기술로서 당사의 R2Cat+가 사용하고 있는 기술이기도 하다.
일반적으로 도서관의 독자들은 관심분야가 유사하다면 유사한 도서를 찾으려는 경향이 있다. 예를 들어 Flex 책을 읽는 독자는 HTML5 책에도 관심이 있을 것이다. Hadoop 책을 읽는 독자는 HBase 책에도 관심이 있을 것이다. 예를 든 책들은 소프트웨어 분야의 책이라 이 분야와 관련이 없다면 잘 이해가 가지 않을 수 있다. 그런데 독자와 책이 소프트웨어라고 분류되어 있지 않은데, 시스템은 어떻게 그것을 알 수 있을까?
Apache Mahout의 협업필터링 알고리즘이 여기에 대한 해결책을 제시한다. Mahout의 협업필터링 어플리케이션은 사용자 및 항목을 기반으로 독자에게 추천 항목을 제공한다.
일반적으로 추천은 다음 네가지 방법으로 이루어진다.
- 사용자 기반 : 유사한 사용자를 찾아서 항목을 추천한다. 이 방법은 사용자의 동적 특성으로 인해 확장하기가 어렵다.
- 항목 기반 : 항목 간의 유사성을 계산하여 항목을 추천한다. 일반적으로 항목은 많이 바뀌지 않기 때문에 오프라인으로도 계산할 수 있다.
- Slope-One : 부울 연산자를 사용한 선호도가 아니라 사용자가 등급을 지정할 때 적용 가능한 매우 빠르고 간단한 항목 기반의 추천 방식이다.
- 모델 기반 : 사용자와 등급으로 구성된 모델을 기반으로 추천 항목을 제공한다.
클러스터링(Clustering)
전자도서관에서 도서, 논문을 읽는 독자에게 유사한 항목을 읽을 수 있는 옵션을 제공하면 좋지 않을까? TOEIC 책과 관련된 글을 읽고 있는 독자라면 TOEFL 책에 관한 글에도 관심이 있을 것이다. 그런데 TOEFL 책이 신간이라 어떤 독자가 무엇을 읽었는지에 대한 이력을 가지고 있지 않다면 어떻게 TOEIC 책이 TOEFL 책과 유사하다는 것을 찾을 수 있을까?
Apache Mahout의 클러스터링 알고리즘이 이러한 문제를 해결해 준다. 즉, Mahout의 클러스터링 알고리즘이 유사한 아이템을 포함하는 그룹을 찾는 것을 도와준다. 동작하는 방법을 설명하면 다음과 같다.
n-차원의 공간을 상상을 상상해 보자(단순화를 위해 2차원 평면을 가정하자). 그리고 (0,0), (0,1), (1,0), (1,1)과 (5,5), (5,4), (4,5), (4,4) 점을 그 위에 그려보자. 그러면 쉽게 2차원 평면 위에 2개의 그룹으로 분리할 수가 있다. 하나의 그룹은 (0,0)주위에 있고, 다른 하나는 (4,4) 주위에 있다. 이 그룹을 점들의 클러스터라고 부른다.
[좌표 표현]
Apache Mahout의 클러스터링 알고리즘은 백터공간에서 클러스터를 찾는 것을 도와준다. 하나의 글을 n-차원 백터공간에 표현할 수 있는데, 글에서 단어(Term)을 추출하여 단어의 출현빈도를 각 차원의 크기로 표현하면 된다. TOEIC 책과 관련된 글에서 영어(=5), 문법(=3), 독해(=3), 어휘(=5)이 출현하고, TOEFL 책과 관련된 글에서 영어(=5), 문법(=4), 독해(=2), 어휘(=3)이 출현했다고 가정하면 각각을 4차원 벡터 공간에 표현할 수 있다.
Mahout에서는 여러 가지 클러스터링 알고리즘을 구현하고 있으며 각 구현마다 고유한 목표와 조건이 있다.
- Canopy : 빠른 클러스터링 알고리즘이며 다른 클러스터링 알고리즘의 초기 시드를 작성하는 데도 사용된다.
- k-Means(및 fuzzy k-Means) : 이전 반복의 중심 또는 중앙으로부터 항목이 떨어져 있는 거리를 기반으로 항목을 k개의 클러스터로 클러스터링한다.
- Mean-Shift : 클러스터 수를 미리 알 필요가 없으며 임의 형태의 클러스터를 생성할 수 있는 알고리즘이다.
- Dirichlet : 가능성이 있는 여러 모델을 기반으로 하는 클러스터가 제공되므로 특정 클러스터 보기를 조기에 결정하지 않다도 된다는 장점이 있다.
Mahout을 사용하여 클러스터링하는 대략적인 단계는 다음과 같다.
- 입력을 준비한다. 텍스트를 클러스터링하는 경우에는 텍스트를 숫자 표현으로 변환해야 한다.
- Mahout에 있는 여러 Hadoop-ready 드라이버 프로그램 중 하나를 사용하여 클러스터링 알고리즘을 실행한다.
- 결과를 평가한다.
- 필요한 경우 위 단계를 반복한다.
분류(Classification or Categorization)
앞에서 살펴 본 클러스터링은 비교사학습의 예이다. 비교사학습이란, 사전에 데이터와 그들 간의 관계에 대한 정보가 없고 데이터로부터 정보와 관계를 추출한다. 이에 반해 교사학습은 사전에 데이터와 그들 간의 관계에 대한 정보를 가지고 있고 알고리즘을 훈련시키기 위해 사용된다.
은행에서 고객을 프리미엄, 우수, 일반 회원으로 분류하여 여러 마케팅 정책에 활용하고자 한다고 하자. 은행에는 수십, 수백만의 고객이 존재할 수 있는데 그 중에서 1% 또는 그것도 많다면 0.1%의 고객을 잔고, 거래건수, 신용도, 계좌보유기간, 계좌 수 등의 속성을 기준으로 수동으로 분류할 수 있다. 이렇게 분류된 정보는 알고리즘을 훈련하는 데 입력 값으로 사용된다.
분류 알고리즘은 일반적으로 미리 정의된 결과 값과 함께 샘플 입력 값이 주어지고 훈련을 통해 하나의 모델이 만들어 진다. 이 모델은 다른 데이터 들을 입력 받아서 카테고리로 분류한다.
Mahout 에서는 현재 베이즈 통계를 기반으로 컨텐츠를 분류하는 두 가지 관련 방법을 지원한다. 첫 번째는 Naïve Bayes 분류기이다. Naïve Bayes 분류기는 데이터에 대한 매우 단순한 가정이 완전히 독립되어 있음에도 불구하고 빠르면서도 상당히 정확한 것으로 알려져 있다. 두 번째 방법은 Complementary Naïve Bayes라고 하며 단순성과 속도를 유지하는 동시에 Naïve Bayes 법과 관련된 일부 문제를 해결하려고 시도한다.
맺음말
이상으로 Apache Mahout에 대해서 개략적으로 살펴보았다. Mahout은 코끼리를 보살피고 운전하는 사람을 뜻하는 말로 프로젝트에서 확장성과 내결함성을 위해 노란색 코끼리를 로고로 사용하는 Apache Hadoop을 사용하면서 지어진 이름이다.
실제 mahout이 코끼리의 능력을 활용하는 것처럼, Apache Mahout을 사용하면 노란색 코끼리 즉, Apache Hadoop의 장점과 기능을 효율적으로 활용할 수 있다.
나중에 콘츠를 클러스터링, 분류 또는 추천할 필요가 있으면 특히, 대량의 콘텐츠의 경우 Apache Mahout을 고려하자.
답글 남기기