Hızlı başlangıç: kişiselleştirici istemci kitaplığı

Bu hızlı başlangıçta kişiselleştirilmiş içeriği kişiselleştirici hizmeti ile görüntüleyin.

Kişiselleştirici istemci kitaplığını kullanmaya başlayın. Paketi yüklemek için bu adımları izleyin ve temel görevler için örnek kodu deneyin.

  • Derecelendirme API 'SI-içerik ve bağlam hakkında sağladığınız gerçek zamanlı bilgileri temel alarak eylemlerden en iyi öğeyi seçer.
  • Ödül API-iş gereksinimlerinize göre ödül puanı belirlenir, ardından bu API ile kişiselleştiriciye gönderebilirsiniz. Bu puan, 1 gibi tek bir değer olabilir ve hatalı için 0 veya iş gereksinimlerinize göre oluşturduğunuz bir algoritmadır.

Başvuru belgeleri | Kitaplık kaynak kodu | Paket (NuGet) | Örnekler

Önkoşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • .NET Core'un geçerli sürümü.
  • Azure aboneliğinize sahip olduktan sonra, Anahtarınızı ve uç noktanızı almak için oluşturun. Dağıtımdan sonra Kaynağa git'e tıklayın.
    • Uygulamanıza Kişiselleştirme API'sini bağlamak için, oluşturmak istediğiniz kaynağın anahtarına ve uç noktasına ihtiyacınız olacak. Hızlı başlangıçta anahtarınızı ve uç noktanızı aşağıdaki koda yapıştırabilirsiniz.
    • Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını ( F0 ) kullanabilirsiniz.

Ayarlama

Model güncelleştirme sıklığını değiştirme

Yeni Azure portal Yapılandırma sayfasındaki Kişiselleştirme kaynağında Model güncelleştirme sıklığını 30 saniye olarak değiştirebilirsiniz. Bu kısa süre hizmeti hızlı bir şekilde eğiterek her yineleme için en önemli eylemin nasıl değiştigini görmeni sağlar.

Model güncelleştirme sıklığını değiştirme

Kişiselleştirme döngüsü ilk kez örneği esndirilirken eğitilecek Ödül API'si çağrıları yoktur. Sıralama çağrıları her öğe için eşit olasılıklar değerine sahip olur. Uygulamanız yine de Her zaman RewardActionId çıktısını kullanarak içeriği sıralamalı.

Ödül bekleme sürelerini değiştirme

Bu Azure portal Yapılandırma sayfasındaki Kişiselleştirme kaynağında Ödül bekleme süresi'nin 30 saniye olarak değişmesini sağlar. Bu kısa süre hizmeti hızlı bir şekilde eğiterek her yineleme için en önemli eylemin nasıl değiştigini görmeni sağlar.

Ödül bekleme sürelerini değiştirme

Yeni bir C# uygulaması oluşturma

Tercih ettiğiniz düzenleyicide veya IDE'de yeni bir .NET Core uygulaması oluşturun.

Konsol penceresinde (cmd, PowerShell veya Bash gibi) dotnet komutunu kullanarak adıyla yeni new bir konsol uygulaması personalizer-quickstart oluşturun. Bu komut, tek bir kaynak Merhaba Dünya basit bir "Merhaba Dünya" C# projesi oluşturur: Program.cs .

dotnet new console -n personalizer-quickstart

Dizininizi yeni oluşturulan uygulama klasörüyle değiştirme. Uygulamayı şu şekilde derlemek için:

dotnet build

Derleme çıkışında uyarı veya hata içermesi gerekir.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

İstemci kitaplığını yükleme

Uygulama dizininde aşağıdaki komutla .NET için Kişiselleştirme istemci kitaplığını yükleyin:

dotnet add package Microsoft.Azure.CognitiveServices.Personalizer --version 1.0.0

İpucu

Visual Studio IDE kullanıyorsanız, istemci kitaplığı indirilebilir bir IDE paketi NuGet kullanılabilir.

Proje dizininden dosyayı tercih Program.cs ettiğiniz düzenleyicide veya IDE'de açın. Aşağıdaki using yönergelerini ekleyin:

using Microsoft.Azure.CognitiveServices.Personalizer;
using Microsoft.Azure.CognitiveServices.Personalizer.Models;
using System;
using System.Collections.Generic;
using System.Linq;

Nesne modeli

Kişiselleştirme istemcisi, anahtarınızı içeren Microsoft.Rest.ServiceClientCredentials kullanarak Azure'da kimlik doğrulaması yapılan bir KişiselleştirmeClient nesnesidir.

İçeriğin en iyi tek öğesini istemek için bir RankRequest oluşturunve istemciye iletirsiniz. Rank yöntemi. Rank yöntemi bir RankResponse döndürür.

Kişiselleştirme'ye bir ödül puanı göndermek için bir RewardRequest oluşturunve istemciye iletin. Ödül yöntemi.

