Kontext und Aktionen

Wichtig

Ab dem 20. September 2023 können Sie keine neuen Personalisierungsressourcen mehr erstellen. Der Personalisierungsdienst wird am 1. Oktober 2026 eingestellt.

Die Funktionsweise der Personalisierung beruht darauf, dass sie lernt, was Ihre Anwendung in einem bestimmten Kontext für Benutzer anzeigen soll. Kontext und Aktionen sind die beiden wichtigsten Informationen, die Sie an die Personalisierung übergeben. Der Kontext stellt die Informationen dar, die Sie über den aktuellen Benutzer oder den Zustand Ihres Systems haben, und die Aktionen sind die Optionen, die zur Auswahl verfügbar sind.

Kontext

Informationen für den Kontext sind von jeder Anwendung und jedem Anwendungsfall abhängig, können aber typischerweise Informationen umfassen wie:

  • Demografische und Profilinformationen über Ihre Benutzer.
  • Aus HTTP-Kopfzeilen extrahierte Informationen wie Benutzer-Agent oder aus HTTP-Informationen abgeleitete wie umgekehrte geografische Suchen, basierend auf IP-Adressen.
  • Informationen zur aktuellen Uhrzeit, z. B. den Wochentag, Wochenende oder nicht, Morgen oder Nachmittag, Weihnachtszeit oder nicht usw.
  • Aus mobilen Anwendungen extrahierte Informationen, z. B. Standort, Bewegung oder Ladezustand der Batterie.
  • Historische Aggregate von Benutzerverhalten wie: welche Filmgenres hat dieser Benutzer am häufigsten angeschaut.
  • Informationen über den Zustand des Systems.

Ihre Anwendung ist für das Laden der Informationen über den Kontext aus den relevanten Datenbanken, Sensoren und Systemen, die Sie möglicherweise besitzen, verantwortlich. Wenn sich Ihre Kontextinformationen nicht ändern, können Sie in Ihrer Anwendung eine Logik hinzufügen, die diese Informationen vor dem Senden an die Relevanz-API zwischenspeichert.

Aktionen

Aktionen stellen eine Liste von Optionen dar.

Senden Sie beim Zuweisen eines Rangs für Aktionen nicht mehr als 50 Aktionen als Eingabe. Dies können jedes Mal dieselben 50 Aktionen sein, oder sie können sich ändern. Wenn Sie beispielsweise einen Produktkatalog mit 10.000 Artikeln für eine E-Commerce-Anwendung haben, können Sie eine Empfehlungs- oder Filter-Engine verwenden, um die Top 40 Produkte zu bestimmen, die einem Kunden eventuell gefallen, und die Personalisierung verwenden, um das eine Produkt zu finden, das die höchste Belohnung im aktuellen Kontext erzeugt.

Beispiele für Aktionen

Die Aktionen, die Sie an die Relevanz-API senden, sind davon abhängig, was Sie zu personalisieren versuchen.

Hier einige Beispiele:

Zweck Aktion
Personalisieren, welcher Artikel auf einer Nachrichtenwebsite hervorgehoben wird. Jede Aktion ist ein potenzieller Nachrichtenartikel.
Optimieren einer Anzeigenplatzierung auf einer Website. Jede Aktion ist ein Layout oder Regeln zum Erstellen eines Layouts für die Anzeigen (z. B. oben, rechts, kleine Bilder, große Bilder).
Anzeigen einer personalisierten Rangfolge empfohlener Artikel auf einer Einkaufswebsite. Jede Aktion ist ein bestimmtes Produkt.
Vorschlagen von Benutzeroberflächenelementen, z. B. Filtern, die auf ein bestimmtes Foto angewendet werden sollen. Jede Aktion kann ein anderer Filter sein.
Auswählen der Antwort eines Chatbots, um eine Benutzerabsicht zu klären oder eine Aktion vorzuschlagen. Jede Aktion ist eine Möglichkeit, wie die Antwort interpretiert werden kann.
Auswählen, was am Anfang einer Liste von Suchergebnissen angezeigt werden soll Jede Aktion ist eine der obersten paar Suchergebnisse.

