클라이언트 이벤트 데이터로 선행 학습된 모델 개선(v3)

Cloud Talent Solution은 머신러닝을 채용정보 검색 환경에 적용하여 일반적인 키워드 기반 방법의 한계를 훨씬 뛰어넘는 우수한 검색결과를 구직자에게 제공하는 서비스입니다. CTS는 처음부터 관련성 모델 및 직업/기술 온톨로지를 채용정보 세부정보에 적용합니다. 구직자의 활동에 따라 클라이언트 이벤트를 기록하면 구직자에게 반환되는 결과를 개선할 수 있습니다.

이 기능 활용 방법에는 두 가지가 있으며 이 가이드에서 모두 설명합니다. Cloud Pub/Sub를 사용하여 Cloud Talent Solution에 메시지를 보내는 인증 문제를 무시하고 분석 프레임워크를 구현하는 간결한 API 세트를 제공하는 createClientEventRequest API 메서드를 사용하는 것이 좋습니다.

구직자가 특정 작업을 수행하는 경우, API를 사용하여 해당 작업을 기록할 수 있습니다. 예를 들어, 구직자 또는 서비스와 상호작용하는 다른 개체에서는 압축되거나 잘린 형식의 검색결과 목록과 같이 자신의 시각에서 렌더링된 채용정보(또는 채용정보 목록)를 가지고 있습니다. 이러한 경우 Cloud Talent Solution에 IMPRESSION 이벤트를 전송하여 검색결과의 컨텍스트 및 구직자가 볼 수 있는 내용을 제공할 수 있습니다. 뿐만 아니라 구직자가 채용정보 결과를 클릭하여 전체 세부정보를 조회하면 VIEW 이벤트를 전송하여 구직자가 해당 직책에 관심을 보인 사실을 등록할 수 있습니다.

용도

다음 예시는 API를 사용하여 Cloud Talent Solution에 메시지를 보내는 방법을 보여줍니다. 구직자 또는 서비스와 상호작용하는 다른 개체에서는 압축되거나 잘린 형식의 검색결과 목록과 같이 자신의 시각에서 렌더링된 채용정보(또는 채용정보 목록)를 가지고 있습니다. 이 이벤트는 일반적으로 구직자가 한 페이지에서 채용정보 목록을 열람하는 것과 관련이 있습니다.

자바

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.


public static void createClientEvent(String eventId, String requestId,
    List<String> relatedJobNames)
    throws IOException {
  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
  String date = dateFormat.format(new Date());

  ClientEvent clientEventToBeCreated = new ClientEvent()
      .setCreateTime(date)
      .setEventId(eventId)
      .setParentEventId("NULL")
      .setJobEvent(
          new JobEvent().setJobs(relatedJobNames)
              .setType("VIEW"))
      .setRequestId(requestId);
  CreateClientEventRequest createClientEventRequest = new CreateClientEventRequest()
      .setClientEvent(clientEventToBeCreated);

  ClientEvent returnedEvent = talentSolutionClient.projects().clientEvents()
      .create(DEFAULT_PROJECT_ID, createClientEventRequest).execute();
  System.out.println(returnedEvent);
}

Python

Cloud Talent Solution 클라이언트 설치 및 생성에 대한 자세한 내용은 Cloud Talent Solution 클라이언트 라이브러리를 참조하세요.

def create_client_event(client_service, event_id, request_id, related_job_names):
    now = datetime.datetime.now()
    date = now.strftime('%Y-%m-%dT%H:%M:%SZ')

    client_event_to_be_created = {
        'create_time': date,
        'event_id': event_id,
        'parent_event_id': 'NULL',
        'job_event': {
            'jobs': related_job_names,
            'type': 'VIEW'
        },
        'request_id': request_id
    }
    request = {
        'client_event': client_event_to_be_created
    }
    response = client_service.projects().clientEvents().create(
        parent=parent, body=request).execute()
    print(response)

사용 가능한 이벤트 유형의 전체 목록은 이벤트 유형을 참조하세요.

Cloud Pub/Sub를 사용하여 클라이언트 이벤트 기록

이 기능을 활용하려면 구직자의 쿼리를 기반으로 한 결과에 대한 구직자 반응을 캡처하는 Cloud Talent Solution에 구조화된 메시지를 보냅니다. 이러한 메시지는 Cloud Pub/Sub을 사용하여 Cloud Talent Solution에 전송됩니다. 해당 위치에서 Cloud Talent Solution은 테넌트 사이트의 메시지를 파싱하여 머신러닝 모델에 제공합니다.

메시지 형식 및 Pub/Sub 요청은 아래에서 설명됩니다.

다양한 시나리오 및 워크플로

다음 두 가지 예에서는 구직자가 채용정보를 검색 및 확인하고 채용에 지원하는 다양한 시나리오를 보여줍니다.

프로젝트 p-jobs 및 주제 cloud-jobs-events대해서만 게시해야합니다.

