GithubHelp home page GithubHelp logo

lovelylea8 / r4tings-recommender Goto Github PK

View Code? Open in Web Editor NEW

This project forked from r4tings/r4tings-recommender

0.0 0.0 0.0 32.28 MB

R4tings Recommender - Open Source Recommendation Engine using Apache Spark and Java

Home Page: http://r4tings.com

License: Other

Java 81.33% R 14.54% PowerShell 4.13%

r4tings-recommender's Introduction


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

  • 오픈 소스 추천 엔진 패키지
    • 추천 시스템을 위한 대규모 데이터의 병렬 처리가 가능
    • 추천 처리 과정을 단계별로 분해하여 내부 흐름을 쉽게 이해 할 수 있도록 컴포넌트로 제공
    • 추천모델을 보다 유연하게 확장 할 수 있도록, 내부 알고리즘은 고차 함수로 제공
  • 오픈소스 에코 시스템
    • 추천 시스템에 대한 학습과 이해를 돕기 위한 워크북 제공
    • 다양한 배경과 관심을 가진 사용자들이 참여하여 추천 시스템에 대한 새로운 아이디어를 시험
    • 새로운 아이디어의 시험 결과인 추천 기법이나 수정되거나 확장된 기능을 플러그인(Plugin) 형식으로 프로젝트에 공유

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

  • 전통적인 통계나 기계 학습 기반 추천 모델들의 구현체와 워크샵 제공을 통한 추천 시스템의 학습과 이해
  • 시뮬레이터나 프로토타이핑을 통한 학술 연구 목적에서의 이론 및 성능 검증
  • 상용 수준의 추천 시스템 구현 가능성 검토

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>
build_version1.mp4

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)

  • R4tings Recommender 프로젝트의 데이터셋 준비하기는 링크 를 참고하세요.
  • R4tings Recommender Examples 프로젝트의 데이터셋 준비하기는 링크 를 참고하세요.

유용한 정보(Other Resources)

기술 스택(Technology Stack)

  • 프로그래밍 언어 : Java 100% (JDK 8 / 11 호환)
  • 개발 환경
    • 소프트웨어 형상 관리: Git / GitHub
    • 빌드 도구 : Gradle 8.3
    • IDE: IntelliJ IDEA Community Edition
  • 라이브러리 및 프레임워크
    • Apache Spark 3.5.0 (Scala 2.12)
    • Junit
    • Logback
    • Project Lombok
    • Zip4j
  • 소프트웨어 형상 관리: Git / GitHub
  • 데이터셋
    • 예제(r4tings) 데이터셋 – 평점 30개
    • 북크로싱(Book-Crossing) 데이터셋 – 평점 1,149,780개
    • 무비렌즈(MovieLens) 데이터셋 – 평점 27,753,444개

리소스(Resources)

피드백과 기여(Feedback and Contributions)

  • 기능 오류나 개선 사항이 있는 경우에는 ISSUES에 등록하거나 DISCUSSIONS을 통하여 피드백 해 주세요.
  • 프로젝트의 참여나 기여도 언제나 환영합니다. 자세한 정보는 CONTRIBUTORS에서 확인할 수 있습니다.

라이선스(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)

프로젝트에 대한 질문이나 제안, 또는 기타 연락이 필요한 경우, [email protected] 으로 연락 주세요.

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

r4tings-recommender's People

Contributors

r4tings avatar solemnace avatar koojeongwoon avatar dongha-yun avatar mend-bolt-for-github[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.