Skip to content

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筆推薦結果。