內容和動作
重要
從 2023 年 9 月 20 日起,您將無法建立新的個人化工具資源。 個人化工具服務將于 2026 年 10 月 1 日淘汰。
個人化工具的運作方式是瞭解您的應用程式應該在指定內容中向使用者顯示的內容。 內容和動作是您傳入個人化工具的兩個最重要資訊片段。 內容 代表您目前使用者或系統狀態的相關資訊,而 動作 是要從中選擇的選項。
上下文
內容 的資訊取決於每個應用程式和使用案例,但通常可能包含下列資訊:
- 關於使用者的人口統計和設定檔資訊。
- 從 HTTP 標頭擷取的資訊,例如使用者代理程式,或衍生自 HTTP 資訊,例如根據 IP 位址的反向地理查閱。
- 目前時間的相關資訊,例如一周中的一天、週末或不是、早上或下午、假日季節或沒有等。
- 從行動應用程式擷取的資訊,例如位置、移動或電池計量。
- 使用者行為的歷史匯總 ,例如此使用者最常檢視的電影流派。
- 系統狀態的相關資訊。
您的應用程式負責從您可能擁有的相關資料庫、感應器和系統載入內容的相關資訊。 如果您的內容資訊未變更,您可以在應用程式中新增邏輯來快取這項資訊,再將它傳送至排名 API。
動作
動作代表選項清單。
當排名動作時,請勿傳送超過 50 個動作。 其可能每一次都是相同的 50 個動作,也可能會改變。 例如,如果您的電子商務應用程式有內含 10,000 個項目的產品目錄,您就可以使用推薦或篩選引擎來判斷客戶可能喜歡的前 40 個項目,然後用個人化工具來找出目前內容下會產生最大報酬的項目。
動作範例
您傳送至排名 API 的動作將取決於您嘗試個人化的動作。
以下列出一些範例:
目的 | 動作 |
---|---|
個人化哪些文章在新聞網站上醒目提示。 | 每個動作都是潛在的新聞文章。 |
優化網站上的廣告位置。 | 每個動作都會是版面配置或用來建立廣告版面配置 (例如,在頂端、在右邊、小圖、大圖) 的規則。 |
在購物網站上顯示建議專案的個人化排名。 | 每個動作都是特定的產品。 |
建議使用者介面元素,例如要套用至特定相片的篩選。 | 每個動作可能是不同的篩選準則。 |
選擇聊天機器人的回應來厘清使用者意圖或建議動作。 | 每個動作都是如何解譯回應的選項。 |
選擇要在搜尋結果清單頂端顯示的內容 | 每個動作都是前幾個搜尋結果之一。 |
從用戶端應用程式載入動作
動作的功能通常來自內容管理系統、目錄和推薦系統。 您的應用程式負責從您擁有的相關資料庫和系統載入動作的相關資訊。 如果您的動作不會變更或每次載入它們對效能造成不必要的影響,您可以在應用程式中新增邏輯以快取此資訊。
防止動作排名
在某些情況下,有一些您不想向使用者顯示的動作。 防止動作排名的最佳方式是將動作新增至 [排除動作 ] 清單,或未將它傳遞給排名要求。
在某些情況下,您可能不想要根據預設將事件定型。 換句話說,只有在符合特定條件時,才想要定型事件。 例如,網頁的個人化部分位於折迭下方(使用者必須先捲動,才能與個人化內容互動)。 在此情況下,您將呈現整個頁面,但只有在使用者捲動且有機會與個人化內容互動時,才會將事件定型。 在這些情況下,您應該延遲事件啟用,以避免指派終端使用者沒有機會與其互動的預設獎勵 (和定型) 事件。
功能
內容 和可能 動作 都會使用 功能 來描述。 這些功能代表您認為的所有資訊對於決策程式而言非常重要,以最大化獎勵。 有個很好的起點是,假設您負責在每個時間戳記選取最佳動作,並詢問自己:「我需要哪些資訊,才能做出明智的決策? 我可以使用哪些資訊來描述內容和每個可能的動作?」。功能可以是廣泛,也可以針對某個項目。
個人化工具不會規定、限制或修正您可以針對動作和內容傳送哪些功能:
- 經過一段時間,您可以新增和移除內容和動作的相關功能。 個人化工具會繼續從可用資訊中學習。
- 對於類別特徵,不需要預先定義可能的值。
- 對於數值特徵,不需要預先定義範圍。
- 將會忽略以底線
_
開頭的功能名稱。 - 功能清單可能很大(數百個),但我們建議從簡潔的功能集開始,並視需要擴充。
- 動作 功能可能與內容 功能沒有任何關聯 。
- 要求中應省略無法使用的特徵。 如果特定功能的值不適用於指定的要求,請省略此要求的功能。
- 避免傳送具有 Null 值的功能。 Null 值會以字串的形式處理,其值為 「null」,這是不想要的。
功能在一段時間後變更是可以和自然的。 不過,請記住,個人化工具的機器學習模型會根據所看到的功能進行調整。 如果您傳送包含所有新特徵的要求,個人化工具的模型將無法使用過去的事件來為目前事件選取最佳動作。 擁有「穩定」功能集(具有週期性功能)將有助於個人化工具機器學習演算法的效能。
內容功能
- 某些內容功能可能只提供一部分的時間。 例如,如果使用者登入線上雜貨店網站,內容將會包含描述購買歷程記錄的功能。 這些特徵將不適用於來賓使用者。
- 至少必須有一個內容功能。 個人化工具不支援空的內容。
- 如果每個要求的內容功能都相同,個人化工具會選擇全域最佳動作。
動作功能
- 並非所有動作都需要包含相同的功能。 例如,在線上雜貨店案例中,微波爆米花將具備「烹煮時間」特徵,而黃瓜則不具備此特徵。
- 特定動作識別碼的功能可能會有一天可用,但稍後無法使用。
範例:
以下是動作功能的良好範例。 這些會相依于每個應用程式。
- 具有動作特性的功能。 例如,它是電影還是電視連續劇?
- 過去使用者如何與這個動作互動的功能。 例如,這部電影大多由人口統計 A 或 B 中的人看到,通常只播放一次。
- 使用者 如何查看 動作之特性的功能。 例如,縮圖中顯示的電影海報是否包含臉部、汽車或景觀?
支援的功能類型
個人化工具支援字串、數值和布林型別的功能。 您的應用程式可能會使用字串特徵,但有一些例外狀況。
功能類型如何影響個人化工具中的機器學習
- 字串:對於字串類型,每個索引鍵/值(特徵名稱、特徵值)組合都會被視為 One-Hot 功能(例如,category:「Produce」and category:「Meat」 會在內部表示為機器學習模型中的不同功能)。
- 數值 :只有當數位是應該按比例影響個人化結果的大小時,才使用數值。 這是非常相依的案例。 以數值單位為基礎的特徵,但意義不是線性的,例如 Age、Temperature 或 Person Height ,最好編碼為類別字串。 例如 Age 可以編碼為 「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」。
- 布林值
- 陣列 僅支援數值陣列。
功能工程
- 針對非大小的特徵,使用類別和字串類型。
- 請確定有足夠的功能來推動個人化。 內容的目標越精確,就越需要更多功能。
- 有各種密度 的特性。 如果許多專案分組在幾個貯體中,則功能會 密集 。 例如,成千上萬的影片可以分類為 「Long」 (超過 5 分鐘長) 和 「Short」 (長度低於 5 分鐘)。 這是一個非常 密集 的功能。 另一方面,相同數千個專案可以有一個名為 「Title」 的屬性,這幾乎永遠不會有一個專案到另一個專案相同的值。 這是非常非密集或 疏鬆 的功能。
具有高密度功能可協助個人化工具推斷從某個專案到另一個專案的學習。 但是,如果只有少數功能,而且它們太密集,個人化工具會嘗試以只有少數貯體來精確定位內容,以便從中選擇。
功能設計和格式設定的常見問題
- 傳送具有高基數的功能。 具有不太可能在許多事件上重複之唯一值的功能。 例如,個人專屬的 PII(例如名稱、電話號碼、信用卡號碼、IP 位址)不應該與個人化工具搭配使用。
- 傳送使用者識別碼 與大量使用者,與個人化工具學習相關的資訊不太可能最大化平均獎勵分數。 傳送使用者識別碼(即使非 PII)可能會將更多雜訊新增至模型,不建議使用。
- 傳送很少會發生多次的唯一 值。 建議您將功能貯體至更高層級的詳細資料。 例如,具有 或
"Context.TimeStamp.Hour":13
等"Context.TimeStamp.Day":"Monday"
功能可能很有用,因為只有 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 為基礎的名稱命名空間)。 目前具有相同第一個字元的命名空間可能會導致衝突,因此強烈建議您讓命名空間以彼此不同的字元開頭。
- 命名空間會區分大小寫。 例如
user
,和User
會被視為不同的命名空間。 - 功能名稱可以在命名空間之間重複,並將視為個別功能
- 無法使用下列字元:代碼 < 32(不可列印)、32(空格)、58(冒號)、124(管道)和 126–140。
- 所有以底線
_
開頭的命名空間都會被忽略。
JSON 範例
動作
呼叫 Rank 時,您會傳送多個動作以從中選擇:
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 中, user
、、 device
environment
和 activity
是命名空間。
注意
我們強烈建議針對以 UTF-8 為基礎的功能命名空間使用名稱,並以不同的字母開頭。 例如, user
、 environment
device
、 和 activity
開頭為 u
、 e
、 d
和 a
。 目前具有相同第一個字元的命名空間可能會導致衝突。
{
"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
}
}
]
}