DUICUO

優れたオープンソースの推奨システム/アルゴリズム/リソース10選

I. 推薦システムの概要

インターネット時代において、レコメンデーションシステムは至る所で利用されています。例えば、昨夜JD.comでスニーカーを探していたら、今朝Toutiaoでスニーカー関連の広告が表示されました。このブログ記事を読んでいるときに、言及されている広告が以前フォローしていたものかどうかお気づきでしょうか?

レコメンデーションシステムは常に注目の技術分野であり、ビジネスにおける機械学習の応用分野の中でも最も成功し、広く利用されているものの一つです。レコメンデーションシステムは、ユーザーの過去の行動、社会的関係、そして興味に基づいて、製品やサービスに対する現在のニーズや関心を判断するアプリケーションです。レコメンデーションシステムは本質的に情報フィルタリングの手法であり、検索とカテゴリーナビゲーションと並んで、3つの主要な情報フィルタリング手法の一つを形成しています。

ユーザーにとって、レコメンデーションシステムは好みの商品やサービスを見つけ、情報に基づいた選択を行うのに役立ちます。サービスプロバイダーにとっては、パーソナライズされたサービスを提供し、ユーザーの信頼と忠誠心を高め、収益を向上させることができます。

II. レコメンデーションエンジンとは何ですか?

レコメンデーションシステムの中核はレコメンデーションエンジンです。レコメンデーションエンジンは、顧客の過去の購入履歴に基づいて商品をフィルタリングし、顧客が興味を持っている商品や購入する可能性の高い商品を特定します。顧客に関するデータが豊富であればあるほど、レコメンデーションの精度は高まります。しかし、このアプローチは新規顧客に対しては過去のデータがないため、うまく機能しません。そのため、この問題に対処するには、別の戦略が必要です。最も人気のある商品を顧客にレコメンデーションすることは、すべての新規顧客に同じレコメンデーションが適用されるため、必ずしも正確であるとは限りません。そのため、一部のアプリでは、より正確なレコメンデーションを提供するために、新規顧客の興味について質問しています。

さまざまな顧客や製品に対して、推奨エンジンのフィルタリング方法には、コンテンツベースのフィルタリング、協調フィルタリング、ハイブリッド フィルタリングなどがあります。

1. コンテンツベースのフィルタリング

コンテンツベースのフィルタリングは、商品の説明やその他のデータに基づいて商品間の類似性を検索します。また、過去の購入履歴に基づいて、ユーザーが好みそうな類似商品も特定します。例えば、ユーザーが「ミッション:インポッシブル」のような映画を好んでいる場合、トム・クルーズ主演の映画をおすすめするといったことが可能です。

このフィルタリング手法では、2種類のデータを使用します。1つ目はユーザー関連情報(ユーザーベクトル)で、ユーザーの好み、興味、個人情報(年齢など)、ユーザー履歴などが含まれます。2つ目は商品関連情報(アイテムベクトル)で、すべてのアイテムの特徴を含み、これに基づいてアイテム間の類似度を計算できます。

コサイン類似度を用いて計算できます。「A」がユーザーベクトル、「B」がアイテムベクトルの場合、コサイン類似度は以下の式で計算されます。

最後に、コサイン類似度マトリックスで計算された値が降順にソートされ、上位の項目が 1 つ以上ユーザーに推奨されます。

コンテンツベースのフィルタリングの利点は次のとおりです。

  • ユーザーには好みのタイプのアイテムが推奨されます。
  • ユーザーは推奨事項の種類に満足しています。
  • 必要なのは、新しいプロジェクトを推奨するためのデータだけです。

欠点は次のとおりです。

  • ユーザーには異なるプロジェクトが推奨されることはありません。
  • ユーザーがさまざまな種類の製品を試さないため、ビジネスは拡大できません。
  • ユーザー マトリックスまたはアイテム マトリックスが変更された場合は、コサイン類似度マトリックスを再計算する必要があります。

2. 協調フィルタリング

