Kontekst i akcje

Ważne

Od 20 września 2023 r. nie będzie można tworzyć nowych zasobów usługi Personalizacja. Usługa Personalizacja jest wycofywana 1 października 2026 r.

Personalizacja działa, ucząc się, co aplikacja powinna pokazywać użytkownikom w danym kontekście. Kontekst i akcje to dwa najważniejsze informacje przekazywane do usługi Personalizacja. Kontekst reprezentuje informacje o bieżącym użytkowniku lub stanie systemu, a akcje są opcjami do wyboru.

Kontekst

Informacje dotyczące kontekstu zależą od każdej aplikacji i przypadku użycia, ale zazwyczaj mogą zawierać informacje, takie jak:

  • Dane demograficzne i informacje o profilu użytkownika.
  • Informacje wyodrębnione z nagłówków HTTP, takich jak agent użytkownika lub pochodzące z informacji HTTP, takich jak wyszukiwania geograficzne odwrotne na podstawie adresów IP.
  • Informacje o bieżącej godzinie, takie jak dzień tygodnia, weekend lub nie, poranek lub popołudnie, sezon wakacyjny lub nie, itp.
  • Informacje wyodrębnione z aplikacji mobilnych, takie jak lokalizacja, ruch lub poziom baterii.
  • Historyczne agregacje zachowania użytkowników — takie jak to, jakie są gatunki filmów, które ten użytkownik oglądał najbardziej.
  • Informacje o stanie systemu.

Aplikacja jest odpowiedzialna za ładowanie informacji o kontekście z odpowiednich baz danych, czujników i systemów, które mogą istnieć. Jeśli informacje kontekstowe nie ulegają zmianie, możesz dodać logikę w aplikacji, aby buforować te informacje przed wysłaniem ich do interfejsu API rangi.

Akcje

Akcje reprezentują listę opcji.

Nie wysyłaj więcej niż 50 akcji podczas klasyfikowania akcji. Mogą one być takie same 50 akcji za każdym razem lub mogą się zmieniać. Jeśli na przykład masz katalog produktów zawierający 10 000 elementów dla aplikacji do handlu elektronicznego, możesz użyć aparatu rekomendacji lub filtrowania, aby określić 40 pierwszych elementów, które klient może lubić, i użyj usługi Personalizacja, aby znaleźć ten, który wygeneruje największą nagrodę dla bieżącego kontekstu.

Przykłady akcji

Akcje wysyłane do interfejsu API rangi zależą od tego, co próbujesz spersonalizować.

Oto kilka przykładów:

Przeznaczenie Akcja
Personalizuj artykuł wyróżniony w witrynie internetowej wiadomości. Każda akcja to potencjalny artykuł z wiadomościami.
Optymalizowanie umieszczania reklam w witrynie internetowej. Każda akcja będzie układem lub regułami umożliwiającymi utworzenie układu reklam (na przykład na górze, po prawej stronie, małych obrazów, dużych obrazów).
Wyświetl spersonalizowany ranking zalecanych elementów w witrynie internetowej zakupów. Każda akcja jest określonym produktem.
Zasugeruj elementy interfejsu użytkownika, takie jak filtry, aby zastosować je do określonego zdjęcia. Każda akcja może być innym filtrem.
Wybierz odpowiedź czatbota, aby wyjaśnić intencję użytkownika lub zasugerować akcję. Każda akcja to opcja interpretowania odpowiedzi.
Wybierz, co ma być wyświetlane w górnej części listy wyników wyszukiwania Każda akcja jest jedną z niewielu pierwszych wyników wyszukiwania.

Ładowanie akcji z aplikacji klienckiej

Funkcje z akcji mogą zwykle pochodzić z systemów zarządzania zawartością, katalogów i systemów rekomendacji. Aplikacja jest odpowiedzialna za ładowanie informacji o akcjach z odpowiednich baz danych i systemów. Jeśli akcje nie zmieniają się lub ładowane za każdym razem mają niepotrzebny wpływ na wydajność, możesz dodać logikę w aplikacji, aby buforować te informacje.

Zapobieganie klasyfikacji akcji

W niektórych przypadkach istnieją akcje, których nie chcesz wyświetlać użytkownikom. Najlepszym sposobem zapobiegania sklasyfikowaniu akcji jest dodanie jej do listy Wykluczone akcje lub przekazanie jej do żądania rangi.

