Compreender como criar projetos de classificação de texto
Projetos de classificação de texto personalizados são seu espaço de trabalho para criar, treinar, melhorar e implantar seu modelo de classificação. Você pode trabalhar com seu projeto de duas maneiras: através do Language Studio e através da API REST. Language Studio é a GUI que será usada no laboratório, mas a API REST tem a mesma funcionalidade. Independentemente do método que preferir, os passos para desenvolver o seu modelo são os mesmos.
Ciclo de vida do projeto Azure AI Language
- Definir etiquetas: compreender os dados que pretende classificar, identificar as possíveis etiquetas em que pretende categorizar. No nosso exemplo de videogame, nossos rótulos seriam "Ação", "Aventura", "Estratégia" e assim por diante.
- Dados da marca: marque ou rotule seus dados existentes, especificando o rótulo ou rótulos nos quais cada arquivo se enquadra. Rotular dados é importante, pois é como seu modelo aprenderá a classificar arquivos futuros. A melhor prática é ter diferenças claras entre rótulos para evitar ambiguidade e fornecer bons exemplos de cada rótulo para o modelo aprender. Por exemplo, rotulamos o jogo "Quest for the Mine Brush" como "Aventura" e "Flight Trainer" como "Ação".
- Modelo de trem: Treine seu modelo com os dados rotulados. O treinamento ensinará ao nosso modelo quais tipos de resumos de videogames devem ser rotulados em qual gênero.
- Ver modelo: Depois que o modelo for treinado, exiba os resultados do modelo. Seu modelo é pontuado entre 0 e 1, com base na precisão e recuperação dos dados testados. Tome nota de qual gênero não teve um bom desempenho.
- Melhorar o modelo: melhore seu modelo vendo quais classificações não conseguiram avaliar o rótulo correto, veja a distribuição do rótulo e descubra quais dados adicionar para melhorar o desempenho. Por exemplo, você pode achar que seu modelo mistura jogos de "Aventura" e "Estratégia". Tente encontrar mais exemplos de cada rótulo para adicionar ao seu conjunto de dados para retreinar seu modelo.
- Implantar modelo: Quando o modelo tiver o desempenho desejado, implante o modelo para disponibilizá-lo por meio da API. Seu modelo pode ser chamado de "GameGenres" e, uma vez implantado, pode ser usado para classificar resumos de jogos.
- Classificar texto: use seu modelo para classificar texto. O laboratório aborda como usar a API, e você pode exibir a referência da API
Como dividir conjuntos de dados para treinamento
Ao rotular seus dados, você pode especificar qual conjunto de dados deseja que cada arquivo seja:
- Treinamento - O conjunto de dados de treinamento é usado para realmente treinar o modelo, os dados e rótulos fornecidos são alimentados no algoritmo de aprendizado de máquina para ensinar ao seu modelo quais dados devem ser classificados para qual rótulo. O conjunto de dados de treinamento será o maior dos dois conjuntos de dados, recomendado para ser cerca de 80% dos seus dados rotulados.
- Teste - O conjunto de dados de teste é rotulado como dados usados para verificar seu modelo depois de treinado. O Azure pegará os dados no conjunto de dados de teste, enviá-los-á para o modelo e comparará a saída com a forma como você rotulou seus dados para determinar o desempenho do modelo. O resultado dessa comparação é a forma como o seu modelo é pontuado e ajuda-o a saber como melhorar o seu desempenho preditivo.
Durante a etapa do modelo de trem, há duas opções de como treinar seu modelo .
- Divisão automática - o Azure obtém todos os seus dados, divide-os nas percentagens especificadas aleatoriamente e aplica-os no treino do modelo. Essa opção é melhor 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ê envia o trabalho de treinamento, o serviço Azure AI Language informará a divisão do conjunto de dados e da distribuição. Essa divisão é melhor usada com conjuntos de dados menores para garantir que a distribuição correta de classes e a variação nos dados estejam presentes para treinar corretamente seu modelo.
Para usar a divisão automática, coloque todos os arquivos no conjunto de dados de treinamento ao rotular seus dados (essa opção é o padrão). Para usar a divisão manual, especifique quais arquivos devem estar em teste versus treinamento durante a rotulagem de seus dados.
Opções de implementação
A Linguagem de IA do Azure permite que cada projeto crie vários modelos e várias implantações, cada uma com seu próprio nome exclusivo. Os benefícios incluem a capacidade de:
- Teste dois modelos lado a lado
- Compare como a divisão de conjuntos de dados afeta o desempenho
- Implante várias versões do seu modelo
Nota
Cada projeto tem um limite de dez nomes de implantação
Durante a implantação, você pode escolher o nome do modelo implantado, que pode ser selecionado ao enviar uma tarefa de classificação:
<...>
"tasks": [
{
"kind": "CustomSingleLabelClassification",
"taskName": "MyTaskName",
"parameters": {
"projectName": "MyProject",
"deploymentName": "MyDeployment"
}
}
]
<...>
Utilizar a API REST
A API REST disponível para o serviço Azure AI Language permite o desenvolvimento CLI de projetos do Azure AI Language da mesma forma que o Language Studio fornece uma interface de usuário para criar projetos. O Language Studio é mais explorado no laboratório deste módulo.
Padrão de uso da API
A API do serviço Azure AI Language opera de forma assíncrona para a maioria das chamadas. Em cada etapa, enviamos uma solicitação ao serviço primeiro, depois voltamos com o serviço por meio de uma chamada subsequente para obter o status ou resultado.
Com cada solicitação, um cabeçalho é necessário para autenticar sua solicitação:
Key | valor |
---|---|
Ocp-Apim-Subscription-Key |
A chave para o seu recurso de linguagem de IA do Azure |
Submeter pedido inicial
A URL para enviar a solicitação varia em qual etapa você está, mas todas são prefixadas com o ponto de extremidade fornecido pelo seu recurso Azure AI Language.
Por exemplo, para treinar um modelo, você criaria um POST para a URL que teria a seguinte aparência:
<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Marcador de Posição | valor | Exemplo |
---|---|---|
<YOUR-ENDPOINT> |
O ponto de extremidade para sua solicitação de API | https://<your-custom-resource>.cognitiveservices.azure.com |
<PROJECT-NAME> |
O nome do seu projeto (o valor diferencia maiúsculas de minúsculas) | myProject |
O pedido será anexado ao seguinte organismo:
{
"modelLabel": "<MODEL-NAME>",
"trainingConfigVersion": "<CONFIG-VERSION>",
"evaluationOptions": {
"kind": "percentage",
"trainingSplitPercentage": 80,
"testingSplitPercentage": 20
}
}
Key | valor |
---|---|
<YOUR-MODEL> |
O nome do seu modelo. |
trainingConfigVersion |
A versão do modelo a ser usada para treinar seu modelo. |
runValidation |
Valor booleano para executar a validação no conjunto de testes. |
evaluationOptions |
Especifica as opções de avaliação. |
kind |
Especifica o tipo de divisão de dados. Pode ser percentage se você estiver usando uma divisão automática ou set se dividir manualmente seu conjunto de dados |
testingSplitPercentage |
Campo inteiro obrigatório somente se type for porcentagem. Especifica a divisão de testes. |
trainingSplitPercentage |
Campo inteiro obrigatório somente se type for porcentagem. Especifica a divisão de treinamento. |
A resposta ao pedido acima será um 202
, o que significa que o pedido foi bem-sucedido. Pegue o location
valor dos cabeçalhos de resposta, que serão semelhantes ao seguinte URL:
<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Key | valor |
---|---|
<JOB-ID> |
Identificador do seu pedido |
Esse URL é usado na próxima etapa para obter o status do treinamento.
Obter status de treinamento
Para obter o status de 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 nossa chave de serviço Azure AI Language para autenticação. O corpo da resposta será semelhante ao 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"
}
O treinamento de um modelo pode levar algum tempo, portanto, verifique periodicamente esse URL de status até que a resposta status
retorne succeeded
. Depois que o treinamento for bem-sucedido, você poderá visualizar, verificar e implantar seu modelo.
Consumindo um modelo implantado
O uso do modelo para classificar o 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.
Submeter texto para classificação
Para usar seu modelo, envie um POST para o ponto de extremidade de análise no seguinte URL:
<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Marcador de Posição | valor | Exemplo |
---|---|---|
<YOUR-ENDPOINT> |
O ponto de extremidade para sua solicitação de API | https://<your-custom-resource>.cognitiveservices.azure.com |
Importante
Lembre-se de incluir sua chave de recurso no cabeçalho para Ocp-Apim-Subscription-Key
A seguinte estrutura JSON seria anexada ao pedido:
{
"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>"
}
}
]
}
Key | valor |
---|---|
<TASK-REQUIRED> |
Qual tarefa você está solicitando. A tarefa é CustomMultiLabelClassification para vários projetos de rótulo ou CustomSingleLabelClassification para projetos de rótulo único |
<LANGUAGE-CODE> |
O código de idioma, como en-us . |
<TASK-NAME> |
O nome da tarefa. |
<PROJECT-NAME> |
O nome do seu projeto. |
<DEPLOYMENT-NAME> |
Seu nome de implantação. |
A resposta ao pedido acima será um 202
, o que significa que o pedido foi bem-sucedido. Procure o operation-location
valor nos cabeçalhos de resposta, que se parecerá com o seguinte URL:
<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Key | valor |
---|---|
<YOUR-ENDPOINT> |
O ponto de extremidade para sua solicitação de API |
<JOB-ID> |
Identificador do seu pedido |
Este URL é utilizado para obter os resultados da sua tarefa.
Obter resultados de 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á semelhante ao 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 da matriz de results
itens, para cada documento enviado.