Bu hızlı başlangıçta ödül puanını belirlemek önemsizdir. Bir üretim sisteminde, ödül puanını neyin etkileyenin belirlenmesi ve ne kadar karmaşık bir süreç olduğu, zaman içinde değişmeye karar verilmenizi sağlar. Bu tasarım kararı, Kişiselleştirme mimarinizin temel kararlarından biri olabilir.

Kod örnekleri

Bu kod parçacıkları. .NET için Kişiselleştirme istemci kitaplığı ile aşağıdaki görevleri nasıl gerçekleştirebileceğinizi gösterir:

İstemcinin kimliğini doğrulama

Bu bölümde iki şey yapacaksiniz:

  • Anahtarınızı ve uç noktanızı belirtme
  • Kişiselleştirme istemcisi oluşturma

Program sınıfınıza aşağıdaki satırları ekleyerek başlayabilirsiniz. Kişiselleştirme kaynağından anahtarınızı ve uç noktanızı ekleyin.

Önemli

Azure portala gidin. Önkoşullar bölümünde oluşturduğunuz kişiselleştirici kaynağı başarıyla dağıtılırsa, sonraki adımlar altında Kaynağa Git düğmesine tıklayın. Anahtar ve uç noktanızı kaynağın anahtar ve uç nokta sayfasında, kaynak yönetimi altında bulabilirsiniz.

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Örneğin, Azure Anahtar Kasası.

private static readonly string ApiKey = "REPLACE-WITH-YOUR-PERSONALIZER-KEY";
private static readonly string ServiceEndpoint = "https://REPLACE-WITH-YOUR-PERSONALIZER-RESOURCE-NAME.cognitiveservices.azure.com";

Ardından, yeni bir Kişiselleştirme istemcisi oluşturmak için programınıza bir yöntem ekleyin.

static PersonalizerClient InitializePersonalizerClient(string url)
{
    PersonalizerClient client = new PersonalizerClient(
        new ApiKeyServiceClientCredentials(ApiKey)) { Endpoint = url };

    return client;
}

Besin öğelerini derecelenebilir eylemler olarak al

Eylemler, Kişiselleştirme'nin en iyi içerik öğesini seçmesi için istediğiniz içerik seçimlerini temsil ediyor. Eylem kümelerini ve bunların özelliklerini temsil etmek için Program sınıfına aşağıdaki yöntemleri ekleyin.

static IList<RankableAction> GetActions()
{
    IList<RankableAction> actions = new List<RankableAction>
    {
        new RankableAction
        {
            Id = "pasta",
            Features =
            new List<object>() { new { taste = "salty", spiceLevel = "medium" }, new { nutritionLevel = 5, cuisine = "italian" } }
        },

        new RankableAction
        {
            Id = "ice cream",
            Features =
            new List<object>() { new { taste = "sweet", spiceLevel = "none" }, new { nutritionalLevel = 2 } }
        },

        new RankableAction
        {
            Id = "juice",
            Features =
            new List<object>() { new { taste = "sweet", spiceLevel = "none" }, new { nutritionLevel = 5 }, new { drink = true } }
        },

        new RankableAction
        {
            Id = "salad",
            Features =
            new List<object>() { new { taste = "salty", spiceLevel = "low" }, new { nutritionLevel = 8 } }
        }
    };

    return actions;
}

Bağlam için kullanıcı tercihlerini al

Günün saati ve geçerli yemek tercihi için komut satırına kullanıcı girişini almak için Program sınıfına aşağıdaki yöntemleri ekleyin. Bunlar bağlam özellikleri olarak kullanılır.

static string GetUsersTimeOfDay()
{
    string[] timeOfDayFeatures = new string[] { "morning", "afternoon", "evening", "night" };

    Console.WriteLine("\nWhat time of day is it (enter number)? 1. morning 2. afternoon 3. evening 4. night");
    if (!int.TryParse(GetKey(), out int timeIndex) || timeIndex < 1 || timeIndex > timeOfDayFeatures.Length)
    {
        Console.WriteLine("\nEntered value is invalid. Setting feature value to " + timeOfDayFeatures[0] + ".");
        timeIndex = 1;
    }

    return timeOfDayFeatures[timeIndex - 1];
}
static string GetUsersTastePreference()
{
    string[] tasteFeatures = new string[] { "salty", "sweet" };

    Console.WriteLine("\nWhat type of food would you prefer (enter number)? 1. salty 2. sweet");
    if (!int.TryParse(GetKey(), out int tasteIndex) || tasteIndex < 1 || tasteIndex > tasteFeatures.Length)
    {
        Console.WriteLine("\nEntered value is invalid. Setting feature value to " + tasteFeatures[0] + ".");
        tasteIndex = 1;
    }

    return tasteFeatures[tasteIndex - 1];
}

