Skip to content

level3_recsys_finalproject-recsys-09 created by GitHub Classroom

Notifications You must be signed in to change notification settings

boostcampaitech5/Gampick

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1️⃣ Introduction

1) Background

주변 친구들이나 유튜브, 인터넷 방송 등의 기존의 추천 방식으로는 개인 취향을 반영한 게임을 찾기 어렵습니다. 기존의 사용자 맞춤 게임 추천 서비스도 한 플랫폼 내에서만 정보를 이용하다 보니 관련도가 떨어지고, 플랫폼별 인기 게임의 특징과 장르 차이로 인해 추천 결과가 상이합니다. 이러한 문제를 해결하기 위해 겜픽이라는 다양한 게임 플랫폼을 아우르는 개인 맞춤 게임 추천 웹 서비스를 개발하게 되었습니다.

2) Project Objective

  • 다양한 게임 플랫폼을 통합하여 사용자 맞춤 게임 추천을 제공합니다. 사용자는 여러 플랫폼에 접속하지 않고도 한 곳에서 다양한 게임 추천을 받을 수 있어 효율적으로 게임을 찾을 수 있습니다.

  • 사용자가 경험했던 모든 게임 기록을 고려하여 취향을 정교하게 반영한 추천 결과를 제공합니다. 이로 인해 사용자에게 맞춤형이고 다양한 게임 추천이 가능합니다.

  • 게임별 사용자 리뷰 데이터를 분석하여 게임의 특징을 파악하고, 사용자의 관점에서 진솔하고 직접적인 평가를 반영하여 게임 추천에 도움이 되는 정보를 제공합니다. 이를 통해 사용자는 더욱 신뢰성 있는 추천을 받을 수 있습니다.


2️⃣ Service Architecture

1) Project Tree

📦level3_recsys_finalproject-recsys-09
├─ 📂Backend
│  ├─ 📂backend_model
│  │  ├─ 📂app
│  │  │  ├─ 📂api/routes
│  │  │  │  ├─ 📜api.py
│  │  │  │  ├─ 📜model_hb.py
│  │  │  │  ├─ 📜openapi.py
│  │  │  │  └─ 📜popular.py
│  │  │  ├─ 📂core
│  │  │  ├─ 📜main.py
│  │  │  ├─ 📂models
│  │  │  │  └─ 📜prediction.py
│  │  │  └─ 📂services
│  │  │     ├─ 📜filters.py
│  │  │     ├─ 📜predict.py
│  │  │     └─ 📜preprocess.py
│  │  ├─ 📜Dockerfile
│  │  └─ 📜Makefile
│  └─ 📂web
│     ├─ 📂api
│     │  ├─ 📜home.py
│     │  ├─ 📜input.py
│     │  └─ 📜output.py
│     ├─ 📂core
│     ├─ 📂database
│     ├─ 📂schemas
│     ├─ 📜app.py
│     └─ 📜Dockerfile
├─ 📂Data
│  ├─ 📂crawling
│  │  ├─ 📜game_data_crawling.ipynb
│  │  ├─ 📜GPT_review.ipynb
│  │  ├─ 📜MetaCriticScraper.py
│  │  └─ 📜user_crawling.ipynb
│  ├─ 📂postgre
│  │  └─ 📜postgre.ipynb
│  └─ 📂preprocess
│     ├─ 📜#_of_player_mapping.ipynb
│     ├─ 📜data_preprocess.ipynb
│     ├─ 📜genre_mapping.ipynb
│     └─ 📜test_user_sampling.ipynb
├─ 📂Frontend
│  ├─ 📂image
│  ├─ 📜input.html
│  ├─ 📜main.html
│  └─ 📜output.html
├─ 📂Model
│  ├─ 📜model.py
│  ├─ 📜performance_check.py
│  ├─ 📂Recbole
│  │  ├─ 📜inference.py
│  │  ├─ 📜main.py
│  │  ├─ 📜preprocess.py
│  │  ├─ 📜requirements.txt
│  │  ├─ 📂trainer
│  │  │  ├─ 📜rebole_inference.py
│  │  │  └─ 📜rebole_train.py
│  │  └─ 📂utils
│  └─ 📂src
├─ 📂.github
│  ├─ 📂ISSUE_TEMPLATE
│  └─ 📂workflows
│     ├─ 📜model_serving.yml
│     └─ 📜web_serving.yml
├─ 📜.gitignore
└─ 📜README.md

2) Service Overview

  1. 웹 서비스가 시작되면 웹 페이지에 시작 화면이 전시됩니다.
  2. 사용자는 서비스의 [START] 버튼을 클릭하면 사용자 정보 입력 페이지로 이동합니다.
  3. 사용자는 나이, 선호 장르, 보유중인 게임 장비, 해봤던 게임 등 사용자 정보를 입력합니다.
  4. 해당 정보는 FastAPI를 통해 Modeling Component에 전달됩니다.
  5. Modeling 모듈에서는 사용자 정보 전처리 → 기존 유저와의 유사도 분석 → 새로운 유저의 추천 목록 생성 → 사용자 정보를 통한 필터링을 수행합니다.
  6. 필터링된 추천 아이템 목록은 FastAPI를 통해 웹 서비스로 전송됩니다.
  7. 서비스는 데이터 저장소로부터 추천 아이템 ID 목록에 해당하는 URL과 제품 image, 장르 정보를 추출하여 웹 페이지에 전시합니다.

