背景 はじめに
背景 はじめに
ネットワーク技術の絶え間ない発展と電子商取引の規模が拡大し続ける中、商品の数と種類は急速に増加し、ユーザーは買いたい商品を見つけるために多くの時間を費やす必要がある。これは情報過多である。この問題を解決するために登場したのがレコメンデーションシステムである。
レコメンデーションシステムは、情報フィルタリングシステムのサブセットであり、映画、音楽、電子商取引、フィードストリーム・レコメンデーションなど、さまざまな分野で利用できる。レコメンデーションシステムは、ユーザーの行動を分析・マイニングすることで、ユーザーにパーソナライズされたニーズや興味を発見し、ユーザーが興味を持ちそうな情報や商品を推薦する。検索エンジンとは異なり、推薦システムはユーザーが自分のニーズを正確に記述することを必要とせず、ユーザーの過去の行動をモデル化することで、ユーザーの興味やニーズに合った情報を積極的に提供する。
本稿では、百度のディープラーニングプラットフォームであるPaddlePaddleを用いてモデルを構築し、ベクトル類似検索エンジンであるmilvusを組み合わせることで、ユーザーに興味ある情報を迅速かつ正確に提供できるパーソナライズド・レコメンデーションシステムを構築する。
データの準備
MovieLens Million Dataset (ml-1m) [1]を例とする。ml-1mデータセットには、GroupLens Research labによって収集された、6,000人のユーザーによる4,000本の映画の1,000,000件のレビューが含まれている。元のデータには、映画の特徴データ、ユーザの特徴データ、ユーザの評価が含まれています。
ml-1mデータセットには3つの.datが含まれています: movies.dat、users.dat、rating.dat.movies.datには映画の特徴が含まれています:
MovieID::Title::Genres
1::ToyStory(1995)::Animation|Children's|Comedy
これは、映画IDが1で、タイトルが《トイ・ストーリー》で、3つのカテゴリーに分かれていることを意味する。この3つのカテゴリーとは、アニメーション、子供向け、コメディです。
users.datには、ユーザーの特徴が含まれています:
UserID::Gender::Age::Occupation::Zip-code
1::F::1::10::48067
ユーザーIDは1、女性、18歳未満。職業IDは10。
rating.datには、映画のレーティング機能が含まれています:
UserID::MovieID::Rating::Timestamp 1::1193::5::978300760
つまり、ユーザ1は映画1193を5点として評価している。
融合推薦モデル
映画パーソナライズド推薦システムでは、PaddlePaddleが実装しているフュージョン推薦モデル[3]を使用しました。このモデルは、PaddlePaddleの実業務から生まれたものである。
まず、ユーザー特徴と映画特徴をニューラルネットワークの入力とする:
- ユーザー特徴には、ユーザーID、性別、職業、年齢の4つの属性情報が含まれています。
- 映画特徴量には、映画ID、映画タイプID、映画名の3つの属性情報が含まれる。
ユーザ特徴については、ユーザIDを256次元のベクトル表現に対応付け、全結合層に入り、他の3属性についても同様の処理を行う。そして、4つの属性の特徴表現を完全連結し、別々に追加する。
映画の特徴については、映画IDはユーザIDと同様の処理を行う。映画タイプIDはベクトルの形で直接完全接続層に入力され、映画名はテキスト畳み込みニューラルネットワークを用いた固定長ベクトルで表現される。その後、3つの属性の特徴表現が完全に接続され、別々に追加される。
ユーザと映画のベクトル表現を得た後、それらのコサイン類似度をパーソナライズド推薦システムのスコアとして計算する。最後に、類似度スコアとユーザの真のスコアの差の2乗が回帰モデルの損失関数として使用される。
1-user-film-personalized-recommender-milvus.jpg
システム概要
PaddlePaddleの融合レコメンデーションモデルと組み合わせ、モデルによって生成された映画特徴ベクトルをmilvusベクトル類似検索エンジンに格納し、ユーザ特徴を検索対象ベクトルとする。Milvusで類似度検索を行うことで、クエリ結果をユーザへの推薦映画として取得します。
2-system-overview.jpg
Milvusでは、ベクトルの距離を計算するために、内積(IP)法が用意されている。データを正規化した後、内積類似度は融合推薦モデルにおけるコサイン類似度の結果と一致する。
パーソナル推薦システムの応用
Milvusを使った個人向け推薦システムの構築には3つのステップがあります。操作方法の詳細はMivus Bootcamp [4]を参照してください。
ステップ1:モデルトレーニング
# run train.py
$ python train.py
このコマンドを実行することで、ディレクトリ内にモデルrecommender_system.inference.modelが生成され、映画データとユーザデータを特徴ベクトルに変換し、Milvusが保存・取得するためのアプリケーションデータを生成することができます。
ステップ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 が生成され、ムービーデータの前処理が行われます。
ステップ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アプリケーションの可能性をより簡単に追求することができる!
参考
- 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
- 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/
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word