Recommend HQ 如何運作
Recommend HQ 使用機器學習演算法,從使用者提供的資料集中,訓練出模型。使用者可以自行選擇演算法,並自行或使用 Recommend HQ 提供的演算法參數來訓練模型。隨後使用 Recommend HQ 來部署訓練好的模型,產生推薦API的呼叫點,隨後呼叫推薦API即可取得推薦結果。
隨著資料集的更新,使用者可能會需要定期重新訓練並且部署新的模型。
使用流程
Recommend HQ 的使用流程如下:
- 上傳資料集 (Dataset)
- 使用者資料 (User Metadata)
- 商品資料 (Item Metadata)
- 事件資料 (Event Log)
- 建立專案 (Project)
- 選擇專案目標 (Target Event)
- 設定使用資料集 (Dataset)
- 設定演算法 (Algorithm)
- 訓練模型 (Model)
- 訓練模型 (Training)
- 驗證模型 (Evaluation)
- 部署模型 (Deployment)
- 使用推薦系統 (Recommendation)
- 實時推薦 (API)
- 批次推薦 (Batch)
建立與匯入資料集 (Dataset)
資料集中的每一筆資料包含該筆資料的ID與其相關屬性(attribute),開發者可以自行定義每一個屬性的資料型態,也可由系統自行判斷。
Recommend HQ 需要使用三種資料集來訓練推薦模型:
使用者資料集 (User Dataset)
每一個使用者ID與其屬性 (attribute),如:
{
"user_id": "1",
"attributes": {
"gender": "female",
"tags": ["active", "young"],
"average_spending": 1500,
"last_login_ts": 1234567890
}
}
商品資料集 (Item Dataset)
每一個商品ID與其屬性 (attribute),如:
{
"item_id": "2",
"attributes": {
"title": "Toy Story",
"genres": [
"Adventure",
"Animation",
"Children",
"Comedy",
"Fantasy"
]
}
}
為一筆商品資料集中的商品資料。
事件資料集 (Event Dataset)
互動紀錄資料集的每一筆資料,需含有事件ID、參與互動的使用者ID、商品ID、事件類型、事件權重、及事件發生時間,每個事件也能有對應於該事件的屬性,如:
{
"event_id": "1_2_964982703",
"user_id": "1",
"item_id": "2",
"ts": 964982703000,
"event_type": "rating",
"event_value": 4.0,
"attributes": {
"rating": 4.0,
"module": "sale"
}
}
為一筆事件資料集中的事件紀錄。
建立專案與演算法 (Project and Algorithm)
專案 (Project)
每個專案對應一組產品上的推薦功能,建立專案時需設定以下資料:
- 使用者資料集id (user_dataset_id)
- 商品資料集id (item_dataset_id)
- 事件資料集id (event_dataset_id)
- 專案類別 (project_type)
- 目標事件類型 (event_type)
其中,專案類型 (project_type) 決定能使用哪些演算法,及訓練出的推薦模型之功能,目前支援兩種專案類型:
- 對使用者推薦商品 (
RECOMMEND_ITEMS_TO_USER
) - 對商品推薦商品 (
RECOMMEND_ITEMS_TO_ITEM
)
目標事件類型(event_type)則決定訓練模型時,將哪些事件記錄作為正向訓練資料。
演算法 (Algorithm)
在單一專案下,可建立一個或多個演算法,並且選取一個演算法訓練模型。對每個演算法,開發者可自由設定其超參數 (hyperparameters),亦可由系統自動調整。
目前不同專案類型支援的演算法如下:
對使用者推薦商品 (RECOMMEND_ITEMS_TO_USER
)
G1
: 基於 collaborative filtering 概念的深度類神經網路的一種實作,作為第一階段產生候選答案使用。G2
: 結合多種推薦演算法,同時考慮點擊紀錄與使用者、商品屬性的實作,能更好的支援冷開始,作為第一階段產生候選答案使用。RU1
:考慮使用者屬性、商品屬性、及其互動紀錄訓練的排序模型,作為第二階段的排序使用。
對商品推薦商品 (RECOMMEND_ITEMS_TO_ITEM
)
G1
: 基於 collaborative filtering 概念的深度類神經網路的一種實作,作為第一階段產生候選答案使用。G2
: 結合多種推薦演算法,同時考慮點擊紀錄與使用者、商品屬性的實作,能更好的支援冷開始,作為第一階段產生候選答案使用。RI1
:考慮使用者屬性、商品屬性、及其互動紀錄訓練的排序模型,作為第二階段的排序使用。
訓練及部署模型 (Train and Deploy Model)
訓練模型
開發者選定一個專案和一個專案下的演算法,交送訓練模型的工作,根據資料集的大小,需要等待10~300分鐘來訓練一個模型。當模型訓練完成後,可使用該模型id對模型進行後續的部署。同一個專案下可存在多個模型,但同一時間只能有一個模型被部署 (上線狀態且可被使用)。
部署模型
開發者選定一個專案和一個專案下的模型, 交送部署模型的做作,根據資料集的大小,需要等待10~120分鐘來部署模型,部署完成後,即可透過推薦API來取得推薦結果。
取得推薦結果 (Recommendation)
每個專案的會有專屬的推薦API網址:
https://{PROJECT_ENDPOINT_ID}.serving.raas.kklab.com
不同的專案類型可透過不同的路徑來取得推薦結果,以對使用者推薦商品為例:
curl --request POST 'http://project-abcdefg-ns-abcdefg.serving.raas.kklab.com/recommend-items-to-user' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZXMiOlsiL2xpc3QtcHJvamVjdHMiXSwiaWF0IjoxNjI0MzQ5NzE3fQ.0fGy-BZVM_If8OTYF6hAbojlok3xi4Oy9SbT3UCQH2Q' \
--header 'APIKey: THTIfPMmHAoYFD2bmuDt' \
--header 'Content-Type: application/json' \
--data-raw '{
"user_id": "2",
"attributes": [
"title",
"genres"
],
"limit": 10
}'
import json
import requests
from pprint import pprint
headers = create_headers(scopes=["/recommend-items-to-user"])
url = "http://project-abcdefg-ns-abcdefg.serving.raas.kklab.com/recommend-items-to-user"
data={
"user_id": "2",
"attributes": [
"title",
"genres"
],
"limit": 10
}
response = requests.request("POST", url, headers=headers, data=json.dumps(data))
pprint(response.json())
可對 user_id 2
取得10筆推薦結果。