共用方式為


內容和動作

重要

從 2023 年 9 月 20 日起,您將無法建立新的個人化工具資源。 個人化工具服務將於 2026 年 10 月 1 日淘汰。

個人化工具會透過學習您的應用程式在指定內容中應向使用者顯示的內容來運作。 內容和動作是您傳入個人化工具的兩個最重要資訊片段。 內容代表您所擁有關於目前使用者或系統狀態的資訊,而動作是要從中選擇的選項。

上下文

「內容」的資訊取決於每個應用程式和使用案例,但一般來說,可能包含的資訊如下:

  • 關於使用者的人口統計和設定檔資訊。
  • 從 HTTP 標頭中擷取的資訊 (例如,使用者代理程式),或衍生自 HTTP 資訊的資訊 (例如,根據 IP 位址的反向地理對應)。
  • 當前時間的相關資訊,例如星期幾、是否為週末、上午或下午、是否為假期等等。
  • 從行動應用程式擷取的資訊,例如位置、移動或電量。
  • 使用者行為的歷史彙總,例如這位使用者之前最常看的電影內容類型。
  • 系統狀態的相關資訊。

應用程式會負責從您可能擁有的相關資料庫、感應器和系統載入內容的相關資訊。 如果內容資訊不會變更,您便可以在應用程式中新增邏輯來快取這項資訊,再將資訊傳送給排名 API。

動作

動作代表選項清單。

請勿在為動作進行排名時傳入超過 50 個動作。 其可能每一次都是相同的 50 個動作,也可能會改變。 例如,如果您的電子商務應用程式有內含 10,000 個項目的產品目錄,您就可以使用推薦或篩選引擎來判斷客戶可能喜歡的前 40 個項目,然後用個人化工具來找出目前內容下會產生最大報酬的項目。

動作的範例

您傳送給排名 API 的動作取決於您要嘗試個人化的項目。

以下列出一些範例:

目的 動作
將要在新聞網站上選出的條目個人化。 每個動作都是潛在的新聞條目。
將廣告放在網站上最佳的位置。 每個動作都會是版面配置或用來建立廣告版面配置 (例如,在頂端、在右邊、小圖、大圖) 的規則。
在購物網站上顯示個人化的推薦項目排名。 每個動作都是特定的產品。
建議使用者介面項目,例如要套用至特定相片的篩選條件。 每個動作可能是不同的篩選條件。
為聊天 Bot 選擇要用來釐清使用者意圖或提出建議動作的回應。 每個動作都是如何解讀回應的選項。
選擇要在搜尋結果清單頂端顯示的項目 每個動作都是排名最高的幾個搜尋結果其中之一。

從用戶端應用程式載入動作

一般來說,動作中的特性可能來自內容管理系統、目錄和推薦系統。 應用程式會負責從您擁有的相關資料庫和系統載入動作的相關資訊。 如果動作不會變更或是每次都載入動作會對效能造成不必要的影響,您便可以在應用程式中新增邏輯來快取這項資訊。

防止動作進行排名

在某些情況下,您可能會有不想對使用者顯示的動作。 防止動作進行排名的最佳方式是將該動作新增至 [排除的動作] 清單,或者不要將其傳遞到 [排名要求]。

在某些情況下,您可能不希望預設將事件定型。 換句話說,您只想在符合特定條件時將事件定型。 例如,網頁的個人化部分位於摺疊下方 (使用者必須先捲動,才能與個人化內容互動)。 在此情況下,您將呈現整個頁面,但只有在使用者捲動且有機會與個人化內容互動時,才會將事件定型。 在這些情況下,您應該延遲事件啟用,以避免指派終端使用者沒有機會與其互動的預設獎勵 (和定型) 事件。

功能

內容和可能的動作都會使用特徵來描述。 這些特徵代表您認為在決策制定過程中對於將獎勵最大化來說很重要的所有資訊。 有個很好的起點是,假設您負責在每個時間戳記選取最佳動作,並詢問自己:「我需要哪些資訊,才能做出明智的決策? 我可以使用哪些資訊來描述內容和每個可能的動作?」。功能可以是廣泛,也可以針對某個項目。

個人化工具並未規定、限制或固定您可以為動作和內容傳送的特徵:

  • 一段時間後,您可能會新增和移除關於內容和動作的特性。 個人化工具會繼續從可用資訊來學習。
  • 對於類別特徵,不需要預先定義可能的值。
  • 對於數值特徵,不需要預先定義範圍。
  • 以底線 _ 開頭的特徵名稱將會遭到忽略。
  • 特徵清單可能很大 (數百個),但建議您從精簡的特徵集開始,並視需要進行擴充。
  • 動作特徵不一定會與內容特徵有任何相互關聯。
  • 要求中應省略無法使用的特徵。 如果特定特徵的值不適用於指定的要求,請針對此要求省略該特徵。
  • 避免使用 Null 值傳送特徵。 Null 值將被處理為值為 "null" 的字串,而這是不想要的。

