このトピックでは、PAI-Rec ベースのレコメンデーションサービスを迅速に構築するための docker-compose.yaml ファイルを提供します。 これにより、PAI-Rec が提供する機能をすばやく理解できます。
前提条件
Docker Engine と Docker Compose がインストールされていること。これらは、構築されたレコメンデーション サービスを実行するために必要です。
Docker Engine のインストール方法の詳細については、「Docker Engine のインストール」をご参照ください。 Docker Compose のインストール方法の詳細については、「Docker Compose のインストールの概要」をご参照ください。
テーマ
1. PAI-Rec が提供するサービスをテストする
2. リコール、露出ブロック、特徴量の読み込みなどのプロセスを組み込んだ PAI-Rec ベースのレコメンデーション サービスを構築する
3. レコメンデーション API をデバッグし、サービスログを表示する
レコメンデーション サービスを実行する
Web サイトにアクセスして、必要なファイルをダウンロードできます。
サービスを実行するには、次のコマンドを実行します。
# ファイルを解凍します。
tar zxvf pairec-demo-test.tar.gz
cd pairec-demo-test
# サービスを開始します。
docker-compose -f docker-compose.yaml up -ddocker ps コマンドを実行します。

出力は、ポート 8000 経由で /api/rec/feed インターフェースを呼び出してサービスにアクセスできることを示しています。インターフェースの呼び出し方法の詳細については、「インターフェース テスト」をご参照ください。
サービスをテストする
/api/rec/feed インターフェースをテストするには、次のコマンドを実行します。
curl -v http://127.0.0.1:8000/api/rec/feed -d '{"uid":"1000000077", "size":10, "scene_id":"feed"}'サービスのログをクエリするには、次のコマンドを実行します。
docker logs -f pairecユーザーの特徴量とアイテムの特徴量が期待どおりに読み込まれているかどうか、およびモデルスコアが期待どおりかどうかを確認できるサービスログをクエリするには、次のコマンドを実行します。 debug パラメーターがコードに追加されています。
curl -v http://127.0.0.1:8000/api/rec/feed -d '{"uid":"1000000077", "size":10, "scene_id":"feed", "debug":true}'サービスを停止します。
docker-compose -f docker-compose.yaml down仕組み
この例では、MySQL がストレージエンジンとして使用されています。本番サービスでは、ApsaraDB for Redis、Hologres、Tablestore、iGraph などの分散ストレージエンジンを使用することをお勧めします。 MySQL の仕組みの詳細については、docker-compose.yaml ファイルをご参照ください。
全体的な構成の詳細については、config.json ファイルをご参照ください。
テーブルデータ
pairec_demo_test.sql ファイルは、デモデータとテーブルの作成に使用される SQL 文を提供します。
u2i_recall: リコールデータを含む U2I テーブル。データは、U2I リコールメソッドを使用して取得されます。
user_expose_history: 露出ブロックテーブル。インターフェースによって返されたデータは、露出ブロックテーブルに書き込まれます。次回インターフェースを呼び出すと、推奨アイテムのデータは繰り返し返されません。
user_feature: ユーザー特徴量テーブル。ユーザー特徴量が読み込まれます。これらはランキングモデルで使用されます。
テーブルの構造またはデータをクエリするには、次のコマンドを実行します。
# MySQL Docker コンテナーにログインします。
docker exec -it pairec-mysql bash
# MySQL にログインします。
mysql -uroot -ptest
# 次のデータベースを使用します。
use pairec_demo_test
# テーブルを表示します。
show tables;データソースの構成
pairec-mysql はカスタムデータソース名です。
"MysqlConfs": {
"pairec-mysql" :{
"DSN": "root:test@tcp(db:3306)/pairec_demo_test?multiStatements=true"
}
}リコールの構成
"RecallConfs": [
{
"Name": "u2i_recall",
"RecallType": "UserCustomRecall",
"RecallCount": 500,
"DaoConf" :{
"AdapterType": "mysql",
"MysqlName": "pairec-mysql",
"MysqlTable": "u2i_recall"
}
}
]feed はカスタムシナリオの名前です。
RecallNames パラメーターは、複数タイプのrecallの名前を指定します。この例では、値は u2i_recall に設定されています。
"SceneConfs": {
"feed": {
"default": {
"RecallNames": ["u2i_recall"]
}
}
}フィルターの構成
この例では、露出ブロックが構成されています。
露出ブロックの構成は、リコール構成に似ています。 FilterConfs はフィルター構成を指定します。 FilterNames パラメーターは、シナリオに基づくフィルターポリシーを指定します。特定のシナリオは指定されていません。値 default が使用され、フィルターポリシーがすべてのシナリオに適用されることを示します。
"FilterConfs": [
{
"Name":"User2ItemExposureFilter",
"FilterType":"User2ItemExposureFilter",
"WriteLog": true,
"DaoConf":{
"Adapter":"User2ItemExposureMysqlDao",
"AdapterType":"mysql",
"MysqlName": "pairec-mysql",
"MysqlTable": "user_expose_history"
}
}
],
"FilterNames": {
"default": [
"UniqueFilter",
"User2ItemExposureFilter"
]
}露出ブロックが有効かどうかを確認するには、次のコマンドを実行してインターフェースを複数回呼び出します。露出ブロックが有効な場合、呼び出しごとに出力は異なります。
curl -v http://127.0.0.1:8000/api/rec/feed -d '{"uid":"1000000077", "size":10, "scene_id":"feed"}'サービスログには、次の情報が含まれています。requestId=d440c298-3890-4a6c-91e3-9654c83cc72a event=User2ItemExposureFilter count=213 cost=5。 count は、露出ブロック後にフィルターされたアイテムの数を示します。 count パラメーターの値は、インターフェースを呼び出すたびに減少します。
特徴量の読み込み
アイテムスコアリングのために、ユーザー特徴量とアイテム特徴量を読み込む必要があります。 PAI-Rec は、特徴量構成を使用して特徴量データを効率的に読み込むことができます。詳細については、「特徴量の構成」をご参照ください。
"FeatureConfs": {
"feed": {
"AsynLoadFeature" : true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "mysql",
"MysqlName": "pairec-mysql",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "userid",
"MysqlTable": "user_feature",
"UserSelectFields":"*",
"FeatureStore":"user"
},
"Features" :[]
}
]
}
}関連情報
公式イメージを使用して PAI-Rec エンジンをデプロイする方法の詳細については、「PAI-Rec エンジンサービスのデプロイ」をご参照ください。
PAI-Rec エンジン開発のカスタムコードを作成し、プロジェクトをイメージとしてコンパイルおよびパッケージ化する方法の詳細については、「プロジェクトの作成」をご参照ください。
PAI-Rec エンジンの構成の詳細については、「エンジンの構成」をご参照ください。