컨텍스트 및 작업

Important

2023년 9월 20일부터 새로운 Personalizer 리소스를 만들 수 없습니다. Personalizer 서비스는 2026년 10월 1일에 사용 중지됩니다.

Personalizer는 애플리케이션이 지정된 컨텍스트에서 사용자에게 표시해야 하는 내용을 학습하여 작동합니다. 컨텍스트 및 작업은 Personalizer에 전달하는 가장 중요한 두 가지 정보입니다. 컨텍스트는 현재 사용자 또는 시스템 상태에 대한 정보를 나타내며 작업은 선택할 수 있는 옵션입니다.

Context

컨텍스트에 대한 정보는 각 애플리케이션 및 사용 사례에 따라 달라지지만, 일반적으로 다음과 같은 정보를 포함할 수 있습니다.

  • 사용자에 관한 인구통계학상 및 프로필 정보
  • 사용자 에이전트와 같은 HTTP 헤더에서 추출한 정보, 또는 IP 주소에 기초한 역방향 지리적 조회와 같은 HTTP 정보에서 유도한 정보
  • 현재 시간에 관한 정보(예: 주, 주말 여부, 아침 또는 오후, 휴가철 여부 등)
  • 모바일 애플리케이션에서 추출한 정보(예: 위치, 이동 또는 배터리 레벨)
  • 사용자 행동의 기록 집계(예: 이 사용자가 가장 많이 본 동영상 장르)
  • 시스템 상태에 대한 정보입니다.

관련 데이터베이스, 센서 및 사용자가 보유하고 있는 시스템에서 컨텍스트에 관한 정보를 로드하는 것은 애플리케이션에서 처리해야 합니다. 컨텍스트 정보가 변하지 않는 경우 순위 API에 보내기 전에 애플리케이션에서 이 정보를 캐시에 기억하는 논리를 추가할 수 있습니다.

actions

작업은 옵션 목록을 나타냅니다.

작업 순위를 지정할 때 50개보다 많은 작업 단위로 보내지 않습니다. 이는 매번 50개의 작업과 같지만 달라질 수도 있습니다. 예를 들어 항목 10,000개로 이루어진 전자 상거래 애플리케이션용 제품 카탈로그가 있다면 추천 또는 필터링 엔진을 사용하여 상위 40대 고객과 같은 것을 결정하고 Personalizer를 사용하여 현재 컨텍스트에서 가장 많은 보상을 창출하는 작업을 찾을 수 있습니다.

작업 예제

순위 API에 보내는 작업은 맞춤화하려는 목적에 따라 달라집니다.

다음 몇 가지 예를 참조하세요.

목적 작업
새 웹 사이트에서 강조 표시되는 문서를 맞춤화합니다. 각 작업은 잠재적인 뉴스 기사입니다.
웹 사이트의 광고 위치를 최적화합니다. 각 작업은 광고용 레이아웃을 만들기 위한 레이아웃 또는 규칙입니다(예: 맨 위, 오른쪽, 작은 이미지, 큰 이미지).
추천 항목의 맞춤화한 순위를 쇼핑 웹 사이트에 표시합니다. 각 작업은 특정 제품입니다.
특정 사진에 적용할 필터와 같은 사용자 인터페이스 요소를 추천합니다. 각 작업은 서로 다른 필터일 수 있습니다.
사용자 의도를 구체화하거나 작업을 추천하기 위한 채팅 봇의 응답을 선택합니다. 각 작업은 응답을 해석하는 방법에 대한 옵션입니다.
검색 결과 목록의 맨 위에 표시할 내용 선택 각 작업은 맨 위에 있는 몇몇 검색 결과 중 하나입니다.

클라이언트 애플리케이션의 작업 로드

