AI/ML
AI 이미지 인식 기술을 활용한 숙소 탐색
Draak여기어때
2024년 11월 14일
원문에서 보기 ↗안녕하세요, 여기어때컴퍼니 iOS개발팀 드락입니다.
올해 저는 UX+APP Code Prototype Sprint라는 사내 사이드 프로젝트를 통해, 프로젝트 팀원들과 함께 새로운 기술을 활용하여 여기어때에 반영해 볼 만한 기능에 대해 리서치하고 구현 및 테스트 해 볼 기회가 있었습니다. 이때 진행했던 AI 이미지 인식 기술을 이용하여 숙소 이미지로부터 태그 추출 및 해당 태그를 활용한 유사 숙소 검색 기능과 그 과정에서 고민했던 부분들에 대해 소개드리고자 합니다.
“사진으로 숙소를 검색하면 어떨까?”
우선, 브레인스토밍에서 나온 여러 아이디어들 중 ‘사진으로 숙소를 검색할 수 있다면 어떨까’라는 주제가 채택되었구요, 실제로 이를 구현하기 위해 필요한 기술, 실현 가능성, 워킹 퀄리티, 비용, 난이도 등의 개발 피저빌리티를 본격 검토해보기 시작합니다.
통상 숙소 분류의 기준으로 활용될 수 있는 정보는 다음과 같습니다.
- 지역, 이름, 가격대
- 호텔인지, 펜션인지, 모텔인지 등의 숙소 카테고리
- 호텔이라면 몇성급인지 숙소의 등급
- 숙소가 제공하는 각종 서비스. (수영장, 피트니스, 사우나, 바베큐 여부 등)
여기에 추가로, 숙소가 어떻게 생겼는지, 어떤 뷰를 제공하는지 등의 정보를 제공하는 ‘숙소 사진’ 이 사용자가 어떤 숙소를 골라서 자세히 살펴보기 시작하는 진입 시점에 가장 직관적이고 또 중요한 판단 기준이라고 생각했습니다.
그렇다면 사용자가 숙소를 살펴보기로 결정하는 변수로서 숙소 사진이 높은 비중을 차지하는 거까지는 알겠는데, 중구난방 다양한 패턴과 형태로 촬영되어 있어 정형화하기 어려운 성격인 숙소 사진들을 어떻게 우리가 활용할 수 있는 데이터로 바꾸고 그걸 또 어떤 식으로 핸들링 해야 할지. 여기가 기술적인 핵심 포인트였는데요, 이 영역에서 AI가 활약하게 됩니다.
“어떻게 사진으로 비슷한 숙소를 찾아낼까?”
유사 숙소를 찾기 위해 일단은 사진을 단순히 이미지 대 이미지로 대조하는 방식부터 검토해봤습니다. 이런 방식은 픽셀 기반 유사도 측정, 구조 기반 측정, 특징 기반 측정 등등 여러가지 알고리즘이 있었는데요. 이미지 비교 알고리즘들은 두 이미지 사이에서 미묘하게 달라진 부분이 있는지를 찾아내는 솔루션으로서 특화었거나, 그래픽적으로 접근해서 두 이미지 사이의 유사도를 측정하는데 집중한 형태여서 온갖 정보가 비정형적으로 나열된 성격을 띠는 숙소 사진들간의 매칭 분석에는 잘 맞지 않는 것 같았습니다.
어떤 알고리즘을 사용하든간에 이미지 기반 대조 방식으로는 이미지의 정체가 무엇인지 사람의 시각적 인식을 반영하지 않기 때문에 실제로 우리가 원하는 기능에 부합하는 느낌으로 워킹할만한 솔루션이 아니라고 판단했습니다.
예를 들자면, 노을진 바닷가 왼쪽에 수영장, 오른쪽에 흰색 선베드가 배치된 숙소 사진을 가지고, 아침 바닷가 오른쪽에 수영장, 왼쪽에 빨간 선베드가 배치된 사진의 숙소도 검색결과로 살펴볼 수 있어야겠죠!
이를 위해서는 AI를 활용한 이미지 Labeling 기술을 사용해서 숙소 이미지가 포함하고 있는 이미지 내 메타 정보들을 추출 및 태깅하고, 이를 활용해서 숙소 매칭 기능을 제공하는 방향이 적절하다고 판단했습니다. 단편적으로 매번 이미지를 프로세스하는 게 아니라 태그 데이터를 구축 후 활용한다는 측면에서 비용적 이점&엄청난 향후 활용 잠재성이 있기도 하고요!

AI를 이용한 그래픽 대조 : 비슷한 숙소 맞나…?

AI 라벨링을 통한 메타 태그 대조 : 비슷한 숙소 맞네!
이미지에서 태그 추출 솔루션도 여러 서비스들이 있었는데요, 몇 가지 검토 후 최종적으로 가장 강력한 성능&지속적인 서비스 지원이 가장 우수할 것이라 판단된 Google Cloud Vision API가 채택되었습니다.

힘세고 오래가는 대감집 서비스는 역시 구글 아니겠습니까요^^
모텔 카테고리는 숙소가 가진 특성상 사진만으로 숙소 변별력을 주기는 어려웠고요, 펜션 호텔 리조트 카테고리영역에서 기능을 서비스하는 게 잘 맞겠다고 생각했습니다. 데모에서는 여기어때가 보유하고 있는 펜션/호텔카테고리에서 일부 3,700여개 제휴점 샘플을 대상으로 이미지 태깅을 진행해서 총 2,100,000개 정도의 숙소 이미지-태그 매칭 데이터를 확보했습니다.(몇 시간 안걸려요!)