特徵隨著時間的推移產生變化是正常且自然。 不過,請記住,個人化工具的機器學習模型會根據其看到的特徵進行調整。 如果您傳送包含所有新特徵的要求,個人化工具的模型將無法使用過去的事件來為目前事件選取最佳動作。 擁有「穩定」的特徵集 (具備週期性特徵) 將有助於提高個人化工具機器學習演算法的效能。

內容功能

  • 某些內容特徵可能只適用於某段時間。 例如,如果使用者登入線上雜貨店網站,內容將包含描述購買歷程記錄的特徵。 這些特徵將不適用於來賓使用者。
  • 至少必須有一個內容特徵。 個人化工具不支援空白內容。
  • 如果每個要求的內容特徵都相同,個人化工具將會選擇全域最佳動作。

動作特性

  • 並非所有動作都需要包含相同的特徵。 例如,在線上雜貨店案例中,微波爆米花將具備「烹煮時間」特徵,而黃瓜則不具備此特徵。
  • 特定動作識別碼的特性可能只存在一天,之後就無法取得。

範例:

以下是動作特徵的良好範例。 這些範例極大程度上會因為每個應用程式而有所不同。

  • 具有動作特徵的特性。 例如,是電影還是電視影集?
  • 關於使用者過去可能如何與此動作互動的特性。 例如,這部電影的觀看對象主要是人口統計資料 A 或 B 中的人,其通常不會播放超過一次。
  • 與使用者如何「看到」動作的特徵有關的特性。 例如,縮圖中顯示的電影海報是否包含臉部、車輛或景色?

支援的特性類型

個人化工具支援字串、數字和布林值類型的特性。 您的應用程式可能會使用字串特徵,但有一些例外狀況。

特徵類型如何影響個人化工具中的機器學習

  • 字串:對於字串類型,每個索引鍵/值 (特徵名稱、特徵值) 組合都會被視為 One-Hot 特徵 (例如,在機器學習模型中,類別:"Produce" 和類別:"Meat" 將在內部表示為不同特徵)。
  • 數值:只有當數字是應依比例影響個人化結果的範圍時,才會使用數值。 這會隨具體狀況而不同。 以數值單位為基礎,但不具線性意義的特徵 (例如年齡、溫度或身高) 最好編碼為類別字串。 例如,年齡可編碼為 "Age":"0-5", "Age":"6-10" 等等。高度可以儲存為 "Height": "<5'0", "Height": "5'0-5'4", "Height": "5'5-5'11", "Height":"6'0-6-4", "Height":">6'4"。
  • 布林值
  • 陣列:僅支援數值陣列。

功能工程

  • 對於不是量值的特徵,請使用類別和字串類型。
  • 請確定有足夠的特徵可促成個人化。 如需更加精確的針對性內容,就需要提供更多的特性。
  • 有各種「密度」的特徵。 如果有許多項目群組到少數幾個貯體,便代表該特性的「密度」夠高。 例如,您可以將數千部影片分類為「長時間」(長度超過 5 分鐘) 和「短時間」(長度不到 5 分鐘)。 這會是「密度非常高」的特性。 另一方面,您也可以讓同樣的數千個項目具有稱為「標題」的屬性,如此一來,這些項目幾乎就不會有彼此相同的值。 這種特性的密度就非常低 (或是「疏鬆」)。

具有高密度的特徵,可協助個人化工具不斷類推地學習每一個項目。 但是,如果特徵數量不多且密度過高,個人化工具就會嘗試在只有幾個貯體可供選擇的情況下,精確地鎖定內容。

特徵設計和格式設定的常見問題

  • 傳送具有高基數的特徵。 具有不一定會在許多事件之間重複的唯一值的特徵。 例如,個人特有的 PII (例如,姓名、電話號碼、信用卡號碼、IP 位址) 不應與個人化工具搭配使用。
  • 傳送使用者識別碼:對於大量使用者而言,此資訊不太可能與個人化工具學習來將平均獎勵分數最大化有關。 傳送使用者識別碼 (即使不是 PII) 很可能會對模型增加更多雜訊,因此不建議這樣做。
  • 傳送很少多次發生的唯一值。 建議您將特徵貯存到更高的詳細資料層級。 例如,具有 "Context.TimeStamp.Day":"Monday""Context.TimeStamp.Hour":13 等特徵可能很有用,因為分別只有 7 和 24 個唯一值。 不過,"Context.TimeStamp":"1985-04-12T23:20:50.52Z" 非常精確,而且具備非常大量的唯一值,因此,個人化工具很難從中學習。

改善特性集合

執行特徵評估作業來分析使用者行為。 這麼做可讓您查看過去的資料,以了解哪些特性對正面報酬的貢獻較大,哪些特性的貢獻較少。 您可以了解哪些特性有幫助,然後由您和您的應用程式尋找更好的特性來傳送給個人化工具,更進一步地改善結果。