작업의 기능은 일반적으로 콘텐츠 관리 시스템, 카탈로그 및 추천 시스템에서 나올 수 있습니다. 관련 데이터베이스 및 사용자가 보유하고 있는 시스템에서 작업에 관한 정보를 로드하는 것은 애플리케이션에서 처리해야 합니다. 작업이 변하지 않거나 작업을 매번 로드하면 성능에 불필요한 영향을 미치는 경우 이 정보를 캐시에 기억하는 논리를 애플리케이션에 추가할 수 있습니다.

작업의 순위 지정 금지

경우에 따라 사용자에게 표시하지 않으려는 작업이 있습니다. 작업이 순위가 지정되지 않도록 하는 가장 좋은 방법은 제외된 작업 목록에 추가하거나 순위 요청에 전달하지 않는 것입니다.

경우에 따라 이벤트가 기본적으로 학습되는 것을 원하지 않을 수 있습니다. 즉, 특정 조건이 충족될 때만 이벤트를 학습시키려고 합니다. 예를 들어, 웹 페이지의 개인 설정 부분이 접힌 부분 아래에 있습니다(사용자는 개인 설정 콘텐츠와 상호 작용하기 전에 스크롤해야 함). 이 경우 전체 페이지를 렌더링하지만 사용자가 스크롤하고 개인 설정 콘텐츠와 상호 작용할 기회가 있는 경우에만 이벤트가 학습되기를 원합니다. 이러한 경우 최종 사용자가 상호 작용할 기회가 없는 기본 보상(및 학습) 이벤트를 할당하지 않도록 이벤트 활성화를 연기해야 합니다.

기능

컨텍스트와 가능한 작업은 모두 기능을 사용하여 설명됩니다. 기능은 보상을 최대화하기 위한 의사 결정 프로세스에 중요하다고 생각하는 모든 정보를 나타냅니다. 좋은 출발점은 각 타임스탬프에서 최선의 작업을 선택하는 임무를 맡고 있다고 상상하고 다음과 같이 자문해 보는 것입니다. "합리적 결정을 내리려면 어떤 정보가 필요하나요? 컨텍스트와 각 가능한 작업을 설명하는 데 사용할 수 있는 정보는 무엇인가요?" 기능은 일반적일 수도 있고 항목에 대해 구체적일 수도 있습니다.

Personalizer는 작업 및 컨텍스트에 대해 보낼 수 있는 기능이 무엇인지 규정하거나 제한하거나 고정하지 않습니다.

  • 시간이 경과함에 따라 컨텍스트 및 작업에 관한 기능을 추가 및 제거할 수 있습니다. Personalizer는 사용 가능한 정보에서 학습을 계속합니다.
  • 범주 기능의 경우 가능한 값을 미리 정의할 필요가 없습니다.
  • 숫자 기능의 경우 범위를 미리 정의할 필요가 없습니다.
  • 밑줄 _로 시작하는 기능 이름은 무시됩니다.
  • 기능 목록은 많을 수 있지만(수백 개) 간결한 기능 집합으로 시작하여 필요에 따라 확장하는 것이 좋습니다.
  • 작업 기능은 컨텍스트 기능과 상관관계가 있을 수도 있고 없을 수도 있습니다.
  • 사용할 수 없는 기능은 요청에서 생략해야 합니다. 지정된 요청에 대해 특정 기능의 값을 사용할 수 없는 경우 이 요청에 대한 기능을 생략합니다.
  • null 값이 있는 기능을 보내지 마세요. null 값은 원하지 않는 "null" 값이 있는 문자열로 처리됩니다.

시간이 지남에 따라 기능이 변경되는 것은 정상이며 자연스럽습니다. 그러나 Personalizer의 기계 학습 모델은 표시되는 기능에 따라 조정된다는 점에 유의합니다. 모든 새 기능이 포함된 요청을 보내는 경우 Personalizer의 모델은 과거 이벤트를 사용하여 현재 이벤트에 대한 최상의 작업을 선택할 수 없습니다. '안정적인' 기능 집합(되풀이 기능 포함)이 있으면 Personalizer의 기계 학습 알고리즘의 성능을 향상하는 데 도움이 됩니다.

