Milvus와 PaddlePaddle로 개인화 추천 시스템 구축하기
배경 소개
네트워크 기술의 지속적인 발전과 전자상거래 규모의 끊임없는 확대로 인해 상품의 수와 종류가 빠르게 증가하고 있으며, 사용자는 구매하고 싶은 상품을 찾기 위해 많은 시간을 들여야 합니다. 이것이 정보 과부하입니다. 이 문제를 해결하기 위해 추천 시스템이 등장했습니다.
추천 시스템은 정보 필터링 시스템의 하위 집합으로, 영화, 음악, 전자상거래, Feed 스트림 추천과 같은 다양한 영역에서 사용될 수 있습니다. 추천 시스템은 사용자 행동을 분석하고 마이닝하여 사용자의 개인화된 요구와 관심사를 발견하고, 사용자에게 흥미로울 수 있는 정보나 제품을 추천합니다. 검색 엔진과 달리 추천 시스템은 사용자가 자신의 요구를 정확히 설명할 필요가 없으며, 사용자의 과거 행동을 모델링하여 사용자 관심사와 요구에 맞는 정보를 능동적으로 제공합니다.
이 글에서는 Baidu의 딥러닝 플랫폼인 PaddlePaddle을 사용해 모델을 구축하고, 벡터 유사도 검색 엔진인 Milvus와 결합하여 사용자에게 흥미로운 정보를 빠르고 정확하게 제공할 수 있는 개인화 추천 시스템을 구축합니다.
데이터 준비
MovieLens Million Dataset (ml-1m) [1]을 예로 들어 보겠습니다. ml-1m 데이터셋은 GroupLens Research lab에서 수집한 6,000명의 사용자가 4,000편의 영화에 대해 남긴 1,000,000개의 리뷰를 포함합니다. 원본 데이터에는 영화의 특징 데이터, 사용자 특징, 사용자의 영화 평점이 포함되어 있으며, ml-1m-README [2]를 참조할 수 있습니다.
ml-1m 데이터셋에는 3개의 .dat 문서가 포함됩니다: movies.dat、users.dat 및 ratings.dat.movies.dat에는 영화의 특징이 포함되어 있으며, 아래 예시를 참조하세요:
MovieID::Title::Genres
1::ToyStory(1995)::Animation|Children's|Comedy
이는 영화 id가 1이고, 제목이 《Toy Story》이며, 세 가지 카테고리로 분류된다는 의미입니다. 이 세 가지 카테고리는 애니메이션, 어린이, 코미디입니다.
users.dat에는 사용자의 특징이 포함되어 있으며, 아래 예시를 참조하세요:
UserID::Gender::Age::Occupation::Zip-code
1::F::1::10::48067
이는 사용자 ID가 1이고, 여성(F)이며, 18세 미만이라는 의미입니다. 직업 ID는 10입니다.
ratings.dat에는 영화 평점의 특징이 포함되어 있으며, 아래 예시를 참조하세요:
UserID::MovieID::Rating::Timestamp 1::1193::5::978300760
즉, 사용자 1이 영화 1193을 5점으로 평가했다는 뜻입니다.
융합 추천 모델
영화 개인화 추천 시스템에서는 PaddlePaddle이 구현한 Fusion Recommendation Model [3]을 사용했습니다. 이 모델은 산업 현장의 실무에서 만들어졌습니다.
먼저 사용자 특징과 영화 특징을 신경망의 입력으로 사용하며, 여기서:
- 사용자 특징은 사용자 ID, 성별, 직업, 나이라는 네 가지 속성 정보를 포함합니다.
- 영화 특징은 영화 ID, 영화 유형 ID, 영화 이름이라는 세 가지 속성 정보를 포함합니다.
사용자 특징의 경우, 사용자 ID를 차원 크기가 256인 벡터 표현으로 매핑하고, 완전 연결 계층에 입력하며, 다른 세 속성에 대해서도 유사한 처리를 수행합니다. 그런 다음 네 가지 속성의 특징 표현을 각각 완전 연결하고 더합니다.
영화 특징의 경우, 영화 ID는 사용자 ID와 유사한 방식으로 처리됩니다. 영화 유형 ID는 벡터 형태로 완전 연결 계층에 직접 입력되며, 영화 이름은 텍스트 합성곱 신경망을 사용해 고정 길이 벡터로 표현됩니다. 그런 다음 세 가지 속성의 특징 표현을 각각 완전 연결하고 더합니다.
사용자와 영화의 벡터 표현을 얻은 후, 이들의 코사인 유사도를 개인화 추천 시스템의 점수로 계산합니다. 마지막으로, 유사도 점수와 사용자의 실제 점수 간 차이의 제곱을 회귀 모델의 손실 함수로 사용합니다.
PaddlePaddle의 융합 추천 모델.
시스템 개요
PaddlePaddle의 융합 추천 모델과 결합하여, 모델이 생성한 영화 특징 벡터는 Milvus 벡터 유사도 검색 엔진에 저장되고, 사용자 특징은 검색할 대상 벡터로 사용됩니다. Milvus에서 유사도 검색을 수행하여 쿼리 결과를 사용자를 위한 추천 영화로 얻습니다.
Milvus와 결합된 융합 추천 모델.
벡터 거리를 계산하기 위해 Milvus에서 내적(IP) 방법이 제공됩니다. 데이터를 정규화한 후, 내적 유사도는 융합 추천 모델의 코사인 유사도 결과와 일치합니다.
개인 추천 시스템의 적용
Milvus로 개인화 추천 시스템을 구축하는 데는 세 단계가 있으며, 작동 방법에 대한 자세한 내용은 Mivus Bootcamp [4]를 참조하십시오.
Step 1:모델 학습
# run train.py
$ python train.py
이 명령을 실행하면 디렉터리에 recommender_system.inference.model 모델이 생성되며, 이 모델은 영화 데이터와 사용자 데이터를 특징 벡터로 변환하고 Milvus가 저장 및 검색할 애플리케이션 데이터를 생성할 수 있습니다.
Step 2:데이터 전처리
# Data preprocessing, -f followed by the parameter raw movie data file name
$ python get_movies_data.py -f movies_origin.txt
이 명령을 실행하면 디렉터리에 테스트 데이터 movies_data.txt가 생성되어 영화 데이터의 전처리를 수행합니다.
Step 3:Milvus로 개인 추천 시스템 구현
# Implementing personal recommender system based on user conditions
$ python infer_milvus.py -a <age>-g <gender>-j <job>[-i]
이 명령을 실행하면 지정된 사용자를 위한 개인화 추천이 구현됩니다.
주요 프로세스는 다음과 같습니다.
- load_inference_model을 통해 영화 데이터가 모델에 의해 처리되어 영화 특징 벡터를 생성합니다.
- milvus.insert를 통해 영화 특징 벡터를 Milvus에 로드합니다.
- 매개변수로 지정된 사용자의 나이 / 성별 / 직업에 따라 사용자 특징 벡터로 변환되고, milvus.search_vectors가 유사도 검색에 사용되며, 사용자와 영화 간 유사도가 가장 높은 결과가 반환됩니다.
사용자가 관심을 가질 상위 5개 영화 예측:
TopIdsTitleScore
03030Yojimbo2.9444923996925354
13871Shane2.8583481907844543
23467Hud2.849525213241577
31809Hana-bi2.826111316680908
43184Montana2.8119677305221558
요약
사용자 정보와 영화 정보를 융합 추천 모델에 입력하여 매칭 점수를 얻을 수 있으며, 그런 다음 사용자를 기준으로 모든 영화의 점수를 정렬하여 사용자가 관심을 가질 수 있는 영화를 추천할 수 있습니다. 이 글은 Milvus와 PaddlePaddle을 결합하여 개인화 추천 시스템을 구축합니다. 벡터 검색 엔진인 Milvus는 모든 영화 특징 데이터를 저장하는 데 사용되며, 그런 다음 Milvus에서 사용자 특징에 대한 유사도 검색이 수행됩니다. 검색 결과는 시스템이 사용자에게 추천하는 영화 순위입니다.
Milvus [5] 벡터 유사도 검색 엔진은 다양한 딥러닝 플랫폼과 호환되며, 수십억 개의 벡터를 밀리초 응답만으로 검색합니다. Milvus로 AI 애플리케이션의 더 많은 가능성을 쉽게 탐색할 수 있습니다!
Reference
- MovieLens Million Dataset (ml-1m): http://files.grouplens.org/datasets/movielens/ml-1m.zip
- ml-1m-README: http://files.grouplens.org/datasets/movielens/ml-1m-README.txt
- Fusion Recommendation Model by PaddlePaddle: https://www.paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/basics/recommender_system/index.html#id7
- Bootcamp: https://github.com/milvus-io/bootcamp/tree/master/solutions/recommendation_system
- Milvus: https://milvus.io/en/
계속 읽기

Milvus 2.6.x Now Generally Available on Zilliz Cloud, Making Vector Search Faster, Smarter, and More Cost-Efficient for Production AI
Milvus 2.6.x is now GA on Zilliz Cloud, delivering faster vector search, smarter hybrid queries, and lower costs for production RAG and AI applications.

Migrating from S3 Vectors to Zilliz Cloud: Unlocking the Power of Tiered Storage
Learn how Zilliz Cloud bridges cost and performance with tiered storage and enterprise-grade features, and how to migrate data from AWS S3 Vectors to Zilliz Cloud.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.