Laden von Aktionen aus der Clientanwendung

Merkmale aus Aktionen können typischerweise aus Content-Management-Systemen, Katalogen und Empfehlungssystemen stammen. Ihre Anwendung ist für das Laden der Informationen über die Aktionen aus den relevanten Datenbanken und Systemen, die Sie besitzen, verantwortlich. Wenn sich Ihre Aktionen nicht ändern, oder wenn es die Leistung unnötig beeinträchtigt, wenn sie jedes Mal geladen werden, können Sie in Ihrer Anwendung eine Logik für das Zwischenspeichern dieser Informationen hinzufügen.

Verhindern der Zuweisung eines Rangs zu Aktionen

In einigen Fällen gibt es Aktionen, die Sie Benutzer nicht anzeigen möchten. Die Zuweisung eines Rangs zu einer Aktion lässt sich am besten verhindern, indem Sie die Aktion der Liste Ausgeschlossene Aktionen hinzufügen oder nicht an die Ranganforderung übergeben.

In einigen Fällen möchten Sie möglicherweise nicht, dass Ereignisse standardmäßig trainiert werden. Das heißt, Ereignisse sollen nur trainiert werden, wenn eine bestimmte Bedingung erfüllt ist. Angenommen, der personalisierte Teil Ihrer Webseite befindet sich unter dem Falz (Benutzer müssen scrollen, bevor sie mit dem personalisierten Inhalt interagieren). In diesem Fall rendern Sie die gesamte Seite, möchten aber, dass ein Ereignis nur dann trainiert wird, wenn der Benutzer scrollt und die Möglichkeit hat, mit dem personalisierten Inhalt zu interagieren. In diesen Fällen sollten Sie die Ereignisaktivierung zurückstellen, um das Zuweisen einer Standardrelevanz (und Trainieren) für Ereignisse zu vermeiden, mit denen der Endbenutzer nicht interagieren konnte.

Funktionen

Sowohl der Kontext als auch die möglichen Aktionen werden mithilfe von Features beschrieben. Die Features stellen alle Informationen dar, die Ihrer Meinung nach für den Entscheidungsprozess wichtig sind, um die Relevanz zu maximieren. Stellen Sie sich vor, dass Sie die beste Aktion zu jedem Zeitstempel auswählen sollen, und beantworten Sie sich folgende Fragen: „Welche Informationen benötige ich, um eine fundierte Entscheidung zu treffen? Welche Informationen stehen mir zur Verfügung, um den Kontext und jede mögliche Aktion zu beschreiben?“ Features können generisch oder spezifisch für ein Element sein.

Die Personalisierung schreibt weder vor noch schränkt sie ein, welche Merkmale Sie für Aktionen und Kontext senden können:

  • Im Laufe der Zeit können Sie Merkmale von Kontext und Aktionen hinzufügen und entfernen. Die Personalisierung weiterhin von verfügbaren Informationen.
  • Für kategorische Features müssen die möglichen Werte nicht vorab definiert werden.
  • Für numerische Features müssen Bereiche nicht vorab definiert werden.
  • Featurenamen, die mit einem Unterstrich (_) beginnen, werden ignoriert.
  • Die Liste der Features kann lang sein und Hunderte von Einträgen umfassen. Wir empfehlen jedoch, mit einem kurzen Featuresatz zu beginnen und diesen bei Bedarf zu erweitern.
  • Aktionsfeatures können eine Korrelation mit Kontextfeatures aufweisen oder nicht.
  • Features, die nicht verfügbar sind, sollten nicht in der Anforderung angegeben werden. Wenn der Wert eines bestimmten Features für eine Anforderung nicht verfügbar ist, lassen Sie das Feature für diese Anforderung aus.
  • Senden Sie keine Features mit einem NULL-Wert. Ein NULL-Wert wird als Zeichenfolge mit dem Wert „Null“ verarbeitet, was nicht wünschenswert ist.