Her iki yöntem de GetKey yöntemini kullanarak kullanıcının komut satırı seçimini okur.

private static string GetKey()
{
    return Console.ReadKey().Key.ToString().Last().ToString().ToUpper();
}

Öğrenme döngüsü oluşturma

Kişiselleştirme öğrenme döngüsü, Derece ve Ödül çağrılarının bir döngüsüdür. Bu hızlı başlangıçta, içeriği kişiselleştirmek için her Rank çağrısının ardından Kişiselleştirme'ye hizmetin ne kadar iyi performansa sahip olduğunu söylemek için bir Ödül çağrısı yapılır.

Aşağıdaki kod, kullanıcıya komut satırı sırasında tercihlerini sorma döngüsünde döngüler, bu bilgileri Kişiselleştirme'ye göndererek en iyi eylemi seçmesini sağlar, listeden seçim yapmak için müşteriye seçimi gösterir ve ardından hizmetin seçiminde ne kadar iyi olduğunu işaret eden bir ödül puanı kişiselleştirmeye gönderir.

static void Main(string[] args)
{
    int iteration = 1;
    bool runLoop = true;

    IList<RankableAction> actions = GetActions();

    PersonalizerClient client = InitializePersonalizerClient(ServiceEndpoint);

    do
    {
        Console.WriteLine("\nIteration: " + iteration++);

        string timeOfDayFeature = GetUsersTimeOfDay();
        string tasteFeature = GetUsersTastePreference();

        IList<object> currentContext = new List<object>() {
            new { time = timeOfDayFeature },
            new { taste = tasteFeature }
        };

        IList<string> excludeActions = new List<string> { "juice" };

        string eventId = Guid.NewGuid().ToString();

        var request = new RankRequest(actions, currentContext, excludeActions, eventId);
        RankResponse response = client.Rank(request);

        Console.WriteLine("\nPersonalizer service thinks you would like to have: " + response.RewardActionId + ". Is this correct? (y/n)");

        float reward = 0.0f;
        string answer = GetKey();

        if (answer == "Y")
        {
            reward = 1;
            Console.WriteLine("\nGreat! Enjoy your food.");
        }
        else if (answer == "N")
        {
            reward = 0;
            Console.WriteLine("\nYou didn't like the recommended food choice.");
        }
        else
        {
            Console.WriteLine("\nEntered choice is invalid. Service assumes that you didn't like the recommended food choice.");
        }

        Console.WriteLine("\nPersonalizer service ranked the actions with the probabilities as below:");
        foreach (var rankedResponse in response.Ranking)
        {
            Console.WriteLine(rankedResponse.Id + " " + rankedResponse.Probability);
        }

        client.Reward(response.EventId, new RewardRequest(reward));

        Console.WriteLine("\nPress q to break, any other key to continue:");
        runLoop = !(GetKey() == "Q");

    } while (runLoop);
}

Kod dosyasını çalıştırmadan önce içerik seçimlerini alanaşağıdaki yöntemleri ekleyin:

  • GetActions
  • GetUsersTimeOfDay
  • GetUsersTastePreference
  • GetKey

En iyi eylemi isteği

Derece isteğini tamamlamak için program, kullanıcıdan içerik seçimlerinin bir oluşturma currentContext tercihlerini sorar. İşlem, olarak gösterilen eylemlerin dışında tutulacak içerik excludeActions oluşturabilir. Sıralama isteği, yanıtı almak için eylemlere ve özelliklerine, currentContext özelliklerine, excludeActions'a ve benzersiz bir olay kimliğine ihtiyaç vardır.

Bu hızlı başlangıçta günün saati ve kullanıcı yemeği tercihinin basit bağlam özellikleri vardır. Üretim sistemlerinde eylemlerin ve özelliklerin belirlenmesi ve değerlendirilmesi önemsiz bir konu olabilir.

string timeOfDayFeature = GetUsersTimeOfDay();
string tasteFeature = GetUsersTastePreference();

IList<object> currentContext = new List<object>() {
    new { time = timeOfDayFeature },
    new { taste = tasteFeature }
};

IList<string> excludeActions = new List<string> { "juice" };

string eventId = Guid.NewGuid().ToString();

var request = new RankRequest(actions, currentContext, excludeActions, eventId);
RankResponse response = client.Rank(request);

Ödül gönderme

Program, Ödül isteğinde gönderilecek ödül puanını almak için komut satırına kullanıcının seçimini alır, seçime sayısal bir değer atar ve ardından benzersiz olay kimliğini ve ödül puanını sayısal değer olarak Ödül API'sini gönderir.

Bu hızlı başlangıçta, basit bir sayı ödül puanı (sıfır veya 1) olarak atanıyor. Üretim sistemlerinde, özel gereksinimlerinize bağlı olarak Ödül çağrısına ne zaman ve nelerin gönderil olacağını belirlemek önemsiz bir konu olabilir.

