데이터 분석과 머신러닝을 통한 유저 맛집 추천하기

데이터 분석과 머신러닝을 통한 유저 맛집 추천하기

취향과 상황에 맞는 나만의 자타공인 맛집 찾기

“오늘 뭐 먹지?”

이 간단한 질문에 대한 답을 찾는 것이 왜 이리 어려울까? 특히 친구들과 함께 식사 장소를 고르려 할 때면 더욱 그렇다. 같은 장소에서 각자 스마트폰으로 맛집을 검색하는데, 모두가 같은 음식점 리스트를 보며 일일이 가야할 곳을 찾아낼 때면 안타까운 마음이 든다. 영화 추천, 중고거래 추천 등 다양한 개인화 추천 서비스가 있는데, 왜 맛집 추천만큼은 이렇다 할 서비스가 없을까? 이 의문에서 시작해 두 가지 프로젝트를 진행하게 되었다, ‘What2Eat’과 ‘취향식탁’

각자 가진 다양한 취향과 우리가 처할 수 있는 여러 상황에 딱 맞는 맛집을 추천하는 것은 쉽지 않은 일이다.

더불어 개인의 취향과 상황에 맞는 것도 중요하지만, 결국 자타공인 맛집이 되려면 타인에게도 좋은 평가를 받아야 한다. 이 두 가지 측면을 모두 고려하여 각각의 프로젝트를 설계했다. ‘What2Eat’은 객관적인 평가를 바탕으로 좋은 음식점을 가려내는 데 중점을 뒀고, ‘취향식탁’은 개인의 취향에 맞춘 추천에 초점을 맞췄다.

이 두 프로젝트를 통해 우리는 같은 장소에서 검색하더라도, 각자의 취향과 상황에 맞는 자타공인 맛집을 추천받을 수 있는 시스템을 만들고자 한다.

What2Eat: 객관적인 맛집 필터링

‘What2Eat’은 리뷰의 평점을 중심으로 분석하여 유의미한 평가 기준의 음식점을 필터링하는 프로젝트다.

주요 특징:

카카오맵에서 서울 지역 46,000여 개 음식점의 100만 개 이상 리뷰 데이터 수집 ‘유의미한 평가’를 선별 알고리즘 개발하였다.

호(好) 평가자: 유저가 자신의 평균 평점보다 1.0 포인트 높게 준 평가 비호(非好) 평가자: 유저가 자신의 평균 평점보다 1.0 포인트 낮게 준 평가

음식점마다 호 평가자와 비호 평가자의 수를 세어 총 평가수랑 비교한 수치를 토대로 나열하였다.

호 평가자를 쩝쩝박사로 지칭하고 해당 위치의 거리 정보까지만 보여주고 자세한 정보는 카카오맵 링크로 확인할 수 있게 했다.

현재 서울 몇몇 지역을 토대로 데모 서비스를 운영 중이다. -> 오늘머먹?

취향식탁: 개인 취향 기반 추천

‘취향식탁’은 리뷰 텍스트 데이터를 분석하여 개인의 취향을 대변하는 데이터로 튜닝하고, 이를 바탕으로 추천 시스템을 만드는 프로젝트다.

주요 특징

이 프로젝트의 핵심 과제는 사용자의 취향을 대변할 수 있는 데이터를 확보하는 것이다.

수집단계

현재 리뷰 수집 방식은 객관식과 주관식으로 크게 두 가지로 나뉜다. 객관식의 대표는 네이버 지도이다.

이 방식은 데이터 처리가 용이하고 일관성 있는 정보를 얻을 수 있다는 장점이 있다. 반면 사용자의 구체적인 경험이나 미묘한 감정을 담아내기 어렵고, 제시된 선택지에 없는 의견은 반영되기 힘들다는 단점이 있다. 더욱이, 리뷰 작성 시 음식점에서 제공하는 음료 서비스와 같은 이벤트는 이러한 객관식 리뷰 시스템에서 더 큰 문제가 될 수 있다. 진정성 있는 리뷰보다는 빠르게 쓰고 보는 보상을 목적으로 한 리뷰가 늘어날 수 있기 때문에 이는 데이터의 편향을 가중시키는 요인이 될 수 있다.

