추천 알고리즘이란?
추천 엔진은 모든 인터넷 거래의 비밀이자 밑에 있다. آمazon, Netflix, Flipkart, YouTube, TikTok, LinkedIn, Facebook, X(Twitter), Snapchat, Medium, Substack, HackerNoon 등 이러한 사이트들과 인터넷에서 대부분의 콘텐츠 จัดการ 또는 제품 시장 사이트들은 모두 추천 알고리즘에서 큰 lucre를 따서 쌓는다.
간단하게 말하면, 추천 알고리즘은 당신의 좋아하는 것, 싫어하는 것, お気に入り, 뭔가 좋아하는 것, 좋아하는 장르, 좋아하는 아이템을 모델로 구성하고, 사이트에서 하나의 거래가 이뤄질 때, 그들은 실제로 대부분의 마음을 읽고 다음으로 구입할 가장 높은 확률의 제품을 예측한다. YouTube와 TikTok에 있는 일부 추천 알고리즘은 such准确性에 따라 사용자를 수시로 시간을 낚시는 것이 가능하다. 읽는 사람 중 하나가 YouTube 챌린지가 mere十분 안에서 스크롤링 하고 클릭/탭하여 나왔다고 보고하지 않았으면 놀라울 것이다.
이러한 것은 고객 참여, 고객 경험, 수입 증가, 그리고 자신의 플랫폼에 대한 더 많은 お金을 얻는다. 중독은 이러한 초기 최적화 된 알고리즘의 정확성과 무서운 パフォーマン스에 기반한다.
이러한 거대한 기업은 이러한 방법으로 他们的 대상자를 구성한다.
YouTube, TikTok, Instagram, Facebook에 毎月 방문자는 (source):
- Facebook: 2.9 억
- YouTube: 2.2 억
- Instagram: 1.4 億
- TikTok: 1 億
그들의 성공 비밀: 멋진 추천 알고리즘
추천 알고리즘의 유형
공동 필터링 (사용자 기반)
사용자 기반 공동 필터링은 사용자가 유사한 취향을 가진 것이라고 가정하는 추천 기술입니다. 이를 위해 사용자-아이템 상호 작용 데이터를 사용하여 사용자간의 유사성을 식별하며, 코사인 유사도나 피어슨 相关係数과 같은 지표를 사용합니다. 이 방법은 유사한 사용자들의 평가 정보에 기반하여 사용자의 평가 또는 취향을 예측합니다.
그러나 新区塊의 사용자가 아직 시스템과 상호 작용하지 않은 것을 때 섭reeze-start 문제, 많은 사용자를 대처할 때 스케일ability 문제가 발생할 수 있습니다.
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
def user_based_cf(ratings_matrix, user_id, k=5):
similarities = cosine_similarity(ratings_matrix)
user_similarities = similarities[user_id]
similar_users = np.argsort(user_similarities)[::-1][1:k+1]
recommendations = np.zeros(ratings_matrix.shape[1])
for similar_user in similar_users:
recommendations += ratings_matrix[similar_user]
return recommendations / k
- 사용자 유사도를 계산하기 위해 코사인 유사도를 사용합니다
- 대상 사용자에 대한 가장
k
개의 유사한 사용자를 찾습니다 - 유사한 사용자의 평가 정보를 통합하여 추천을 생성합니다
- 유사한 사용자들의 평균 평점을 반환합니다
- 수정나 확장이 간단한 간단한 구현입니다
공동 필터링 (아이템 기반)
항목 기반 협업 필터링은 사용자가 과거에 좋아했던 항목과 유사한 항목을 선호한다고 가정합니다. 사용자 평가 또는 상호작용을 기반으로 항목 간의 유사성을 계산합니다. 이 접근 방식은 특히 사용자가 많고 항목 수가 적을 때 사용자 기반 협업 필터링보다 확장성이 뛰어난 경우가 많습니다. 또한 항목의 유사성을 미리 계산할 수 있어 실시간 추천을 더 빠르게 수행할 수 있습니다.
사용자 기반 방식보다 신규 사용자를 더 잘 처리하지만, 충분한 평점이 없는 신규 항목에 대해서는 어려움을 겪을 수 있습니다. 또한 시간이 지남에 따른 사용자 선호도 변화의 영향을 덜 받습니다.
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
def item_based_cf(ratings_matrix, item_id, k=5):
similarities = cosine_similarity(ratings_matrix.T)
item_similarities = similarities[item_id]
similar_items = np.argsort(item_similarities)[::-1][1:k+1]
recommendations = np.zeros(ratings_matrix.shape[0])
for similar_item in similar_items:
recommendations += ratings_matrix[:, similar_item]
return recommendations / k
- 평가 행렬을 반전하여 항목 간 유사도를 계산합니다.항목 유사도
- 대상 항목과 가장 유사한 <코드>k 항목 찾기
- 유사 항목에 대한 사용자 평점 집계
- 유사 항목을 기준으로 각 사용자의 평균 평점 반환
- 항목보다 사용자가 많은 시스템에 효율적
행렬 인수 분해
행렬 인수분해는 사용자-항목 상호작용 행렬을 하위 항목으로 분해합니다.아이템 상호작용 행렬을 저차원 행렬로 분해합니다, 사용자 선호도와 아이템 특성을 잠재 요인으로 나타낼 수 있다고 가정합니다. 이를 위해 특이값 분해(SVD) 또는 교번 최소제곱(ALS)과 같은 기법이 일반적으로 사용됩니다.
이 접근 방식은 대용량 희소 데이터 세트를 효율적으로 처리할 수 있으며 메모리 기반 협업 필터링 방법에 비해 더 나은 정확도를 제공하는 경우가 많습니다. 또한 정규화 기법을 통합하여 과적합을 방지하고 보이지 않는 데이터에 대한 모델의 일반화를 향상시킬 수 있습니다.
import numpy as np
def matrix_factorization(R, P, Q, K, steps=5000, alpha=0.0002, beta=0.02):
Q = Q.T
for step in range(steps):
for i in range(len(R)):
for j in range(len(R[i])):
if R[i][j] > 0:
eij = R[i][j] - np.dot(P[i,:], Q[:,j])
for k in range(K):
P[i][k] += alpha * (2 * eij * Q[k][j] - beta * P[i][k])
Q[k][j] += alpha * (2 * eij * P[i][k] - beta * Q[k][j])
e = 0
for i in range(len(R)):
for j in range(len(R[i])):
if R[i][j] > 0:
e += pow(R[i][j] - np.dot(P[i,:], Q[:,j]), 2)
for k in range(K):
e += (beta/2) * (pow(P[i][k], 2) + pow(Q[k][j], 2))
if e < 0.001:
break
return P, Q.T
- 기본 행렬 분해 알고리즘을 실행
- 예측값과 실제 평점 사이의 오류를 최소화하기 위해 그레이디언트_DESCENT 사용
- 과대적합을防止하기 위해 규제를 포함
- 사용자와 아이템의潜在的 요소를 반복적으로 업데이트
- 오류가 임계값以下로 떨어지거나 최대 스텝에 도달하면 중지
콘텐츠 기반 필터링
콘텐츠 기반 필터링은 아이템의 특징과 사용자의 선호도를 기반으로 추천합니다. 각 사용자와 아이템에 대해 그들의 특성을 기반으로 프로필을 만듭니다.
텍스트 분석을 위한 TF-IDF (용어 빈도-역 문서 빈도)와 매칭을 위한 코사인 유사도 같은 기술을 일반적으로 사용합니다. 이 방식은 이전 사용자 상호작용에 의존하지 않기 때문에 신규 아이템 문제를 효과적으로 해결합니다.
그러나 추천의 多样性가 불충분할 수 있고, 적절한 특징 엔지니어링을 통해 아이템의 관련 특성을 정확하게 캡처할 필요가 있어서 효율적인 구현이 어려울 수 있습니다.
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
def content_based_filtering(item_descriptions, user_profile, k=5):
vectorizer = TfidfVectorizer()
item_vectors = vectorizer.fit_transform(item_descriptions)
user_vector = vectorizer.transform([user_profile])
similarities = cosine_similarity(user_vector, item_vectors)
top_items = np.argsort(similarities[0])[::-1][:k]
return top_items
- TF-IDF를 사용하여 텍스트 설명을 数值 벡터로 변환
- 사용자 프로필과 아이템 설명 사이의 코사인 유사도를 계산
- 사용자 프로필과 가장 유사한 top
k
아이템을 반환 - 아이템 특징이 명확하게 정의된 시스템에 유용
- 다양한 특징 유형을 포함시키는 데 쉽게 확장 가능
하이브리드 추천 시스템
하이브리드 추천 시스템은 두 가지 이상의 추천 기술을 결합하여 각각의 강점을 활용합니다. 하이브리드 시스템은 여러 접근 방식을 통합함으로써 콜드 스타트 문제와 같은 개별 방법의 약점을 완화할 수 있습니다. 일반적인 조합에는 협업 및 콘텐츠 기반 필터링이 포함됩니다. 가중치, 스위칭, 혼합 또는 메타 수준 접근 방식과 같은 다양한 방법이 이러한 기술을 결합하는 데 사용됩니다.
하이브리드 시스템은 단일 접근 방식 시스템에 비해 더 강력하고 정확한 추천을 제공하는 경우가 많습니다. 그러나 효과적인 구현을 위해서는 다양한 구성 요소의 균형을 맞추고 최적의 성능을 보장하기 위한 세심한 튜닝이 필요합니다.
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
def hybrid_recommender(ratings_matrix, content_matrix, user_id, alpha=0.5, k=5):
cf_similarities = cosine_similarity(ratings_matrix)
content_similarities = cosine_similarity(content_matrix)
hybrid_similarities = alpha * cf_similarities + (1 - alpha) * content_similarities
user_similarities = hybrid_similarities[user_id]
similar_users = np.argsort(user_similarities)[::-1][1:k+1]
recommendations = np.zeros(ratings_matrix.shape[1])
for similar_user in similar_users:
recommendations += ratings_matrix[similar_user]
return recommendations / k
- 협업 필터링과 콘텐츠 기반 유사성 결합
- 파라미터 알파를 사용한 가중 합산 접근 방식 사용
- 하이브리드 유사성을 기반으로 유사한 사용자 찾기
- 유사한 사용자의 평점으로부터 추천 생성
- CF와 콘텐츠 기반 접근 방식 간의 균형을 쉽게 조정할 수 있습니다.기반 접근 방식
싱귤러 값 분해(SVD)
싱귤러 값 분해(SVD)는 행렬을 세 가지 구성 요소로 분해하는 행렬 인수분해 기법입니다: U, Σ, V^T입니다. 이 분해에서 U와 V는 각각 왼쪽과 오른쪽 특이 벡터를 나타내며, Σ는 특이값을 포함합니다.
SVD는 상위 <코드>k 특이값만 유지하여 차원을 줄여 사용자-아이템 상호 작용의 잠재적 요인을 파악하는 데 도움이 됩니다.
이 방법은 추천 시스템에서 흔히 볼 수 있는 크고 희박한 행렬을 처리하는 데 효율적입니다. 또한 SVD는 정확도와 계산 효율성 간에 균형이 잘 잡혀 있어 추천을 생성하는 데 널리 사용됩니다.
import numpy as np
from scipy.sparse.linalg import svds
def svd_recommender(ratings_matrix, k=5):
U, s, Vt = svds(ratings_matrix, k=k)
sigma = np.diag(s)
predicted_ratings = np.dot(np.dot(U, sigma), Vt)
return predicted_ratings
- 스킵피의
svd
함수를 사용하여 잘린 SVD 수행 - 상위
k
특이값만을 사용하여 평점 행렬 재구성 - 모든 사용자-항목 쌍에 대해 예측된 평점의 고밀도 행렬 반환
- 큰 경우 효율적, 희박한 평점 행렬
- 대규모 추천 시스템에 쉽게 통합 가능
텐서 인수 분해
텐서 인수 분해 기술은 기존의 행렬 인수 분해를 다차원 데이터로 확장하여 시간 및 위치와 같은 맥락 정보를 추천에 통합할 수 있게 해줍니다. 텐서를 구성 요소 텐서의 합으로 분해하여 여러 요인 간의 복잡한 상호작용을 포착하는 CP 분해와 같은 방법을 활용합니다. 이 접근 방식은 고차원 배열을 다루기 때문에 2차원 방식에 비해 더 많은 데이터와 계산 리소스가 필요합니다.
그러나 추가적인 데이터 차원을 활용하여 고도로 개인화되고 맥락을 인식하는 추천을 제공할 수 있습니다. 데이터 구조의 복잡성이 증가하면 다양한 맥락에서 사용자 선호도를 보다 미묘하게 이해할 수 있어 전반적인 추천 정확도가 향상됩니다.
import numpy as np
import tensorly as tl
from tensorly.decomposition import parafac
def tensor_factorization_recommender(tensor, rank=10):
factors = parafac(tensor, rank=rank)
reconstructed_tensor = tl.kruskal_to_tensor(factors)
return reconstructed_tensor
- 텐서 연산 및 분해에 TensorLy 라이브러리 사용
- 입력 텐서에 파라팩 분해를 적용합니다.
- 펀drakt tensor을 분해 요인에서 다시 구성
- 다시 구성된 펀drakt tensor을 추천으로 반환
- 다차원 데이터(예: 사용자-아이템-上下文)에 대해 처리할 수 있음
신경망 협력 필터링
심층 leaning-기반 추천 시스템은 협力 필터링 기법과 신경망을 결합하는 방법을 사용합니다. 이 방법은 전통적인 행렬 분해 方法이 어려울 수 있는 Non-linear 사용자-아이템 interaction을 学习하는 것을 가능하게 합니다. 심층 leaning 추천자는 일반적으로 사용자와 아이템을 딱 여러 차원의 덩어리, 낮은 차원의 공간에서 표현하기 위해 embedding layers를 사용합니다. 이러한 방법은 extra feature나 side information(예: 사용자 demo graphics, 아이템 描述 등)를 容易하게 integrate하여 추천 성능을 향상시키는 것을 도울 수 있습니다.
大数据集에 基于하여 훈련 될 때, 심층 leaning-기반 시스템은 정확도 方面에서 전통적인 행렬 분해 方法을 초과할 수 있습니다. 그러나 이러한 장점은 computational complexity를 증가시키고 대량의 데이터를 需要시키는 代偿이 있습니다.
심층 leaning 추천자는 최적의 result를 얻기 위해 精巧한 hyperparameter tuning이 需要되며, 比에 比하자 simpler collaborative filtering approach를 比较하면 실제ize하고 maintain하는 것이 더 어려울 수 있습니다.
import tensorflow as tf
from tensorflow.keras.layers import Input, Embedding, Flatten, Dense, Concatenate
from tensorflow.keras.models import Model
def neural_collaborative_filtering(num_users, num_items, embedding_size=100):
user_input = Input(shape=(1,), dtype='int32', name='user_input')
item_input = Input(shape=(1,), dtype='int32', name='item_input')
user_embedding = Embedding(num_users, embedding_size, name='user_embedding')(user_input)
item_embedding = Embedding(num_items, embedding_size, name='item_embedding')(item_input)
user_vecs = Flatten()(user_embedding)
item_vecs = Flatten()(item_embedding)
concat = Concatenate()([user_vecs, item_vecs])
dense1 = Dense(128, activation='relu')(concat)
dense2 = Dense(64, activation='relu')(dense1)
output = Dense(1, activation='sigmoid')(dense2)
model = Model(inputs=[user_input, item_input], outputs=output)
model.compile(optimizer='adam', loss='binary_crossentropy')
return model
- TensorFlow과 Keras를 사용하여 신경망 모델을 구축
- 사용자와 아이템에 대한 embedding layers를 생성
- 사용자와 아이템 embedding을 합침
- non-linear interaction을 学习하기 위한 dense layers를 추가합니다.
- 학습할 준비가 된 컴파일된 모델 반환
넷플릭스 사례 연구
넷플릭스 추천 알고리즘의 여정은 2000년 회원들의 평점을 사용해 사용자가 영화를 얼마나 즐길지 예측하는 협업 필터링 알고리즘인 CineMatch에서 시작되었습니다. 2006년에는 100만 달러의 상금을 걸고 데이터 과학자들에게 CineMatch를 10% 능가하는 모델을 만들도록 도전하는 넷플릭스 프라이즈를 시작했습니다. 우승한 알고리즘은 넷플릭스 내부 데이터에 구현되었습니다.
넷플릭스는 곧 사용자를 축적하기 시작했고, 2007년에는 스트리밍 데이터로 전환했습니다. 시청자들은 실시간으로 추천을 생성하는 강화 학습 알고리즘과 클러스터링 알고리즘에 노출되었습니다. 알고리즘이 개선되면서 추천 알고리즘의 효과로 인해 점점 더 많은 사용자가 넷플릭스로 전환하기 시작했습니다. 넷플릭스에서 시청하는 콘텐츠의 거의 80%가 추천 알고리즘에 의해 추천됩니다.
추천 알고리즘의 효과로 인해 넷플릭스는 연간 10억 명의 사용자 손실 비용을 절감하는 것으로 추정하고 있습니다.
넷플릭스는 고급 머신러닝 기술과 사용자가 시청하는 영화의 메타데이터를 기반으로 1300개 이상의 클러스터를 구성하는 클러스터링 시스템을 사용하고 있습니다. 이를 통해 사용자에게 고도로 최적화된 추천을 제공할 수 있습니다. 하지만 넷플릭스는 곧 규모라는 문제에 부딪혔습니다. 월간 사용자 수가 수억 명에 이르고 총 사용자 수가 2억 명을 넘어서면서 Netflix는 클라우드 컴퓨팅에 올인하게 됩니다.
간단히 말해, 2008년부터 모든 데이터를 아마존 웹 서비스(AWS)로 마이그레이션했습니다. 전체 전환 과정은 수년이 걸렸고 2015년에 완료되었습니다. 넷플릭스는 AWS를 통해 연간 10억 달러를 절약하는 것으로 알려져 있습니다. AWS는 또한 넷플릭스가 전폭적으로 사용하는 머신 러닝을 기본적으로 지원합니다. 넷플릭스는 2022년에 전 세계 시청자를 위해 10만 대 이상의 AWS 서버와 1,000개의 키네시스 샤드를 사용한 것으로 알려졌습니다.
2015년부터 넷플릭스는 자체 제작 콘텐츠도 제공하기 시작했으며, 수천 편이 넘는 영화와 프로그램을 다양한 포맷으로 제공하고 있습니다. 넷플릭스 추천 알고리즘은 고도로 자동화되어 있으며 하루에 수천 건의 사용자 A/B 테스트를 수행합니다. 현재 넷플릭스 사용자 구독자 수는 2억 8천만 명을 넘어섰습니다.
넷플릭스는 특히 마블과 스타워즈 시리즈를 인수한 디즈니+와의 치열한 경쟁에 직면해 있지만 2025년까지 가입자 5억 명을 달성하는 것을 목표로 하고 있습니다.
지난해 넷플릭스는 무려 310억 달러의 수익을 올렸습니다.
현재 넷플릭스의 추천 시스템의 주요 부분은 다음과 같습니다.
- 강화 학습: 사용자 행동에 따라 실시간으로 화면에 표시되는 콘텐츠를 변경합니다. 따라서 시스템은 사용자의 상호 작용에 따라 끊임없이 유동적이고 변화하는 상태에 있습니다.
- 깊은 신경망: 데이터의 규모(15,000이상의 쇼와 약 300만의 사용자) 때문에, 표준 ML 기술을 사용하는 것이 어렵다. 깊은 leaning이 широ하게 사용되고 있으며, NVIDIA의 기술을 사용하고 있다. (이 문서 末尾에 NVIDIA의 最新 Merlin 깊은 leaning 기술을 사용하는 프로그램을 보십시오.)
- 행렬 분해: sparse하고 hugh vast matrix에 대해 효율적으로 Singular Value Decomposition (SVD)를 수행하여 Netflix은 각 사용자가 특정 장르와 쇼에 대한 중요性和 매력을 추정한다.
- ensemble learning: above에 列出되는 알고리즘의 멋진 조합으로 실시간으로 추천을 조정하여 두 사용자가 같은 화면을 보는 것이 없다. 이 personnelization은 Netflix가 모든 OTT 플랫폼 중 상위에 있는 것을 만드는 큰 이익과 유지하는 것이다.
그리고 이러한 모델과 최적화는 사용자가 数百万人 수 있다.
현대 깊은 leaning 기술
이러한 규모에서는 单个 计算机에서 이러한 ML 모델을 실행할 수 없다. 그러나 AWS는 数千의 计算机로 분산적으로 ML 알고리즘을 실행한다.
NVIDIA는 최근 대규모 추천 시스템을 구현할 수 있는 여러 제품을 출시했습니다. NVIDIA의 GPU 클러스터는 ML 알고리즘 실행에도 큰 역할을 합니다. NVIDIA는 최근 수천 대의 머신에서 실행되고 우수한 결과를 제공하도록 최적화된 고성능 추천 알고리즘인 Merlin을 출시했습니다. 데이터 세트의 크기가 단일 컴퓨터가 처리할 수 있는 한계를 훨씬 뛰어넘었기 때문에 이는 시간 문제일 뿐이었습니다.
현대 추천 시스템은 딥 러닝을 광범위하게 사용합니다. DL의 일부로서, 연산 속도를 높이기 위해 GPU/TPU 컴퓨팅 시스템이 광범위하게 사용됩니다.
NVIDIA의 최근 Merlin용 제품에는 다음이 포함됩니다.
NVIDIA 추천 시스템
(에서 NVIDIA Merlin 발표: 딥 추천 시스템을 위한 애플리케이션 프레임워크에서)
오픈 소스 프로젝트로 제공됩니다:
NVTabular
NVTabular는 기능 엔지니어링 및 전처리 라이브러리로, 테라바이트 규모의 데이터 세트를 빠르고 쉽게 조작할 수 있도록 설계되었습니다. 특히 사용자 및 항목 메타데이터, 컨텍스트 정보와 같은 추가 정보를 처리하기 위해 확장 가능한 방법이 필요한 추천 시스템에 적합합니다. 높은 수준의 추상화를 제공하여 코드를 간소화하고 RAPIDS cuDF 라이브러리를 사용하여 GPU에서 계산을 가속화합니다. 10~20줄의 하이레벨 API 코드만으로 데이터 엔지니어링 파이프라인을 설정하고 최적화된 CPU 기반 접근 방식에 비해 최대 10배의 속도 향상을 달성하면서 GPU/CPU 메모리 용량에 관계없이 데이터 세트 크기 제한 없이 사용할 수 있습니다.
HugeCTR
추천자 모델 학습용으로 설계된 고효율 GPU 프레임워크로 고성능과 사용 편의성을 모두 목표로 삼고 있습니다. 단순한 딥 모델뿐만 아니라 W&D, Deep Cross Network, DeepFM과 같은 최첨단 하이브리드 모델도 지원합니다. 또한, HugeCTR에서 DLRM을 활성화하는 작업도 진행 중입니다. 모델 세부 정보와 하이퍼파라미터를 JSON 형식으로 쉽게 지정할 수 있어 다양한 공통 모델 중에서 빠르게 선택할 수 있습니다.
TensorRT 및 추론용 트리톤 서버
NVIDIA TensorRT는 고성능 DL 추론을 위한 SDK입니다. 여기에는 추론 애플리케이션에 짧은 지연 시간과 높은 처리량을 제공하는 DL 추론 옵티마이저 및 런타임이 포함되어 있습니다. TensorRT는 공통 인터페이스인 개방형 신경망 교환 형식(ONNX)을 사용하여 모든 DL 프레임워크에서 훈련된 신경망을 수용할 수 있습니다.
NVIDIA Triton Inference Server는 NVIDIA GPU에 최적화된 클라우드 추론 솔루션을 제공합니다. 이 서버는 HTTP 또는 gRPC 엔드포인트를 통해 추론 서비스를 제공하여 원격 클라이언트가 서버에서 관리 중인 모든 모델에 대한 추론을 요청할 수 있도록 합니다. 트리톤 서버는 텐서플로우, 파이토치(토치스크립트), ONNX 런타임, 텐서RT 런타임 등 여러 백엔드를 사용해 DL 추천 모델을 제공할 수 있습니다.
코드 예시
다음 코드 예시는 1TB 크리테오 광고 데이터셋을 변환하는데 필요한 실제 전처리 워크플로우를 보여주는데, NVTabular를 사용해 단 12줄로 구현된 코드 몇 개로 구현되어 있습니다. 간단히 숫자 열과 범주 열이 지정됩니다. 다음으로, NVTabular 워크플로우를 정의하고 일련의 훈련 및 유효성 검사 파일을 제공합니다. 그런 다음 전처리 작업이 워크플로우에 추가되고 데이터가 디스크에 유지됩니다. 이에 비해, Facebook의 DLRM 구현에 사용된 NumPy 기반 data util과 같은 사용자 정의 처리 코드는 동일한 파이프라인에 대해 500-1000줄의 코드를 포함할 수 있습니다.
import nvtabular as nvt
import glob
cont_names = ["I"+str(x) for x in range(1, 14)] # specify continuous feature names
cat_names = ["C"+str(x) for x in range(1, 27)] # specify categorical feature names
label_names = ["label"] # specify target feature
columns = label_names + cat_names + cont_names # all feature names
# Workflow 초기화
proc = nvt.Worfklow(cat_names=cat_names, cont_names=cont_names, label_name=label_names)
# 입력 파일에서 데이터셋 생성
train_files = glob.glob("./dataset/train/*.parquet")
valid_files = glob.glob("./dataset/valid/*.parquet")
train_dataset = nvt.dataset(train_files, gpu_memory_frac=0.1)
valid_dataset = nvt.dataset(valid_files, gpu_memory_frac=0.1)
# Workflow에 특징 공학 및 전처리 오퍼레이션 추가
proc.add_cont_feature([nvt.ops.ZeroFill(), nvt.ops.LogOp()])
proc.add_cont_preprocess(nvt.ops.Normalize())
proc.add_cat_preprocess(nvt.ops.Categorify(use_frequency=True, freq_threshold=15))
# 통계 계산, 데이터 변환, 디스크에 내보내기
proc.apply(train_dataset, shuffle=True, output_path="./processed_data/train", num_out_files=len(train_files))
proc.apply(valid_dataset, shuffle=False, output_path="./processed_data/valid", num_out_files=len(valid_files))
전체 기술 스택은 다음 GitHub 저장소에서 찾을 수 있습니다:
결론
추천 시스템은 멀리 온 길을 걸쳐 왔습니다.
간단한 통계 모델링, 콘텐츠 기반 필터링, 협동 필터링에서 현재까지까지 딥 러닝 신경망, HPC 노드, 행렬 분해 및 그 확장된 차원, 텐서 분해로 발전했습니다.
스트리밍에서 가장 이익적인 추천 시스템은 NVIDIA입니다. 그들은 모든 머신 러닝 알고리즘을 AWS 클라우드에서 실행합니다.
추천 시스템은 Google부터 Microsoft, Amazon, Flipkart 까지 어디에서나 사용되고 있습니다. 현대 기업의 중요한 부분이며 온라인 기업 중에서 하나도 사용하지 않지 않습니다.
현재는 많은 회사가 온라인으로 고객 정의 추천 시스템을 제공하고 있습니다.
그 중 주요한 것들은 다음과 같습니다:
- Netflix: 사용자 시청习慣을 분석하여 영화와 TV 쇼를 제안하는 정교한 추천 엔진으로 알려져 있습니다.
- Amazon: 사용자 구매 기록 및 탐색 동작을 기반으로 제품을 제안하는 강력한 추천 엔진을 사용합니다.
- Spotify: 사용자의 듣는 이력에 따라 음악 재생 목록과 노래 추천 시스템을 사용
- YouTube: 사용자의 시청 패턴과 취향에 따라 동영상 추천 엔진을 사용
- LinkedIn: 사용자의 프로필과 전문적 이력에 따라 직무, 연결, 콘텐츠 추천
- Zillow: 사용자의 좋아하는 타입과 이전 researches를 바탕으로 недвижимость 추천
- Airbnb: 사용자의 여행 이력과 취향에 따라 숙박 추천
- Uber: 사용자의 이전 이동 기록에 따라 이동 옵션 추천
- IBM Corporation: 추천 엔진 시장 리더, 다양한 AI-기반 솔루션 제공
- Google LLC (Alphabet Inc.): 광범위한 데이터 분석을 사용하여 자신의 플랫폼에 추천 시스템 제공
Hopefully, one day, your company will be one among this elite list. And all the best for your enterprise.
Regardless of which sector you are in, if you have an online presence, you need to use recommendation systems one-way or another. Continue to explore this segment, and if you have an excellent expertise, rest assured that you will be highly in demand.
Never stop learning. Keep up the enthusiasm. Always believe in your infinite potential for growth. Your future is in your hands. Make it extraordinary!
References
Source:
https://dzone.com/articles/a-deep-dive-into-recommendation-algorithms-with-ne