float reward = 0.0f;
string answer = GetKey();

if (answer == "Y")
{
    reward = 1;
    Console.WriteLine("\nGreat! Enjoy your food.");
}
else if (answer == "N")
{
    reward = 0;
    Console.WriteLine("\nYou didn't like the recommended food choice.");
}
else
{
    Console.WriteLine("\nEntered choice is invalid. Service assumes that you didn't like the recommended food choice.");
}

Console.WriteLine("\nPersonalizer service ranked the actions with the probabilities as below:");
foreach (var rankedResponse in response.Ranking)
{
    Console.WriteLine(rankedResponse.Id + " " + rankedResponse.Probability);
}

// Send the reward for the action based on user response.
client.Reward(response.EventId, new RewardRequest(reward));

Programı çalıştırma

Uygulamayı uygulama dizininizin dotnet run komutuyla çalıştırın.

dotnet run

Hızlı başlangıç programı, özellikler olarak bilinen kullanıcı tercihlerini toplamak için birkaç soru sorar ve ardından en önemli eylemi sağlar.

Bu hızlı başlangıç için kaynak kodu kullanılabilir.

Başvuru belgeleri | Kitaplık kaynak kodu | Paket (NPM) | Örnekler

Önkoşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • Node.js VE NPM'yi yükleyin (Node.js v14.16.0 ve NPM 6.14.11 ile doğrulanır).
  • Azure aboneliğinize sahip olduktan sonra, Anahtarınızı ve uç noktanızı almak için Azure portal kaynağı oluşturun. Dağıtımdan sonra Kaynağa git'e tıklayın.
    • Uygulamanıza Kişiselleştirme API'sini bağlamak için, oluşturmakta olduğu kaynakta yer alan anahtara ve uç noktaya ihtiyacınız vardır. Hızlı başlangıçta anahtarınızı ve uç noktanızı aşağıdaki koda yapıştırabilirsiniz.
    • Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını ( F0 ) kullanabilirsiniz.

Ayarlama

Model güncelleştirme sıklığını değiştirme

Yeni Azure portal Yapılandırma sayfasındaki Kişiselleştirme kaynağında Model güncelleştirme sıklığını 30 saniye olarak değiştirebilirsiniz. Bu kısa süre hizmeti hızlı bir şekilde eğiterek her yineleme için en önemli eylemin nasıl değiştigini görmeni sağlar.

Model güncelleştirme sıklığını değiştirme

Kişiselleştirme döngüsü ilk kez örneği esndirilirken eğitilecek Ödül API'si çağrıları yoktur. Sıralama çağrıları her öğe için eşit olasılıklar değerine sahip olur. Uygulamanız yine de Her zaman RewardActionId çıktısını kullanarak içeriği sıralamalı.

Ödül bekleme sürelerini değiştirme

Bu Azure portal Yapılandırma sayfasındaki Kişiselleştirme kaynağında Ödül bekleme süresi'nin 30 saniye olarak değişmesini sağlar. Bu kısa süre hizmeti hızlı bir şekilde eğiterek her yineleme için en önemli eylemin nasıl değiştigini görmeni sağlar.

Ödül bekleme sürelerini değiştirme

Yeni bir Node.js uygulaması oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi) uygulama için yeni bir dizin oluşturun ve bu dizine gidin.

mkdir myapp && cd myapp

Bir dosya npm init -y oluşturmak için komutunu package.json çalıştırın.

npm init -y

Tercih ettiğiniz düzenleyicide Node.js IDE'de yeni bir uygulama oluşturun ve kaynağınıza yönelik uç nokta sample.js ve abonelik anahtarı için değişkenler oluşturun.

Önemli

Azure portala gidin. Önkoşullar bölümünde oluşturduğunuz kişiselleştirici kaynağı başarıyla dağıtılırsa, sonraki adımlar altında Kaynağa Git düğmesine tıklayın. Anahtar ve uç noktanızı kaynağın anahtar ve uç nokta sayfasında, kaynak yönetimi altında bulabilirsiniz.

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Örneğin, Azure Anahtar Kasası.

const uuidv1 = require('uuid/v1');
const Personalizer = require('@azure/cognitiveservices-personalizer');
const CognitiveServicesCredentials = require('@azure/ms-rest-azure-js').CognitiveServicesCredentials;
const readline = require('readline-sync');

// The key specific to your personalization service instance; e.g. "0123456789abcdef0123456789ABCDEF"
const serviceKey = "<REPLACE-WITH-YOUR-PERSONALIZER-KEY>";

// The endpoint specific to your personalization service instance; 
// e.g. https://<your-resource-name>.cognitiveservices.azure.com
const baseUri = "https://<REPLACE-WITH-YOUR-PERSONALIZER-ENDPOINT>.cognitiveservices.azure.com";