컨텍스트 기능

  • 일부 컨텍스트 기능은 일부 시간에만 사용할 수 있습니다. 예를 들어, 사용자가 온라인 식료품점 웹 사이트에 로그인한 경우 컨텍스트에는 구매 내역을 설명하는 기능이 포함됩니다. 게스트 사용자는 이러한 기능을 사용할 수 없습니다.
  • 컨텍스트 기능이 하나 이상 있어야 합니다. Personalizer는 비어 있는 컨텍스트를 지원하지 않습니다.
  • 컨텍스트 기능이 모든 요청에 대해 동일한 경우 Personalizer는 전역적으로 최상의 작업을 선택합니다.

작업 기능

  • 모든 작업에 동일한 기능이 포함될 필요는 없습니다. 예를 들어, 온라인 식료품점 시나리오에서 전자레인지용 팝콘에는 "요리 시간" 기능이 있지만 오이에는 없습니다.
  • 특정 작업 ID에 대한 기능은 하루 동안 사용할 수 있지만 그 후에는 사용 불가능하게 될 수 있습니다.

예:

다음은 작업 기능에 대한 좋은 예입니다. 이는 각 애플리케이션에 따라 크게 달라집니다.

  • 작업의 특성을 포함하는 기능 예를 들어 동영상입니까 아니면 TV 시리즈입니까?
  • 과거에 이 작업과 상호 작용했을 수 있는 사용자 수에 관한 기능. 예를 들어 이 동영상은 주로 인구통계학상 A 또는 B에 속하는 사람들이 보며, 일반적으로 한 번만 재생합니다.
  • 작업을 보는 사용자 수의 특성에 관한 기능. 예를 들어 썸네일에 표시된 동영상의 포스터는 얼굴, 자동차 또는 경치를 포함합니까?

지원되는 기능 형식

Personalizer는 문자열, 숫자 및 부울 형식의 기능을 지원합니다. 애플리케이션은 몇 가지 예외를 제외하고 대부분 문자열 기능을 사용할 가능성이 높습니다.

