Milvus, PinSage, DGL 및 MovieLens 데이터셋을 활용한 그래프 기반 추천 시스템 구축
추천 시스템은 인간이 원치 않는 이메일을 걸러내는 일을 돕던 소박한 시작에서 출발한 알고리즘으로 구동됩니다. 1990년, 발명가 Doug Terry는 협업 필터링 알고리즘을 사용해 원하는 이메일을 정크 메일과 분류했습니다. 이메일을 단순히 "좋아요" 또는 "싫어요"로 표시하고, 유사한 메일 콘텐츠에 대해 같은 작업을 하는 다른 사람들과 협업함으로써, 사용자는 컴퓨터가 사용자의 받은 편지함으로 무엇을 보내고 무엇을 정크 메일 폴더로 격리할지 빠르게 학습시킬 수 있었습니다.
일반적인 의미에서 추천 시스템은 사용자에게 관련성 있는 제안을 제공하는 알고리즘입니다. 제안은 시나리오나 산업에 따라 볼 영화, 읽을 책, 구매할 제품 또는 그 밖의 무엇이든 될 수 있습니다. 이러한 알고리즘은 우리 주변 어디에나 있으며, Youtube, Amazon, Netflix 등 주요 기술 기업에서 우리가 소비하는 콘텐츠와 구매하는 제품에 영향을 미칩니다.
잘 설계된 추천 시스템은 필수적인 수익 창출원, 비용 절감 수단, 경쟁 차별화 요소가 될 수 있습니다. 오픈 소스 기술과 하락하는 컴퓨팅 비용 덕분에 맞춤형 추천 시스템은 그 어느 때보다 접근하기 쉬워졌습니다. 이 글에서는 오픈 소스 벡터 데이터베이스인 Milvus, 그래프 합성곱 신경망(GCN)인 PinSage, 그래프 딥러닝을 위한 확장 가능한 python 패키지인 deep graph library(DGL), 그리고 MovieLens 데이터셋을 사용하여 그래프 기반 추천 시스템을 구축하는 방법을 설명합니다.
바로 이동:
추천 시스템은 어떻게 작동하나요?
추천 시스템을 구축하는 일반적인 접근 방식은 두 가지입니다: 협업 필터링과 콘텐츠 기반 필터링입니다. 대부분의 개발자는 두 방법 중 하나 또는 둘 다를 사용하며, 추천 시스템은 복잡성과 구성 방식이 다양할 수 있지만 일반적으로 세 가지 핵심 요소를 포함합니다:
- 사용자 모델: 추천 시스템은 사용자 특성, 선호도, 필요를 모델링해야 합니다. 많은 추천 시스템은 사용자의 암시적 또는 명시적 아이템 수준 입력을 기반으로 제안을 합니다.
- 객체 모델: 추천 시스템은 사용자 프로필을 기반으로 아이템 추천을 하기 위해 아이템도 모델링합니다.
- 추천 알고리즘: 모든 추천 시스템의 핵심 구성 요소는 추천을 구동하는 알고리즘입니다. 일반적으로 사용되는 알고리즘에는 협업 필터링, 암시적 의미 모델링, 그래프 기반 모델링, 결합 추천 등이 포함됩니다.
높은 수준에서 보면, 협업 필터링에 의존하는 추천 시스템은 사용자가 무엇에 관심을 가질지 예측하기 위해 과거 사용자 행동(유사한 사용자들의 행동 입력 포함)으로부터 모델을 구축합니다. 콘텐츠 기반 필터링에 의존하는 시스템은 아이템 특성에 기반한 개별적이고 사전에 정의된 태그를 사용하여 유사한 아이템을 추천합니다.
협업 필터링의 예로는 사용자의 청취 기록, 관심사, 음악 라이브러리 등을 기반으로 하는 Spotify의 개인화된 라디오 스테이션이 있습니다. 이 스테이션은 사용자가 저장했거나 별도로 관심을 표현한 적은 없지만, 유사한 취향을 가진 다른 사용자들이 자주 듣는 음악을 재생합니다. 콘텐츠 기반 필터링의 예로는 특정 곡이나 아티스트를 기반으로 하며, 입력의 속성을 사용해 유사한 음악을 추천하는 라디오 스테이션이 있습니다.
추천 시스템 구축 도구
이 예시에서 그래프 기반 추천 시스템을 처음부터 구축하려면 다음 도구들이 필요합니다:
Pinsage: 그래프 합성곱 네트워크
PinSage는 수십억 개의 객체를 포함하는 웹 규모 그래프에서 노드의 임베딩을 학습할 수 있는 랜덤 워크 그래프 컨볼루션 네트워크입니다. 이 네트워크는 온라인 핀보드 회사인 Pinterest가 사용자에게 주제별 시각적 추천을 제공하기 위해 개발했습니다.
Pinterest 사용자는 관심 있는 콘텐츠를 "보드"에 "핀"할 수 있으며, 보드는 핀한 콘텐츠의 모음입니다. 월간 활성 사용자(MAU)가 4억 7,800만 명 이상이고 저장된 객체가 2,400억 개 이상인 이 회사는 이를 따라잡기 위해 새로운 기술을 구축해야 할 만큼 방대한 사용자 데이터를 보유하고 있습니다.
핀-보드 이분 그래프.
PinSage는 핀-보드 이분 그래프를 사용하여 사용자에게 시각적으로 유사한 콘텐츠를 추천하는 데 사용되는 핀의 고품질 임베딩을 생성합니다. 특징 행렬과 전체 그래프에 대해 컨볼루션을 수행하는 기존 GCN 알고리즘과 달리, PinSage는 인접한 노드/핀을 샘플링하고 계산 그래프의 동적 구성을 통해 더 효율적인 로컬 컨볼루션을 수행합니다.
노드의 전체 이웃에 대해 컨볼루션을 수행하면 거대한 계산 그래프가 생성됩니다. 리소스 요구 사항을 줄이기 위해 기존 GCN 알고리즘은 k-hop 이웃의 정보를 집계하여 노드의 표현을 업데이트합니다. PinSage는 랜덤 워크를 시뮬레이션하여 자주 방문되는 콘텐츠를 핵심 이웃으로 설정한 다음, 이를 기반으로 컨볼루션을 구성합니다.
k-hop 이웃에는 종종 중복이 있기 때문에 노드에 대한 로컬 컨볼루션은 반복 계산을 초래합니다. 이를 피하기 위해 PinSage는 각 집계 단계에서 반복 계산 없이 모든 노드를 매핑한 다음, 이를 해당 상위 레벨 노드에 연결하고, 마지막으로 상위 레벨 노드의 임베딩을 검색합니다.
Deep Graph Library: 그래프 딥러닝을 위한 확장 가능한 python 패키지
DGL 프레임워크.
Deep Graph Library (DGL)는 기존 딥러닝 프레임워크(예: PyTorch, MXNet, Gluon 등) 위에서 그래프 기반 신경망 모델을 구축하도록 설계된 Python 패키지입니다. DGL에는 사용자 친화적인 백엔드 인터페이스가 포함되어 있어 텐서를 기반으로 하고 자동 생성을 지원하는 프레임워크에 쉽게 이식할 수 있습니다. 위에서 언급한 PinSage 알고리즘은 DGL 및 PyTorch와 함께 사용하도록 최적화되어 있습니다.
Milvus: AI 및 유사도 검색을 위해 구축된 오픈 소스 벡터 데이터베이스
Milvus에서 유사도 검색은 어떻게 작동하나요?
Milvus는 벡터 유사도 검색 및 인공지능(AI) 애플리케이션을 구동하기 위해 구축된 오픈 소스 벡터 데이터베이스입니다. 높은 수준에서, 유사도 검색에 Milvus를 사용하는 방식은 다음과 같습니다:
- 딥러닝 모델을 사용하여 비정형 데이터를 특징 벡터로 변환하고, 이를 Milvus로 가져옵니다.
- Milvus는 특징 벡터를 저장하고 인덱싱합니다.
- 요청 시, Milvus는 입력 벡터와 가장 유사한 벡터를 검색하고 반환합니다.
Milvus로 그래프 기반 추천 시스템 구축하기
Milvus에서 그래프 기반 추천 시스템의 기본 워크플로.
Milvus에서 그래프 기반 추천 시스템의 기본 워크플로.
Milvus로 그래프 기반 추천 시스템을 구축하는 과정은 다음 단계로 이루어집니다:
1단계: 데이터 전처리
데이터 전처리는 원시 데이터를 더 쉽게 이해할 수 있는 형식으로 바꾸는 과정입니다. 이 예제에서는 6,000명의 사용자가 기여한 4,000편의 영화에 대한 1,000,000개의 평점을 포함하는 공개 데이터 세트 MovieLens[5] (m1–1m)를 사용합니다. 이 데이터는 GroupLens가 수집했으며 영화 설명, 영화 평점, 사용자 특성을 포함합니다.
이 예제에서 사용된 MovieLens 데이터셋은 최소한의 데이터 정리 또는 조직화만 필요하다는 점에 유의하세요. 그러나 다른 데이터셋을 사용하는 경우 상황은 달라질 수 있습니다.
추천 시스템 구축을 시작하려면 MovieLens 데이터셋의 과거 사용자-영화 데이터를 사용하여 분류 목적의 사용자-영화 이분 그래프를 구축합니다.
graph_builder = PandasGraphBuilder()
graph_builder.add_entities(users, 'user_id', 'user')
graph_builder.add_entities(movies_categorical, 'movie_id', 'movie')
graph_builder.add_binary_relations(ratings, 'user_id', 'movie_id', 'watched')
graph_builder.add_binary_relations(ratings, 'movie_id', 'user_id', 'watched-by')
g = graph_builder.build()
단계 2: PinSage로 모델 학습
PinSage 모델을 사용해 생성된 핀의 임베딩 벡터는 획득한 영화 정보의 특징 벡터입니다. 이분 그래프 g와 사용자 지정 영화 특징 벡터 차원(기본값 256-d)을 기반으로 PinSage 모델을 생성합니다. 그런 다음 PyTorch로 모델을 학습하여 4,000편의 영화에 대한 h_item 임베딩을 얻습니다.
# Define the model
model = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)
opt = torch.optim.Adam(model.parameters(), lr=args.lr)
# Get the item embeddings
for blocks in dataloader_test:
for i in range(len(blocks)):
blocks[i] = blocks[i].to(device)
h_item_batches.append(model.get_repr(blocks))
h_item = torch.cat(h_item_batches, 0)
단계 3: 데이터 로드
PinSage 모델이 생성한 영화 임베딩 h_item을 Milvus에 로드하면, Milvus는 해당 ID를 반환합니다. ID와 해당 영화 정보를 MySQL로 가져옵니다.
# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)
단계 4: 벡터 유사도 검색 수행
영화 ID를 기반으로 Milvus에서 해당 임베딩을 가져온 다음, 이 임베딩을 사용하여 Milvus로 유사도 검색을 실행합니다. 다음으로 MySQL 데이터베이스에서 해당 영화 정보를 식별합니다.
# Get embeddings that users like
_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)
# Get the information with similar movies
_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})
sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"
results = cursor.execute(sql).fetchall()
단계 5: 추천 얻기
이제 시스템은 사용자 검색 쿼리와 가장 유사한 영화를 추천합니다. 이것이 추천 시스템을 구축하기 위한 일반적인 워크플로입니다. 추천 시스템 및 기타 AI 애플리케이션을 빠르게 테스트하고 배포하려면 Milvus bootcamp를 사용해 보세요.
Milvus는 추천 시스템 이상의 것을 구동할 수 있습니다
Milvus는 방대한 인공지능 및 벡터 유사도 검색 애플리케이션을 구동할 수 있는 강력한 도구입니다. 프로젝트에 대해 자세히 알아보려면 다음 리소스를 확인하세요:
계속 읽기

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

Top 10 Context Engineering Techniques You Should Know for Production RAG
A practical guide to context engineering for production LLM systems, covering RAG, context processing, memory, agents, and multimodal context.

Announcing the General Availability of Single Sign-On (SSO) on Zilliz Cloud
SSO is GA on Zilliz Cloud, delivering the enterprise-grade identity management capabilities your teams need to deploy vectorDB with confidence.



