Milvus、PinSage、DGL、MovieLensデータセットによるグラフベースの推薦システムの構築
レコメンデーションシステムは、人間が不要な電子メールをふるいにかけるのを助けるささやかな始まりを持つアルゴリズムによって支えられている。1990年、発明者のダグ・テリーは、協調フィルタリングアルゴリズムを使って、迷惑メールから望ましいメールを選別した。同じような内容のメールに対して同じことをする他の人たちと協力して、メールを「好き」または「嫌い」にするだけで、ユーザーは、何をユーザーの受信トレイに送り、何を迷惑メールフォルダに隔離すべきかを判断するよう、コンピュータを素早く訓練することができた。
一般的な意味で、レコメンデーション・システムとは、ユーザーに適切な提案をするアルゴリズムのことである。提案には、見るべき映画、読むべき本、買うべき製品など、シナリオや業界によって様々なものがある。このようなアルゴリズムは私たちの身の回りに存在し、Youtube、Amazon、Netflixなどの大手テクノロジー企業から、私たちが消費するコンテンツや購入する製品に影響を与えている。
うまく設計されたレコメンデーションシステムは、不可欠な収益源、コスト削減、競争上の差別化要因となり得る。オープンソースの技術と計算コストの低下のおかげで、カスタマイズされたレコメンデーションシステムはかつてないほど身近なものとなった。この記事では、オープンソースのベクトル・データベースであるMilvus、グラフ畳み込みニューラルネットワーク(GCN)であるPinSage、グラフ上でディープラーニングを行うためのスケーラブルなパイソン・パッケージであるディープグラフ・ライブラリ(DGL)、そしてMovieLensデータセットを使用して、グラフベースのレコメンデーションシステムを構築する方法を説明する。
へのジャンプ:*。
- 推薦システムはどのように機能するのか](#how-do-recommendation-systems-work)
- 推薦システムを構築するためのツール](#tools-for-building-a-recommender-system)
- Milvusでグラフベースの推薦システムを構築する](#building-a-graph-based-recommender-system-with-milvus)
推薦システムはどのように機能するのか?
協調フィルタリングとコンテンツベースフィルタリングです。ほとんどの開発者はどちらか、あるいは両方の方法を利用しており、推薦システムの複雑さや構造は様々ですが、一般的に3つの核となる要素を含んでいます:
1.ユーザーモデル:推薦システムはユーザーの特性、好み、ニーズをモデル化する必要がある。多くの推薦システムは、ユーザーからの暗黙的または明示的なアイテムレベルの入力に基づいて提案を行う。 2.オブジェクトモデル:推薦システムは、ユーザーのポートレートに基づいてアイテムの推薦を行うために、アイテムもモデル化する。 3.推薦アルゴリズム:**推薦システムの核となる要素は、推薦に力を与えるアルゴリズムである。一般的に使用されるアルゴリズムには、協調フィルタリング、暗黙的セマンティックモデリング、グラフベースモデリング、複合レコメンデーションなどがある。
高度なレベルでは、協調フィルタリングに依存する推薦システムは、ユーザーが興味を持ちそうなものを予測するために、過去のユーザー行動(類似ユーザーからの行動入力を含む)からモデルを構築する。コンテンツベースフィルタリングに依存するシステムは、アイテムの特徴に基づく個別の定義済みタグを使用して、類似アイテムを推薦する。
協調フィルタリングの例は、Spotifyのパーソナライズされたラジオステーションで、ユーザーのリスニング履歴、興味、音楽ライブラリなどに基づいている。このステーションは、ユーザーが保存したり、興味を示したりしていないが、同じような趣味を持つ他のユーザーがよく持っている音楽を流す。コンテンツに基づくフィルタリングの例としては、特定の曲やアーティストに基づくラジオ局があり、入力された音楽の属性を利用して類似の音楽を推薦する。
レコメンダーシステムを構築するためのツール
この例では、グラフベースのレコメンデーションシステムをゼロから構築する場合、以下のツールに依存する:
Pinsage:グラフ畳み込みネットワーク
PinSageは、何十億ものオブジェクトを含むウェブスケールのグラフのノードの埋め込みを学習できるランダムウォークのグラフ畳み込みネットワークである。このネットワークは、オンライン・ピンボードの会社であるPinterestによって、ユーザーにテーマ別のビジュアル・レコメンデーションを提供するために開発された。
Pinterestのユーザーは、興味のあるコンテンツを "ボード "に "ピン "することができ、"ボード "はピンされたコンテンツのコレクションである。4億7,800万人](https://business.pinterest.com/audience/)を超える月間アクティブユーザー(MAU)と2,400億を超えるオブジェクトの保存により、同社は膨大な量のユーザーデータを保有しており、それに対応するために新しいテクノロジーを構築しなければならない。
Pins-boards二部グラフ](https://assets.zilliz.com/1_742d28f7a9.png)
PinSageは、Pins-boards bipartite graphを使用して、ユーザーに視覚的に類似したコンテンツを推薦するために使用されるピンから高品質の埋め込みを生成する。特徴行列と完全なグラフに対して畳み込みを行う従来の GCN アルゴリズムとは異なり、PinSage は近傍のノード/ピンをサンプリングし、計算グラフを動的に構築することで、より効率的な局所畳み込みを行います。
ノードの近傍全体に対して畳み込みを実行すると、膨大な計算グラフになる。リソース要件を削減するために、従来のGCNアルゴリズムはkホップ近傍の情報を集約してノードの表現を更新する。PinSageはランダムウォークをシミュレートして、頻繁に訪問するコンテンツをキーとなる近傍として設定し、それに基づいて畳み込みを構築する。
kホップ近傍は重複していることが多いため、ノードのローカル畳み込みは計算の繰り返しになる。これを避けるため、PinSageは各集計ステップにおいて、計算を繰り返すことなくすべてのノードをマップし、対応する上位ノードにリンクし、最後に上位ノードの埋め込みを取得する。
ディープグラフ・ライブラリ:グラフ上の深層学習のためのスケーラブルなPythonパッケージ
DGLフレームワーク](https://assets.zilliz.com/dgl_framework_building_graph_based_recommender_milvus_af62de6dd4.png)
Deep Graph Library (DGL)は、既存のディープラーニングフレームワーク(PyTorch、MXNet、Gluonなど)の上にグラフベースのニューラルネットワークモデルを構築するために設計されたPythonパッケージです。DGLはユーザーフレンドリーなバックエンドインターフェースを備えており、テンソルに基づくフレームワークや自動生成をサポートするフレームワークへの組み込みが容易である。前述のPinSageアルゴリズムは、DGLとPyTorchでの使用に最適化されています。
Milvus: AIと類似検索のために構築されたオープンソースのベクトルデータベース
Milvusの類似検索はどのように動作するのか](https://assets.zilliz.com/how_does_milvus_work_6926180543.png)
Milvusは、ベクトル類似性検索と人工知能(AI)アプリケーションのために構築されたオープンソースのベクトルデータベースです。Milvusを類似性検索に使用すると、次のように動作します: 1.ディープラーニングモデルを使って非構造化データを特徴ベクトルに変換し、Milvusにインポートする。 2.Milvusは特徴ベクトルを保存し、インデックスを作成する。 3.要求に応じて、Milvusは入力ベクトルに最も類似したベクトルを検索して返す。
Milvusによるグラフベースの推薦システムの構築
Milvusによるグラフ推薦システムの基本的なワークフロー](https://assets.zilliz.com/beike_intelligent_house_platform_diagram_6e278da118.jpg)
Milvusにおけるグラフ推薦システムの基本的なワークフロー](https://assets.zilliz.com/3_building_graph_based_recommender_system_bf89770634.png)
Milvusでグラフ型推薦システムを構築するには、以下のようなステップを踏みます:
ステップ1:データの前処理
データの前処理には、生データをより理解しやすい形式に変えることが含まれる。この例では、オープンデータセット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とカスタマイズした映画の特徴ベクトルの次元(デフォルトは256d)に基づいてPinSageモデルを作成する。そして、このモデルをPyTorchで学習させ、4,000本の映画のh_item embeddingsを得る。
# モデルの定義
model = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)
opt = torch.optim.Adam(model.parameters(), lr=args.lr)
# アイテムの埋め込みを取得
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に読み込み、対応するIDを返します。そのIDと対応するムービー情報をMySQLにインポートする。
# データをMilvusとMySQLにロードする。
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)
ステップ4:ベクトル類似度検索の実行
映画IDからMilvusに対応するエンベッディングを取得し、Milvusを用いてエンベッディングを用いた類似検索を行う。次に、MySQLデータベースから対応する映画情報を特定する。
# ユーザが好きなエンベッディングを取得する。
_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)
# 似ているムービーの情報を取得
_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})
sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"
結果 = cursor.execute(sql).fetchall()
ステップ5:お勧めの映画を取得する
システムはユーザーの検索クエリに最も近い映画を推薦する。これが推薦システム構築の一般的なワークフローだ。レコメンデーション・システムやその他のAIアプリケーションを素早くテストしてデプロイするには、Milvus [bootcamp] (https://github.com/milvus-io/bootcamp)をお試しください。
Milvusはレコメンダーシステム以外にも力を発揮します
Milvusは、人工知能やベクトル類似検索の膨大なアプリケーションを動かすことができる強力なツールです。このプロジェクトの詳細については、以下のリソースをご覧ください:
- 私たちのブログを読む。
- Slack](https://join.slack.com/t/milvusio/shared_invite/zt-e0u4qu3k-bI2GDNys3ZqX1YCJ9OM~GQ)でオープンソースコミュニティと交流する。
- GitHub](https://github.com/milvus-io/milvus/)で世界で最も人気のあるベクトルデータベースを使用したり、貢献したりする。
読み続けて

Zilliz Cloud BYOC Now Available Across AWS, GCP, and Azure
Zilliz Cloud BYOC is now generally available on all three major clouds. Deploy fully managed vector search in your own AWS, GCP, or Azure account — your data never leaves your VPC.

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.

Long List of Awesome DeepSeek Integrations You Should Know
Discover how DeepSeek's affordable AI ecosystem challenges Silicon Valley giants with powerful integrations for developers and businesses—from RAG systems to productivity tools, all at 90% lower cost.
