Entender como criar projetos de classificação de texto
Projetos de classificação de textos personalizada são seu workspace para criar, treinar, aprimorar e implantar seu modelo de classificação. Você pode trabalhar com o projeto de duas maneiras: usando o Language Studio ou a API REST. O Language Studio é a GUI que será usada no laboratório, mas a API REST tem a mesma funcionalidade. Qualquer que seja o método de sua escolha, as etapas para desenvolver o modelo são as mesmas.
Ciclo de vida do projeto da Linguagem de IA do Azure
- Definir rótulos: entenda os dados que deseja classificar e identifique os possíveis rótulos nos quais deseja categorizá-los. No exemplo de videogame, os rótulos seriam "Ação", "Aventura", "Estratégia" e assim por diante.
- Marcar dados: marque ou rotule seus dados existentes, especificando os rótulos de cada arquivo. A rotulagem de dados é importante, pois é assim que o modelo aprende a classificar arquivos futuros. A melhor prática é ter diferenças claras entre os rótulos para evitar ambiguidades e fornecer bons exemplos de cada rótulo para o modelo aprender. Por exemplo, o jogo "Quest for the Mine Brush" foi rotulado como "Adventure" e o jogo "Flight Trainer" foi rotulado como "Action".
- Treinar modelos: treine seu modelo com os dados rotulados. O treinamento ensinará ao modelo quais tipos de resumos de videogame devem ser rotulados com qual gênero.
- Exibir o modelo: após o modelo ser treinado, exiba os resultados dele. O modelo é pontuado entre 0 e 1 com base na precisão e no recall dos dados testados. Observe qual gênero não teve um bom desempenho.
- Aprimorar o modelo: aprimore o modelo vendo quais classificações falharam na avaliação do rótulo certo, veja a distribuição de rótulos e descubra quais dados adicionar para aprimorar o desempenho. Por exemplo, você pode descobrir que o modelo mistura jogos de "Aventura" e "Estratégia". Tente encontrar mais exemplos de cada rótulo para adicionar ao seu conjunto de dados para treinar o modelo novamente.
- Implantar o modelo: quando o modelo tiver o desempenho desejado, implante-o para disponibilizá-lo por meio da API. O modelo pode ser chamado de "GameGenres" e, uma vez implantado, pode ser usado para classificar resumos de jogos.
- Classificar texto: use o modelo para classificar texto. O laboratório descreve como usar a API, e você pode conferir a referência de API
Como dividir conjuntos de dados para treinamento
Ao rotular seus dados, é possível especificar qual é o conjunto de dados desejado para cada arquivo:
- Treinamento ─ O conjunto de dados de treinamento é usado para realmente treinar o modelo. Os dados e rótulos fornecidos são inseridos no algoritmo de aprendizado de máquina para ensinar o modelo quais dados devem ser classificados com qual rótulo. O conjunto de dados de treinamento será o maior dos dois conjuntos de dados e a recomendação é que ele tenha cerca de 80% de seus dados rotulados.
- Teste ─ O conjunto de dados de teste contém dados rotulados que são usados para verificar seu modelo após o treinamento. O Azure envia os dados do conjunto de dados de teste ao modelo e compara a saída com sua rotulagem de dados para determinar o desempenho do modelo. O resultado dessa comparação é como o modelo é pontuado e ajuda você a saber como aprimorar seu desempenho preditivo.
Durante a etapa Treinar modelo, há duas opções de como treinar o modelo.
- Divisão automática – o Azure divide aleatoriamente todos os seus dados nos percentuais especificados e os aplica no treinamento do modelo. Essa é a melhor opção quando você tem um conjunto de dados maior, os dados são naturalmente mais consistentes ou a distribuição dos dados abrange extensivamente suas classes.
- Divisão manual – especifique manualmente quais arquivos devem estar em cada conjunto de dados. Quando você enviar o trabalho de treinamento, o serviço de Linguagem de IA do Azure informará a divisão do conjunto de dados e a distribuição. Essa divisão é melhor utilizada com conjuntos de dados menores para garantir a distribuição correta das classes e a variação dos dados para treinar corretamente o modelo.
Para usar a divisão automática, coloque todos os arquivos no conjunto de dados de treinamento ao rotular seus dados (esta opção é o padrão). Para usar a divisão manual, durante a rotulagem de seus dados, especifique quais arquivos devem estar no conjunto de dados de teste e quais devem estar no de treinamento.
Opções de implantação
A Linguagem de IA do Azure permite que cada projeto crie vários modelos e várias implantações, cada uma com o próprio nome exclusivo. Os benefícios incluem a capacidade de:
- Testar dois modelos lado a lado
- Comparar como a divisão dos conjuntos de dados afeta o desempenho
- Implantar várias versões do modelo
Observação
Cada projeto tem um limite de dez nomes de implantação
Durante a implantação, você pode escolher o nome do modelo implantado, pode ser selecionado ao enviar uma tarefa de classificação:
<...>
"tasks": [
{
"kind": "CustomSingleLabelClassification",
"taskName": "MyTaskName",
"parameters": {
"projectName": "MyProject",
"deploymentName": "MyDeployment"
}
}
]
<...>
Usando a API REST
A API REST disponível para o serviço Linguagem de IA do Azure permite o desenvolvimento na CLI de projetos da Linguagem de IA do Azure da mesma forma que o Language Studio fornece uma interface do usuário para a criação de projetos. O Language Studio é explorado em mais detalhes no laboratório deste módulo.
Padrão de uso da API
A API do serviço de Linguagem de IA do Azure opera de maneira assíncrona para a maioria das chamadas. Em cada etapa, uma solicitação é enviada primeiro ao serviço e, em seguida, ele é consultado novamente por meio de uma chamada subsequente para obter o status ou o resultado.
Com cada solicitação, um cabeçalho é necessário para autenticar a solicitação:
Chave | Valor |
---|---|
Ocp-Apim-Subscription-Key |
A chave para o seu recurso da Linguagem de IA do Azure |
Enviar solicitação inicial
A URL à qual a solicitação deve ser enviada varia de acordo com a etapa em que você está, mas todas são prefixadas com o ponto de extremidade fornecido pelo recurso Linguagem de IA do Azure.
Por exemplo, para treinar um modelo, você criaria um POST para a URL que seria semelhante ao seguinte:
<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Espaço reservado | Valor | Exemplo |
---|---|---|
<YOUR-ENDPOINT> |
O ponto de extremidade de sua solicitação à API | https://<your-custom-resource>.cognitiveservices.azure.com |
<PROJECT-NAME> |
O nome do projeto (o valor diferencia maiúsculas de minúsculas) | myProject |
O corpo a seguir seria anexado à solicitação:
{
"modelLabel": "<MODEL-NAME>",
"trainingConfigVersion": "<CONFIG-VERSION>",
"evaluationOptions": {
"kind": "percentage",
"trainingSplitPercentage": 80,
"testingSplitPercentage": 20
}
}
Chave | Valor |
---|---|
<YOUR-MODEL> |
O nome do modelo. |
trainingConfigVersion |
A versão do modelo a ser usada para treinar seu modelo. |
runValidation |
Valor booliano para execução da validação no conjunto de teste. |
evaluationOptions |
Especifica as opções de avaliação. |
kind |
Especifica o tipo de divisão de dados. Poderá ser percentage se você estiver usando uma divisão automática ou set se dividir manualmente o conjunto de dados |
testingSplitPercentage |
Campo inteiro necessário apenas se type for percentual. Especifica a divisão de teste. |
trainingSplitPercentage |
Campo inteiro necessário apenas se type for percentual. Especifica a divisão de treinamento. |
A resposta à solicitação acima será um 202
, o que significa que ela foi bem-sucedida. Procure o valor location
nos cabeçalhos de resposta, que será semelhante à seguinte URL:
<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Chave | Valor |
---|---|
<JOB-ID> |
Identificador da solicitação |
Essa URL será usada na próxima etapa para obter o status de treinamento.
Obter Status de Treinamento
Para obter o status do treinamento, use a URL do cabeçalho da resposta da solicitação para enviar uma solicitação GET, com o mesmo cabeçalho que fornece a chave do serviço de Linguagem de IA do Azure para autenticação. O corpo da resposta será parecido com o seguinte JSON:
{
"result": {
"modelLabel": "<MODEL-NAME>",
"trainingConfigVersion": "<CONFIG-VERSION>",
"estimatedEndDateTime": "2023-05-18T15:47:58.8190649Z",
"trainingStatus": {
"percentComplete": 3,
"startDateTime": "2023-05-18T15:45:06.8190649Z",
"status": "running"
},
"evaluationStatus": {
"percentComplete": 0,
"status": "notStarted"
}
},
"jobId": "<JOB-ID>",
"createdDateTime": "2023-05-18T15:44:44Z",
"lastUpdatedDateTime": "2023-05-18T15:45:48Z",
"expirationDateTime": "2023-05-25T15:44:44Z",
"status": "running"
}
Treinar um modelo pode levar algum tempo, portanto, verifique periodicamente a URL de status até que a resposta status
retorne succeeded
. Depois que o treinamento for bem-sucedido, você poderá exibir, verificar e implantar seu modelo.
Consumindo um modelo implantado
Usar o modelo para classificar texto segue o mesmo padrão descrito acima, com uma solicitação POST enviando o trabalho e uma solicitação GET para recuperar os resultados.
Enviar texto para classificação
Para usar o modelo, envie um POST para o ponto de extremidade de análise na seguinte URL:
<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Espaço reservado | Valor | Exemplo |
---|---|---|
<YOUR-ENDPOINT> |
O ponto de extremidade de sua solicitação à API | https://<your-custom-resource>.cognitiveservices.azure.com |
Importante
Lembre-se de incluir a chave do recurso no cabeçalho para Ocp-Apim-Subscription-Key
A seguinte estrutura JSON seria anexada à solicitação:
{
"displayName": "Classifying documents",
"analysisInput": {
"documents": [
{
"id": "1",
"language": "<LANGUAGE-CODE>",
"text": "Text1"
},
{
"id": "2",
"language": "<LANGUAGE-CODE>",
"text": "Text2"
}
]
},
"tasks": [
{
"kind": "<TASK-REQUIRED>",
"taskName": "<TASK-NAME>",
"parameters": {
"projectName": "<PROJECT-NAME>",
"deploymentName": "<DEPLOYMENT-NAME>"
}
}
]
}
Chave | Valor |
---|---|
<TASK-REQUIRED> |
A tarefa que você está solicitando. A tarefa é CustomMultiLabelClassification para projetos de diversos rótulos ou CustomSingleLabelClassification para projetos de rótulo único |
<LANGUAGE-CODE> |
O código de idioma, como en-us . |
<TASK-NAME> |
Nome da sua tarefa. |
<PROJECT-NAME> |
O nome do seu projeto. |
<DEPLOYMENT-NAME> |
O nome de sua implantação. |
A resposta à solicitação acima será um 202
, o que significa que ela foi bem-sucedida. Procure o valor operation-location
nos cabeçalhos de resposta, que será semelhante à seguinte URL:
<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Chave | Valor |
---|---|
<YOUR-ENDPOINT> |
O ponto de extremidade de sua solicitação à API |
<JOB-ID> |
Identificador da solicitação |
Essa URL é usada para obter os resultados da tarefa.
Obter os resultados da classificação
Envie uma solicitação GET para o ponto de extremidade da solicitação anterior, com o mesmo cabeçalho para autenticação. O corpo da resposta será parecido com o seguinte JSON:
{
"createdDateTime": "2023-05-19T14:32:25.578Z",
"displayName": "MyJobName",
"expirationDateTime": "2023-05-19T14:32:25.578Z",
"jobId": "xxxx-xxxxxx-xxxxx-xxxx",
"lastUpdateDateTime": "2023-05-19T14:32:25.578Z",
"status": "succeeded",
"tasks": {
"completed": 1,
"failed": 0,
"inProgress": 0,
"total": 1,
"items": [
{
"kind": "customSingleClassificationTasks",
"taskName": "Classify documents",
"lastUpdateDateTime": "2022-10-01T15:01:03Z",
"status": "succeeded",
"results": {
"documents": [
{
"id": "<DOC-ID>",
"class": [
{
"category": "Class_1",
"confidenceScore": 0.0551877357
}
],
"warnings": []
}
],
"errors": [],
"modelVersion": "2022-04-01"
}
}
]
}
}
O resultado da classificação está dentro do objeto results
da matriz de itens, para cada documento enviado.