이 글은 다음의 글을 참고하여 작성되었습니다.
현재 일하는 스타트업에서는 이미지 기반의 유사도를 측정하여 특정 이미지가 주어졌을 때 이와 유사한 이미지를 찾는 일을 하고 있다.
이미지에 있는 텍스트를 기반으로도 할 수 있지만 우선적으로 이미지만을 기반으로 추천한다.
대략적으로 설명해보자면,
이미지를 Pre-trained된 network에 넣고 마지막 레이어에 있는 벡터를 각 이미지에 해당하는 Feature vector로 삼는다.
이 feature vector를 이용하여 cosine similarity를 측정한다. 여기서 생각할 수 있는 이슈가 몇가지가 있다.
- 텍스트로만 이루어져있는 이미지일 경우 제대로 작동하지 않는다.
- 이미지 용량 문제 (43만개의 이미지이고 한 이미지당 30KB ~ 120KB차지한다. 그림이 있으면 용량이 커지므로)
- 그 외 문제마다 가진 특성을 고려할 것인지...(Negative Feedback, Positive Feedback...)
첫번째 이슈는 우선 이미지로만 유사이미지들을 뽑아보고 텍스트까지 고려한 추천시스템 고도화를 통해 해결할 것이고 두번째 이슈는 사용하고 있는 서버 컴퓨터의 용량이 충분해서 해결했다. 세번째는 사실 개인화추천을 위해서는 사용자 행동로그를 반영하는 것이 최고지만 현 회사 소프트웨어 특성상 개인화 추천이 맞지 않는 것 같아 우선 고려하지 않기로 했다.
이제 다시 돌아가, Embedding에 관해 알아보자.
머신러닝의 핵심은 데이터에서 패턴을 찾는 것이다. 데이터의 특징으로부터 데이터의 패턴을 찾아 유사 데이터를 뽑아내거나 분류하는 것이다. 하지만, 데이터는 우리가 적절한 특징을 찾도록 구조화되지 않는 경우가 많다. 이렇게 구조화되있지 않은 데이터의 특징을 나타내는 벡터가 필요한데 이러한 벡터를 임베딩이라고 부른다.
즉, 임베딩이란 특정 데이터를 저차원 공간으로 변환하는 것이다.(벡터로 매핑) 이 저차원 공간에서 유사한 데이터를 가깝게 배치함으로써 유사 데이터를 찾아낼 수 있다.
1. Text Embedding (텍스트 임베딩)
직관적으로 생각했을 때, 단어를 표현하는 방법은 다음과 같다.
- 각 셀이 각 영어단어를 표현하는 매우 sparse 벡터 방법을 사용한다. 이를 이용하면 백만개의 단어를 표현하기 위해 백만차원의 벡터가 사용된다. 각 element는 대응하는 단어의 사용 빈도를 나타낸다. 하나의 영어문장안에 단어가 많이 사용되지 않으므로 벡터는 대부분 0의 값을 가질 것이다.
- 수백 개 정도의 요소를 가진 벡터를 사용하는 방법도 있다. 각 요소는 단어의 서로 다른 특성을 나타내는 0~1 사이의 값을 가진다.
아래의 그림은 임베딩 공간의 예를 보여준다.
2. Image Embedding (이미지 임베딩)
예를 들어, 잡지 표지 이미지를 보고 비슷한 잡지를 찾는다고 가정해보자. pixel-by-pixel로 유사성을 측정하는 것은 의미가 없을 것이다.
하지만, 임베딩을 추출하면 semantic information을 통해 효과적으로 측정할 수 있다.
다음의 사진은 t-SNE를 통해 비슷한 이미지를 찾는 작업의 예시다.
3. 추천과 관련하여
임베딩은 추천시스템의 협업 필터링 작업으로부터 비롯되었다.
사용자의 시청기록을 기반으로 유사영화를 확인하려고 한다면, 시청한 영화들을 저차원 공간에서 가까이 위치하도록 임베딩하면 된다.
이를 기준으로 사용자의 임베딩또한 사용자가 시청한 영화의 임베딩과 가깝게 배치하여 인접한 사용자는 비슷한 취향이라 고려되어 추천할 수도 있다.
이러한 임베딩은 Matrix Decomposition, Neural Network등의 방법으로 학습시킬 수 있다.
요약하자면, 임베딩을 통해 다음을 나타낼 수 있다.
1. 텍스트, 이미지, 오디오와 같은 구조화되지 않은 데이터
2. 사용자가 시청한 영화목록 및 사용자 ID와 같은 상호 작용 컨텍스트만 있는 데이터
3. 복잡한 구조 데이터 ex) 그래프 및 네트워크
4. 텍스트 설명명을 통한 이미지 검색 및 이미지 캡션 작성과 같은 다중 모달 변환
5. 위치 및 점유와 같은 희소 특성 -> 밀집 특성
6. 인구통계, 금융과 같은 고차원 항목
<유사성 분석>
특성들이 저차원, 실수값의 feature vectors로 표현되고 나면, 흥미로운 정보와 패턴을 발견하기 위한 시각화를 할 수 있다.
예를 들어,
- 주어진 아이템에 가장 가까운 아이템을 찾는 것. 예를 들어, 새로운 기사나 연구 논문의 repository를 가지고 있다면, 주어진 것과 가장 비슷한 문서들을 찾을 수 있다.(텍스트 기반 유사도를 통해) 이러한 기술은 기사 라벨링에 이용될 수 있다.
- 임베딩 공간에서 유사한 아이템의 그룹을 확인할 수 있다. 그럼으로써, 공통의 고객의 특징을 조사하여 마케팅에 활용할 수 있다.
- 특정 아이템의 neighborhood에서 아이템의 밀도를 확인. 이를 통해 주제가 인기있는지 없는지 알 수 있다.
- 예외적이나 outlier items뿐 아니라, 바운더리나 그룹간의 관계를 확인할 수 있다. 이를 통해 fraud detection이 가능하다.
<검색과 retrieval>
비슷하거나 관련된 아이템을 찾는 것은 임베딩에서 가장 중요하고 널리 사용되는 시나리오 중 하나이다.
Reactive and proactive 관점에서 실행될 수 있다.
Reactive : Prepare how to respone to negative reports and counteract bad press. Also known as. risis management.
Decisions need to be taken quickly.
Proactive : Seek opportunities and actively promote your brand to your target audience through third party endorsement and social channels.
Reactive retrieval에서, 사용자는 검색할 아이템을 제공하고 비슷한 아이템을 데이터 저장소에서 찾아낸다.
예를 들어, 사용자의 펫 사진과 비슷한 펫 사진을 찾거나 사용자가 제공한 아티클과 비슷한 연구 논문들을 찾는다. 이러한 경우에 시스템을 유저의 아이템의 임베딩을 추출해낸다. 그러면 시스템은 데이터 저장소로부터 인풋 임베딩과 가장 유사한 임베딩을 가진 아이템들을 정제해낸다.
Proactive retrieval에서, 시스템이 자동적으로 문맥을 확인하고 가장 비슷한 아이템들을 정제하기 위해 문맥을 검색 쿼리로 변환한다.
예를 들어, 다큐멘터리 비디오의 라이브러리를 가지고 있고 어플리케이션이 사용자에게 비디오를 검색하고 업로드하게 할 때, 사용자가 로그인하면 context는 그저 사용자의 ID이다. 이 정보는 사용자 임베딩과 비디오 임베딩사이의 유사도에 기반하여 가장 관련있는 비디오를 뽑아내기 위해 검색 쿼리에 사용된다.
Reactive와 Proactive retrieval 둘 다에서, 시스템은 implicit나 explicit 쿼리를 임베딩으로 변환하고 저장된 아이템들의 임베딩과 비교하고 가장 비슷한 것들을 정제할 수 있어야 한다.
검색과 정제에 어떻게 임베딩이 쓰일 수 있는지에 대한 추가적인 예들은 다음과 같다.
- 주어진 검색 쿼리에 가장 관련있는 뉴스 아티클을 정제
- 사용자가 제공한 사진과 가장 비슷한 사진들을 정제
- 사용자가 제공한 음악과 가장 비슷한 음악 트렉을 찾는 것
- 사용자가 최근에 설치한 게임이나 앱과 비슷한 것을 찾는 것
- 자연어 쿼리가 주어졌을 때, FAQ 리스트로부터 가장 적절한 것을 정제
- 주어진 사용자를 위해 흥미로운 영화나 노래를 새롭게 발견
이어지는 포스팅
'개발 > Recommender System' 카테고리의 다른 글
[논문 리뷰] Using Deep Learning to Win the Booking.com WSDMWebTour21 Challenge on Sequential Recommendations - 1 (0) | 2021.09.23 |
---|---|
Embeddings에 대한 이해 -2 | 이미지 기반 유사도, 텍스트 기반 유사도에 대해, TensorFlow Hub (0) | 2020.08.11 |
Amazon Reviews를 이용한 추천시스템 실습 - surprise패키지 사용 (0) | 2020.07.29 |
추천시스템 Collaborative Filtering - Model based approach (0) | 2020.05.31 |
추천시스템 Recommender System 정리 (0) | 2020.05.26 |
댓글