이미지에서 태그를 추출해보면 오른쪽처럼 이미지가 포함하고 있는 메타 정보 수십개가 추출됩니다
이제 이 태그들을 가지고 유저가 기준으로 제시하는 사진 또는 특정 숙소 사진을 기준으로 삼아 이와 매칭률이 높은 숙소들을 추려서 유저에게 제공할 수 있게 됩니다. 뇌피셜 이론은 대충 다 된 거 같고 남은 작업은 실제 구현입니다.
“진짜 써먹을 만 할 정도로 잘 동작할까..? 잘 된다면 어느 정도로 잘 될까?”
이거만큼은 실제 데이터로 직접 구현해서 해보기 전에는 도무지 알 길이 없었습니다. 그래서 태그와 태그 스코어 등을 사용해서 매칭 포인트를 계산해서 세가지 기능을 제공하는 데모를 만들었습니다.
- 유저가 올린 사진과 유사한 숙소를 제공하는 기능
- 유저가 고른 여기어때 숙소 사진을 기반으로 비슷한 숙소 찾아주기 기능
- 유저가 최근에 살펴본 숙소 태그를 기반으로 홈에 유사한 숙소 추천 기능
영상들을 보시죠(데모앱이라 처리속도가 살짝쿵 느린 점 양해 부탁드립니다.)
https://youtube.com/shorts/WH1yXPYwGYs
1번-유저가 올린 사진과 유사한 숙소를 제공하는 기능
유저가 올리는 사진에서 즉시 태그를 추출해낸 뒤에 비교해야 하다보니 매 요청마다 태그 추출 프로세싱이 발생합니다. 또한 유저가 사진첩에서 무슨 사진을 올릴지 우리가 컨트롤 할 수 없기 때문에 어떤 검색결과가 제공될지도 가늠할 수가 없어서 상시 안정적인 품질 제공성 확보가 불가능한 구조입니다. 이런 이유들로 살짝 좀 애매합니다만...사진을 올리면 비슷한 숙소를 보여주겠다! 라는 어그로는 좀 끌 수 있을 거 같습니다..(ㅎㅎㅎ) 상식적인 선에서 사진을 올린다면 상식적인 선에서 숙소가 잘 매칭되는 모습을 보여줍니다 :)
2번-여기어때 숙소 사진을 기반으로 비슷한 숙소 찾아주기 기능
이쪽은 미리 배치를 통해 사전에 구축해둔 숙소 태그들끼리의 대조여서 매번 Google Cloud Vision API 쿼리를 발생시킬 필요가 없고요, 숙소 사진대 숙소 사진 매칭이어서 검색결과의 Average Case가 안정적으로 잘 나오는 편이고 Best Case와 Worst Case 역시 여러가지로 테스트 해 본 결과 대략 납득할만한 수준에 수렴합니다.
3번-유저가 검색했거나 상세화면에 다녀온 숙소의 태그를 기반으로 유사한 숙소들을 여기어때 홈 추천 숙소 영역에 제공
이 기능은 글로도 설명이 다 되어서 영상은 생략합니다 ㅎㅎ
“데이터 구축 작업. 근데 이제 AI를 곁들인..”
보유한 숙소 사진들의 메타정보를 텍스트 형태의 키워드로 추출하고 이를 정제해서 정리해두는 작업은, 활용하기에 따라서 정말 강력한 파워를 발휘할 수도 있습니다.
이미지 검색이라는 개발 컨셉 외에 구축된 태그들의 패턴이나 분포를 분석해서 대표성이 있는 태그들로 숙소를 추천하거나 그룹핑하는 용도로 활용할 수도 있겠고요, 자연어 검색 기능 역시 사람 입장에서 시각적인 측면의 오더가 다량으로 발생하기 때문에 사진 베이스로 추출된 태그가 잘 활용될 수 있을 것이라고 생각합니다. 태그 활용 방안 썰을 나열하다 보면 아티클 50 min read 분량도 가능할 것 같은데요, 목표했던 10분 이내로 가볍게 살펴볼 수 있도록 하기 위해 이만 줄이고 넘어가 봅니다 :)
AI의 등장으로 사람이 살펴보고 생각해서 정의하는 형식으로 구축하는 것과는 비교 자체가 불가능한 속도와 분량의 데이터 구축이 아주 저렴한 비용으로 가능해졌습니다. 이를 활용해 우리가 보유한 각종 데이터에서 어디를 캐면 쓸만한 게 나올지, 캐낸 것들을 어떻게 활용할지 앞으로 즐거운 고민들이 많다고 생각합니다.
이번 프로젝트는 AI 서비스 활용과 데이터 구축 및 활용에 대해 한번 슥 맛볼 수 있는 좋은 기회였는데요. 전통적(?)인 개발 사고방식인 니즈부터 결과물 까지의 여정에 있어서, 개발자가 개발을 통해서 정확히 설계나 의도대로 결과가 도출되도록 처리하는 것과는 결이 좀 달랐습니다.
AI모델을 활용해서 제공되는대로 값을 잔뜩 받은 뒤 이에 대한 분석과 튜닝을 통해 내가 원하는 수준의 결과물에 최대한 가깝도록 확률적으로 적중시켜야 하는 신선한 개념의 작업이었습니다(해보기 전에는 될지 안 될지, 어느 수준까지 잘 될지 가늠이 어려웠다는 소리입니다..-_-;;)
당장 필요한 기능에 대한 지원 여부를 넘어 앞으로 필요할 가능성이 있는 잠재적 니즈까지 사전에 아우를 수 있는 설계 인사이트와 지속적인 개선 사이클이 필요한 난이도 있는 영역이라고 느꼈습니다. 잘 가꾸고 쌓아나간다면 시간이 흐를수록 노후화하는 게 아니라 그 파워와 가치가 지속적으로 상승하는 영역일 거 같습니다!
이상으로 글을 마치겠습니다. 읽어주셔서 감사합니다!!!