Es ist in Ordnung und natürlich, dass sich Features im Laufe der Zeit ändern. Beachten Sie jedoch, dass das Machine Learning-Modell der Personalisierung basierend auf den vorhandenen Features angepasst wird. Wenn Sie eine Anforderung senden, die alle neuen Features enthält, kann das Modell der Personalisierung vergangene Ereignisse nicht nutzen, um die beste Aktion für das aktuelle Ereignis auszuwählen. Ein „stabiler“ Featuresatz (mit wiederkehrenden Features) trägt zur Leistung der Machine Learning-Algorithmen der Personalisierung bei.

Kontextfeatures

  • Manche Kontextfeatures sind möglicherweise nicht immer verfügbar. Wenn ein Benutzer beispielsweise bei der Website eines Online-Lebensmittelgeschäfts angemeldet ist, enthält der Kontext Features, die den Kaufverlauf beschreiben. Diese Features sind für einen Gastbenutzer nicht verfügbar.
  • Es muss mindestens ein Kontextfeature vorhanden sein. Die Personalisierung unterstützt keinen leeren Kontext.
  • Wenn die Kontextfeatures für jede Anforderung identisch sind, wählt die Personalisierung die global beste Aktion aus.

Aktionsfeatures

  • Nicht alle Aktionen müssen dieselben Features enthalten. Im Szenario des Online-Lebensmittelgeschäfts verfügt Mikrowellenpopcorn beispielsweise über ein Feature für die Zubereitungszeit, eine Gurke dagegen nicht.
  • Merkmale für eine bestimmte Aktions-ID können an einem Tag verfügbar sein, später aber nicht mehr.

Beispiele:

Im Folgenden sind einige gute Beispiele für Aktionsfeatures aufgeführt. Diese hängen in hohem Maß von der jeweiligen Anwendung ab.

  • Merkmale mit Eigenschaften der Aktionen. Z. B., ist es ein Film oder eine TV-Serie?
  • Merkmale dazu, wie Benutzer mit dieser Aktion in der Vergangenheit eventuell interagiert haben. Beispiel: Dieser Film wird hauptsächlich von Personen in der Demografie A oder B angesehen und in der Regel nicht mehr als einmal wiedergegeben.
  • Merkmale zu den Eigenschaften, wie der Benutzer die Aktionen sieht. Z. B., enthält das für den Film in der Miniaturansicht angezeigte Poster Gesichter, Autos oder Landschaften?

Unterstützte Merkmalstypen

Die Personalisierung unterstützt Merkmale der Typen Zeichenfolge, numerisch und boolesch. Es ist wahrscheinlich, dass Ihre Anwendung bis auf wenige Ausnahmen hauptsächlich Zeichenfolgenfeatures verwendet.

Auswirkungen von Featuretypen auf das maschinelle Lernen in der Personalisierung

  • Zeichenfolgen: Bei Zeichenfolgentypen wird jede Kombination aus Schlüssel und Wert (Featurename, Featurewert) als 1-aus-n-Feature behandelt (category:"Produce" und category:"Meat" werden intern z. B. als unterschiedliche Features im Machine Learning-Modell dargestellt).
  • Numerische Werte: Verwenden Sie nur dann numerische Werte, wenn die Zahl eine Größe ist, die sich proportional auf das Personalisierungsergebnis auswirken sollte. Dies hängt stark vom Szenario ab. Features, die auf numerischen Einheiten basieren, bei denen aber die Bedeutung nicht linear ist (z. B. Alter, Temperatur oder Körpergröße einer Person) werden am besten als kategorische Zeichenfolgen codiert. Das Alter könnte beispielsweise wie folgt codiert werden: "Age":"0-5", "Age":"6-10" usw. Für die Körpergröße könnten folgende Buckets verwendet werden: "Height": "<5'0", "Height": "5'0-5'4", "Height": "5'5-5'11", "Height":"6'0-6-4", "Height":">6'4".
  • Boolescher Wert
  • Arrays: Es werden nur numerische Arrays unterstützt.