W niektórych przypadkach zdarzenia mogą nie być domyślnie trenowane. Innymi słowy, chcesz trenować zdarzenia tylko wtedy, gdy zostanie spełniony określony warunek. Na przykład spersonalizowana część strony internetowej znajduje się poniżej składania (użytkownicy muszą przewijać przed interakcją ze spersonalizowaną zawartością). W takim przypadku renderujesz całą stronę, ale chcesz, aby zdarzenie zostało wytrenowane tylko wtedy, gdy użytkownik przewija się i ma szansę na interakcję z spersonalizowaną zawartością. W takich przypadkach należy odroczyć aktywację zdarzeń, aby uniknąć przypisywania domyślnych zdarzeń nagrody (i szkolenia), z którymi użytkownik końcowy nie miał możliwości interakcji.

Funkcje

Kontekst i możliwe akcje są opisane przy użyciu funkcji. Funkcje reprezentują wszystkie informacje, które uważasz za ważne dla procesu podejmowania decyzji w celu zmaksymalizowania nagród. Dobrym punktem wyjścia jest wyobrażanie sobie, że masz za zadanie wybrać najlepszą akcję przy każdym znaczniku czasu i zadać sobie pytanie: "Jakie informacje muszę podjąć świadomą decyzję? Jakie informacje są dostępne do opisania kontekstu i każdej możliwej akcji?" Funkcje mogą być ogólne lub specyficzne dla elementu.

Usługa Personalizacja nie określa, ogranicza ani naprawia funkcji, które można wysyłać dla akcji i kontekstu:

  • W czasie możesz dodawać i usuwać funkcje dotyczące kontekstu i akcji. Usługa Personalizacja nadal uczy się na podstawie dostępnych informacji.
  • W przypadku funkcji kategorycznych nie trzeba wstępnie definiować możliwych wartości.
  • W przypadku funkcji liczbowych nie ma potrzeby wstępnego definiowania zakresów.
  • Nazwy funkcji rozpoczynające się od podkreślenia _ zostaną zignorowane.
  • Lista funkcji może być duża (setki), ale zalecamy rozpoczęcie od zwięzłego zestawu funkcji i rozszerzania w razie potrzeby.
  • funkcje akcji mogą lub nie mają żadnej korelacji z funkcjami kontekstu .
  • Funkcje, które nie są dostępne, powinny zostać pominięte w żądaniu. Jeśli wartość określonej funkcji nie jest dostępna dla danego żądania, pomiń tę funkcję dla tego żądania.
  • Unikaj wysyłania funkcji z wartością null. Wartość null zostanie przetworzona jako ciąg z wartością "null", która jest niepożądane.

Jest to w porządku i naturalne, że funkcje zmieniają się z upływem czasu. Należy jednak pamiętać, że model uczenia maszynowego usługi Personalizacja dostosowuje się na podstawie funkcji, które widzi. Jeśli wyślesz żądanie zawierające wszystkie nowe funkcje, model usługi Personalizacja nie będzie mógł użyć przeszłych zdarzeń, aby wybrać najlepszą akcję dla bieżącego zdarzenia. Posiadanie "stabilnego" zestawu funkcji (z funkcjami cyklicznymi) pomoże w uzyskaniu wydajności algorytmów uczenia maszynowego usługi Personalizacja.

Funkcje kontekstowe

  • Niektóre funkcje kontekstu mogą być dostępne tylko w części czasu. Jeśli na przykład użytkownik jest zalogowany do witryny internetowej sklepu spożywczego, kontekst będzie zawierać funkcje opisujące historię zakupów. Te funkcje nie będą dostępne dla użytkownika-gościa.
  • Musi istnieć co najmniej jedna funkcja kontekstu. Usługa Personalizacja nie obsługuje pustego kontekstu.
  • Jeśli funkcje kontekstu są identyczne dla każdego żądania, usługa Personalizacja wybierze najlepszą akcję globalnie.

Funkcje akcji

  • Nie wszystkie akcje muszą zawierać te same funkcje. Na przykład w scenariuszu sklepu spożywczego online mikrowavable popcorn będzie miał funkcję "czasu gotowania", podczas gdy ogórk nie.
  • Funkcje określonego identyfikatora akcji mogą być dostępne pewnego dnia, ale później staną się niedostępne.

Przykłady:

Poniżej przedstawiono dobre przykłady funkcji akcji. Będą one zależeć dużo od każdej aplikacji.

  • Funkcje o cechach akcji. Czy na przykład jest to film, czy serial telewizyjny?
  • Funkcje dotyczące sposobu interakcji użytkowników z tą akcją w przeszłości. Na przykład ten film jest w większości postrzegany przez ludzi w demografii A lub B, jest zwykle odtwarzany nie więcej niż raz.
  • Funkcje dotyczące cech sposobu, w jaki użytkownik widzi akcje. Czy na przykład plakat filmu pokazanego na miniaturze zawiera twarze, samochody lub krajobrazy?

Obsługiwane typy funkcji

