파이널프로젝트 7일차 마무리
최종 트랜스포머 모델과 임베딩 피처를 결정하고 추천 플로우를 구현했다. 스트림릿으로 이를 확인한다.
임베딩 모델 변경
최종 모델을 결정했다. RoBERTa 기반의 pretrained SentenceTransformer ko-sroberta-multitask을 사용한다.
raw_recipes = pd.read_csv('data/raw_recipes.csv')
raw_recipes.head(5)
raw data 확인
df = pd.read_pickle('data/compact_kosroberta_recipes.pkl')
df.head(5)
전처리 완료 데이터 확인
벡터화된 컬럼이 보인다. 벡터화를 할 feature는 재료 뿐 아니라 요리 이름, 방법 등을 추가로 포함했다.
모델과 피처를 변경하니 재료를 입력하지 않아도 좋은 성능으로 유의미한 추천을 해준다.
그리고 데이터프레임을 로드한 후 매번 벡터화하는 것은 비효율적이기 때문에 벡터화한 컬럼이 포함된 데이터프레임을 csv로 저장하여 재사용하려고 시도했다.
하지만 csv로 저장하게 되면 numpy의 ndarray 형태인 벡터 정보가 손실된다. 문자열로 자동 변환되기 때문이다.
따라서 pickle을 활용하여 벡터 정보를 잃지 않고 저장, 로드하도록 했다. 재사용성이 매우 증가됐다.
추천 흐름
사용자로부터 알레르기, 원하는 요리 종류, 난이도, 최대 소요 시간을 입력 받을 수 있다. 이 정보를 통해 사용자가 원하지 않는 데이터가 1차적으로 필터링되어 더 정확한 추천을 할 수 있다.
이후 OpenAI API를 사용하여 사용자가 입력한 대화에 따라 의도를 파악하여 요리를 추천하고, 추가 설명하고, 요리 방법을 안내한다.
Streamlit으로 구현한 챗봇 대시보드
요리 레시피 추천 챗봇 대시보드를 streamlit으로 구현했다. 이름은 Chat강록
사용자가 필터링하고 싶은 정보를 입력할 수 있다. 각 입력은 토글 형태로 되어 있다.
견과류 알레르기 선택, 바나나는 직접 입력
요리 범주 선택, 난이도 선택, 최대 요리 시간 제한 후 저장
챗봇만나기로 이동하여 "소고기와 양파로 만들 요리 추천해줘" 입력
사진과 함께 불고기 베이크가 추천되었다! 재료 버튼을 누르면 구매 페이지로 이동한다.
재료 중 피자치즈 버튼을 클릭했을 때 gs프레시몰 페이지로 이동한다. 만약 부족한 재료가 있다면 빠르게 구매할 수 있다.
자세한 설명을 요청할 경우 음식에 대한 설명을 받을 수 있다.
이번엔 재료로 입력하지 않고 음식 이름을 입력해서 추천을 받았다.
명절에 먹을 음식 추천해달라는 말에 조랭이 떡국 추천을 받았다.
이렇게 파이널프로젝트가 마무리되었다. 이제 와서 돌이켜 보면 데이터셋 크기, 현실화 하지 못한 아이디어, prompt engineering과 fine tuning에 대한 것 등 아쉬움이 남는 부분이 있지만, 7일이라는 시간 안에 최초에 생각했던 것보다 훨씬 만족스러운 결과를 얻을 수 있었다. 열정적인 팀원들 덕이다.
OpenAI GPT 모델과 Streamlit, 추천시스템에 대해 많이 배우는 시간이었다.
'AI SCHOOL > TIL' 카테고리의 다른 글
[DAY 94] 파이널프로젝트 종합회고, 데이터톤 시작 (0) | 2023.05.10 |
---|---|
[DAY 93] 파이널프로젝트 발표와 피드백 (0) | 2023.05.09 |
[DAY 91] 파이널프로젝트 6일차 - 임베딩 모델 변경 (0) | 2023.05.04 |
[DAY 90] 파이널프로젝트 5일차 - 프로토타입 (0) | 2023.05.03 |
[DAY 89] 파이널프로젝트 4일차 - 중간 제출 (0) | 2023.05.03 |
댓글