はじめに
インストールコマンド
`pairecmd` を使用してプロジェクトを迅速に作成できます。バージョン 2 は [PAI-Rec コンソール] をサポートしています。コンソールの使用をお勧めします。
バージョン 2
ダウンロードリンク:
ダウンロードが完了したら、次のコマンドを実行して、UNIX 系システムで実行可能ファイルの権限を設定します。chmod +x pairecmd
プロジェクトの作成
`pairec-demo` という名前のプロジェクトを作成するには、次のコマンドを実行します。このコマンドは、現在のディレクトリにプロジェクトコードを含む `pairec-demo` フォルダを生成します。
./pairecmdmac project --name pairec-demo生成されたフォルダは、次の構造になっています。
pairec-demo
├── Makefile
├── conf
│ └── config.json.production
├── docker
│ └── Dockerfile
├── go.mod
└── src
├── controller
│ └── feed.go
└── main.go`pairec-demo` フォルダに移動し、次のコマンドを実行します。
go mod tidyプロジェクトのコンパイルとパッケージ化
プロジェクトには Makefile が用意されています。プロジェクトをコンパイルするには、次のコマンドを実行します。
make && make buildエラーが発生した場合は、最初に次のコマンドを実行します。
go mod tidyプロジェクトをイメージにパッケージ化するには、次のコマンドを実行します。
make release必要に応じて Makefile を変更できます。

注: [Alibaba Cloud Container Registry] を使用して個人用イメージをアクティブ化し、 `BIN_NAME` で指定された [イメージリポジトリ] を作成できます。
プロジェクトの実行
`pairec-demo` フォルダに移動し、次のコマンドを実行してサービスを開始します。ログは端末に出力されます。
`config` パラメータを使用して、構成ファイルのパスを指定します。
go run src/main.go --config=conf/config.json.production --alsologtostderrAPI をテストするには、別の端末を開き、次のコマンドを実行します。
curl -v http://localhost:8000/api/rec/feed -d '{"uid":"76295990", "size":10, "scene_id":"home_feed"}'`config` パラメータの詳細については、「エンジン構成」をご参照ください。
API テスト
生成されたプロジェクトには、組み込みのレコメンデーション API が含まれています。実装の詳細については、 `controller/feed.go` ファイルを参照してください。API は次のように定義されています。
API 名
/api/rec/feed
リクエストパラメーター
パラメーター | 説明 | タイプ | 必須 | 例 |
uid | ユーザー ID。 | string | はい | "1000079" |
size | 取得するアイテムの数。 | integer | はい | 10 |
scene_id | シナリオ ID。 | String | はい | home_feed |
features | コンテキストフィーチャ。 | json map | いいえ | {"age":20, "sex":"male"} |
complex_type_features | 複雑なタイプのコンテキストフィーチャ。モデルサービスに送信されるリクエストに型情報を含めるには、このパラメータを設定します。 | json array | いいえ | [{"name":"age", "type":"int", "values":20}, {"name":"sex", "values":"male", "type":"string"}] |
item_id | 類似性レコメンデーションのアイテム ID。 | string | いいえ | 248791390 |
item_list | リコール用のカスタムリスト。 | json array | いいえ | [{"item_id":"1111", "score":1},{"item_id":"222", "score":0.95}] |
debug | デバッグモードを有効にして、より多くのログを出力するかどうかを指定します。 | bool | いいえ | true |
request_id | リクエストの一意の ID。このパラメータを指定しない場合、PAI-Rec エンジンによって自動的に生成されます。このパラメータを指定した場合、その値がリクエスト ID として使用されます。 | string | いいえ | "c46c3f5e-6b32-4b5c-8aac-59a319941248" |
API を介して渡す [バッチ] リコールデータがある場合は、 `item_list` パラメータに割り当てます。 `item_list` パラメータは、各アイテムがマップオブジェクトである配列です。各アイテムには、アイテム ID を指定する `item_id` フィールドが含まれている必要があります。他のすべてのフィールドはオプションです。アイテムに `score` フィールドが含まれている場合、その値はリコールスコアとして使用されます。他のすべてのフィールドは、アイテム [プロパティ] として処理されます。
complex_type_features
複雑なタイプのコンテキスト [フィーチャ] は、配列として渡す必要があります。各 [要素] には、次の情報が含まれています。
名前 | 説明 | 例 |
name | コンテキスト [フィーチャ] の名前。 | age |
type | コンテキスト [フィーチャ] のタイプ。 | int |
values | コンテキスト [フィーチャ] の値。特定の値、配列、マップなど、さまざまなタイプを設定できます。 | 20 |
例:
単一の値を渡す:
[{"name":"age", "type":"int", "values":20}, {"name":"sex", "values":"male", "type":"string"}]配列を渡す:
[{"name":"list_features", "type":"list<int>", "values":[1,2,3]}]マップを渡す:
[{"name":"map_features", "type":"map<int,int>", "values":{"1":10,"2":20,"3":30}}]、または[{"name":"map_features", "type":"map<int,int>", "values":{"1":"10","2":"20","3":"30"}}],
`type` パラメータは、次のタイプをサポートしています: int、 int64、 float、 double、 string、 list<int> 、 list<int64> 、 list<float>、 list<double>、 list<string>、 map<int,int>、 map<int,int64>、 map<int,float>、 map<int,double>、 map<int,string>、 map<string,int>、 map<string,int64>、 map<string,float>、 map<string,double>、 map<string,string>、 map<int64,int>、 map<int64,int64>、map<int64,float>、 map<int64,double>、 map<int64,string>。
`complex_type_features` パラメータと `features` パラメータは同時に使用できます。
API レスポンス
名前 | 説明 | タイプ | 例 |
code | [API 呼び出し] で返されるビジネスコード。 | int | 200 |
msg | ビジネス情報。 | string | success |
request_id | [リクエスト] の一意の ID。 | string | e332fe9c-7d99-45a8-a047-bc7ec33d07f6 |
size | 返される推奨アイテムの数。 | int | 10 |
experiment_id | 実験 ID。A/B テストが実行されていない場合は、空の文字列が返されます。 | string | ER2_L1#EG1#E2 |
items | 推奨アイテムのリスト。 | json array | [{"item_id":"248791390","score":0.9991594902203332,"retrieve_id":"mock_recall"}] |
次の表は、アイテムのパラメータについて説明しています。
名前 | 説明 | タイプ | 例 |
item_id | 推奨アイテムの ID。 | string | 3v5RE7417j7R |
retrieve_id | リコール [ソース] の ID。 | string | u2i_recall |
score | 推奨スコア。 | float | 0.45 |
extra | カスタム出力フィールド。指定されていない場合は返されません。 | json map | 詳細については、カスタム出力フィールドの説明を参照してください。 |
エラーコード
エラーコード | 説明 | msg |
200 | [API 呼び出し] は成功しました。 | success |
299 | 返されたアイテムの数が不十分です。 | items size not enough |
400 | パラメータエラーが発生しました。 `msg` フィールドの説明は、エラの種類によって異なります。 | uid not empty or unexpected end of JSON input |
500 | [サーバーエラー] が発生しました。[HTTP ステータスコード] が返されます。 |
リクエストサンプル
curl -v http://host/api/rec/feed -d '{"uid":"76295990", "size":10, "scene_id":"home_feed"}'レスポンスデータ
{
"code":200,
"msg":"success",
"request_id":"e332fe9c-7d99-45a8-a047-bc7ec33d07f6",
"size":10,
"experiment_id":"",
"items":[
{
"item_id":"248791390",
"score":0.9991594902203332,
"retrieve_id":"mock_recall"
},
...
]
}カスタムフィールドを出力する
[デフォルト] では、各アイテムに対して `item_id`、 `retrieve_id`、および `score` フィールドが返されます。アイテム [プロパティ] やモデルスコアなどの追加のカスタムフィールドを出力するには、 `SceneConfs` で特定のシナリオの出力フィールドをカスタマイズします。これを行うには、 `OutputFields` に [構成] を定義します。API は、カスタムフィールドを `extra` フィールドに返します。
次の [コード] は、[構成] の例を示しています。
"SceneConfs": {
"${scene_name}": {
"default": {
"RecallNames": [
"collaborative_filter"
],
"OutputFields": [
"item:type",
"item:age",
"score:*",
"score:model_v1_ctr"
]
}
}
}`item:` で始まるフィールドは、対応するアイテム [プロパティ] を出力します。 [プロパティ] が存在しない場合は、 `null` が返されます。
`score:` で始まるフィールドは、モデルによって返されたスコアを出力します。
`score:*` はすべてのモデルスコアを出力します。スコアは `algo_scores` に配置されます。
よくある質問
Q: レコメンデーション API を介してアイテムリストを渡して再ソートするにはどうすればよいですか?
回答: `item_list` API パラメーターを使用してアイテムリストを渡すことができます。次に、エンジン構成で コンテキストアイテムリコール (ContextItemRecall) を設定します。この構成により、PAI-Rec エンジンは `item_list` パラメーターからアイテムリストを読み取ることができます。
Q: PAI-Rec データを記録し、実験レポートを使用するためにクライアントをインストルメントするにはどうすればよいですか?
回答: レコメンデーション API は `request_id` と `experiment_id` の 2 つのフィールドを返します。これらのフィールドを記録するためにクライアントをインストルメントする必要があります。最低でも、インプレッションとクリックの動作ログにこれらのフィールドを含める必要があります。また、再生時間、カートへの追加操作、購入などの他の動作ログに含めることも推奨します。これらの他の動作がインストルメントされていない場合、パフォーマンス統計に影響が及ぶ可能性があります。詳細については、「データ登録とフィールド構成」の SQL ユースケースをご参照ください。オフラインの「実験レポートソーステーブル」を生成し、AB テストプラットフォームに登録して、カスタムメトリック を構成できます。レポートデータが計算された後、「実験メトリクスレポート」で実験レポートを表示できます。