協調フィルタリングはユーザーの行動に基づいて実行されます。ユーザーの過去の行動情報は重要な役割を果たします。例えば、ユーザー「A」が「Coldplay」、「The Linkin Park」、「Britney Spears」を好み、ユーザー「B」が「Coldplay」、「The Linkin Park」、「Taylor Swift」を好みの場合、両者は類似した興味を持っていることになります。したがって、ユーザー「A」は「Taylor Swift」を好み、ユーザー「B」は「Britney Spears」を好む可能性が高くなります。これが協調フィルタリングの仕組みです。

協調フィルタリング手法には、ユーザー間協調フィルタリングとアイテム間協調フィルタリングが含まれます。

(1)ユーザー間協調フィルタリング

ユーザーベクトルには、ユーザーが購入したすべてのアイテムと、各アイテムに与えられた評価が含まれます。ユーザー間の類似度は、n*n行列を用いて計算されます。ここで、nは既存ユーザー数です。類似度は、同じコサイン類似度計算式を用いて計算されます。次に、推奨行列が計算されます。この場合、評価には、アイテムを購入したユーザーと、そのアイテムを推奨するユーザーとの間の類似度が乗算されます。この値は、そのユーザーのすべての新規アイテムに対して計算され、降順でソートされます。そして、最も重要なアイテムがそのユーザーに推奨されます。

新しいユーザーが参加したり、既存のユーザーがプロジェクトに対する意見を変えたりした場合、推奨されるプロジェクトも変更される可能性があります。

(2)プロジェクト間協調フィルタリング

このアプローチでは、類似ユーザーではなく、類似プロジェクトが考慮されます。ユーザー「A」が「インセプション」を気に入っている場合、「オデッセイ」と「オデッセイ」にはいくつかの類似点があるため、「オデッセイ」も気に入る可能性があります。推薦マトリックスはm×mマトリックスで、mは既存プロジェクトの数です。

協調フィルタリング アルゴリズムの利点は次のとおりです。

  • ユーザーに新製品を推奨できます。
  • 新製品を宣伝し、ビジネスを拡大することができます。

欠点は次のとおりです。

  • ユーザーの過去の履歴または製品データが必要です。
  • ユーザーによる購入やレビューがない場合、新しいプロジェクトは推奨されません。

3. ハイブリッド推奨アルゴリズム

コンテンツベース推奨アルゴリズムと協調フィルタリングアルゴリズムにはそれぞれ長所と短所があります。より正確に商品を推奨するには、コンテンツベースと協調フィルタリングのアプローチを組み合わせたハイブリッド推奨アルゴリズムを使用できます。ハイブリッド推奨アルゴリズムは、より高い効率性と実用性を備えています。

III. オープンソースのレコメンデーションシステム10選に関する関連リソース

レコメンデーション システムをさらに理解するために、学習リソース、開発パッケージ、完全なレコメンデーション システムなど、学習や開発に最適なオープン ソース プロジェクトをいくつか集めてみました。

1. d2l-zh または d2l-en

GitHub (K):

  • 中国語: https://github.com/d2l-ai/d2l-zh
  • 英語: https://github.com/d2l-ai/d2l-en

言語: Python

このライブラリには、インタラクティブなディープラーニング関連の書籍、複数のフレームワークのコード、数学資料やディスカッション資料、レコメンデーションシステムのアルゴリズムなど、様々な資料が含まれています。スタンフォード大学、MIT、ハーバード大学、ケンブリッジ大学など、70か国500以上の大学で導入されており、人工知能を学ぶための優れたリソースとなることは間違いありません。

このライブラリの目的は次のとおりです。

  • 誰でも無料でオンラインで利用できます。
  • 本書は、読者が実践的なディープラーニング応用科学者になるための十分な技術的深みを提供します。数学的原理を理解し、その方法を実装して継続的に改善できるようになります。
  • 実行可能なコードが含まれており、読者は実際に問題を解く方法を学ぶことができます。数式を実際のコードに直接マッピングできるだけでなく、読者はコードを修正し、結果を観察し、タイムリーに経験を積むことができます。
  • これにより、私たちとコミュニティ全体がコンテンツを迅速に反復し、進化を続けるディープラーニングの分野に対応できるようになります。
  • 技術的な詳細に関する Q&A を含むフォーラムが補足として提供されており、誰もが互いの質問に答えたり、経験を交換したりすることができます。

