본문 바로가기

Tech Story

추천 시스템을 위한 하둡 마훗 사용하기 (PR시리즈.13)

빅데이터를 위한 하둡 Hadoop이나 머신러닝 라이브러리인 마훗 Mahout의 디테일한 것을 설명하려는 것이 아닙니다. 그냥 마훗의 추천 알고리즘을 실행해본 수준에서 경험했던 프랙티스에 대한 간단한 리마크만 하겠습니다. 하둡이나 마훗에 대한 상세 설명이나 설치/설정 방법에 대해서는 다른 문서들을 찾아보시기 바랍니다. 특히 마훗의 아이템기반CF의 상세한 사용방법은 위키페이지를 참조하세요.

먼저 마훗CF를 사용하기 위한 입력데이터는 {UserID, ItemID, Rating} 페어로 된 CSV 파일이 필요합니다. 마지막 값인 Rating은 암묵점수에서는 넣을 필요없이 하둡/마훗을 실행할 때 옵션 --booleanData를 활성화시키면 됩니다. 여기서 중요한 점은 UserID와 ItemID가 모두 Long integer 형태여야 합니다. 스트링타입을 Long타입으로 변경하려면 마훗 라이브러리에 포함된 MemoryIDMigrator() 클래스를 이용해서 매핑 & 역매핑하시면 됩니다. 그냥 스트링타입의 데이터를 입력하면 java.lang.NumberFormatException.forInputString 익셉션이 발생합니다.

준비된 유저-아이템 레이팅 CSV 파일을 HDFS에 올려놓고 실행시키면 됩니다. 실행하는 방법은 크게 세가지가 있습니다. 아래는 아이템기반CF를 중심으로 명시했습니다. 

  • 마훗 라이브러리를 이용해서 Java 등의 프로그램으로 직접 구현해서 실행하는 방법 (인터넷에 찾아보면 예제파일 있음)
  • 하둡을 이용해서 마훗을 실행하는 방법 (hadoop jar /../mahout-core-0.7-job.jar org.apache.mahout.cf.taste.hadoop.similarity.item.ItemSimilarityJob --OPTION)
  • 마훗을 바로 실행하는 방법 (/../mahout/bin/mahout itemsimilarity --OPTION)

사용되는 옵션은 위키페이지에 자세히 명시되어있습니다. 하둡을 이용해서 마훗을 실행하면 좋은 점이 하둡 옵션을 지정해서 맵리듀스 사이즈를 별도로 정할 수 있다는 점입니다. (-D mapred.reduce.tasks=X)

대용량 데이터를 처리하기 위해서 하둡 및 마훗을 사용했는데, 유사도 (Similarity Measure)를 어떤 것을 사용하느냐에 따라서 Java Heap Size 문제가 발생하기도 했습니다. 다음검색에서 블로그글의 한달치 클릭로그로 테스트해봤는데, 간단한 Tanimoto를 사용했을 때는 별다른 문제가 발생하지 않았는데, 다른 measure로 변경했을 때는 메모리 에러가 났습니다. 실서비스를 위해서 안정적인 계산이 필요한 경우에는 데이터 사이즈 및 유사도를 미리 잘 테스트해 볼 필요가 있습니다. (유사도는 --similarityClassname 옵션을 사용해서, 위키에 지정된 것들을 사용하면 됩니다.)

인풋파일은 따로 명시되지 않고 지정된 하둡 디렉토리 (--input /../input)의 모든 CSV 파일들을 그대로 사용하는 듯하고 (확인필요), 아웃풋파일은 지정된 하둡 디렉토리에 (--output /../output)에 생성됩니다. 파일 이름의 컨벤션은 정확히 기억나지 않습니다. 직접 확인해보세요. 옵션 중에 maxSimilaritiesPerItem이 있는데, 처음에는 아이템별로 유사 아이템 개수를 지정해주는 것으로 이해했지만, 테스트해보니 아웃개수 (아이템수)를 지정하는 옵션이 아닌 듯합니다.

하둡/마훗을 사용하기에 잘 정리하지는 못했지만, 이 정도의 설명도 없어서 처음에는 조금 당황했던 기억이 납니다. 잘 사용하셔서 좋은 성과 얻으시기 바랍니다.

추천시스템 전체 목록

  1. 추천 시스템과의 조우 (PR시리즈.1)
  2. 추천 시스템을 위한 데이터 준비 (PR시리즈.2)
  3. 추천대상에 따른 추천 시스템의 분류 (PR시리즈.3)
  4. 알고리즘에 따른 추천 시스템의 분류 (PR시리즈.4)
  5. 추천 시스템을 위한 유사도 측정 방법 (PR시리즈.5)
  6. 추천 시스템의 성능 평가방법 및 고려사항 (PR시리즈.6)
  7. 추천 시스템에서의 랭킹과 필터링 문제 (PR시리즈.7)
  8. 추천 시스템의 쇼핑하우 적용예 (PR시리즈.8)
  9. 개인화 추천 시스템에 대하여 (PR시리즈.9)
  10. 추천 시스템의 부작용 - 필터버블 (PR시리즈.10)
  11. 추천 시스템의 레퍼런스 (PR시리즈.11)
  12. 추천 시스템에 대한 잡다한 생각들 (PR시리즈.12)
  13. 추천 시스템을 위한 하둡 마훗 사용하기 (PR시리즈.13)
  14. 추천 시스템에 대해서 여전히 남은 이야기들 (PR시리즈.14)

==

페이스북 페이지: https://www.facebook.com/unexperienced

반응형