개발자식

[Coursera] Recommendation Systems with TensorFlow on GCP_4_TIL 본문

AI/Recommendation System

[Coursera] Recommendation Systems with TensorFlow on GCP_4_TIL

밍츠 2022. 8. 19. 18:07

Type of User Feedback Data

 

배울 내용

- WALS를 사용하여 협업 필터링 추천 시스템 구축

- User- Item 상호 작용 데이터를 이해하고 유사점 찾기

- WALS Matrix Factorization 텐서플로우 추정기에 대한 입력 함수 작성

- 일괄 예측/추천

- 프로덕션 버전 만들기

 

아이템 기반 추천

- 사용자가 좋아하는 아이템을 주면, 임베딩 공간에서 유사한 항목을 검색할 수 있다.

- 아이템 임베딩 공간의 로컬 이웃에 있는 아이템은 거리 측정법을 사용한다. 

- 다른 사용자에 대한 데이터가 필요하지 않기 때문에 좋지만 일반적으로 도메인 지식이 필요하다

- 안전한 추천만 하고 임베딩 공간의 로컬 버블에 머무르며 우리의 제한된 데이터 공간(manifold)에서 무언가를 시도하지 않는다.

ex) 과일은 색상, 맛, 산도, 질감 등으로 나타낼 수 있지만 항목을 비교할 가장 좋은 요소를 모르는 경우에는 어떻게 할 것인가?

 

협업 필터링 추천

- 잠재 요소를 학습하고 외부 사용자의 개인 거품을 탐색할 수 있다.

- 추천에 우연한 기회를 줄 수 있다. 사용자의 데이터 공간이 작더라도 임베딩 공간의 다른 사용자의 데이터 공간을 하위 집합으로 가질 수 있다.

-> 사용자가 유사하다.

- 사용자와 항목 간의 두가지 문제를 동시에 해결한다

-> 아이템과 사용자 간의 유사성을 동시에 사용한다.

- 이러한 유사점을 찾는 항목을 행렬로 나타낼 수 있다.

 

협업 필터링 추천에서 상호작용이 없어 희소성 문제를 해결하려면

-> 행렬 분해(matrix factorization)를 사용한다.

 

 

user-interaction matrix

- 행은 사용자, 열은 아이템이다.

- 위의 행렬은 명시적인(explict) 등급이다. (1~5점)

- 일반적으로 명시적 피드백은 받기 어렵지만 이를 암묵적 피드백이 있다.

-> 하지만 둘은 다름, 암묵적 피드백은 의도적으로 사용자가 상호 작용한 항목을 평가하는 수단이 아님, 추론해야 함

ex) 동영상을 보았는지 여부, 동영상을 본 시간, 페이지 특정 영역 버튼 클릭 등

 

암묵적 피드백

- 사용자 항목 상호작용에 대한 명시적 데이터와 암시적 데이터 모두 있는 경우 추천에 활용할 수 있다.

 

- like / dislike -> explicit

- duration -> implicit

 

 

Embedding Users and Items

 

1차원 유사성을 기준으로 가정, 영화를 성인과 어린이 스펙트럼 사이에 해당하는 위치를 표현한다.

 

- 각 항목에는 item을 설명하는 임베딩 공간 내에 벡터가 있다.

- 하지만 이것은 매우 질적이며(qualitative) 알 수 없는 상대적인 위치에 있다.

-> 조금 더 정량적으로(quantitative) 만들 수 있을까?

 

- 대략적인 위치에따라 수치를 부여했다.

-> 음수에 가까울수록 아동용 영화, 양수에 가까울수록 성인영화

- 좌표계의 점 사이, 거리 행렬로 유사도를 구할 수 있다.

 

- 다크나이트와 메멘토 영화는 가장 유사한가? (가장 가까이 있으니까)

-> 이 1차원 상에서는 매우 가깝더라도 영화의 다른 기능을 사용하는 스펙트럼에서는 멀리 떨어져 있을 수 있다.

 

 

- 아트 하우스, 블록버스터 스펙트럼을 추가하여 1차원에서 2차원으로 차원을 늘렸다.

- 차원을 추가하면 임베딩 공간이 기하급수적으로 커지고 임베딩 공간의 점 사이에 큰 공극이 있는 sparser 

 

 

- 5개의 영화(포인트)를 위치로 나타내면 점은 변하지 않았지만 좌표계는 변했다.

-> 영화(포인트)의 공간 내의 점을 설명하는 방법으로 좌표계는 중요하다.

 

- 해리포터와 슈렉이 가장 가까운 영화이다.

-> 가장 가까운지는 내적 계산 이용

 

- User-item 상호작용 매트릭스에 적용하여 알려지지 않은 상호작용이 얼마나 평가될 수 있을까?

- 사용자와 item 사이의 내적을 취해 IJ번째 상호작용 값은 I번째 사용자 장벽의 내적이며 J번째 항목 벡터이다.

 

 

이러한 값을 임베딩 공간에서는 어떻게 보이는가?

- 좌표 값은 선택한 두 벡터 내에서 어디에 속하는지를 기반으로 한다.

 

 

가장 왼쪽의 사용자에게 추천해준다면?

- 사용자와 영화 사이에 내적을 계산한다.

-> 왼쪽 사용자와 영화 사이에 내적 값이 가장 큰 슈렉과 벨빌의 세 쌍둥이를 추천한다.

 

하지만 위의 계산은 2차원에 불과하고 영화(항목)가 적다.

차원을 높인다면 어느 항목이 가장 가까운지 분별하기 어려울 것이다.

 

사용자와 유사한 사용자를 찾는 것도 아이템 간의 유사한 아이템을 찾는 것과 똑같다.

-> 사용자와 아이템은 임베딩 공간내의 점으로 표시된다.

 

임베딩은 데이터로 학습이 가능하다.

 

본질적으로 매우 희소한 상호작용 행렬인 데이터를 압축하고 있다.

- 사용자 상호작용 행렬 분해는 매우 큰 사용자를 항목 행렬로 분할한다.

- 위 사진의 경우 사용자인 행 요소의 두 개의 작은 행렬로, 영화인 열 요소의 두 개의 작은 열로

(두 개인 이유는 단순히 학습된 임베딩 공간의 차원)

 

 

ex) 웹 사이트의 사용자 : 5천만명, 10,000 편의 영화 -> 5000 억 개의 상호 작용 쌍

그러나 k 개의 특징을 갖는다면 k(사용자 + 영화)로 위 계산보다 천 배 적은 공간이다.

 

- 잠재 기능의 수가 조화 평균의 절반 미만인 한 사용자의 수와 항목 수만큼 공간이 절약된다.

 

4번째 사용자에게 영화를 추천한다면?

내적으로 구한다

- 슈렉 : 0.1 * 1 + 1* (-1) = -0.9

- 해리포터 : 0.09 - 0.2 = -0.11

- 벨빌의 세 쌍둥이 : -0.1 + -0.8 = -0.9

-> 가장 높은 예상 점수로 해리포터를 추천한다.

 

- 다크나이트는 이미 평가했기 때문에 이 예시에서 권장하지 않는다.

-> 따라서 이미 등급이 매겨진 영화를 모두 필터링하고 그런 당므 결과를 하위 집합에서 최상위 하위 집합을 선택한다.

Comments