7 min read

식당 어때?, Review-Based Restaurant RecSys

식당 어때?, Review-Based Restaurant RecSys

2024 KakaoTech Bootcamp - Machine Learning Model Serving (2024.07 - 2024.08)

KakaoTechBC-GOATNINE
KakaoTechBC-GOATNINE has 3 repositories available. Follow their code on GitHub.
팀원과정담당업무
ilmin(조일민) -팀장인공지능데이터 크롤링, 데이터 전처리 및 분석 - 파이프라인 구축, 모델 구현 및 개선, 리뷰 클러스터링, AI api 구축 및 연동
lucy(심명선)인공지능데이터 크롤링, 데이터 전처리, 모델 구현 AI-front 맵, 리스트 구축
pocco(박상은)풀스택UI 및 UX 설계, 프론트, 백엔드
neo(이정진)풀스택프론트, 백엔드
terry(강우빈)클라우드서버간 통신 구축, 백엔드, 인프라 구축


랜딩 페이지 - 검색 페이지
추천 리스트- 핀 마커 표시
추천 결과 - keyword: 분당시 돈까스
QnA 페이지
QnA 글 등록
Admin - QnA
Admin - User

프로젝트 개요

  • 사용자에게 개인 맞춤형 맛집 추천 서비스를 제공하기 위해 머신러닝 모델을 서빙하는 웹 애플리케이션을 개발 
  • 사용자가 원하는 음식 종류나 키워드를 입력하면, 모델은 실시간으로 사용자 근방의 적합한 맛집 리스트를 추천

주요 기능

API 엔드포인트 설계:

  • 사용자의 입력(음식 종류, 키워드)을 받아, 현재 위치 기반으로 추천 맛집 리스트(가게이름, 점수, 빈도수가 높은 단어)를 제공하는 API를 설계함
  • 추천된 맛집 리스트는 사용자 근방에서 접근 가능하도록 정렬되어 제공되며, 지도 상에 시각적으로 표시함

데이터 수집:

  • 데이터 소스: 리뷰 신뢰성이 높은, 카카오 맵을 활용하여 식당의 별점, 방문자 리뷰 텍스트, 방문자 수, 사용자 별 평균평점 등의 데이터를 수집
  • 데이터 수집: selenium, beautifulSoup을 활용하여 병렬 크롤링을 진행한뒤, elastic search에 데이터를 저장하고 kibana로 데이터를 분석

데이터 전처리 및 레이블링:

  • 리뷰 텍스트 전처리: 리뷰 데이터는 정규표현식 및 토큰화를 통해 필요 없는 부분을 제거하고, 분석에 적합한 형태로 가공, 이러한 전처리 과정을 통해 모델이 텍스트 데이터를 효과적으로 학습
  • 라벨링: 사용자 만의 평균 평점을 기반으로 라벨링 작업을 수행한뒤, 차후에 직접 만든 모델로 레이블링(0,1,2)된 리뷰들을 다시 평가 진행하며 라벨링 직접 수정 과정을 거침.

특색있는 기능:

  • KcELENTRA, pre-trained된 모델과 직접수집하고 레이블링한 데이터를 활용한 감성평가 모델보유.
  • Sentence-BERT 모델을 사용해 리뷰 텍스트를 임베딩으로 변환.
  • UMAP으로 임베딩을 차원 축소하여 군집화 효율성증가.
  • HDBSCAN을 사용해 리뷰들을 자동으로 군집화 1:가장 많은 군집, 0:적은 군집, -1: 노이즈
  • 군집별 단어 분석: 각 군집에 속한 리뷰들에서 자주 언급된 단어들을 추출.

기술스택

아키텍쳐 구조

ERD
RecSys, Work-Flow
API 명세서
API 구현

Data Pipeline, AI Model, Clustering

데이터 수집 및 전처리
벡터디비 및 레이블링화
성능 개선을 위한 pretrained 모델 선정 및 지도방식 자체 모델 구축
BiLSTM 활용
앙상블 기법 활용하여 추천 API 구축 및 추천 방법론 적용
클러스터링 구현

Issues & Problem-Solving

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

성능 이슈를 해결하기 위해 주기적으로 모델 성능을 분석하고, 각종 하이퍼파라미터를 조정하며 최적화 과정을 거쳤음. 특히, 성능 개선을 위한 주요 접근 방식으로는 다음과 같은 방법을 시도함:

  • 데이터 전처리 개선
  • 모델 아키텍처 조정
  • 학습 속도와 성능의 균형을 고려한 최적화

기존에 222초 걸리던 시간을 벡터 디비를 생성하고 랭킹화 할 때 배치를 설정하고 클러스터링 할 때, 일일이 모델을 다운하던 구조랑 허깅페이스에서 끌어오던 것을 서버에 모델을 올려 진행해 총 26초 정도로 응답속도를 줄임.


협업 과정-Agile

Jira Ticket
매주 Scrum 및 Sprint
Github Code-Reviews
MVP 단계 개발후 성능 개선

회고


차후로 진행해볼것 - ONNX도입 및 멀티프로세싱있는것에 멀티스레딩 추가해서 둘다 진행해보기