レコメンデーションシステムのワイド&ディープモデルの構築とサービング

[Build and serve a wide\-and\-deep model in a recommender system \| Databricks on AWS](https://docs.databricks.com/applications/machine-learning/reference-solutions/recommender-wide-n-deep.html) [2021/10/20時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

レコメンデーションシステムにおける機械学習モデルパイプライン構築には、通常以下のステップが含まれます。
![](https://docs.databricks.com/_images/wide-and-deep-recommender-diagram.png)

このリファレンスソリューションでは、青色の部分のステージをカバーします。([本書でカバーされていないトピック](#本書でカバーされていないトピック)をご覧ください)

# Databricksツールのハイライト

ノートブックでは、機械学習パイプライン構築をシンプルにするDatabricksで提供されている幾つかのツールをカバーしています。

1. [SparkDatasetConverter](https://qiita.com/taka_yayoi/items/33086561e44c4eee027c#petastorm%E3%82%92%E7%94%A8%E3%81%84%E3%81%9Fspark%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%8B%E3%82%89%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AD%E3%83%BC%E3%83%89)
1. [MLflowモデルレジストリ](https://qiita.com/taka_yayoi/items/e7a4bec6420eb7069995)
1. [MLflowモデルサービング](https://qiita.com/taka_yayoi/items/b5a5f83beb4c532cf921)

# データ

このノートブックで使用するデータは以下のDeltaテーブルで構成されています。

- `user_profile`: `user_id`の値と静的なプロファイルを含みます。
- `item_profile`: `item_id`の値と静的なプロファイルを含みます。
- `user_item_interaction`: ユーザーがアイテムとインタラクションしたイベントを含みます。このテーブルはモデルを構築、評価するために3つのDeltaテーブル`train`、`validation`、`test`へランダムに分割されます。

このデータフォーマットは、以下の例のようにレコメンデーション問題では一般的なものです。

- 広告のレコメンデーションにおいては、アイテムは広告であり、ユーザーとアイテムのインタラクションはユーザーが広告をクリックした記録となります。
- オンラインショッピングのレコメンデーションにおいては、アイテムは商品であり、ユーザーとアイテムのインタラクションはユーザーのレビューあるいは注文履歴のレコードとなります。

このノートブックを皆様のデータセットに適用する際は、皆様のデータをDeltaテーブルとして保存し、テーブル名と格納場所を指定するだけで大丈夫です。データロードのためのコードの大部分を再利用できます。

詳細は以下のデータセット作成ノートブックを参照ください。

## データセット作成、保存のためのノートブック

https://docs.databricks.com/_static/notebooks/recommender-dataset.html

# モデル

このノートブックではワイドアンドディープモデル([論文](https://arxiv.org/abs/1606.07792)|[tensorflow実装](https://www.tensorflow.org/api_docs/python/tf/estimator/DNNLinearCombinedClassifier))を使用します。これは、記憶と汎化の両方を取り扱うために、ワイドな線形モデルとディープニューラルネットワークを組み合わせた人気のあるモデルです。

このモデルは、レコメンデーション問題や一般的な機械学習パイプラインに対する数多くのディープラーニングモデルの一例に過ぎません。ここでは、ワークフローの構築手順を説明することにフォーカスしています。ご自身のユースケースに適した異なるモデルに差し替えることや、より優れた評価メトリクスのためにモデルをチューニングすることができます。

## レコメンデーションシステムにおけるワイド&ディープモデルの構築、サービングのためのノートブック

https://docs.databricks.com/_static/notebooks/recommender-main.html

# 本書でカバーされていないトピック

このノートブックでは、レコメンデーションシステムをどのように実装するのかを説明することにフォーカスしているので、以下のステージはカバーされていません。これらのステージはワークフローの図でグレーのブロックとして表現されています。

1. データ収集と探索的データ分析。[データガイド](https://docs.databricks.com/data/index.html)をご覧ください。
1. 特徴量エンジニアリング。特徴量エンジニアリングはレコメンデーションシステムにおける重要なパートであり、このトピックに関する多くの情報を利用することができます。このノートブックでは、ユーザーとアイテムのインタラクションを含む整理されたデータセットを想定しています。このノートブックで使用されたデータセットの詳細については、[データ](#データ)を参照ください。特徴量エンジニアリングの詳細については以下のリソースを参照ください。
    - レコメンデーションシステムにおける特徴量エンジニアリングのサンプルを示している[Personalizing the Customer Experience with Recommendations](https://databricks.com/blog/2020/12/18/personalizing-the-customer-experience-with-recommendations.html)のソリューションアクセラレーター。
    - scikit-learn、MLlib、転移学習による特徴量エンジニアリングのサンプルの[データの前処理](https://docs.databricks.com/applications/machine-learning/preprocess-data/index.html)。
1. モデルチューニング。モデルチューニングには、特徴量エンジニアリング、モデル構造、モデルのハイパーパラメーター、モデルのパフォーマンスを改善するためのデータ収集ステージのアップデートを含む既存のパイプラインのコードの改訂が関係します。Databricksにおけるモデルチューニングのツールに関しては、[Hyperparameter tuning](https://docs.databricks.com/applications/machine-learning/automl-hyperparam-tuning/index.html)をご覧ください。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)