Kişiselleştirme için Node.js kitaplığını yükleme

Aşağıdaki komutla Node.js kişiselleştirme istemci kitaplığını yükleyin:

npm install @azure/cognitiveservices-personalizer --save

Bu hızlı başlangıç için kalan NPM paketlerini yükleyin:

npm install @azure/ms-rest-azure-js @azure/ms-rest-js readline-sync uuid --save

Nesne modeli

Kişiselleştirme istemcisi, anahtarınızı içeren Microsoft.Rest.ServiceClientCredentials kullanarak Azure'da kimlik doğrulaması yapılan bir KişiselleştirmeClient nesnesidir.

İçeriğin en iyi tek öğesini istemek için bir RankRequest oluşturunve istemciye iletir. Rank yöntemi. Rank yöntemi bir RankResponse döndürür.

Kişiselleştirme'ye ödül göndermek için bir RewardRequest oluşturunve Events sınıfındaki Ödül yöntemine iletin.

Bu hızlı başlangıçta ödülü belirlemek çok önemsizdir. Bir üretim sisteminde, ödül puanını neyin etkileyenin belirlenmesi ve ne kadar karmaşık bir işlem olduğu, zaman içinde değiştirmeye karar verilmenizi sağlar. Bu, Kişiselleştirme mimarinizin temel tasarım kararlarından biri olması gerekir.

Kod örnekleri

Bu kod parçacıkları, aşağıdakiler için Kişiselleştirme istemci kitaplığı ile aşağıdakilerin nasıl Node.js:

İstemcinin kimliğini doğrulama

örneği oluşturma ve PersonalizerClient daha serviceKey önce oluşturduğunuz baseUri ile.

const credentials = new CognitiveServicesCredentials(serviceKey);

// Initialize Personalization client.
const personalizerClient = new Personalizer.PersonalizerClient(credentials, baseUri);

Eylem olarak temsil edilen içerik seçimlerini al

Eylemler, Kişiselleştirme'nin en iyi içerik öğesini seçmesi için istediğiniz içerik seçimlerini temsil ediyor. Eylem kümelerini ve bunların özelliklerini temsil etmek için Program sınıfına aşağıdaki yöntemleri ekleyin.

function getContextFeaturesList() {
  const timeOfDayFeatures = ['morning', 'afternoon', 'evening', 'night'];
  const tasteFeatures = ['salty', 'sweet'];

  let answer = readline.question("\nWhat time of day is it (enter number)? 1. morning 2. afternoon 3. evening 4. night\n");
  let selection = parseInt(answer);
  const timeOfDay = selection >= 1 && selection <= 4 ? timeOfDayFeatures[selection - 1] : timeOfDayFeatures[0];

  answer = readline.question("\nWhat type of food would you prefer (enter number)? 1. salty 2. sweet\n");
  selection = parseInt(answer);
  const taste = selection >= 1 && selection <= 2 ? tasteFeatures[selection - 1] : tasteFeatures[0];

  console.log("Selected features:\n");
  console.log("Time of day: " + timeOfDay + "\n");
  console.log("Taste: " + taste + "\n");

  return [
    {
      "time": timeOfDay
    },
    {
      "taste": taste
    }
  ];
}
function getActionsList() {
  return [
    {
      "id": "pasta",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "medium"
        },
        {
          "nutritionLevel": 5,
          "cuisine": "italian"
        }
      ]
    },
    {
      "id": "ice cream",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none"
        },
        {
          "nutritionalLevel": 2
        }
      ]
    },
    {
      "id": "juice",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none"
        },
        {
          "nutritionLevel": 5
        },
        {
          "drink": true
        }
      ]
    },
    {
      "id": "salad",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "low"
        },
        {
          "nutritionLevel": 8
        }
      ]
    }
  ];
}

Öğrenme döngüsü oluşturma

Kişiselleştirme öğrenme döngüsü, Derece ve Ödül çağrılarının bir döngüsüdür. Bu hızlı başlangıçta, içeriği kişiselleştirmek için her Rank çağrısının ardından Kişiselleştirme'ye hizmetin ne kadar iyi performansa sahip olduğunu söylemek için bir Ödül çağrısı yapılır.

Aşağıdaki kod, kullanıcıya komut satırı sırasında tercihlerini sorma döngüsünde döngüler, bu bilgileri Kişiselleştirme'ye göndererek en iyi eylemi seçmesini sağlar, listeden seçim yapmak için müşteriye seçimi gösterir ve ardından hizmetin seçiminde ne kadar iyi olduğunu işaret eden Kişiselleştirme'ye bir ödül gönderir.

let runLoop = true;