使用人工智慧和 Azure AI 服務來擴大特性集合

人工智慧和已可運行的 Azure AI 服務對個人化工具很有幫助。

藉由使用人工智慧服務來前置處理您的項目,您就可以自動擷取出可能與個人化有所關聯的資訊。

例如:

  • 您可以透過影片索引器來執行電影檔案,以擷取場景元素、文字、情緒和其他眾多屬性。 然後讓這些屬性變得更密集,以反映原始項目的中繼資料所沒有的特徵。
  • 可以透過偵測物件來執行影像,透過情緒來執行臉部等等。
  • 透過擷取實體和情緒、以及使用 Bing 知識圖表擴充實體,來擴增文字中的資訊。

您還可以使用其他幾個 Azure AI 服務,例如

使用內嵌作為特徵

來自各種機器學習模型的內嵌已證明是個人化工具的情感特徵

  • 從大型語言模型內嵌
  • 從 Azure AI 視覺模型進行內嵌

命名空間

您可以選擇性地使用命名空間來組織特徵 (與內容和動作特徵相關)。 命名空間可用來依主題、來源或任何其他在您應用程式中有意義的群組來分組特徵。 您判斷是否要使用命名空間,以及這些命名空間應當是什麼內容。 命名空間可將特徵組織成不同的集合,以及區分具有類似名稱的特徵。 您可以將命名空間視為新增至特徵名稱的「前置詞」。 命名空間不應該是巢狀。

以下是應用程式所用特性命名空間的範例:

  • User_Profile_from_CRM
  • Time
  • Mobile_Device_Info
  • http_user_agent
  • VideoResolution
  • DeviceInfo
  • 天氣
  • Product_Recommendation_Ratings
  • current_time
  • NewsArticle_TextAnalytics

命名空間命名慣例和指導方針

  • 命名空間不應該是巢狀。
  • 命名空間必須以唯一的 ASCII 字元開頭 (建議您使用以 UTF-8 為基礎的名稱命名空間)。 目前,第一個字元相同的命名空間可能導致衝突,因此,強烈建議您的命名空間以彼此不同的字元開頭。
  • 命名空間區分大小寫。 例如,userUser 會被視為不同的命名空間。
  • 特徵名稱可以在命名空間之間重複,而且將會被視為不同的特徵
  • 無法使用下列字元:代碼 < 32 (不可列印)、32 (空格)、58 (冒號)、124 (直立線符號) 和 126–140。
  • 所有以底線 _ 開頭的命名空間將會遭到忽略。

JSON 範例

動作

在呼叫排名時,您會傳送多個動作以供選擇:

JSON 物件可包含巢狀 JSON 物件和簡單屬性/值。 陣列項目是數值時,才可以包含陣列。

{
    "actions": [
    {
      "id": "pasta",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "medium",
          "grams": [400,800]
        },
        {
          "nutritionLevel": 5,
          "cuisine": "italian"
        }
      ]
    },
    {
      "id": "ice cream",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none",
          "grams": [150, 300, 450]
        },
        {
          "nutritionalLevel": 2
        }
      ]
    },
    {
      "id": "juice",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none",
          "grams": [300, 600, 900]
        },
        {
          "nutritionLevel": 5
        },
        {
          "drink": true
        }
      ]
    },
    {
      "id": "salad",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "low",
          "grams": [300, 600]
        },
        {
          "nutritionLevel": 8
        }
      ]
    }
  ]
}

上下文

內容會以傳送給排名 API 的 JSON 物件來表示:

JSON 物件可包含巢狀 JSON 物件和簡單屬性/值。 陣列項目是數值時,才可以包含陣列。

{
    "contextFeatures": [
        {
            "state": {
                "timeOfDay": "noon",
                "weather": "sunny"
            }
        },
        {
            "device": {
                "mobile":true,
                "Windows":true,
                "screensize": [1680,1050]
            }
        }
    ]
}

命名空間

在下列 JSON 中,userenvironmentdeviceactivity 都是命名空間。

注意

強烈建議您使用以 UTF-8 為基礎且以不同字母開頭的特徵命名空間名稱。 例如,userenvironmentdeviceactivityueda 開頭。 目前,第一個字元相同的命名空間可能導致衝突。

{
    "contextFeatures": [
        { 
            "user": {
                "profileType":"AnonymousUser",
                "Location": "New York, USA"
            }
        },
        {
            "environment": {
                "monthOfYear": "8",
                "timeOfDay": "Afternoon",
                "weather": "Sunny"
            }
        },
        {
            "device": {
                "mobile":true,
                "Windows":true
            }
        },
        {
            "activity" : {
                "itemsInCart": "3-5",
                "cartValue": "250-300",
                "appliedCoupon": true
            }
        }
    ]
}

下一步

增強式學習