Treinar o conjunto de dados e criar um modelo

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:
  • Chamar a API do Einstein Intent para treinar o conjunto de dados e criar um modelo.
  • Usar a API para consultar o status do treinamento.
  • Explicar algumas das estatísticas básicas retornadas pelo status do treinamento.

O que significa treinamento?

Em aprendizagem de máquina, treinamento é o processo pelo qual algoritmos são combinados com dados para criar um modelo. Os algoritmos “aprendem” com os dados fornecidos e a aprendizagem é encapsulada no modelo.

Em nosso cenário, o modelo é o artefato que retorna uma resposta para a pergunta “que tipo de serviço o usuário está solicitando?” O modelo baseia a resposta no texto inserido pelos usuários no formulário de solicitação de serviço.

Treinar o conjunto de dados

A melhor maneira de aprender sobre treinamento é se dedicar e fazê-lo. Agora que você tem um conjunto de dados que contém exemplos rotulados, é hora de treiná-lo.
  1. No comando cURL a seguir, substitua <TOKEN> pelo seu token e <DATASET_ID> pela ID do conjunto de dados. Em seguida, execute o comando na janela da linha de comando.
    curl -X POST -H "Authorization: Bearer <TOKEN>" -H "Cache-Control: no-cache" -H "Content-Type: multipart/form-data" -F "name=Service Request Routing Model" -F "datasetId=<DATASET_ID>" https://api.einstein.ai/v2/language/train
    A resposta da API será mais ou menos como este JSON. O treinamento de um conjunto de dados pode demorar um pouco, dependendo da quantidade de dados.
    {
      "datasetId": 1010060,
      "datasetVersionId": 0,
      "name": "Service Request Routing Model",
      "status": "QUEUED",
      "progress": 0,
      "createdAt": "2017-08-18T21:39:53.000+0000",
      "updatedAt": "2017-08-18T21:39:53.000+0000",
      "learningRate": 0,
      "epochs": 0,
      "queuePosition": 1,
      "object": "training",
      "modelId": "3XVRF4KPA4522DWDRDCQ4D4BEQ",
      "trainParams": null,
      "trainStats": null,
      "modelType": "text-intent"
    }

    Os campos mais importantes são status e modelId. O valor do campo status é EM FILA, o que indica que o processo de treinamento ainda não começou. O campo queuePosition indica que ele é o primeiro da fila. O campo modelId contém a ID do modelo. Anote a modelId, pois essa ID será usada sempre que você tiver que fazer referência ao modelo no código.

Obter o status do treinamento

Você sabe que o processo de treinamento está em fila e pronto para ser executado. Mas você quer saber quando o modelo ficará pronto.
  1. No comando cURL a seguir, substitua <TOKEN> pelo seu token e <MODEL_ID> pela ID do conjunto de dados. Em seguida, execute o comando na janela da linha de comando.
    curl -X GET -H "Authorization: Bearer <TOKEN>" -H "Cache-Control: no-cache" https://api.einstein.ai/v2/language/train/<MODEL_ID>
    A resposta da API será mais ou menos como JSON a seguir. O treinamento demora um pouco para ser concluído, dependendo do tamanho do conjunto de dados. O status EXECUTANDO indica que o processo ainda está em execução.
    {
      "datasetId": 1010060,
      "datasetVersionId": 0,
      "name": "Service Request Routing Model",
      "status": "RUNNING",
      "progress": 0,
      "createdAt": "2017-09-18T19:59:33.000+0000",
      "updatedAt": "2017-09-18T19:59:33.000+0000",
      "learningRate": 0,
      "epochs": 0,
      "object": "training",
      "modelId": "3XVRF4KPA4522DWDRDCQ4D4BEQ",
      "trainParams": null,
      "trainStats": null,
      "modelType": "text-intent"
    }
    O valor do campo status BEM-SUCEDIDO indica que o treinamento foi bem-sucedido e que o modelo está pronto para uso. Quando o modelo está pronto, a resposta da API é semelhante ao JSON a seguir. Verifique se o status é BEM-SUCEDIDO antes de prosseguir para a próxima unidade.
    {
      "datasetId": 1010060,
      "datasetVersionId": 6189,
      "name": "Service Request Routing Model",
      "status": "SUCCEEDED",
      "progress": 1,
      "createdAt": "2017-08-18T21:39:53.000+0000",
      "updatedAt": "2017-08-18T21:42:23.000+0000",
      "learningRate": 0,
      "epochs": 1000,
      "object": "training",
      "modelId": "3XVRF4KPA4522DWDRDCQ4D4BEQ",
      "trainParams": null,
      "trainStats": {
        "labels": 5,
        "examples": 150,
        "totalTime": "00:02:28:577",
        "transforms": null,
        "trainingTime": "00:02:25:646",
        "earlyStopping": true,
        "lastEpochDone": 49,
        "modelSaveTime": "00:00:00:579",
        "testSplitSize": 32,
        "trainSplitSize": 118,
        "datasetLoadTime": "00:00:02:931",
        "preProcessStats": null,
        "postProcessStats": null
      },
      "modelType": "text-intent"
    }

    O objeto trainStats contém informações sobre quanto tempo demorou cada processo do treinamento. Isso pode ser útil para medir os tempos de treinamento com base na quantidade de dados que você tem.

    Outro campo interessante é o campo epochs. Uma época é uma iteração de treinamento ou um aprovação completa de todos os exemplos do conjunto de dados. Ao treinar um conjunto de dados com o comando que usamos, a API selecionará uma quantidade padrão de épocas com base na quantidade de dados no conjunto de dados. No entanto, você pode transmitir o número de épocas que o processo de treinamento deve usar.

    No nosso conjunto de dados, a API escolheu 1.000 épocas ou iteração de treinamento. Mas o campo earlyStopping indica que o treinamento parou antes de completar as 1.000 épocas. E o campo lastEpochDone indica que o treinamento parou depois de completar 49 épocas.

    Por que ele parou antes de completar 1.000 épocas? Durante o processo de treinamento, se a API determinar que mais treinamento não vai melhorar a precisão do modelo, ela interromperá o treinamento mais cedo. Essa é uma das maneiras pela qual a API lida com vários detalhes para você.

Recursos