Personalizer에서 기능 형식이 기계 학습에 미치는 영향

  • 문자열: 문자열 형식의 경우 모든 키-값(기능 이름, 기능 값) 조합은 One-Hot 기능으로 처리됩니다(예: category:"Produce" 및 category:"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분 미만 길이) 동영상으로 분류할 수 있습니다. 이는 매우 정교한 기능입니다. 반면에 같은 항목 수천 개가 항목 간에 동일한 값을 거의 갖지 않을 "제목"이라는 특성을 포함할 수 있습니다. 이는 그다지 정교하지 않거나 대략적인 기능입니다.

정교성이 높은 기능을 포함하면 Personalizer가 항목 간에 학습을 추정하는 데 도움이 됩니다. 그러나 기능이 몇 개만 있고 해당 기능이 너무 정교한 경우 Personalizer는 몇몇 버킷만 포함하는 콘텐츠를 선택하도록 대상을 정밀하게 설정하려고 합니다.

기능 디자인 및 형식 지정과 관련된 일반적인 문제

  • 카디널리티가 높은 기능을 전송합니다. 많은 이벤트에서 반복되지 않는 고유한 값을 가진 기능입니다. 예를 들어, 한 개인에 대한 PII(예: 이름, 전화번호, 신용 카드 번호, IP 주소)는 Personalizer에서 사용하면 안 됩니다.
  • 사용자 ID 보내기 사용자 수가 많을 경우 이 정보는 평균 보상 점수를 최대화하기 위한 Personalizer 학습과 관련이 없을 것입니다. 사용자 ID(PII가 아닌 경우에도)를 보내면 모델에 더 많은 노이즈가 추가될 수 있으므로 권장하지 않습니다.
  • 몇 번 이상 거의 발생하지 않는 고유한 값 전송. 기능을 더 높은 세부 수준으로 버킷화하는 것이 좋습니다. 예를 들어, "Context.TimeStamp.Day":"Monday" 또는 "Context.TimeStamp.Hour":13와 같은 기능을 갖는 것은 고유한 값이 각각 7개와 24개뿐이므로 유용할 수 있습니다. 그러나 "Context.TimeStamp":"1985-04-12T23:20:50.52Z"는 매우 정확하고 매우 많은 고유 값을 포함하므로 Personalizer에서 학습하기가 매우 어렵습니다.

기능 세트 개선

기능 평가 작업을 실행하여 사용자 동작을 분석합니다. 이렇게 하면 과거 데이터를 조사하여 긍정적 보상에 크게 기여하는 기능과 기여도가 작은 기능을 확인할 수 있습니다. 유용한 기능을 확인할 수 있으면 사용자 및 애플리케이션에서 결과를 훨씬 더 개선하기 위해 Personalizer에 보내기에 더 유리한 기능을 선택할 수 있습니다.

AI 및 Azure AI 서비스를 사용하여 기능 세트 확장

AI 및 즉시 실행할 수 있는 Azure AI 서비스는 Personalizer에 매우 강력한 추가 기능이 될 수 있습니다.

AI 서비스를 사용하여 항목을 미리 처리하면 맞춤화에 유용할 가능성이 있는 정보를 자동으로 추출할 수 있습니다.

예시:

  • Video Indexer를 통해 동영상 파일을 실행하여 장면 요소, 텍스트, 감정 및 기타 많은 특성을 추출할 수 있습니다. 그런 다음, 원본 항목 메타데이터에 없었던 특성을 반영하도록 해당 특성을 더 정교하게 만들 수 있습니다.
  • 개체 감지를 통해 이미지를 반영하고 감정을 통해 얼굴을 반영할 수 있는 식입니다.
  • 감정 엔터티를 추출하고 Bing 지식 그래프 등을 사용하여 엔터티를 확장하면 텍스트의 정보를 늘릴 수 있습니다.

다음과 같은 여러 가지 다른 Azure AI 서비스를 사용할 수 있습니다.

포함을 기능으로 사용

다양한 Machine Learning 모델의 포함은 Personalizer에 효과적인 기능인 것으로 입증되었습니다.

  • 대규모 언어 모델의 포함
  • Azure AI Vision 모델의 포함

네임스페이스

선택적으로 네임스페이스를 사용하여 기능을 구성할 수 있습니다(컨텍스트 및 작업 기능 모두에 관련됨). 네임스페이스는 항목별, 원본별 또는 애플리케이션에서 의미가 있는 기타 그룹별로 기능을 그룹화하는 데 사용할 수 있습니다. 네임스페이스가 사용되는지 여부와 사용해야 하는 네임스페이스를 결정합니다. 네임스페이스는 기능을 고유한 집합으로 구성하고 유사한 이름을 가진 기능을 명확하게 합니다. 네임스페이스는 기능 이름에 추가되는 ' 접두사'로 생각할 수 있습니다. 네임스페이스는 중첩되어서는 안 됩니다.

다음은 애플리케이션에 사용하는 기능 네임스페이스의 예입니다.

  • 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 예시

actions

순위를 호출할 때에는 여러 작업을 보내고 해당 작업 중에서 선택하게 합니다.

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

Context

컨텍스트는 순위 API에 보내는 JSON 개체로 표시됩니다.

JSON 개체에는 중첩된 JSON 개체와 단순 속성/값이 포함될 수 있습니다. 배열 항목이 숫자인 경우에만 배열을 포함할 수 있습니다.

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

네임스페이스

다음 JSON에서 user, environment, deviceactivity는 네임스페이스입니다.

참고 항목

UTF-8을 기반으로 하고 다른 문자로 시작하는 기능 네임스페이스 이름을 사용하는 것이 좋습니다. 예를 들어 user, environment, deviceactivityu, e, da로 시작합니다. 현재 첫 번째 문자가 동일한 네임스페이스가 있으면 충돌이 발생할 수 있습니다.

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

다음 단계

보충 학습