반면 대부분 우리가 알고 있는 리뷰 수집 방식인 주관식이다. 주관식의 자유 리뷰 방식은 풍부한 의견 수집이 가능하지만, 말그대로 너무나 자유롭다. 맞춤법, 신조어, 키보드를 아무렇게 누른 것(아모ㅓ래버앰너ㅑㅐ)으로 자신의 분노 혹은 감탄을 표현하기도 한다. 이렇게 자유분방한 표현을 어떻게 정제할 것인지가 최대 문제이다.

튜닝 방법

형태소분석기 기반으로 문장 단순화

사용자 리뷰를 효과적으로 분석하기 위해 형태소 분석을 활용한 문장 단순화 기법을 도입했다. 이 방법은 복잡한 리뷰 텍스트에서 핵심 의미를 추출하고 불필요한 요소를 제거하는 데 중점을 둔다.

  1. 리뷰 텍스트에서 이모티콘을 제거하여 순수한 텍스트만을 남긴다. 이후 텍스트를 개별 문장으로 분리하고, 각 문장을 형태소 단위로 분석한다. 이 과정에서 한국어 자연어 처리 라이브러리인 Kiwi와 KKma를 활용한다.
  2. 형태소 분석 결과에서 명사, 동사, 형용사 등 의미를 가진 주요 형태소를 선별적으로 보존한다. 부사나 연결어미도 필요에 따라 유지한다. 동사와 형용사의 경우, 일관성 있는 분석을 위해 기본형으로 변환한다.
  3. 선별된 형태소들을 적절히 조합하여 단순화된 문장을 재구성한다. 이 과정에서 특정 품사에는 띄어쓰기를 추가하여 가독성을 높인다. 전체 과정은 예외 처리를 통해 안정성을 확보했다. 이러한 문장 단순화 과정을 통해 여러 효과를 기대할 수 있다. 먼저, 분석에 불필요한 요소들을 제거하여 데이터의 품질이 향상된다. 또한, 다양한 표현을 표준화하여 분석의 일관성을 높인다. 사용자의 핵심 의견을 더 명확하게 파악할 수 있으며, 단순화된 텍스트는 후속 분석 과정의 효율성도 높인다.
diner_idxreviewer_reviewkeyphrase
62955585가격좋고 맛있어요.가격 좋다. 맛있다
884898370직화 냄새도 좋고 고기 질이 좋아요 사장님도 친절하시고 좋습니다 추천직화 냄새 좋다. 고기 질 좋다, 사장님 친절하다. 좋다,
16062328짱짱 맛있음! 친절함! 집밥같음! 최고!짱짱 맛있다, 친절하다, 집 밥 같다,

LLM기반으로 긍부정 키워드 추출

LLM은 알리바바에서 개발한 Qwen2.5 모델을 선택했는데, 이 모델은 한국어 리뷰 데이터 처리에 특화되어 있어 더 정확한 감성 분석과 키워드 추출이 가능하다. Qwen 모델은 다국어 데이터셋으로 학습되었으며, 특히 아시아 언어에 대한 이해도가 높다. 분석 과정에서는 Chain of Thought를 이용한 프롬프트를 사용했다. 이 방식은 모델이 단계적으로 사고하며 결론을 도출하도록 유도하여, 더 정확하고 설명 가능한 결과를 얻을 수 있게 한다. 이 프롬프트의 자세한 내용과 구체적인 적용 방법에 대해서는 추후 별도의 포스팅을 통해 더 깊이 있게 다룰 예정이다.

실제 분석 결과를 보면, 모델이 리뷰 텍스트에서 주요 키워드를 추출하고 각 키워드의 긍정/부정 여부를 판단하는 것을 확인할 수 있다. 예를 들어, “가격좋고 맛있어요”라는 간단한 리뷰에서도 ‘가격’과 ‘맛’이라는 키워드를 추출하고 둘 다 긍정적으로 평가했다. 더 복잡한 리뷰에서는 여러 요소를 세분화하여 분석하는 능력을 보여주었다. 이러한 LLM 기반 분석 방식은 기존의 규칙 기반 또는 단순 머신러닝 방식에 비해 더 뉘앙스 있는 분석이 가능하며, 특히 한국어의 복잡한 문맥을 이해하는 데 큰 강점을 보인다. 이는 취향식탁 프로젝트에서 사용자의 세밀한 취향을 파악하는 데 핵심적인 역할을 할 것으로 기대된다.