3️⃣ DataSet

1) 데이터셋 수집

2) Database ERD

  • 게임 이름을 id로 나타내는 column을 전체 테이블의 Primary Key로 설정
  • Game table에 앞서 메타 크리틱을 통해 수집한 게임들의 데이터를 저장
  • CB 모델 table에는 GPT 모델을 이용하여 구한 게임 태그 데이터가 포함되며 이는 content based model로 제품을 추천할 때 사용
  • 각 게임에 리뷰를 남긴 유저들의 리뷰 게임 목록을 수집하여 각 유저들과 게임 이름을 인덱스화 하여 각각 cf_model 테이블, user 테이블에 저장
  • 당장의 구현 과정에서는 사용하지 않지만 추후 서비스 고도화에 사용할 수 있는 정보들은 따로 details 테이블에 저장
  • 사용자 입력을 user_info에 입력에 대한 각 모델별 output을 gpt_output, hb_model_output에 사용자 피드백을 final_feedback에 저장
  • 위의 데이터는 예외 상황 파악 및 처리, 모델 학습 및 개선을 위한 데이터 수집을 위해 저장

4️⃣ Modeling

1) Flow Chart

2) Model Selection

  • 한정된 시간안에 여러가지 다양한 모델을 실험해보기 위해 Recbole 라이브러를 사용
  • 우리가 수집한 유저들의 게임로그 데이터의 sparsity는 99.6%로 매우 높았는데, sparse한 데이터와 cold start problem에 특히 강한 Ease 모델이 단일모델 기준 성능이 가장 좋았음
  • 결과적으로, Ease를 베이스라인모델로 정하고, 다양한 모델을 결합한 하이브리드 모델을 구상

3) Model Train

  • 수집한 유저 게임로그 데이터를 8:2 비율로 train-test set으로 split
  • train set 으로는 모델을 학습시키고, test set에서는 무작위로 masking을 진행 한 뒤 이를 모델이 예측하는 방식으로 성능평가를 진행
  • 성능지표는 precision@5, recall@5를 사용

4) Collaborate Filtering

  • Ease 모델을 통해 사전 수집된 유저들의 추천 결과를 도출
  • 이후 새로운 유저가 들어오면 Collaborative Filtering을 통해 사용자들 간의 유사도를 계산하고, 새로운 유저와 유사한 이전 사용자들을 필터링

5) Content Based Filtering

  • Collaborative Filtering 을 통해 만들어진 추천리스트를 Content-based Filtering을 사용하여 사용자가 선호할 만한 아이템을 필터링

6) GPT-3.5-turbo-Model

  • 대화형 인터페이스를 활용한 GPT 프롬포트를 통해 사용자의 입력에 따른 게임 추천 모델로서 활용

5️⃣Product Serving

1) Workflow

2) FrontEnd

  • 사용자 데이터 입력 : 나이, 플랫폼, 선호 장르, 태그, 했던 게임 등
  • 게임 추천 결과 출력 : 게임 이름, 플랫폼, 메인 장르, url 등

3) BackEnd (FastAPI)

  • 웹 서버와 모델 서버로 구성
  • 웹 서버에서 Frontend로부터 사용자 정보를 수신하여 모델 서버에 Request 전송
  • 웹 서버에서 모델 서버로부터 Response를 받아 Frontend로 전송

4) github-action

  • github에 코드 push되면 모델과 웹 서버에 배포 자동화

5) redis

  • 모델 서버에서의 inference 시간 단축을 위하여 캐시 서버인 redis 서버 사용

6) DB

  • Frontend의 자동 완성 기능에 사용할 전체 게임 목록 생성
  • 모델 서버에서 받은 추천 게임 id 목록을 토대로 Frontend에 제공할 게임 정보 검색
  • Frontend로부터 받은 사용자 입력, 모델 서버로부터 받은 모델 출력과 Frontend로부터 받은 사용자 피드백을 저장

6️⃣ How to Run

run web(local)

cd Backend/web/
poetry shell
poetry install
pip install python-multipart
python app.py

run model server(local)

cd Backend/backend_model/
poetry shell
poetry install
exit
make run

You need to make 4 server(Model, Web, DB, Redis)

You need to install Docker at model and Web server

7️⃣ Demo (시연 영상)

8️⃣ Reference

9️⃣ 팀원 소개

 

김현정_T5070 민현지_T5078 황찬웅_T5232 곽희원_T5015 이희만_T5169
Web Server Front End / PM Model Enginnering Model Server Data Enginnering
 

About

level3_recsys_finalproject-recsys-09 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published