Featureentwicklung

  • Verwenden Sie Kategorie- und Zeichenfolgentypen für Merkmale, die keine Größe sind.
  • Stellen Sie sicher, dass genügend Features für eine effektive Personalisierung vorhanden sind. Je exakter der Inhalt zielgerichtet sein muss, desto mehr Merkmale werden benötigt.
  • Es sind Features mit vielfältigen Dichten vorhanden. Ein Merkmal ist dicht, wenn viele Elemente in wenigen Buckets gruppiert sind. Beispielsweise lassen sich Tausende von Videos als „Lang“ (länger als 5 Minuten) oder „Kurz“ (kürzer als 5 Minuten) klassifizieren. Dies ist ein sehr dichtes Merkmal. Andererseits können dieselben Tausenden von Elementen ein Attribut namens „Titel“ besitzen, das praktisch nie denselben Wert bei zwei Elementen haben wird. Dies ist ein sehr undichtes Merkmal oder von geringer Dichte.

Das Vorhandensein von Features mit hoher Dichte ermöglicht der Personalisierung das Extrapolieren des Lernvorgangs von einem zum anderen Element. Wenn aber nur wenige Features vorhanden und diese zu dicht sind, versucht die Personalisierung, Inhalt exakt vorzugeben, wobei nur aus wenigen Buckets gewählt werden kann.

Häufige Probleme bei Featureentwurf und -formatierung

  • Senden von Features mit hoher Kardinalität. Features mit eindeutigen Werten, die sich wahrscheinlich nicht über viele Ereignisse hinweg wiederholen. Personenbezogene Informationen wie Name, Telefonnummer, Kreditkartennummer oder IP-Adresse dürfen beispielsweise nicht mit der Personalisierung verwendet werden.
  • Senden von Benutzer-IDs. Bei einer großen Anzahl von Benutzern ist es unwahrscheinlich, dass diese Informationen für den Lernprozess der Personalisierung relevant sind und die durchschnittliche Relevanzbewertung maximieren. Das Senden von Benutzer-IDs (auch wenn es sich nicht um personenbezogene Informationen handelt) führt wahrscheinlich zu zusätzlichen Störungen im Modell und wird nicht empfohlen.
  • Senden eindeutiger Werte, die nur selten vorkommen werden. Es empfiehlt sich, für Ihre Features Buckets mit einer höheren Detailebene zu verwenden. Features wie "Context.TimeStamp.Day":"Monday" oder "Context.TimeStamp.Hour":13 können beispielsweise nützlich sein, da es jeweils nur 7 bzw. 24 eindeutige Werte gibt. "Context.TimeStamp":"1985-04-12T23:20:50.52Z" ist jedoch sehr präzise und verfügt über eine extrem große Anzahl eindeutiger Werte, sodass es für die Personalisierung sehr schwierig ist, daraus zu lernen.

Verbessern von Merkmalssätzen

Analysieren Sie das Benutzerverhalten, indem Sie einen Featureauswertungsauftrag ausführen. Dies ermöglicht Ihnen die Betrachtung vergangener Daten, um festzustellen, welche Merkmale in hohem Maß zu positiven Belohnungen beitragen, im Gegensatz zu denjenigen, die weniger dazu beitragen. Sie können sehen, welche Merkmale hilfreich sind, und es liegt bei Ihnen und Ihrer Anwendung, bessere Merkmale zu finden, um sie an die Personalisierung zu senden, um die Ergebnisse noch weiter zu verbessern.

Erweitern von Featuresets um künstliche Intelligenz und Azure KI Services

Künstliche Intelligenz und sofort einsatzbereite Azure KI Services können eine sehr leistungsfähige Ergänzung der Personalisierung sein.

Indem Sie Ihre Elemente mithilfe von KI-Diensten vorverarbeiten, können Sie automatisch Informationen extrahieren, die wahrscheinlich relevant für die Personalisierung sind.

Beispiel:

  • Sie können eine Filmdatei mit Video Indexer ausführen, um Szenenelemente, Text, Stimmungen und viele andere Attribute zu extrahieren. Diese Attribute können dann verdichtet werden, um die Merkmale wiederzugeben, die die ursprünglichen Elementmetadaten nicht aufwiesen.
  • Bilder können mit einer Objekterkennung behandelt werden, Gesichter mit einer Stimmungsanalyse usw.
  • Informationen in Text können durch Extrahieren von Entitäten, Stimmungen und die Erweiterung von Entitäten mit Bing Knowledge Graph angereichert werden.