do {

  let rankRequest = {}

  // Generate an ID to associate with the request.
  rankRequest.eventId = uuidv1();

  // Get context information from the user.
  rankRequest.contextFeatures = getContextFeaturesList();

  // Get the actions list to choose from personalization with their features.
  rankRequest.actions = getActionsList();

  // Exclude an action for personalization ranking. This action will be held at its current position.
  rankRequest.excludedActions = getExcludedActionsList();

  rankRequest.deferActivation = false;

  // Rank the actions
  const rankResponse = await personalizerClient.rank(rankRequest);

  console.log("\nPersonalization service thinks you would like to have:\n")
  console.log(rankResponse.rewardActionId);

  // Display top choice to user, user agrees or disagrees with top choice
  const reward = getReward();

  console.log("\nPersonalization service ranked the actions with the probabilities as below:\n");
  for (let i = 0; i < rankResponse.ranking.length; i++) {
    console.log(JSON.stringify(rankResponse.ranking[i]) + "\n");
  }

  // Send the reward for the action based on user response.

  const rewardRequest = {
    value: reward
  }

  await personalizerClient.events.reward(rankRequest.eventId, rewardRequest);

  runLoop = continueLoop();

} while (runLoop);

Aşağıdaki bölümlerde derece ve ödül çağrılarına daha yakından bakın.

Kod dosyasını çalıştırmadan önce içerik seçimlerini alanaşağıdaki yöntemleri ekleyin:

  • getActionsList
  • getContextFeaturesList

En iyi eylemi isteği

Derece isteğini tamamlamak için program, kullanıcıdan içerik seçenekleri oluşturma tercihlerini sorar. İşlem, olarak gösterilen eylemlerin dışında tutulacak içerik excludeActions oluşturabilir. Derece isteği, dereceli yanıtı almak için eylemlere ve özelliklerine, currentContext özelliklerine, excludeActions'a ve benzersiz bir sıralama olay kimliğine ihtiyaç vardır.

Bu hızlı başlangıçta günün saati ve kullanıcı yemeği tercihinin basit bağlam özellikleri vardır. Üretim sistemlerinde eylemlerin ve özelliklerin belirlenmesi ve değerlendirilmesi önemsiz bir konu olabilir.

let rankRequest = {}

// Generate an ID to associate with the request.
rankRequest.eventId = uuidv1();

// Get context information from the user.
rankRequest.contextFeatures = getContextFeaturesList();

// Get the actions list to choose from personalization with their features.
rankRequest.actions = getActionsList();

// Exclude an action for personalization ranking. This action will be held at its current position.
rankRequest.excludedActions = getExcludedActionsList();

rankRequest.deferActivation = false;

// Rank the actions
const rankResponse = await personalizerClient.rank(rankRequest);

Ödül gönderme

Program, Ödül isteğinde gönderilecek ödül puanını almak için komut satırına kullanıcının seçimini alır, seçime sayısal bir değer atar ve ardından benzersiz olay kimliğini ve ödül puanını sayısal değer olarak Ödül API'sini gönderir.

Bu hızlı başlangıçta, basit bir sayı ödül puanı (sıfır veya 1) olarak atanıyor. Üretim sistemlerinde, özel gereksinimlerinize bağlı olarak Ödül çağrısına ne zaman ve ne gönderilmeleri gerektiğini belirlemek önemsiz bir konu olabilir.

const rewardRequest = {
  value: reward
}

await personalizerClient.events.reward(rankRequest.eventId, rewardRequest);

Programı çalıştırma

Uygulamayı uygulama dizininizin Node.js ile çalıştırın.

node sample.js

Hızlı başlangıç programı, özellikler olarak bilinen kullanıcı tercihlerini toplamak için birkaç soru sorar ve ardından en önemli eylemi sağlar.

Başvuru belgeleri | Kitaplık kaynak kodu | Paket (pypi) | Örnekler

Önkoşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • Python 3.x
  • Azure aboneliğinize sahip olduktan sonra, Anahtarınızı ve uç noktanızı almak için Azure portal kaynağı oluşturun. Dağıtımdan sonra Kaynağa git'e tıklayın.
    • Uygulamanıza Kişiselleştirme API'sini bağlamak için, oluşturmak istediğiniz kaynağın anahtarına ve uç noktasına ihtiyacınız olacak. Hızlı başlangıçta anahtarınızı ve uç noktanızı aşağıdaki koda yapıştırabilirsiniz.
    • Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını ( F0 ) kullanabilirsiniz.

Ayarlama

Model güncelleştirme sıklığını değiştirme

Yeni Azure portal Yapılandırma sayfasındaki Kişiselleştirme kaynağında Model güncelleştirme sıklığını 30 saniye olarak değiştirebilirsiniz. Bu kısa süre hizmeti hızlı bir şekilde eğiterek her yineleme için en önemli eylemin nasıl değiştigini görmeni sağlar.

Model güncelleştirme sıklığını değiştirme