워크플로 1

  1. 구직자가 검색을 수행합니다. 예를 들면 Product mgr SF입니다.

    검색결과가 구직자에게 반환됩니다.

    고객의 서버로 다시 전송된 채용정보 검색 응답 객체에는 고유한 requestId(예: 8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==)가 포함되어 있습니다. 이 SearchJobsRequest API 호출에 requestId를 사용합니다.

    Cloud Talent Solution에 IMPRESSION 메시지를 보냅니다.

    샘플 이벤트 메시지:

    {
      "eventId": "ID1",
      "eventType": "IMPRESSION",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000000", "jobs/4000000001","jobs/4000000002",
      "jobs/4000000003", "jobs/4000000004"]
      "eventTimestampMillis": 1494379614309
    }
    
  2. 구직자가 결과(채용 공고)를 선택하여 채용정보의 전체 세부정보를 확인합니다.

    Cloud Talent Solution에 VIEW 메시지를 보냅니다.

    {
      "eventId": "ID2",
      "eventType": "VIEW",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000000"]
      "eventTimestampMillis": 1494379614311
    }
    
  3. 구직자가 열람한 채용 공고에 지원합니다.

    a. 구직자가 동일한 도메인 내 페이지(내부 지원 페이지)로 리디렉션되면 Cloud Talent Solution에 APPLICATION_START 메시지를 보냅니다.

    {
      "eventId": "ID3",
      "eventType": "APPLICATION_START",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000000"]
      "eventTimestampMillis": 1494379614310
    }
    

    b. 구직자가 외부 지원 페이지로 리디렉션되는 경우 Cloud Talent Solution에 APPLICATION_REDIRECT 메시지를 보냅니다.

       {
         "eventId": "ID3",
         "eventType": "APPLICATION_REDIRECT",
         "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
         "relatedJobNames": ["jobs/4000000000"]
         "eventTimestampMillis": 1494379614310
       }
    
  4. 구직자가 내부 지원을 완료하면 Cloud Talent Solution에 APPLICATION_FINISH 메시지를 보냅니다.

    {
      "eventId": "ID4",
      "eventType": "APPLICATION_FINISH",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000000"]
      "eventTimestampMillis": 1494379614311
    }
    
  5. 구직자가 검색결과로 돌아갑니다. 또는 채용 공고를 클릭하지 않은 경우 결과의 2페이지로 넘어갑니다.

    2페이지의 다음 결과 세트가 포함된 IMPRESSION 메시지를 Cloud Talent Solution에 보냅니다. 참고: 두 번째 결과 페이지를 생성하는 SearchJobsRequest API 호출의 응답으로 생성되는 새로운 requestId가 있습니다. (예: 99e5b99c-f1ba-4f85-b17d-ccf878f451f9:APAb7IRESj+/Hzwa3bBd54P3qPx2yOWm5w==).

    {
      "eventId": "ID5",
      "eventType": "IMPRESSION",
      "requestId": "99e5b99c-f1ba-4f85-b17d-ccf878f451f9:APAb7IRESj+/Hzwa3bBd54P3qPx2yOWm5w==",
      "relatedJobNames": ["jobs/4000000005", "jobs/4000000006","jobs/4000000007",
      "jobs/4000000008", "jobs/4000000009"]
      "eventTimestampMillis": 1494379614400
    }
    
  6. 구직자가 검색결과의 3페이지로 넘어갑니다.

    다음 결과 세트가 포함된 IMPRESSION 메시지를 Cloud Talent Solution에 보냅니다. 참고: 새로운 requestId가 있습니다(예: e2d2b916-78c3-4c65-aecc-d8452bc0afb0:APAb7IRvCsNPiRXYkgF8PN5e8BkbFzKOyg==).

    {
      "eventId": "ID6",
      "eventType": "IMPRESSION",
      "requestId": "e2d2b916-78c3-4c65-aecc-d8452bc0afb0:APAb7IRvCsNPiRXYkgF8PN5e8BkbFzKOyg==",
      "relatedJobNames": ["jobs/4000000010", "jobs/4000000011","jobs/4000000012",
      "jobs/400000013", "jobs/4000000014"]
      "eventTimestampMillis": 1494379614500
    }
    

