식당 어때?, Review-Based Restaurant RecSys
2024 KakaoTech Bootcamp - Machine Learning Model Serving (2024.07 - 2024.08)
팀원 | 과정 | 담당업무 |
---|---|---|
ilmin(조일민) -팀장 | 인공지능 | 데이터 크롤링, 데이터 전처리 및 분석 - 파이프라인 구축, 모델 구현 및 개선, 리뷰 클러스터링, AI api 구축 및 연동 |
lucy(심명선) | 인공지능 | 데이터 크롤링, 데이터 전처리, 모델 구현 AI-front 맵, 리스트 구축 |
pocco(박상은) | 풀스택 | UI 및 UX 설계, 프론트, 백엔드 |
neo(이정진) | 풀스택 | 프론트, 백엔드 |
terry(강우빈) | 클라우드 | 서버간 통신 구축, 백엔드, 인프라 구축 |
프로젝트 개요
- 사용자에게 개인 맞춤형 맛집 추천 서비스를 제공하기 위해 머신러닝 모델을 서빙하는 웹 애플리케이션을 개발
- 사용자가 원하는 음식 종류나 키워드를 입력하면, 모델은 실시간으로 사용자 근방의 적합한 맛집 리스트를 추천
주요 기능
API 엔드포인트 설계:
- 사용자의 입력(음식 종류, 키워드)을 받아, 현재 위치 기반으로 추천 맛집 리스트(가게이름, 점수, 빈도수가 높은 단어)를 제공하는 API를 설계함
- 추천된 맛집 리스트는 사용자 근방에서 접근 가능하도록 정렬되어 제공되며, 지도 상에 시각적으로 표시함
데이터 수집:
- 데이터 소스: 리뷰 신뢰성이 높은, 카카오 맵을 활용하여 식당의 별점, 방문자 리뷰 텍스트, 방문자 수, 사용자 별 평균평점 등의 데이터를 수집
- 데이터 수집: selenium, beautifulSoup을 활용하여 병렬 크롤링을 진행한뒤, elastic search에 데이터를 저장하고 kibana로 데이터를 분석
데이터 전처리 및 레이블링:
- 리뷰 텍스트 전처리: 리뷰 데이터는 정규표현식 및 토큰화를 통해 필요 없는 부분을 제거하고, 분석에 적합한 형태로 가공, 이러한 전처리 과정을 통해 모델이 텍스트 데이터를 효과적으로 학습
- 라벨링: 사용자 만의 평균 평점을 기반으로 라벨링 작업을 수행한뒤, 차후에 직접 만든 모델로 레이블링(0,1,2)된 리뷰들을 다시 평가 진행하며 라벨링 직접 수정 과정을 거침.
특색있는 기능:
- KcELENTRA, pre-trained된 모델과 직접수집하고 레이블링한 데이터를 활용한 감성평가 모델보유.
- Sentence-BERT 모델을 사용해 리뷰 텍스트를 임베딩으로 변환.
- UMAP으로 임베딩을 차원 축소하여 군집화 효율성증가.
- HDBSCAN을 사용해 리뷰들을 자동으로 군집화 1:가장 많은 군집, 0:적은 군집, -1: 노이즈
- 군집별 단어 분석: 각 군집에 속한 리뷰들에서 자주 언급된 단어들을 추출.
기술스택
아키텍쳐 구조
Data Pipeline, AI Model, Clustering
Issues & Problem-Solving
성능 이슈를 해결하기 위해 주기적으로 모델 성능을 분석하고, 각종 하이퍼파라미터를 조정하며 최적화 과정을 거쳤음. 특히, 성능 개선을 위한 주요 접근 방식으로는 다음과 같은 방법을 시도함:
- 데이터 전처리 개선
- 모델 아키텍처 조정
- 학습 속도와 성능의 균형을 고려한 최적화
기존에 222초 걸리던 시간을 벡터 디비를 생성하고 랭킹화 할 때 배치를 설정하고 클러스터링 할 때, 일일이 모델을 다운하던 구조랑 허깅페이스에서 끌어오던 것을 서버에 모델을 올려 진행해 총 26초 정도로 응답속도를 줄임.
협업 과정-Agile
회고
차후로 진행해볼것 - ONNX도입 및 멀티프로세싱있는것에 멀티스레딩 추가해서 둘다 진행해보기