추천 후보자 생성 기술
이번 장에서는 사용자와 시스템의 과거 상호 작용을 기반으로 사용자 관심 사항에 맞는 미디어 후보를 생성하는 몇 가지 기술을 살펴본다.
추천 후보 생성 기술은 다음과 같다.
(1) 협업 필터링 - Collaborative filtering
(2) 콘텐츠 기반 필터링 - Content-based filtering
(3) 임베딩 기반 유사성 - Embedding-based similarity
각 방법에는 좋은 후보자를 선택하는 데 있어 고유한 장점이 있으며,
순위에 전달하기 전에 모든 방법을 결합하여 완전한 목록을 생성한다.
(더 자세한 사항은 순위 강의(rank chapter)에서 언급)

협업 필터링을 수행하는 방법은
(1) Nearest neighborhood (가장 가까운 이웃)
(2) Matrix factorization (행렬 분해)
두 가지가 있다.
Method [1] Nearest neighborhood

위 그림은 k=2로 두어, 유저 A와의 가장 가까운 이웃(nearset neighbors)를 2명으로 산정했다.
인셉션과 인터스텔라를 시청하고 비슷한 피드백을 준 유저 B,C이다.
위 개념은 사용자 ui(i=1, .. n)와 영화 mj(j=1 .. m) 이라고 할 때 (n x m) 행렬이 만들어 지고, 각 행렬 요소는 사용자 i가 영화 j에 제공한 피드백을 나타낸다.
빈 셀은 사용자 i가 영화 j를 시청하지 않았음을 의미한다.

위 그림에서의 더 적은 사람들이 보는 새로운 영화(New movie watched by less people),
미디어를 적게 시청한 유저(New user has watched less media) 이고,
key는 1 : 미디어를 시청하거나 좋아함 0 : 미디어를 보지않았거나 싫어함
비어있음 : 평가 받지 않은 미디어 라고 보면 된다.
따라서 사용자 i와 다른 사용자의 유사성(예: 코사인 유사성)을 계산한 다음 상위 k개의 유사한 사용자/가장 가까운 이웃(KNN(ui))을 선택한다. 그러면 사용자 i는 보지 못한 영화 j에 대한 피드백(fij)를 예측할 수 있게 된다. 여기서 가장 가까운 이웃의 피드백은 사용자 i와의 유사성에 따라 가중치가 부여된다.

예측 피드백이 좋은 미공개 영화가 사용자 i의 추천 후보로 선택된다.
위의 과정들은 유사한 사용자를 식별하는 협업 필터링(CF)의 사용자 기반 접근 방식(user-based approach)이다.
사용자 기반 접근 방식은 시간이 지남에 따라 사용자 선호도가 변하는 경향이 있으므로 확장하기가 더 어려운 경우가 많다. 반면 아이템은 변경되지 않으므로 아이템 기반 접근 방식은 일반적으로 오프라인으로 계산할 수 있으며 빈번한 재학습 없이 제공될 수 있다.
Method [2] Matrix factorization (행렬분해)
(1) 사용자 프로필 행렬(n x M)
차원 M은 사용자-미디어 피드백 행렬를 추정하는 데 사용하는 잠재 요인의 수(latent factor)이다. M은 실제 사용자 수와 미디어 수에 비해 훨씬 적다.

-사용자와 미디어를 잠재적 요소의 벡터 형태로 표현한 것은 사용자가 특정 미디어에 대한 피드백을 설명한다. 잠재 벡터는 영화나 사용자의 특징으로 생각할 수도 있는데, 예를 들어, 아래 다이어그램에서 두 가지 잠재 요인은 대략적으로 코미디와 참신함의 정도로 볼 수 있다.
📝 각 차원이 무엇을 의미하는지 정확히 알지 못하기 때문에 잠재 요인에 대해 "might"
및 "loosley"라는 단어를 사용한다. 잠재 요인은 우리에게 "숨겨져" 있다.
""" latent factor가 "might" 하다는 표현은 "잠재적 요소가 어떤 의미를 가질 수 있다" 또는 "잠재적 요소가 어떤 영향을 줄 수 있다"는 것을 의미한다고 보고 "loosley"는 해당 latent factor가 정확하게나 명확하게 정의되지 않거나 구체적으로 정해지지 않았다는 의미로 보면 될 것 같다. """
예를 들어 사용자 A의 벡터에는 "코미디"에 대한 1과 "참신함"에 대한 0의 선호도가 있다.
영화 B의 벡터에는 영화의 두 가지 요소(예: 1과 0)의 유무가 포함되어 있고,
이 두 벡터의 내적은 영화 B가 사용자 A의 선호도와 얼마나 일치하는지 알려준다. (사용자 피드백)