워크플로 2

  1. 구직자가 검색을 수행합니다. 예를 들면 Product mgr SF입니다.

    검색결과가 구직자에게 반환됩니다.

    채용정보 검색 응답 객체에는 고유한 requestId(예: a2179a9b-cf73-413e-8076-98af08b991ad)가 포함되어 있습니다. 이 SearchJobsRequest API 호출과 관련되어 이후에 발생하는 모든 메시지에 이 requestId를 사용합니다.

    Cloud Talent Solution에 IMPRESSION 메시지를 보냅니다.

    {
      "eventId": "ID1",
      "eventType": "IMPRESSION",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000000", "jobs/4000000001","jobs/4000000002",
      "jobs/4000000003", "jobs/4000000004"]
    , "eventTimestampMillis": 1494379614309
    }
    
  2. 구직자가 결과(채용 공고)를 선택하여 채용정보의 전체 세부정보를 확인합니다.

    Cloud Talent Solution에 VIEW 메시지를 보냅니다.

    {
      "eventId": "ID2",
      "eventType": "VIEW",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000000"]
      "eventTimestampMillis": 1494379614311
    }
    
  3. 구직자가 APPLICATION_QUICK_SUBMISSION의 설명대로 한 번 클릭하여 채용에 지원합니다.

    다음 결과 세트가 포함된 APPLICATION_QUICK_SUBMISSION 메시지를 Cloud Talent Solution에 보냅니다.

    {
      "eventId": "ID3",
      "eventType": "APPLICATION_QUICK_SUBMISSION",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000000"]
      "eventTimestampMillis": 1494379614500
    }
    
  4. 구직자가 다음 작업을 수행합니다.

    a. 구직자가 검색결과로 돌아가 검색결과 페이지에서 직접 채용정보에 지원합니다. 지원 프로세스는 APPLICATION_QUICK_SUBMISSION에 정의된 것보다 긴 프로세스입니다. 즉, 다중 단계 지원 프로세스입니다.

    Cloud Talent Solution에 APPLICATION_START_FROM_SERP 메시지를 보냅니다.

    {
      "eventId": "ID4",
      "eventType": "APPLICATION_START_FROM_SERP",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000014"]
      "eventTimestampMillis": 1494379927500
    }
    

    b. 구직자가 채용정보 지원을 완료합니다. Cloud Talent Solution에 APPLICATION_FINISH 메시지를 보냅니다.

    {
      "eventId": "ID5",
      "eventType": "APPLICATION_FINISH",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000014"]
      "eventTimestampMillis": 1494379935500
    

    }

  5. 구직자가 검색결과로 돌아가 검색결과 페이지에서 직접 채용정보에 지원합니다. 지원 프로세스는 지원자 진행 상황을 추적할 수 없는 테넌트 사이트(외부 지원) 외부에 있는 다른 도메인으로 구직자를 리디렉션합니다.

    Cloud Talent Solution에 APPLICATION_REDIRECT_FROM_SERP 메시지를 보냅니다.

    {
      "eventId": "ID6",
      "eventType": "APPLICATION_START_FROM_SERP",
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "relatedJobNames": ["jobs/4000000017"]
      "eventTimestampMillis": 149438807500
    }
    

    APPLICATION_REDIRECT와 다른 점은 구직자가 다시 라우팅될 때 채용정보 설명 페이지에 있다는 점입니다.

이벤트 메시지

필수 필드:

  • eventId(고객 정의): Cloud Talent Solution으로 전송된 각 메시지에는 고유한 eventId가 있어야 합니다. 중복되지 않도록 하려면 이 필드를 정의하는 동안 타임스탬프를 포함하는 것이 좋습니다. 이 필드의 최대 길이는 255자입니다.

  • requestId는 채용정보 검색 응답 객체가 반환한 requestId의 값입니다. 이 값은 특정 SearchJobsRequest API 호출에 고유한 값으로, 원래의 검색 IMPRESSION 이벤트에서 파생된 모든 후속 메시지에 사용됩니다. 새 SearchJobsRequest API 호출이 수행되면(예: 구직자가 결과의 다음 페이지로 이동) requestId가 변경됩니다.

    requestID가 포함되지 않은 pubsub 메시지는 삭제됩니다.

  • eventTypeVIEW 또는 IMPRESSION 같은 이벤트 유형입니다. 전체 값 목록은 EventType 참조를 확인하세요. 모델 개선을 사용 설정하는 데 필요한 최소 필드는 IMPRESSION, VIEW, APPLICATION_START(및/또는 APPLICATION_REDIRECT)입니다.

  • relatedJobNames: 이벤트가 발생했을 때 구직자에게 표시되는 모든 채용정보에 대한 채용정보 이름 값입니다. IMPRESSION 이벤트의 경우 페이지의 모든 채용정보 목록입니다. VIEW 이벤트의 경우 열람한 채용정보의 이름이 됩니다. 이름 값은 projects/project-id/jobs/12343213 등의 형식으로 되어 있습니다(정의는 채용정보 필드 참조).

  • eventTimestampMillis 해당 세대부터 밀리초로 측정된 이벤트의 타임스탬프입니다. 이 타임스탬프는 메시지가 전송되었을 때가 아니라 이벤트가 실제로 발생했을 때 반영되어야 합니다.

메시지 보내기

이벤트 메시지는 특정 프로젝트 ID와 주제 ID를 사용하여 Cloud Pub/Sub 서비스에 전송되어야 합니다. 이를 수행하는 방법은 빠른 시작: Cloud Talent Solution 클라이언트 이벤트에 맞게 미세 조정을 참조하세요.