46.5kデモを予約するログイン無料で始める

MilvusとPaddlePaddleによるパーソナライズされた推薦システムの構築

Feb 25, 20211 min read

#背景紹介

ネットワーク技術の絶え間ない発展と電子商取引の規模が拡大し続ける中、商品の数と種類は急速に増加し、ユーザーは買いたい商品を探すのに多くの時間を費やす必要がある。これは情報過多である。この問題を解決するために、推薦システムが登場した。

レコメンデーションシステムは、情報フィルタリングシステムのサブセットであり、映画、音楽、電子商取引、フィードストリーム・レコメンデーションなど、さまざまな分野で利用できる。レコメンデーションシステムは、ユーザーの行動を分析・マイニングすることで、ユーザーにパーソナライズされたニーズや興味を発見し、ユーザーが興味を持ちそうな情報や商品を推薦する。レコメンデーションシステムは、検索エンジンとは異なり、ユーザーが自分のニーズを正確に記述する必要はなく、ユーザーの過去の行動をモデル化することで、ユーザーの興味やニーズに合った情報を積極的に提供する。

本稿では、百度のディープラーニングプラットフォームであるPaddlePaddleを用いてモデルを構築し、ベクトル類似検索エンジンであるMilvusを組み合わせることで、ユーザに興味ある情報を迅速かつ正確に提供できるパーソナライズド・レコメンデーションシステムを構築する。

データの準備

MovieLens Million Dataset (ml-1m) [1]を例に挙げる。ml-1m データセットは、GroupLens Research ラボによって収集された、6,000 人のユーザーによる 4,000 本の映画の 1,000,000 件のレビューを含んでいる。元のデータには、映画の特徴データ、ユーザの特徴、ユーザの評価が含まれています。

ml-1mデータセットには3つの.datが含まれています: movies.dat、users.dat、rating.dat.movies.datには映画の特徴が含まれています:

MovieID::タイトル::ジャンル
1::ToyStory(1995)::Animation|Children's|Comedy

これは、映画IDが1で、タイトルが《トイ・ストーリー》で、3つのカテゴリーに分かれていることを意味する。この3つのカテゴリーとは、アニメーション、子供向け、コメディです。

users.datにはユーザーの特徴が含まれています:

ユーザーID::性別::年齢::職業::郵便番号
1::F::1::10::48067

これは、ユーザーIDが1、女性、18歳未満であることを意味します。職業IDは10です。

rating.datには、映画のレーティング機能が含まれています:

ユーザーID::映画ID::評価::タイムスタンプ 1::1193::5::978300760

つまり、ユーザ1は映画1193を5点として評価しています。

フュージョン推薦モデル

映画パーソナライズド推薦システムでは、PaddlePaddleが実装しているフュージョン推薦モデル[3]を使用した。このモデルは、その工業的実践から作成されたものである。

まず、ユーザの特徴と映画の特徴をニューラルネットワークの入力とする:

  • ユーザー特徴には、ユーザーID、性別、職業、年齢の4つの属性情報が含まれています。
  • 映画特徴量には、映画ID、映画タイプID、映画名の3つの属性情報を取り込む。

ユーザ特徴については、ユーザIDを256次元のベクトル表現に対応付け、全結合層に入り、他の3属性についても同様の処理を行う。そして、4つの属性の特徴表現を完全連結し、別々に追加する。

映画の特徴については、映画IDはユーザIDと同様の処理を行う。映画タイプIDはベクトルの形で直接完全接続層に入力され、映画名はテキスト畳み込みニューラルネットワークを用いた固定長ベクトルで表現される。その後、3つの属性の特徴表現が完全に接続され、別々に追加される。

ユーザと映画のベクトル表現を得た後、それらのコサイン類似度をパーソナライズド推薦システムのスコアとして計算する。最後に、類似度スコアとユーザの真のスコアの差の二乗を回帰モデルの損失関数として使用する。

PaddlePaddleの融合推薦モデル](https://assets.zilliz.com/1_user_film_personalized_recommender_Milvus_9ec39f501d.jpg)

システム概要

PaddlePaddleの融合推薦モデルと組み合わせることで、モデルによって生成された映画特徴ベクトルをMilvusベクトル類似検索エンジンに格納し、ユーザ特徴ベクトルを検索対象ベクトルとして利用します。類似度検索はMilvusで実行され、クエリ結果がユーザへの推薦映画として得られる。

Milvusと融合した推薦モデル](https://assets.zilliz.com/2_system_overview_5652afdca7.jpg)

Milvusでは、ベクトル距離を計算するために内積(IP)法が提供されています。データを正規化した後、内積類似度は融合推薦モデルの余弦類似度の結果と一致する。

パーソナル推薦システムの応用

Milvusで個人向け推薦システムを構築するには3つのステップがあります。操作方法の詳細はMivus Bootcamp [4]を参照してください。

ステップ1:モデル学習

# train.pyを実行
    $ python train.py

このコマンドを実行すると、ディレクトリにrecommender_system.inference.modelが生成され、映画データとユーザデータを特徴ベクトルに変換し、Milvusが保存・取得するためのアプリケーションデータを生成することができます。

ステップ2:データ前処理

# データ前処理, -f の後に生ムービーデータのファイル名を指定する。
    $ python get_movies_data.py -f movies_origin.txt

このコマンドを実行すると、ムービーデータの前処理を行うためのディレクトリにテストデータ movies_data.txt が生成されます。

ステップ3:Milvusによるパーソナル推薦システムの実装

# ユーザ条件に基づくパーソナル推薦システムの実装
    $ python infer_milvus.py -a <年齢>-g <性別>-j <仕事>[-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アプリケーションの可能性をさらに広げることができます!

参考文献

1.MovieLens Million Dataset (ml-1m): http://files.grouplens.org/datasets/movielens/ml-1m.zip

  1. ml-1m-README: http://files.grouplens.org/datasets/movielens/ml-1m-README.txt 3.PaddlePaddleによる融合推薦モデル: https://www.paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/basics/recommender_system/index.html#id7 4.ブートキャンプ: https://github.com/milvus-io/bootcamp/tree/master/solutions/recommendation_system 5.Milvus: https://milvus.io/en/
Updated on Jul 09, 2026