Kişiselleştirme döngüsü ilk kez örneği esndirilirken eğitilecek Ödül API'si çağrıları yoktur. Sıralama çağrıları her öğe için eşit olasılıklar değerine sahip olur. Uygulamanız yine de Her zaman RewardActionId çıktısını kullanarak içeriği sıralamalı.

Ödül bekleme sürelerini değiştirme

Bu Azure portal Yapılandırma sayfasındaki Kişiselleştirme kaynağında Ödül bekleme süresi'nin 30 saniye olarak değişmesini sağlar. Bu kısa süre hizmeti hızlı bir şekilde eğiterek her yineleme için en önemli eylemin nasıl değiştigini görmeni sağlar.

Ödül bekleme sürelerini değiştirme

İstemci kitaplığını yükleme

Python'u yükledikten sonra istemci kitaplığını şu şekilde yükleyebilirsiniz:

pip install azure-cognitiveservices-personalizer

Yeni python uygulaması oluşturma

Yeni bir Python dosyası oluşturun ve kaynağınıza ait uç nokta ile abonelik anahtarı için değişkenler oluşturun.

Önemli

Azure portala gidin. Önkoşullar bölümünde oluşturduğunuz kişiselleştirici kaynağı başarıyla dağıtılırsa, sonraki adımlar altında Kaynağa Git düğmesine tıklayın. Anahtar ve uç noktanızı kaynağın anahtar ve uç nokta sayfasında, kaynak yönetimi altında bulabilirsiniz.

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Örneğin, Azure Anahtar Kasası.

from azure.cognitiveservices.personalizer import PersonalizerClient
from azure.cognitiveservices.personalizer.models import RankableAction, RewardRequest, RankRequest
from msrest.authentication import CognitiveServicesCredentials

import datetime, json, os, time, uuid

key = "<paste-your-personalizer-key-here>"
endpoint = "<paste-your-personalizer-endpoint-here>"

Nesne modeli

Kişiselleştirme istemcisi, anahtarınızı içeren Microsoft.Rest.ServiceClientCredentials kullanarak Azure'da kimlik doğrulaması yapılan bir Kişiselleştirme İstemcisi nesnesidir.

İçeriğin en iyi tek öğesini istemek için bir RankRequest oluşturunve istemciye iletir. Rank yöntemi. Rank yöntemi bir RankResponse döndürür.

Kişiselleştirme'ye bir ödül puanı göndermek için EventOperations sınıfındaki Ödül yöntemine göndermek için olay kimliğini ve ödül puanını (değer) ayarlayın.

Bu hızlı başlangıçta ödülü belirlemek çok önemsizdir. Bir üretim sisteminde, ödül puanını neyin etkileyenin belirlenmesi ve ne kadar karmaşık bir işlem olduğu, zaman içinde değiştirmeye karar verilmenizi sağlar. Bu, Kişiselleştirme mimarinizin temel tasarım kararlarından biri olması gerekir.

Kod örnekleri

Bu kod parçacıkları Python için Kişiselleştirme istemci kitaplığıyla aşağıdakilerin nasıl gerçekleştirebileceğinizi gösterir:

İstemcinin kimliğini doğrulama

örneği oluşturma ve PersonalizerClient daha key önce oluşturduğunuz endpoint ile.

# Instantiate a Personalizer client
client = PersonalizerClient(endpoint, CognitiveServicesCredentials(key))

Eylem olarak temsil edilen içerik seçimlerini al

Eylemler, Kişiselleştirme'nin en iyi içerik öğesini seçmesi için istediğiniz içerik seçimlerini temsil ediyor. Eylem kümelerini ve bunların özelliklerini temsil etmek için Program sınıfına aşağıdaki yöntemleri ekleyin.

def get_actions():
    action1 = RankableAction(id='pasta', features=[{"taste":"salty", "spice_level":"medium"},{"nutrition_level":5,"cuisine":"italian"}])
    action2 = RankableAction(id='ice cream', features=[{"taste":"sweet", "spice_level":"none"}, { "nutritional_level": 2 }])
    action3 = RankableAction(id='juice', features=[{"taste":"sweet", 'spice_level':'none'}, {'nutritional_level': 5}, {'drink':True}])
    action4 = RankableAction(id='salad', features=[{'taste':'salty', 'spice_level':'none'},{'nutritional_level': 2}])
    return [action1, action2, action3, action4]
def get_user_timeofday():
    res={}
    time_features = ["morning", "afternoon", "evening", "night"]
    time = input("What time of day is it (enter number)? 1. morning 2. afternoon 3. evening 4. night\n")
    try:
        ptime = int(time)
        if(ptime<=0 or ptime>len(time_features)):
            raise IndexError
        res['time_of_day'] = time_features[ptime-1]
    except (ValueError, IndexError):
        print("Entered value is invalid. Setting feature value to", time_features[0] + ".")
        res['time_of_day'] = time_features[0]
    return res
