22.03.01 [kfood프로젝트]음식추천을 위한 Contents Based Filtering 공부 및 코사인유사도로 결정

2022. 3. 2. 22:10프로젝트/KFood

우리 서비스에서 외국인에게 음식 사진을 받으면 YOLO로 detect(classification) 해서 무슨 한국음식인지 알려주고,

그것이 외국인의 입맛에 잘 맞을지 설문 및 간단한 추천을 해주는 서비스를 추가로 하려고 한다.

 

 

추천 알고리즘

  • 음식마다 각각 선호도를 나타낼 수 있는 피쳐 (Contents Based 필터링)
    • 음식에 대한 정보들 라벨링하는거 필요
  • 사용자들이 어떤 선택을 했느냐에 따라 사용자 정보 기반으로 추천 - 불가능 (Collaborated Based 필터링)
  • 음식들에 대한 점수
    • 데이터 구축 필수
    • 한 사람이 하는 것 - 그 사람이 객관적이라고 생각하여 진행 가능
    • 어떠한 사람이 보더라도 일관적이 될 수 있게 항목을 정해야 함.
    • 어떠한 특징들을 내세울 것인지..
  • 항목이 현재 4개 (신맛, 매운맛, 짠맛, 기름진맛)
    • 4개에 대해서 객관적이라고 생각하고 진행
  • 데이터가 구축되고 난 후 어떤 식으로 진행할 지 정해야겠다.
  • 하루(잠깐) 데이터 분석 후 적합한 방식을 찾아가는 방식으로 진행하자.
  • Contents Based Filtering이라고 검색해서 알아봐라.

-----------------------------------------------------------------------------------------------------------------------------

 

추천 시스템 : 사용자의 취향을 파악하고, 그에 맞는 상품을 추천.

-> 내가 몰랐던 취향도 추천해준다.(유튜브 알고리즘.. 넷플릭스 추천)

 

추천 시스템 종류 

 1. Contents Based Filtering

 2. Collaborative Filtering - 메모리기반 Memory based / 잠재 요인 Latent factor

 

넷플릭스 같은 경우 Collaborative를 사용(사용자가 많으니) .. 요즘은 Collaborative Filtering을 사용하는 추세

 

------------------------------------------------------------------------------------------------------------------------

콘텐츠 기반 필터링(Contents Based Filtering)

 

사용자가 특정 아이템을 선호하는 경우 그 아이템과 비슷한 콘텐츠를 가진 다른 아이템을 추천

예를 들어 A가 Movie A에 높은 평점을 줬는데 그게 액션이고, 영화감독 이름이 '이수진'이면 '이수진'감독의 다른 액션영화를 추천해주는 것.. 요즘은 잘 안 쓴다.

 

협업 필터링(Collaborative Filtering)

최근접 이웃 기반(Nearest Neighbor based Collaborative filtering) 방법과 잠재요인(Latent factor based Collaborative filtering) 방법이 있다.

 

* 최근접 이웃 기반 Nearest Neighbor based Collaborative filtering

보통 사람들은 남이 구매한 리뷰, 평점같은 걸 본 다음 내가 제품을 산다. 위의 콘텐츠 기반 같은 경우는 내가 직접 경험해보고 그에 따라 비슷한 애들을 추천해주는 것이라면, 최근접 이웃기반은 남이 한 걸 보고도 추천을 받을 수 있다.

 

협업 필터링은 사용자가 여태까지 매긴 평점, 상품 구매 이력 등 행동양식(user behavior)를 기반으로 추천해준다.

그 중에서도 최근접 이웃 기반사용자-item 행렬에서 사용자가 아직 평가하지 않은 아이템을 예측하는 것이 목표이다.

 

Nearest Neighbor 기반 협업 필터링에서는 사용자-item 행렬이 있어야 한다. 이 때 col은 item이며, row는 유저가 되어야 한다.

그런데 이러한 방법은 공간낭비가 된다. 데이터가 sparse하기 떄문이다. (빈 부분이 많다) 그리고 실제로 수많은 동영상(유튜브의 경우), 마트식재료 등 너무 빈 칸이 많을 것이다.

 

따라서 Nearset Neighbor 기반 협업 필터링은 또 두가지로 나뉜다.

 - 사용자 기반: 비슷한 고객들이 ~한 item을 소비했다.

 - 아이템 기반: ~한 item을 소비한 고객들이 다음과 같은 상품도 구매했다.

 

- 사용자 기반 협업 필터링(User based Collaborative filtering)

User1과 User2의 ItemA~C의 평점이 비슷하므로 두 유저는 비슷하다~

- 아이템 기반 협업 필터링(Item based Collaborative filtering)

  ItemA와  ItemB가 비슷한 평점분포를 가지고 있으므로 User4에게 ItemA추천

일반적으로 User based보다는 Item based가 정확도가 더 높다고 한다.(비슷한 상품을 좋아한다고 취향이 비슷한 건 아니기 때문에)

따라서 Nearest Neighbor 기반 협업 필터링을 쓸 때는 Item based를 많이 쓴다고 한다.

 

 

* 잠재요인 협업 필터링

 - 행렬 분해를 기반으로 사용한다. 대규모 다차원 행렬을 SVD와 같은 차원 감소 기법으로 분해하는 과정에서 잠재요인을 찾아내서 뽑아내는 방법이다.

 - 저장 공간 절약한다는 큰 장점이 있다.

 - 사용자-아이템 행렬을 ->  '사용자-장르' +  '장르-아이템'  이 두개로 분해한다.

저 값을 이용해서 사용자가 평가하지 않은 콘텐츠의 점수를 예측하여, 높으면 추천해준다!

 

출처

https://lsjsj92.tistory.com/564?category=853217 

 

추천 시스템(recommendation system) - 잠재 요인 협업 필터링(latent factor collaborative filtering)

포스팅 개요 이번 포스팅은 추천 시스템(recommendation system) 기본 2탄입니다. 지난 포스팅에서 추천 시스템이 왜 중요한지, 어떤 종류가 있는지 간략하게 살펴보았습니다. (https://lsjsj92.tistory.com/563

lsjsj92.tistory.com

 

 

-----------------------------------------------------------------------------------------------------------------------------------

파이썬으로 contents based filtering (비슷한 상품 추천) 참고할 블로그

https://lsjsj92.tistory.com/565

 

파이썬과 함께 추천 시스템(recommendation system) 이해하기 기본편 - content based filtering

포스팅 개요 해당 글에 대한 코드는 아래 github 링크에 전부 올려두었습니다. https://github.com/lsjsj92/recommender_system_with_Python lsjsj92/recommender_system_with_Python recommender system with Pyt..

lsjsj92.tistory.com

----------------------------------------------------------------------------------------------------------------------------------

+

맛 데이터가 있으면 거리구하기나 cosine 유사도로 맛에 대한 점수들을 벡터공간에 임베딩해서

사용자의 입맛과 음식리스트간의 거리를 구해서 가까운 음식 Top3를 뽑아준다.

-> 코사인 유사도로 구한다. 두 벡터가 비슷할 수록 1값이 나오고 반대방향일수록 -1?이 나온다!

https://wikidocs.net/24603

 

1) 코사인 유사도(Cosine Similarity)

BoW에 기반한 단어 표현 방법인 DTM, TF-IDF, 또는 뒤에서 배우게 될 Word2Vec 등과 같이 단어를 수치화할 수 있는 방법을 이해했다면 이러한 표현 방법에 대 ...

wikidocs.net

 

코사인유사도 처리는 다음 포스팅에서 계속!