Usługa Personalizacja obsługuje funkcje typów ciągów, liczbowych i logicznych. Prawdopodobnie aplikacja będzie używać głównie funkcji ciągów z kilkoma wyjątkami.

Jak typy funkcji wpływają na uczenie maszynowe w usłudze Personalizacja

  • Ciągi: w przypadku typów ciągów każda kombinacja klucz-wartość (nazwa funkcji, wartość funkcji) jest traktowana jako funkcja gorąca (na przykład category:"Produce" i category:"Meat" będzie reprezentowana wewnętrznie jako różne funkcje w modelu uczenia maszynowego).
  • Numeryczne: należy używać wartości liczbowych tylko wtedy, gdy liczba jest wielkością, która powinna proporcjonalnie wpływać na wynik personalizacji. Jest to bardzo zależne od scenariusza. Funkcje oparte na jednostkach liczbowych, ale gdy znaczenie nie jest liniowe — takie jak Wiek, Temperatura lub Wysokość osoby — najlepiej kodowane jako ciągi podzielone na kategorie. Na przykład Age może być zakodowany jako "Age":"0-5", "Age":"6-10" itp. Wysokość może być zasobnikowana jako "Height": "<5'0", "Height": "5'0-5'4", "Height": "5'5-5'11", "Height":"6'0-6-4", "Height":">6'4".
  • Logiczny
  • Obsługiwane są tylko tablice liczbowe.

Inżynieria cech

  • Użyj typów kategorii i ciągów dla funkcji, które nie są wielkością.
  • Upewnij się, że istnieje wystarczająco dużo funkcji, aby zwiększyć personalizację. Tym bardziej dokładnie celem zawartości musi być, tym więcej funkcji jest potrzebnych.
  • Istnieją cechy różnych gęstości. Funkcja jest gęsta , jeśli wiele elementów jest zgrupowanych w kilku zasobnikach. Na przykład tysiące filmów wideo można sklasyfikować jako "Długie" (ponad 5 minut długości) i "Krótkie" (poniżej 5 minut długości). Jest to bardzo gęsta funkcja. Z drugiej strony, te same tysiące elementów może mieć atrybut o nazwie "Title", który prawie nigdy nie będzie miał tej samej wartości z jednego elementu do drugiego. Jest to bardzo nie gęsta lub rozrzedona funkcja.

Posiadanie funkcji o wysokiej gęstości pomaga w ekstrapolacji personalizacji uczenia się z jednego elementu do drugiego. Jeśli jednak istnieje tylko kilka funkcji i są one zbyt gęste, Usługa Personalizacja spróbuje dokładnie kierować zawartość z zaledwie kilkoma zasobnikami do wyboru.

Typowe problemy z projektowaniem i formatowaniem funkcji

  • Wysyłanie funkcji z wysoką kardynalnością. Funkcje, które mają unikatowe wartości, które prawdopodobnie nie będą powtarzać się w wielu zdarzeniach. Na przykład dane osobowe specyficzne dla jednej osoby (takiej jak imię i nazwisko, numer telefonu, numer karty kredytowej, adres IP) nie powinny być używane z usługą Personalizacja.
  • Wysyłanie identyfikatorów użytkowników z dużą liczbą użytkowników jest mało prawdopodobne, że te informacje są istotne dla uczenia usługi Personalizacja w celu zmaksymalizowania średniego wyniku nagrody. Wysyłanie identyfikatorów użytkowników (nawet jeśli nie piI) prawdopodobnie spowoduje dodanie większej liczby szumów do modelu i nie jest zalecane.
  • Wysyłanie unikatowych wartości, które rzadko występują więcej niż kilka razy. Zaleca się tworzenie zasobnika funkcji na wyższy poziom szczegółowości. Na przykład funkcje takie jak "Context.TimeStamp.Day":"Monday" lub "Context.TimeStamp.Hour":13 mogą być przydatne, ponieważ istnieją odpowiednio tylko 7 i 24 unikatowe wartości. Jednak jest bardzo precyzyjny i ma bardzo dużą liczbę unikatowych wartości, co sprawia, "Context.TimeStamp":"1985-04-12T23:20:50.52Z" że bardzo trudno jest personalizatorowi uczyć się na ich podstawie.

Ulepszanie zestawów funkcji

Przeanalizuj zachowanie użytkownika, uruchamiając zadanie oceny funkcji. Dzięki temu możesz przyjrzeć się przeszłym danym, aby zobaczyć, jakie funkcje są silnie przyczyniające się do pozytywnych nagród w porównaniu z tymi, które przyczyniają się mniej. Możesz zobaczyć, jakie funkcje pomagają, i będzie to do Ciebie i twojej aplikacji, aby znaleźć lepsze funkcje do wysłania do usługi Personalizacja, aby jeszcze bardziej poprawić wyniki.