def get_user_preference():
    res = {}
    taste_features = ['salty','sweet']
    pref = input("What type of food would you prefer? Enter number 1.salty 2.sweet\n")
    
    try:
        ppref = int(pref)
        if(ppref<=0 or ppref>len(taste_features)):
            raise IndexError
        res['taste_preference'] = taste_features[ppref-1]
    except (ValueError, IndexError):
        print("Entered value is invalid. Setting feature value to", taste_features[0]+ ".")
        res['taste_preference'] = taste_features[0]
    return res

Öğrenme döngüsü oluşturma

Kişiselleştirme öğrenme döngüsü, Derece ve Ödül çağrılarının bir döngüsüdür. Bu hızlı başlangıçta, içeriği kişiselleştirmek için her sıralama çağrısının ardından Kişiselleştirme'ye hizmetin ne kadar iyi performansa sahip olduğunu söylemek için bir ödül çağrısı yapılır.

Aşağıdaki kod, kullanıcıya komut satırı sırasında tercihlerini sorarak, bu bilgileri Kişiselleştirme'ye göndererek en iyi eylemi seçmesini, listeden seçim yapmak için müşteriye seçimi sunarak ve ardından hizmetin seçiminde ne kadar iyi olduğunu işaret eden Kişiselleştirme'ye bir ödül gönderme döngüsünde döngüye eklenir.

keep_going = True
while keep_going:

    eventid = str(uuid.uuid4())

    context = [get_user_preference(), get_user_timeofday()]
    actions = get_actions()

    rank_request = RankRequest( actions=actions, context_features=context, excluded_actions=['juice'], event_id=eventid)
    response = client.rank(rank_request=rank_request)
    
    print("Personalizer service ranked the actions with the probabilities listed below:")
    
    rankedList = response.ranking
    for ranked in rankedList:
        print(ranked.id, ':',ranked.probability)

    print("Personalizer thinks you would like to have", response.reward_action_id+".")
    answer = input("Is this correct?(y/n)\n")[0]

    reward_val = "0.0"
    if(answer.lower()=='y'):
        reward_val = "1.0"
    elif(answer.lower()=='n'):
        reward_val = "0.0"
    else:
        print("Entered choice is invalid. Service assumes that you didn't like the recommended food choice.")

    client.events.reward(event_id=eventid, value=reward_val)

    br = input("Press Q to exit, any other key to continue: ")
    if(br.lower()=='q'):
        keep_going = False

Kod dosyasını çalıştırmadan önce içerik seçimlerini alanaşağıdaki yöntemleri ekleyin:

  • get_user_preference
  • get_user_timeofday
  • get_actions

En iyi eylemi isteği

Derece isteğini tamamlamak için program, kullanıcıdan içerik seçimlerinin bir oluşturma currentContent tercihlerini sorar. İşlem, olarak gösterilen eylemlerin dışında tutulacak içerik excludeActions oluşturabilir. Sıralama isteği, yanıtı almak için eylemlere ve özelliklerine, currentContext özelliklerine, excludeActions'a ve benzersiz bir olay kimliğine ihtiyaç vardır.

Bu hızlı başlangıçta günün saati ve kullanıcı yemeği tercihinin basit bağlam özellikleri vardır. Üretim sistemlerinde eylemlerin ve özelliklerin belirlenmesi ve değerlendirilmesi önemsiz bir konu olabilir.

rank_request = RankRequest( actions=actions, context_features=context, excluded_actions=['juice'], event_id=eventid)
response = client.rank(rank_request=rank_request)

Ödül gönderme

Program, Ödül isteğinde gönderilecek ödül puanını almak için komut satırına kullanıcının seçimini alır, seçime sayısal bir değer atar ve ardından benzersiz olay kimliğini ve ödül puanını sayısal değer olarak Ödül API'sini gönderir.

Bu hızlı başlangıçta, basit bir sayı ödül puanı (sıfır veya 1) olarak atanıyor. Üretim sistemlerinde, özel gereksinimlerinize bağlı olarak Ödül çağrısına ne zaman ve nelerin gönderil olacağını belirlemek önemsiz bir konu olabilir.

reward_val = "0.0"
if(answer.lower()=='y'):
    reward_val = "1.0"
elif(answer.lower()=='n'):
    reward_val = "0.0"
else:
    print("Entered choice is invalid. Service assumes that you didn't like the recommended food choice.")

client.events.reward(event_id=eventid, value=reward_val)

Programı çalıştırma

Uygulamayı uygulama dizininize ait python ile çalıştırın.

python sample.py

Hızlı başlangıç programı, özellikler olarak bilinen kullanıcı tercihlerini toplamak için birkaç soru sorar ve ardından en önemli eylemi sağlar.

Kaynakları temizleme

Bilişsel hizmetler aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, onunla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar