r4tings / r4tings-recommender

R4tings Recommender - Open Source Recommendation Engine using Apache Spark and Java
http://r4tings.com
Other
31 stars 3 forks source link


Concept

Official Website: https://r4tings.com

소개(Introduction)

추천 시스템은 많은 양의 정보 안에서 사용자가 적합한 정보를 선택할 수 있도록 도와주는 시스템으로, GroupLens Research의 LensKit, 아파치 소프트웨어 재단의 Apache MahoutApache PredictionIO 등, 다양한 형태의 추천 컴포넌트나 시스템들이 오픈소스로도 제공되고 있으나, 추천 모델이 기본 수식만 구현되어 있거나, 블랙박스(black-box)로 제공되는 등 학술 연구나 상용화 목적의 개념 증명(PoC, Proof of Concept)을 위한 프로토타입 설계 및 구현 단계에서, 적용 영역에 따라 수식과 데이터의 내부 흐름을 미세 조정하고 유연하게 대응하기가 쉽지 않습니다. 또한, 웹 기반의 Notebook을 제공하는 Apache Zeppelin이나 Jupyter Notebook, 또는 Rmarkdown으로 추천 시스템을 구현해볼 수 있으나, 이는 분석가의 업무 흐름에 따라 하나의 Notebook에서 데이터와 처리를 표현하게 하는 목적으로 실제로 독립 시스템으로 구현하기에는 고려할 사항이 적지 않습니다.

이러한 다양한 오픈 소스 추천 시스템들은 다양한 목적에 맞게 사용할 수 있지만, 실제 적용 영역에서 발생할 수 있는 모델 제한성, 블랙박스 모델, 확장성과 대용량 데이터 처리 측면에서 일부 단점이 존재할 수 있습니다.

R4tings Recommender 프로젝트는 오픈 소스 추천 엔진을 개발하고, 커뮤니티에 의해 유지 및 발전될 수 있는 오픈소스 에코 시스템 구축을 목적으로 합니다.

이 프로젝트의 목표는 다음과 같습니다.

Concept

R4tings Recommender 오픈 소스 추천 엔진은 추천 시스템을 구현하기 위한 Java와 Apache Spark 기반의 핵심코드와 이를 활용하기 위한 예제 코드가 포함된 워크북을 함께 제공합니다.

구현 요소(Components)

R4tings Recommender는 추천을 위한 평점 점규화와 유사도 계산, 그리고 협업 필터링과 콘텐츠 기반 필터링과 같은 대표적인 평점 예측과 아이템 추천 기법에 대한 구현체를 제공합니다.

지원 알고리즘 및 클래스

평점 정규화

정규화는 데이터 집합에서 다른 범위나 척도를 가진 값을 일정한 범위로 변환하는 과정입니다. 평점 데이터의 경우, 평점이 서로 다른 척도 또는 범위를 가지기 때문에 평점 정규화를 통해 사용자마다 서로 다른 평점 기준과 아이템에 대한 선호에 따른 평점의 차이를 조정합니다.

유사도 계산

유사도 계산은 다차원 공간에서 데이터 포인트 간의 유사성을 측정하는 방법입니다. 사용자가 아이템에 매긴 평점 데이터를 기반으로 사용자나 아이템 간의 유사성 또는 거리를 측정하여 데이터 간의 관련성을 파악하는 데 사용됩니다.

평점 예측과 아이템 추천

이웃 기반 협업 필터링 추천

전통적인 협업 필터링 알고리즘 중 하나인 k-최근접 이웃을 사용하는 메모리 기반 협업 필터링 추천 모델입니다. 사용자 간 또는 아이템 간의 유사성을 기반으로 아이템을 추천합니다.

특잇값 분해 기반 협업 필터링 추천

행렬 분해 알고리즘 중 하나인 특잇값 분해 접근 방법을 사용하는 모델 기반 협업 필터링 추천 모델입니다. 평점 데이터의 기준선 추정을 통한 잔차의 절단된 특잇값 분해를 기반으로 아이템을 추천합니다.

TF-IDF 콘텐츠 기반 필터링 추천

콘텐츠 기반 필터링 추천은 사용자가 선호하는 아이템의 특징, 즉 콘텐츠가 유사한 아이템을 추천하는 메모리 기반 추천 모델입니다. 아이템의 TF-IDF 벡터를 구하고, 사용자의 TF-IDF 벡터 간의 코사인 유사도를 계산하여 아이템을 추천합니다.

연관규칙 기반 추천

연관규칙 추천은 어떤 아이템과 동반하여 등장하는 아이템에 대한 규칙인 아이템 간의 연관성을 분석하여 아이템을 추천하는 메모리 기반 추천 모델입니다. 흥미도 측도인 연관규칙의 지지도와 신뢰도를 계산하여 아이템을 추천합니다.

Get Started

필수 및 선택 소프트웨어(Required and optional software)

필수(Required)

소프트웨어 버전 설명
JDK 8 또는 11

OpenJDK 또는 Oracle JDK

OpenJDK를 내려받고 구성하는 방법은 링크 를 참고하세요

Oracle JDK를 내려받고 구성하는 방법은 링크를 참고하세요

선택(Optional)

소프트웨어 버전 설명
Git Latest Git을 내려받고 구성하는 방법은 링크를 참고하세요
Git Client Latest

GitHub Desktop 또는 Sourcetree

GitHub Desktop을 내려받고 구성하는 방법은 링크 를 참고하세요

Sourcetree를 내려받고 구성하는 방법은 링크를 참고하세요

Gradle Latest Build Tool을 내려받고 구성하는 방법은 링크를 참고하세요
IntelliJ Latest IntelliJ를 내려받고 구성하는 방법은 링크를 참고하세요
R Latest R을 내려받고 구성하는 방법은 링크를 참고하세요
RStudio Desktop Latest RStudio Desktop을 내려받고 구성하는 방법은 링크를 참고하세요

프로젝트 구성하기(Set up the project)

Note 필수 소프트웨어인 JDK 11의 설치와 구성이 사전에 완료되었다고 가정합니다.

프로젝트 구성하기의 설명은 MS Windows 10 기준으로 작성되었습니다.

Windows OS에서의 전체 예제 실행은 set-up-the-project-on-windows.ps1 를 참고하세요.

① Windows + R 단축키를 이용 해 실행 창을 열어 줍니다.

② powershell 이라고 타이핑 후 확인을 클릭합니다.

③ PowerShell을 실행한 뒤, 루트 경로로 이동하기 위해 "cd /"를 입력하여 실행합니다.

④ C:에 "mkdir r4tings"를 입력하여 실행하여 r4tings 폴더를 생성하고 생성된 폴더로 이동하기 위해 "cd r4tings"를 입력하여 실행합니다.

⑤ R4tings Recommender 리파지토리의 GitHub 소스 코드 보관 파일을 내려받기 위해 "Invoke-WebRequest https://github.com/r4tings/r4tings-recommender/archive/refs/heads/main.zip -OutFile r4tings-recommender-main.zip"를 입력하여 실행합니다.

⑥ 내려받은 소스 코드 보관 파일의 압축 해제를 위해 "Expand-Archive -LiteralPath r4tings-recommender-main.zip -DestinationPath ."를 입력하여 실행합니다.

⑦ 압축이 해제된 폴더의 이름을 변경하기 위해 "Rename-Item -Path r4tings-recommender-main -NewName r4tings-recommender"를 입력하여 실행합니다.

⑧ "cd r4tings-recommender"를 입력하여 프로젝트 폴더로 이동하고 "ls"를 입력하고 실행하여 r4tings-recommender-master 폴더의 내용을 확인합니다.

⑨ 마지막으로 "./gradlew clean build -x test"를 입력하여 프로젝트를 빌드합니다.


Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

새로운 크로스 플랫폼 PowerShell 사용 https://aka.ms/pscore6

PS C:\Users\r4tings> cd /
PS C:\Users\r4tings> Remove-Item -path /r4tings -recurse -confirm
PS C:\> mkdir r4tings

    디렉터리: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2023-10-01  오전 11:38                r4tings

PS C:\> cd r4tings
PS C:\r4tings> Invoke-WebRequest https://github.com/r4tings/r4tings-recommender/archive/refs/heads/main.zip -OutFile r4tings-recommender-main.zip
PS C:\r4tings> Expand-Archive -LiteralPath r4tings-recommender-main.zip -DestinationPath .
PS C:\r4tings> Rename-Item -Path r4tings-recommender-main -NewName r4tings-recommender
PS C:\r4tings> cd r4tings-recommender
PS C:\r4tings\r4tings-recommender> ls

    디렉터리: C:\r4tings\r4tings-recommender

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2023-10-01  오전 11:40                dataset
d-----      2023-10-01  오전 11:40                gradle
d-----      2023-10-01  오전 11:40                lib
d-----      2023-10-01  오전 11:40                recommender
d-----      2023-10-01  오전 11:40                recommender-examples
-a----      2023-10-01   오후 6:58            151 .gitignore
-a----      2023-10-01   오후 6:58            275 .whitesource
-a----      2023-10-01   오후 6:58           3857 build.gradle
-a----      2023-10-01   오후 6:58            209 gradle.properties
-a----      2023-10-01   오후 6:58           8639 gradlew
-a----      2023-10-01   오후 6:58           2776 gradlew.bat
-a----      2023-10-01   오후 6:58          14480 README.md
-a----      2023-10-01   오후 6:58             87 settings.gradle

PS C:\r4tings\r4tings-recommender> ./gradlew clean build -x test
⋯ - 일부 생략 -
PS C:\r4tings\r4tings-recommender>

https://github.com/r4tings/r4tings-recommender/assets/123946859/6639a38a-e20d-45b0-ad7a-047bff745f8e

R4tings Recommender 오픈소스 추천엔진의 디렉토리 구조는 다음과 같습니다

C:\r4tings
   ├── r4tings-recommender-main.zip                <- R4tings Recommender 소스 코드 보관 파일
   └── r4tings-recommender
       ├── dataset                                 <- 예제 데이터셋 
       │   └── r4tings                             <- r4tings 데이터셋
       ├── gradle                                  
       │   └── wrapper                             <- Gradle Wrapper
       ├── lib                                     
       │   └── hadoop-2.8.3                        <- Microsoft Windows용 Hadoop 바이너리
       ├── recommender                             <- R4tings Recommender 프로젝트
       │   └── src
       ├── recommender-examples                    <- R4tings Recommender Examples 프로젝트 
       │   └── src
       ├── ⋯                                       <- 일부 생략  
       ├── build.gradle                            <- Gradle 빌드 파일
       ├── gradle.properties                       <- Gradle 속성 파일
       ├── gradlew                                 <- Gradle 맥/리눅스용 스크립트 파일
       ├── gradlew.bat                             <- Gradle 윈도우용 스크립트 파일
       └── settings.gradle                         <- Gradle 설정 파일

Warning

프로젝트 폴더 명에는 -main이 없습니다.

프로젝트 폴더는 r4tings-recommender 입니다.

Microsoft Windows용 Hadoop 바이너리는 링크를 참고하세요.

리포지토리 뷰에서 소스 코드 보관 파일 다운로드하는 자세한 내용은 링크를 참고하세요.

데이터셋 준비하기(Prepare Dataset)

유용한 정보(Other Resources)

기술 스택(Technology Stack)

리소스(Resources)

피드백과 기여(Feedback and Contributions)

라이선스(License)

This project is dual-licensed under Apache License 2.0 and Creative Commons BY-NC-SA 4.0. Copyright (c) 2023 r4tings.com

See LICENSE.md file for details.

참조(References)

연락처(Contact)

프로젝트에 대한 질문이나 제안, 또는 기타 연락이 필요한 경우, dongsup.kim\@r4tings.com 으로 연락 주세요.

NEWS & UPDATES

[2024/3Q] 온라인 강좌. (준비중)

  • (가제) 수식으로 이해하는 추천 시스템 워크북. 미정.

[2023/12] 공개SW 개발자대회 은상(한국정보과학회 회장상). (2023)

[2017/07] R로 만드는 추천 시스템. 에이콘출판사.

[2016/12] Recomon 연구실 (2016/12 - 2017/12). 모두의 연구소.

[2016/09] Recommender Systems Specialization. University of Minnesota on Coursera.

Sponsorship

GitHub Sponsors을 통하여 후원해 주시면 지속해서 프로젝트를 진행하는 데에 큰 도움이 됩니다.


Creative Commons License