2. 推薦者

GitHub (16.7K): https://github.com/recommenders-team/recommenders

言語: Python

このライブラリには、Jupyter ノートブックの形式で提供される、レコメンデーション システムを構築するためのさまざまな例とベスト プラクティスが含まれています。

以下の図は、このベスト プラクティスの例が、レコメンデーション システム開発ワークフローにおいて研究者/開発者にどのように役立つかを示しています。

以下は、examples ディレクトリの下のサブディレクトリの内容の説明です。

3. ハリエニシダ

GitHub (7.7K): https://github.com/gorse-io/gorse

言語: 囲碁

GorseはGo言語で書かれたオープンソースのレコメンデーションシステムです。Gorseは、様々なオンラインサービスに迅速に統合できる汎用性の高いオープンソースのレコメンデーションシステムを目指しています。プロジェクト、ユーザー、インタラクションデータをGorseにインポートすることで、システムは自動的にモデルをトレーニングし、各ユーザーに最適なレコメンデーションを生成します。

機能は次のとおりです:

  • マルチソースの推奨事項: 人気、最新、ユーザーベース、プロジェクトベース、および共同フィルタリングの推奨事項。
  • AutoML: バックグラウンドで最適な推奨モデルを自動的に検索します。
  • 分散予測: 推論フェーズ中の水平スケーリングをサポートしながら、単一ノードのトレーニングをサポートします。
  • RESTful API: データ CRUD および推奨リクエスト用の RESTful API を提供します。
  • オンライン評価: 最近追加されたフィードバックに基づいて、オンライン推奨事項のパフォーマンスを分析します。
  • ダッシュボード: データ管理、システム監視、クラスターのステータス チェック用の GUI を提供します。

Gorseシステムは、データをMySQL、MongoDB、またはPostgresに保存し、中間結果をRedis、MySQL、MongoDB、またはPostgresにキャッシュします。単一ノードでの学習をサポートし、分散環境でのレコメンデーションシステムの運用を可能にします。管理者は、マスターノードのダッシュボードからシステムの状態を監視し、データのインポート/エクスポート操作を実行できます。

分散アーキテクチャは次のとおりです。

ダッシュボードのインターフェースは次のとおりです。

4. ライトFM

GitHub (4.5K): https://github.com/lyst/lightfm

言語: Python

LightFMは、Pythonで実装されたハイブリッドな推薦アルゴリズムです。暗黙的フィードバックと明示的フィードバックの両方に対応した推薦アルゴリズムプロジェクトであり、BPRとWARP損失アルゴリズムに基づく効率的な実装が含まれています。使いやすく、高速(マルチスレッドモデル推定により)で、高品質な結果を生成できます。

また、プロジェクトとユーザーのメタデータを従来の行列分解アルゴリズムに組み込むこともできるため、推奨事項を新しいプロジェクト (プロジェクト機能に基づく) と新しいユーザー (ユーザー機能に基づく) に拡張できます。

5. 暗黙の

GitHub (3.3K): https://github.com/benfred/implicit

言語: Python

このプロジェクトでは、いくつかの異なる一般的な推奨アルゴリズムの高速 Python 実装と、高速 Python 協調フィルタリング用の暗黙的なデータセットを提供します。

  • 論文で説明されている協調フィルタリング暗黙的フィードバック データセットなどの交互最小二乗法や、共役勾配法を使用した暗黙的フィードバック協調フィルタリング。
  • ベイジアンパーソナライズランキング
  • 論理行列分解
  • 距離メトリックとしてコサイン、TFIDF、または BM25 を使用するアイテム間の最近傍モデル。

6. スポットライト