Rozszerzanie zestawów funkcji za pomocą sztucznej inteligencji i usług azure AI

Sztuczna inteligencja i gotowe do uruchomienia usługi Azure AI może być bardzo zaawansowanym dodatkiem do usługi Personalizacja.

Wstępnie przetwarzając elementy przy użyciu usług sztucznej inteligencji, możesz automatycznie wyodrębnić informacje, które mogą być istotne dla personalizacji.

Przykład:

  • Plik filmu można uruchomić za pośrednictwem usługi Video Indexer , aby wyodrębnić elementy sceny, tekst, tonację i wiele innych atrybutów. Te atrybuty mogą być następnie bardziej gęste, aby odzwierciedlić cechy, których nie miały oryginalne metadane elementu.
  • Obrazy mogą być uruchamiane przez wykrywanie obiektów, twarze za pośrednictwem tonacji itp.
  • Informacje w tekście można rozszerzyć, wyodrębniając jednostki, tonację i rozwijając jednostki za pomocą grafu wiedzy Bing.

Możesz użyć kilku innych usług sztucznej inteligencji platformy Azure, takich jak

Używanie osadzania jako funkcji

Osadzanie z różnych modeli Edukacja maszynowych okazało się, że funkcje wpływające na usługę Personalizacja

  • Osadzanie z dużych modeli językowych
  • Osadzanie z modeli przetwarzania obrazów sztucznej inteligencji na platformie Azure

Przestrzenie nazw

Opcjonalnie funkcje można organizować przy użyciu przestrzeni nazw (odpowiednich dla funkcji kontekstu i akcji). Przestrzenie nazw mogą służyć do grupowania funkcji według tematu, według źródła lub innego grupowania, które ma sens w aplikacji. Określasz, czy przestrzenie nazw są używane i jakie powinny być. Przestrzenie nazw organizują funkcje w odrębne zestawy i uściślają funkcje o podobnych nazwach. Przestrzenie nazw można traktować jako "prefiks", który jest dodawany do nazw funkcji. Przestrzenie nazw nie powinny być zagnieżdżone.

Poniżej przedstawiono przykłady przestrzeni nazw funkcji używanych przez aplikacje:

  • User_Profile_from_CRM
  • Czas
  • Mobile_Device_Info
  • http_user_agent
  • VideoResolution
  • Deviceinfo
  • Pogoda
  • Product_Recommendation_Ratings
  • current_time
  • NewsArticle_TextAnalytics

Konwencje nazewnictwa przestrzeni nazw i wytyczne

  • Przestrzenie nazw nie powinny być zagnieżdżone.
  • Przestrzenie nazw muszą zaczynać się od unikatowych znaków ASCII (zalecamy używanie przestrzeni nazw opartych na protokole UTF-8). Obecnie przestrzenie nazw o tych samych pierwszych znakach mogą powodować kolizje, dlatego zdecydowanie zaleca się, aby przestrzenie nazw zaczynały się od znaków, które różnią się od siebie.
  • W przestrzeniach nazw jest rozróżniana wielkość liter. Na przykład user i User będą traktowane jako różne przestrzenie nazw.
  • Nazwy funkcji mogą być powtarzane w przestrzeniach nazw i będą traktowane jako oddzielne funkcje
  • Nie można używać następujących znaków: kody < 32 (nie można drukować), 32 (spacja), 58 (dwukropek), 124 (rura) i 126–140.
  • Wszystkie przestrzenie nazw rozpoczynające się od podkreślenia _ zostaną zignorowane.

Przykłady JSON

Akcje

Podczas wywoływania funkcji Rank wyślesz wiele akcji do wyboru:

Obiekty JSON mogą zawierać zagnieżdżone obiekty JSON i proste właściwości/wartości. Tablicę można uwzględnić tylko wtedy, gdy elementy tablicy są liczbami.

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

Kontekst

Kontekst jest wyrażany jako obiekt JSON wysyłany do interfejsu API rangi:

Obiekty JSON mogą zawierać zagnieżdżone obiekty JSON i proste właściwości/wartości. Tablicę można uwzględnić tylko wtedy, gdy elementy tablicy są liczbami.

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

Przestrzenie nazw

W następującym formacie JSON, user, environment, devicei activity są przestrzeniami nazw.

Uwaga

Zdecydowanie zalecamy używanie nazw dla przestrzeni nazw funkcji, które są oparte na protokole UTF-8 i zaczynają się od różnych liter. Na przykład , user, environmentdevice, i activity zaczyna się od u, e, di a. Obecnie przestrzenie nazw z tymi samymi pierwszymi znakami mogą powodować kolizje.

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

Następne kroki

Uczenie wzmacniania