Sie können verschiedene andere Azure KI Services nutzen, wie z. B.:

Verwenden von Einbettungen als Features

Einbettungen aus verschiedenen Machine Learning-Modellen haben sich als effektive Features für die Personalisierung erwiesen.

  • Einbettungen aus großen Sprachmodellen
  • Einbettungen aus Azure KI Vision-Modellen

Namespaces

Optional können Features mithilfe von Namespaces organisiert werden (dies ist sowohl für Kontext- als auch für Aktionsfeatures relevant). Mit Namespaces können Features nach Thema, Quelle oder jeder anderen Gruppierung, die in Ihrer Anwendung sinnvoll ist, gruppiert werden. Sie bestimmen, ob Namespaces verwendet werden und was diese repräsentieren sollen. Namespaces organisieren Features in verschiedenen Gruppen und ermöglichen die Unterscheidung von Features mit ähnlichen Namen. Sie können sich Namespaces als „Präfix“ vorstellen, der zu Namen von Features hinzugefügt wird. Namespaces sollten nicht geschachtelt werden.

Im Folgenden finden Sie Beispiele für Merkmalsnamespaces, die von Anwendungen verwendet werden:

  • User_Profile_from_CRM
  • Time
  • Mobile_Device_Info
  • http_user_agent
  • VideoResolution
  • DeviceInfo
  • Weather
  • Product_Recommendation_Ratings
  • current_time
  • NewsArticle_TextAnalytics

Namenskonventionen und Richtlinien für Namespaces

  • Namespaces sollten nicht geschachtelt werden.
  • Namespaces müssen mit eindeutigen ASCII-Zeichen beginnen (es wird empfohlen, UTF-8-basierte Namen für Namespaces zu verwenden). Derzeit kann die Verwendung von Namespaces mit identischen ersten Zeichen zu Konflikten führen. Daher wird dringend empfohlen, Namespaces mit unterschiedlichen Zeichen zu beginnen.
  • Bei Namespaces wird zwischen Groß- und Kleinschreibung unterschieden. user und User werden beispielsweise als unterschiedliche Namespaces betrachtet.
  • Featurenamen können sich namespaceübergreifend wiederholen und werden als separate Features behandelt.
  • Die folgenden Zeichen können nicht verwendet werden: Codes < 32 (nicht druckbar), 32 (Leerzeichen), 58 (Doppelpunkt), 124 (senkrechter Strich) und 126 – 140.
  • Alle Namespaces, die mit einem Unterstrich (_) beginnen, werden ignoriert.

JSON-Beispiele

Aktionen

Beim Aufrufen von Relevanz senden Sie mehrere Aktionen zur Auswahl:

JSON-Objekte können geschachtelte JSON-Objekte und einfache Eigenschaften/Werte enthalten. Ein Array kann nur einbezogen werden, wenn die Arrayelemente Zahlen sind.

{
    "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
        }
      ]
    }
  ]
}

Kontext

Kontext wird als JSON-Objekt ausgedrückt, das an die Relevanz-API gesendet wird:

JSON-Objekte können geschachtelte JSON-Objekte und einfache Eigenschaften/Werte enthalten. Ein Array kann nur einbezogen werden, wenn die Arrayelemente Zahlen sind.

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

Namespaces

Im folgenden JSON-Beispiel sind user, environment, device und activity Namespaces.

Hinweis

Es wird dringend empfohlen, UTF-8-basierte Namen mit verschiedenen Anfangsbuchstaben für Featurenamespaces zu verwenden. Beispielsweise user, environment, device und activity beginnen mit u,e, d und a. Derzeit können Namespaces, die mit denselben Zeichen beginnen, zu Konflikten führen.

{
    "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
            }
        }
    ]
}

Nächste Schritte

Vertiefendes Lernen