Entender como criar projetos de classificação de texto
Projetos de classificação de texto personalizados são seu workspace para criar, treinar, melhorar e implantar seu modelo de classificação. Você pode trabalhar com seu projeto de duas maneiras: por meio do Language Studio e por meio da API REST. O Language Studio é a GUI que será usada no laboratório, mas a API REST tem a mesma funcionalidade. Independentemente de qual método você preferir, as etapas para desenvolver seu modelo são as mesmas.
Ciclo de vida do projeto de Linguagem do Azure
- Definir rótulos: noções básicas sobre os dados que você deseja classificar, identifique os possíveis rótulos nos quais você deseja categorizar. Em nosso exemplo de videogame, nossos rótulos seriam "Ação", "Aventura", "Estratégia" e assim por diante.
- Dados de Etiquetagem: Marque ou rotule seus dados existentes, especificando a etiqueta ou etiquetas em que 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, rotularíamos o jogo "Quest for the Mine Brush" como "Adventure" e "Flight Trainer" como "Ação".
- Modelo de treinamento: treine seu modelo com os dados rotulados. O treinamento ensinará ao nosso modelo quais tipos de resumos de videogames devem ser rotulados como qual gênero.
- Modelo de exibição: depois que o modelo for treinado, exiba os resultados do modelo. Seu modelo é pontuado entre 0 e 1, com base na precisão e no recall dos dados testados. Anote qual gênero não teve um bom desempenho.
- Melhorar o modelo: Melhore seu modelo vendo quais classificações falharam na avaliação do rótulo correto, veja sua distribuição de rótulos e descubra quais dados devem ser adicionados para melhorar o desempenho. Por exemplo, você pode encontrar seu modelo misturando jogos de "Aventura" e "Estratégia". Tente encontrar mais exemplos de cada rótulo para adicionar ao seu conjunto de dados para treinar novamente seu modelo.
- Modelo de implantação: depois que o modelo for executado conforme 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 de 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 modelo quais dados devem ser classificados para 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% dos 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 usará os dados no conjunto de dados de teste, os enviará ao 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 é como seu modelo é pontuado e ajuda você a saber como melhorar seu desempenho preditivo.
Durante a etapa Treinar modelo , há duas opções de como treinar seu modelo.
- Divisão automática – o Azure usa todos os seus dados, divide-os nos percentuais especificados aleatoriamente e aplica-os no treinamento 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 de seus dados abrange extensivamente suas classes.
- Divisão manual – especifique manualmente quais arquivos devem estar em cada conjunto de dados. Ao enviar o trabalho de treinamento, o serviço de Linguagem do Azure informará a divisão do conjunto de dados e a distribuição. Essa divisão é melhor usada com conjuntos de dados menores para garantir que a distribuição correta de classes e variação nos dados esteja presente 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 implantação
A Linguagem 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:
- Testar dois modelos lado a lado
- Comparar como a divisão de conjuntos de dados afeta o desempenho
- Implantar várias versões do seu 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, que 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 de Linguagem do Azure permite o desenvolvimento da CLI de projetos de Linguagem 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 ainda mais no laboratório deste módulo.
Padrão de uso da API
A API para o serviço de Linguagem do Azure opera de forma assíncrona para a maioria das chamadas. Em cada etapa, enviamos uma solicitação ao serviço primeiro e, em seguida, verificamos novamente com o serviço por meio de uma chamada subsequente para obter o status ou o resultado.
Com cada solicitação, um cabeçalho é necessário para autenticar sua solicitação:
| Chave | Valor |
|---|---|
Ocp-Apim-Subscription-Key |
A chave para o recurso de Linguagem do Azure |
Enviar solicitação inicial
A URL para enviar a solicitação varia dependendo da etapa em que você está, mas todas são prefixadas com o endpoint fornecido pelo recurso de linguagem do Azure.
Por exemplo, para treinar um modelo, você criaria um POST para a URL que se pareceria com o seguinte:
<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
| Espaço reservado | Valor | Exemplo |
|---|---|---|
<YOUR-ENDPOINT> |
O endpoint para sua solicitação de 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 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 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 a solicitação 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 é 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 à solicitação para enviar uma solicitação GET, com o mesmo cabeçalho que fornece nossa chave de serviço de linguagem do Azure 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"
}
Treinar um modelo pode levar algum tempo, portanto, faça check-back periodicamente nessa URL de status até que a resposta status retorne succeeded. Depois que o treinamento tiver sido bem-sucedido, você poderá exibir, verificar e implantar seu modelo.
Consumindo um modelo implantado
Usar o 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.
Enviar texto para classificação
Para usar seu modelo, envie um POST para o endpoint analisar na seguinte URL:
<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
| Espaço reservado | Valor | Exemplo |
|---|---|---|
<YOUR-ENDPOINT> |
O endpoint 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 à 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> |
Qual tarefa você está solicitando. A tarefa é CustomMultiLabelClassification para os projetos de diversos rótulos ou CustomSingleLabelClassification para os 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 projeto. |
<DEPLOYMENT-NAME> |
O nome da sua implantação. |
A resposta à solicitação acima será um 202, o que significa que a solicitação 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 endpoint para sua solicitação de API |
<JOB-ID> |
Identificador da solicitação |
Essa URL é usada para obter os resultados da tarefa.
Obter resultados de classificação
Envie uma requisição GET para o "endpoint" da requisiçã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.