본문 바로가기
AI SCHOOL/TIL

[DAY 92] 파이널프로젝트 7일차 - 마무리

2023. 5. 8.

파이널프로젝트 7일차 마무리

최종 트랜스포머 모델과 임베딩 피처를 결정하고 추천 플로우를 구현했다. 스트림릿으로 이를 확인한다.

임베딩 모델 변경

최종 모델을 결정했다. RoBERTa 기반의 pretrained SentenceTransformer ko-sroberta-multitask을 사용한다.

raw_recipes = pd.read_csv('data/raw_recipes.csv')
raw_recipes.head(5)

raw data 확인

raw
수집한 데이터

 

df = pd.read_pickle('data/compact_kosroberta_recipes.pkl')
df.head(5)

전처리 완료 데이터 확인

df

벡터화된 컬럼이 보인다. 벡터화를 할 feature는 재료 뿐 아니라 요리 이름, 방법 등을 추가로 포함했다.
모델과 피처를 변경하니 재료를 입력하지 않아도 좋은 성능으로 유의미한 추천을 해준다.

그리고 데이터프레임을 로드한 후 매번 벡터화하는 것은 비효율적이기 때문에 벡터화한 컬럼이 포함된 데이터프레임을 csv로 저장하여 재사용하려고 시도했다.
하지만 csv로 저장하게 되면 numpy의 ndarray 형태인 벡터 정보가 손실된다. 문자열로 자동 변환되기 때문이다.
따라서 pickle을 활용하여 벡터 정보를 잃지 않고 저장, 로드하도록 했다. 재사용성이 매우 증가됐다.

추천 흐름

clean

사용자로부터 알레르기, 원하는 요리 종류, 난이도, 최대 소요 시간을 입력 받을 수 있다. 이 정보를 통해 사용자가 원하지 않는 데이터가 1차적으로 필터링되어 더 정확한 추천을 할 수 있다.

flow

이후 OpenAI API를 사용하여 사용자가 입력한 대화에 따라 의도를 파악하여 요리를 추천하고, 추가 설명하고, 요리 방법을 안내한다.

Streamlit으로 구현한 챗봇 대시보드

요리 레시피 추천 챗봇 대시보드를 streamlit으로 구현했다. 이름은 Chat강록

info

사용자가 필터링하고 싶은 정보를 입력할 수 있다. 각 입력은 토글 형태로 되어 있다.

allergy

견과류 알레르기 선택, 바나나는 직접 입력

store

요리 범주 선택, 난이도 선택, 최대 요리 시간 제한 후 저장

main

챗봇만나기로 이동하여 "소고기와 양파로 만들 요리 추천해줘" 입력

recom1

사진과 함께 불고기 베이크가 추천되었다! 재료 버튼을 누르면 구매 페이지로 이동한다.

pizaa

재료 중 피자치즈 버튼을 클릭했을 때 gs프레시몰 페이지로 이동한다. 만약 부족한 재료가 있다면 빠르게 구매할 수 있다.

recom2

자세한 설명을 요청할 경우 음식에 대한 설명을 받을 수 있다.

pasta

이번엔 재료로 입력하지 않고 음식 이름을 입력해서 추천을 받았다.

seol

명절에 먹을 음식 추천해달라는 말에 조랭이 떡국 추천을 받았다.


이렇게 파이널프로젝트가 마무리되었다. 이제 와서 돌이켜 보면 데이터셋 크기, 현실화 하지 못한 아이디어, prompt engineering과 fine tuning에 대한 것 등 아쉬움이 남는 부분이 있지만, 7일이라는 시간 안에 최초에 생각했던 것보다 훨씬 만족스러운 결과를 얻을 수 있었다. 열정적인 팀원들 덕이다.
OpenAI GPT 모델과 Streamlit, 추천시스템에 대해 많이 배우는 시간이었다.

반응형

댓글