영화 B에는 사용자 A의 취향과 유사한 특정 잠재 요인(코미디, 참신함) 조합이 있어 영화 B에 대한 긍정적인 피드백을 설명하고 있다.
[그림] 영화 B에 대한 사용자 A의 피드백은 A의 선호도와 B의 특성을 일치시키는 형태임
사용자와 미디어에 대한 잠재요인행렬을 학습하는 과정을 살펴보면,
먼저, 사용자 및 동영상 벡터를 무작위로 초기화한다.
각각의 알려진/과거 사용자 영화 피드백 값 (fij)에 대해 해당 사용자 프로필 벡터 (ui)와 영화 프로필 벡터 (mj)의 내적을 취하여 영화 피드백을 예측한다.
실제 피드백(fij)과 예측 피드백(ui.mj)의 차이가 오류(eij)가 된다.

📝 사용자 프로필 행렬은 사용자가 피드백을 제공한 영화를 기반으로 만들어진다.
마찬가지로 미디어/영화 프로필 행렬은 사용자 피드백을 기반으로 만들어진다.
이러한 사용자 및 영화 프로필 행렬을 활용하여 보지 못한 영화에 대한 예측 피드백을 기반으로 특정 사용자에 대한 추천 후보를 생성한다.

위 그림에서 사용자 A가 이전에 영화 B를 본 기록이 있을 때,
영화 B와 영화 C가 유사한 특성을 가지고 있다면 영화 C를 사용자 A의 추천 후보로 올린다.
[그림] 콘텐츠 기반 필터링

위 그림에서 영화는 인셉션, 인터스텔라, 베이비스 데이 아웃이 있고
각 미디어의 속성으로 감독/장르/태그 등이 존재한다.
각 미디어의 특성을 추출하기 위해 속성을 전처리한다.(불용어 제거, 단어를 소문자로 변환, 여러 단어를 조합한 태그)
속성을 전처리한다음 피처를 추출한다.
피처는 그림과 같이 감독 a, 감독 b, 감독 c, 장르 a, 장르 b, 태그 a, 태그 b 등 으로 나눈다. 각 피처는 발생 빈도로 바이너리로 표현한다.
[그림] 미디어를 나타내는 벡터 속성

처음에 나오는 표는 각 영화에 따라서 각 TF (Feature Vector Representation of Media, 미디어의 특징 벡터)를 나타낸 것이다.
위에서 추출했던 피처인 감독의 이름들, 장르의 종류, 키워드 등의 단어들에 대해 포함되어 있는지에 대해서 바이너리로 나타낸다. 그리고 해당 영화에서의 피처의 수를 각 오른쪽에 나타낸 것이다.
그리고 두번째 표는 위에서 미디어에 있는 피처의 수를 벡터의 길이로 정규화한 것이다. 1/벡터의 길이에 sqrt(제곱근)을 취한 값이다.
세번째 표는 각 10개의 영화에서 DF(feature occurrence frequency in movies, 영화 피처 발생 빈도)를 나타낸 것이다. 각 피처에 대해 2, 3, 5, 7, .. 3 으로 나타나있다.
그리고 IDF(Inverse Docummenet Frequency)로, DF 값을 역수를 취한다. 흔하게 나타나는 피처일 수록 IDF 값은 낮아지고 드물게 나타나는 피처일 수록 IDF 값은 높아진다. IDF는 로그를 취해 주로 스케일을 조정한다.
위에서의 DF값을 IDF으로 나타낸 값들은 0.69, 0.52, 0.30 ... 0.52 이다.
마지막으로 TF-IDF 값을 구하는데, TF-IDF 값은 TF에 IDF 값을 곱하여 얻는다. 즉 특정 피처가 특정 영화에서 자주 등장하지만, 다른 영화에서 그렇지 않다면 해당 피처의 TF-IDF 값은 높아진다고 볼 수 있다. 특정 영화에 대한 해당 피처의 중요성을 평가할 때 사용된다.
즉, 위 그림에서 Baby's day out의 Partick Read Johnson의 TF-IDF 값은 0.31이 나왔는데, 정규화시킨 TF 값 0.45에 IDF 값인 0.69를 곱해 나온 것이다.
TF-IDF vector를 봤을 때 Baby's day out에서 Partick Read Johnson의 TF-IDF 값이 상대적으로 높은 것을 볼 수 있는데 즉 'Partick Read Johnson' 피처가 'Baby's day out'에서 중요한 피처라고 평가할 수 있다.
[그림] 미디어(영화)의 TF-IDF 벡터 표현 만드는 방법
각 영화/쇼의 TF-IDF 표현을 고려하면 사용자에게 미디어를 추천하는 두 가지 옵션이 있다.
[1] 상호작용 했던 기록과의 유사성
과거에 상호작용(본)했던 영화와 유사한 영화를 사용자에게 추천할 수 있다.
이는 영화의 내적을 계산하여 유사도를 구한다.

그림에서 인터스텔라는 인셉션을 기반으로 내적의 유사도를 기반으로 더 높기 때문에 사용자 A에게 추천 후보로 선정되었다.
[2] 미디어와 사용자 프로필의 유사성
미디어의 TF-IDF 벡터는 프로필로 볼 수도 있다.
미디어와의 과거 상호 작용에서 볼 수 있는 사용자 기본 설정을 기반으로 아래와 같이 사용자 프로필을 구축할 수 있다.

위 그림에서는때 TF-IDF 벡터로 나타냈던 영화 profile 을 유저의 과거 히스토리( user A가 봤던 영화를 1, 무시한 영화를 -1로 표현하고, 새롭게 출시되어 아직 보지 않은 영화를 0으로 표현)와 계산해 사용자의 프로필을 구축할 수 있다.
이제 새로운 콘텐츠를 추천하기 위해 과거 시청목록을 사용하는 대신 사용자 프로필과
보지 못한 영화의 미디어 프로필 간의 유사성(내적)을 계산하여 사용자 A의 추천에 대한 관련 후보를 생성할 수 있다.

위 그림에서 구한 유저 profile vector를 새로운 영화들의 profile과 내적하여 추천할 영화를 선택한다.
[그림] 사용자 A의 프로필을 기반으로 두 개의 후보 영화 선택
과거 피드백(u,m), 즉 영화 m에 대한 사용자 u의 피드백이 주어지면 딥러닝을 사용하여 영화와 사용자 모두를 나타내는 잠재 백터/임베딩을 생성할 수 있다.
벡터를 생성한 후에는 KNN(k 최근접 이웃)을 활용하여 사용자에게 추천하고 싶은 영화를 찾는다.
이 방법은 행렬 분해에서 본 잠재 벡터 생성과 유사하지만 뉴럴 네트워크를 사용하면 데이터의 모든 희소한 피처 및 밀집된 피처를 사용하여 사용자 및 영화 임베딩을 생성할 수 있기 때문에 훨씬 더 강력하다.
임베딩 생성(embedding generation)

📝 결과적으로 얻을 수 있는 사용자의 벡터 표현은 사용자가 좋아하거나 시청할 영화 종류에 가장 가깝다.

[그림] 손실 함수가 결합된 신경망을 통해 사용자 및 영화 임베딩 생성
📝 사용자-배우 히스토그램 기능은 특정 배우(캐스트)가 포함된 미디어를 사용자가 시청한 비율을 보여준다. 예를 들어, 사용자가 본 콘텐츠의 2%에는 브래드 피트가 포함되어 있고, 5%에는 레오나르도 디카프리오가 포함되어 있다고 가정해본다.
*candidate selection (knn)
knn으로 추천 후보자 선택하기

[그림] 벡터 유사성(내적)을 기반으로 사용자에 대한 k=2 가장 가까운 이웃(영화) 찾기
위에서 논의한 추천 후보 생성 접근 방식의 강점과 약점은 다음과 같다.
[1] 협업 필터링 :
[2] 신경망 기술 :
[3] 콘텐츠 기반 필터링: