クイックスタート
CLI のインストール
pairecmd を使用して、プロジェクトを迅速に作成できます。PAI-Rec コンソールからバージョン 2 を使用することを推奨します。
バージョン 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 を変更できます。
DOCKER?=docker
SOURCE_DIR=src
BIN_NAME=pairec_demo
REGISTRY?=registry.cn-beijing.cr.aliyuncs.com
DOCKER_TAG?=0.0.1
TEMP_DIR_SERVER:=$(shell mktemp -d)
.PHONY: setup build clean
setup:
go mod vendor
build:
cd ${SOURCE_DIR}; CGO_ENABLED=0 GOARCH=amd64 GOOS=linux ${BUILD} -o ${BIN_NAME} .
cd ${SOURCE_DIR}; mv ${BIN_NAME} ../
release:
cd ${SOURCE_DIR}; CGO_ENABLED=0 GOARCH=amd64 GOOS=linux ${BUILD} -o ${BIN_NAME} .
cd ${SOURCE_DIR}; mv ${BIN_NAME} ${TEMP_DIR_SERVER}/appd
cp docker/Dockerfile ${TEMP_DIR_SERVER}/
cp conf/config.json.production ${TEMP_DIR_SERVER}/config.json
cd ${TEMP_DIR_SERVER} && ${DOCKER} build -t ${REGISTRY}/${BIN_NAME}:${DOCKER_TAG} .
${DOCKER} push ${REGISTRY}/${BIN_NAME}:${DOCKER_TAG}
clean:
-rm -rf ${BIN_NAME}
注:Alibaba Cloud Container Registry を使用して個人向けイメージサービスを有効化し、BIN_NAME で指定されたイメージリポジトリを作成できます。
プロジェクトの実行
pairec-demo ディレクトリに移動し、次のコマンドを実行してサービスを開始します。サービスはログをターミナルに出力します。
config パラメーターを使用して、設定ファイルのパスを指定します。
go run src/main.go --config=conf/config.json.production --alsologtostderr
別のターミナルで次のコマンドを実行して API をテストできます:
curl -v http://localhost:8000/api/rec/feed -d '{"uid":"76295990", "size":10, "scene_id":"home_feed"}'
構成の詳細については、「エンジン設定」をご参照ください。
API リファレンス
生成されたプロジェクトには、レコメンデーション API が含まれています。実装の詳細については、controller/feed.go をご参照ください。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 |
リクエストの一意の識別子。このパラメーターを省略すると、PAI-Rec エンジンは自動的に 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 パラメーターを一緒に使用できます。
レスポンス本文
|
パラメーター |
説明 |
型 |
例 |
|
code |
ビジネスステータスコード。 |
int |
200 |
|
msg |
ビジネスメッセージ。 |
string |
success |
|
request_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"}] |
次の表は、items 配列内の各オブジェクトのフィールドについて説明しています。
|
パラメーター |
説明 |
型 |
例 |
|
item_id |
レコメンドされたアイテムの ID。 |
string |
3v5RE7417j7R |
|
retrieve_id |
リコールソースの ID。 |
string |
u2i_recall |
|
score |
レコメンデーションスコア。 |
float |
0.45 |
|
extra |
カスタム出力フィールド。カスタムフィールドを指定しない場合、API はこのフィールドを返しません。 |
json map |
以下のカスタム出力フィールドの説明をご参照ください。 |
エラーコード
|
コード |
説明 |
msg |
|
200 |
リクエストは成功しました。 |
success |
|
299 |
API が返したアイテム数が不足しています。 |
items size not enough |
|
400 |
パラメーターエラーが発生しました。詳細は |
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:で始まるフィールドは、対応するアイテムプロパティを出力します。プロパティが存在しない場合、API はnullを返します。 -
score:で始まるフィールドは、モデルから返されたスコアを出力します。 -
score:*はすべてのモデルスコアを出力します。API はスコアをalgo_scoresフィールドに配置します。
よくある質問
再ランキングのためのアイテムリストの受け渡し
アイテムリストを item_list パラメーターで渡します。次に、エンジン設定でコンテキストアイテムの再現を設定し、PAI-Rec エンジンが item_list パラメーターからアイテムリストを読み取れるようにします。
レポートのためのクライアントサイドトラッキングの実装
レコメンデーション API は request_id と experiment_id フィールドを返します。クライアントでこれら 2 つのフィールドをログに記録する必要があります。最低でも、インプレッションおよびクリック行動ログに含めてください。再生時間、カート追加イベント、購入などの他の行動ログにもこれらのフィールドを含めることを推奨します。他の行動ログからこれらのフィールドを省略すると、メトリックの精度に影響を与える可能性があります。「データ登録とフィールド設定」の SQL 例を参照して、オフライン実験レポートのソーステーブルを生成します。次に、そのテーブルを A/B テストプラットフォームに登録し、カスタムメトリックを設定して、レポートデータを計算します。A/B テストプラットフォームがレポートデータを計算した後、「実験メトリックレポート」で実験レポートを表示できます。