GitHub (2.9K): https://github.com/maciejkula/spotlight

言語: Python

Spotlightは、PyTorchを用いて構築されたディープレコメンデーションモデルです。レコメンデーションシステムを迅速に実装するためのツール、そして新しいレコメンデーションモデルのプロトタイプとなることを目指しています。

7. イージーレック

GitHub (1.3K): https://github.com/alibaba/EasyRec

言語: Python

EasyRecは、Alibabaが提供するオープンソースの大規模推薦アルゴリズムフレームワークです。候補生成(マッチング)、スコアリング(ランキング)、マルチタスク学習といった一般的な推薦タスクに対応する最先端のディープラーニングモデルを実装しています。シンプルな設定とハイパーパラメータチューニング(HPO)により、高性能モデルの生成効率を向上させます。

8. Tensorflowレコメンダー

GitHub (1.7K): https://github.com/tensorflow/recommenders

TensorFlow Recommenders は、TensorFlow を用いてレコメンデーションシステムモデルを構築するためのライブラリです。このプロジェクトは、データ準備、モデル開発、トレーニング、評価、そしてデプロイメントを含む、レコメンデーションシステム構築のための包括的なワークフローを提供します。Keras フレームワーク上に構築されているため、学習曲線が緩やかでありながら、複雑なモデルを柔軟に構築できます。

9. トーチレック

GitHub (2K): https://github.com/pytorch/torchrec

言語: Python

TorchRecは、大規模レコメンデーションシステム(RecSys)に必要な共通のスパース並列プリミティブを提供するように設計されたPyTorchドメインライブラリです。これにより、複数のGPUにまたがるモデルの学習が可能になります。

TorchRec は以下を提供します。

  • ハイブリッド データ並列処理とモデル並列処理を使用して、大規模で高性能なマルチデバイス/マルチノード モデルをサポートする並列プリミティブを簡単に作成します。
  • TorchRec Sharder は、データ並列、表形式、行ベース、表形式行、列ベース、表形式列のシャーディングなど、さまざまなシャーディング戦略を使用して埋め込みテーブルをシャーディングできます。
  • TorchRec プランナーは、モデルに最適化されたシャーディング プランを自動的に生成できます。
  • パイプラインのトレーニングは、データ読み込みデバイス転送 (GPU へのコピー)、デバイス間通信 (input_dist)、および計算 (前方および後方) と重複して、パフォーマンスを向上させます。
  • FBGEMM を搭載した RecSys 用に最適化されたカーネル。
  • 量子化は、精度を下げたトレーニングと推論をサポートします。
  • RecSys の一般的なモジュール。
  • RecSys 向けの実証済みの生産モデル アーキテクチャ。
  • RecSys データセット (クリックログとムービーレンズ)
  • エンドツーエンドのトレーニングの例としては、Criteo クリック ログ データセットでトレーニングされた dlrm イベント予測モデルがあります。

10. RecSysデータセット

GitHub: https://github.com/RUCAIBox/RecSysDatasets

言語: Python

これは、レコメンデーションシステム(RS)のトレーニングに利用できる公開データソースです。すべてのデータセットはアトミックファイルに変換できるため、レコメンデーションシステムのための統合的かつ包括的で効率的なリソースとなります。アトミックファイルに変換後、RecBoleを用いて、これらのデータセット上で様々なレコメンデーションモデルのパフォーマンスをテストできます。

データセットには、ショッピング、映画、広告、音楽、書籍、写真、ゲーム、ウェブサイト、食品、ニュース、衣料品などが含まれます。

結論は

上述のオープンソースの推薦システムリソースは、推薦技術の理解を深める上で役立ちます。これらの既存技術を基盤として、インターネットプラットフォームは、ユーザーが情報や商品をより迅速に受け入れやすくし、プラットフォームの収益向上とパーソナライズされたサービス提供を可能にします。しかし、これは「ビッグデータに基づく価格差別」や「情報の繭」といった副作用も生み出します。将来の推薦システムは、より人間中心的であるべきでしょう。