diner_idxreviewer_reviewreview_sentiment_rawreview_summary
62955585가격좋고 맛있어요.- 가격: Positive (가격이 좋다)
- 맛: Positive (맛이 좋아요)
이 레스토랑은 가격이 좋고 맛이 좋아요.
62955585항정살을 주문했는데, 고기 4 비계 6이더라고요. 마트가서 사도 이렇게 안하는데… 사이드의 양념도 너무 강해서 고기맛이 안나고요. 다시 방문할 일은 없을 것 같습니다.- 항정살: Negative (주문한 항정살이 원하는 것과 달랐습니다.)
- 고기: Negative (양이 적었고, 양념이 강해 맛이 안났습니다.) - 비계: Negative (비계 비율이 높았습니다.)
- 양념: Negative (양념이 강해 맛이 안났습니다.)
항정살 주문 시 고기 4 비계 6이었고, 양념이 강해 고기 맛이 안났습니다. 다시 방문할 일은 없을 것 같습니다.
884898370직화 냄새도 좋고 고기 질이 좋아요 사장님도 친절하시고 좋습니다 추천- 직화: Positive (좋다)
- 고기: Positive (질이 좋아요)
- 친절: Positive (친절하시고 좋습니다)
직화 냄새도 좋고 고기 질이 좋아요 사장님도 친절하시고 좋습니다 추천
1939193370가족들과 방문했었는데 친절했습니다.동네라 그런지 몰라도 좋았어요.살짝 주문이 어수선하게 받아질 때가 있는데그런것만 잘 보완되길 바랍니다.사이드 메뉴도 정말 맛있어요. 오징어짬뽕인가정말 국물메뉴 최고에요. 꼭~- 친절: Positive (친절한 서비스를 받았다는 점에서)
- 주문: Negative (주문이 어수선하게 받아졌다는 점에서)
- 사이드 메뉴: Positive (사이드 메뉴가 맛있었다는 점에서)
- 오징어짬뽕: Positive (오징어짬뽕이 국물메뉴 최고라고 평가한 점에서)
가족들과 방문했었는데 친절했습니다.

군집화 배치 Process

위 과정을 성공적으로 마쳤다면 음식점마다 리뷰에서 정제된 긍부정 키워드가 있다. 군집화를 통해 가장 짙은 취향을 가려내야한다. 음식점마다 짙은 취향의 긍정요소와 부정요소를 배치를 통해 모으고 추려야 한다. 이 과정은 사용자들한테도 마찬가지이다. 사용자마다 남긴 리뷰데이터는 위 과정으로 키워드화가 되어 있을테고 군집화를 거치면 사용자의 취향이 짙어진다. 수집, 정제, 군집을 파이프라인으로 완성하 이번 프로젝트의 가장 난제였던 취향을 대변한 데이터가 확보되는 것이다. 이를 토대로 추천시스템을 구현할 수 있다.

쩝쩝 LAB

쩝쩝 LAB(이하 랩)는 그래프 신경망(GNN) 기술을 활용한 맛집 추천 시스템을 개발 중이다. 이 프로젝트의 목표는 복잡한 요소들 간의 관계에서 사용자 취향을 정확히 파악하고 반영하는 시스템을 구현하는 것이다.

그래프 신경망의 필요성

맛집 추천은 음식점과 사용자의 단순한 관계를 넘어선다. 사용자의 취향과 상황, 음식점의 특성, 메뉴, 분위기, 위치 등 다양한 요소가 복잡하게 얽혀 있다. 그래프 신경망은 이런 복잡한 관계를 효과적으로 모델링할 수 있는 기술이다.

사용자 취향은 여러 요소들의 관계 속에서 형성된다. A 음식점을 좋아한다고 해서 단순히 비슷한 음식점을 추천하는 것은 부족하다. 그 음식점의 어떤 요소를 좋아하는지, 그리고 그 요소들이 다른 음식점들과 어떻게 연결되는지를 종합적으로 분석해야 한다.

GCN과 PINSAGE 적용

랩에서는 그래프 합성곱 신경망(GCN)과 PINSAGE 알고리즘을 적용한다. GCN은 취향-상황-맛집 간의 복잡한 관계를 그래프로 모델링해 더 정확한 추천을 가능케 한다. PINSAGE는 대규모 그래프에서 효율적으로 노드 임베딩을 학습한다.

정확한 취향 포착

이 기술들로 사용자의 취향을 더 정확하게 포착하려 한다. 예를 들어, 한 사용자가 아이와 함께 동행하며 조용한 분위기의 고추장찌개집을 찾는다고 가정해보자.  고추장찌개 메뉴가 있고 시끌벅적하지 않은 분위기에 아이와 함께라는 긍정 키워드가 많이 포함된 곳을 찾아주는 형태이다.

네이버의 선행 연구

이 분야에서 네이버가 오랫동안 연구해온 점이 놀랍다. 2016년부터 시작된 그들의 연구는 우리에게 큰 영감을 주었다.

  1. 2016년: “딥러닝을 이용한 지역 컨텍스트 검색”
  2. 2020년: “당신 취향의 맛집을 추천해드립니다” DEVIEW 세션
  3. 2021년: ”Knowledge Graph에게 맛집과 사용자를 묻는다: GNN으로 맛집 취향 저격 하기”
  4. 2023년: 내 주변, 취향 장소 발견하기: HyperLocal 추천 시스템 A to Z

특히 2023년 네이버 DEVIEW에서 직접 들은 내용은 정말 인상 깊었다. 그들의 연구가 이미 상당히 진전되었다는 사실에 적지 않은 충격을 받았다. 이는 나의 방향성을 재확인하는 계기가 되었고, 동시에 더 적극적인 접근의 필요성을 깨닫게 해주었다.

앞으로의 과제

두 프로젝트 모두 아직 진행 중이며, 각각의 한계를 극복하기 위해 계속해서 개선되고 있다.

What2Eat의 과제

평점을 남기는 사용자의 스타일에 따라 ‘유의미한 평점 리뷰어’를 찾는 현재의 방법이 반드시 객관적이라고 할 수 없다는 한계가 있다. 예를 들어, 진짜 맛없는 식당일 경우에만 평점을 남기는 리뷰어의 경우, 평균 평점과 특정 음식점에 남기는 평점이 비슷하여 ‘유의미하지 않다’고 오판할 수 있다. 반대로 진짜 맛있는 식당일 경우에만 리뷰를 남기는 사용자도 같은 문제에 직면한다. 이러한 케이스들은 현재의 알고리즘으로는 제대로 포착하기 어려워, 실제로는 의미 있는 리뷰가 무시될 수 있는 위험이 있다.

취향식탁의 과제

취향식탁에서는 난잡한 리뷰를 긍정/부정 평가가 담긴 일관된 표현으로 정리하는 것이 가장 큰 난관이다. 현재 다음과 같은 방법들을 시도하고 있다:

형태소 분석기 기반은 빠르지만 리뷰 자체가 완전한 문장이 아닐 때 똑같이 성능이 떨어진다. 포용성이 많이 부족하다. LLM기반은 Qwen2.5 모델의 도입으로 성능이 크게 향상되었지만, 확장 가능성을 본다면 처리속도가 여전히 너무 느리다. 높은 모델의 결괏값을 낮은 메모리의 모델에 학습시켜 속도와 정확도를 높일 예정이다.

결론: 끊임없는 도전

완벽한 맛집 추천 시스템은 아직 먼 미래의 이야기일지도 모른다. 하지만 ‘What2Eat’과 ‘취향식탁’ 프로젝트를 통해 그 목표에 한 걸음 더 가까워졌다고 믿는다. 올해 초 두 프로젝트를 완성하겠다고 목표로 삼았는데 앞으로도 더 많은 도전과 실험이 필요할 것이다. 객관적으로 인정받는 맛집과 개인의 취향에 딱 맞는 음식점을 모두 추천할 수 있는 그날까지!

“오늘 뭐 먹지? 머먹으로 찾아볼까?”