Continuez à entraîner votre API tout en l'utilisant : Annotations

Doug Sillars

Doug Sillars

Tu peux ! Nous appelons le processus de prise de données extraites et de réentraînement du modèle annotation. Dans cet article, nous allons annoter le modèle de formulaire fiscal américain W-9 décrit précédemment.

Tester l'API de votre document

Lorsque vos utilisateurs testent un document avec votre API personnalisée, ils effectuent un appel d'API similaire à celui-ci (dans ce cas, effectué avec cURL) :

curl -X POST 'https://api.mindee.net/v1/products/doug1/us_w9/v1/predict'
-H 'Authorization: Token {apitoken}'
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
-F document=@harry_potter.pdf

Cela téléchargera le W9 de Harry Potter sur l'API, et nous obtiendrons rapidement une réponse.

REMARQUE : Pour des raisons d'espace, il s'agit d'une réponse partielle, ne montrant que quelques-unes des prédictions.

{
	"city": {
		"confidence": 0.7,
		"page_id": 0,
		"values": [{
			"confidence": 0.62,
			"content": ",",
			"polygon": [
				[0.204, 0.347],
				[0.207, 0.347],
				[0.207, 0.362],
				[0.204, 0.362]
			]
		}, {
			"confidence": 0.79,
			"content": "CA",
			"polygon": [
				[0.212, 0.347],
				[0.23, 0.347],
				[0.23, 0.362],
				[0.212, 0.362]
			]
		}]
	},
	"name": {
		"confidence": 0.98,
		"page_id": 0,
		"values": [{
			"confidence": 1.0,
			"content": "Harry",
			"polygon": [
				[0.1, 0.12],
				[0.133, 0.12],
				[0.133, 0.133],
				[0.1, 0.133]
			]
		}, {
			"confidence": 0.96,
			"content": "Potter",
			"polygon": [
				[0.14, 0.12],
				[0.18, 0.12],
				[0.18, 0.132],
				[0.14, 0.132]
			]
		}]
	}
}

Si l'on regarde la prédiction, le nom de la ville extrait, en Californie, n'est pas correct (comme le savent les fans de Harry Potter, il devrait se lire « Little Whinging »). Dans l'extrait ci-dessus, le nom extrait est correct (et dans le fichier complet, les autres paramètres étaient également corrects). Vous pouvez également constater que la confiance de l'algorithme est assez faible pour le nom de la ville (0,7) et très élevée pour Harry Potter (0,98). En général, un niveau de confiance supérieur à 0,9 signifie que l'algorithme a trouvé la valeur correcte.

Lorsque le niveau de confiance de votre prédiction est faible, il est intéressant de faire vérifier le fichier par un humain pour s'assurer que les valeurs ont été extraites correctement avant que l'erreur ne soit ajoutée à votre base de données. Nous pouvons utiliser cette même intervention pour mieux entraîner le modèle, ce qui signifie moins de mauvaises prévisions à l'avenir.

Valeurs alternatives pour la prédiction

Bien qu'une correction manuelle des entrées puisse améliorer la précision de votre base de données, pour réentraîner le modèle, nous avons besoin d'autres options disponibles qui peuvent être renvoyées à l'API. Vous pouvez le faire en ajoutant formation=vrai&candidates=vrai paramètre de l'URL d'appel de l'API de prédiction :

curl -X POST 'https://api.mindee.net/v1/products/doug1/us_w9/v1/predict?training=true&candidates=true'
-H 'Authorization: Token f7d710e56f215512f9fb4de536d5af8a'
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
-F document=@harry_potter.pdf

Cela indique à l'API de fournir des candidats alternatifs pour chaque prédiction (notez que la réponse de l'API va devenir BEAUCOUP plus grande) :

La première chose que vous remarquerez, c'est que chaque prédiction possède désormais une « candidate_key » :

{
  "city": {
    "confidence": 0.7,
    "values": [
      {
        "candidate_key": "0151bc9f",
        "confidence": 0.62,
        "content": ",",
        "polygon": [
          [
            0.204,
            0.347
          ],
          [
            0.207,
            0.347
          ],
          [
            0.207,
            0.362
          ],
          [
            0.204,
            0.362
          ]
        ]
      },
      {
        "candidate_key": "8d26e17e",
        "confidence": 0.79,
        "content": "CA",
        "polygon": [
          [
            0.212,
            0.347
          ],
          [
            0.23,
            0.347
          ],
          [
            0.23,
            0.362
          ],
          [
            0.212,
            0.362
          ]
        ]
      }
    ]
  },
  "name": {
    "confidence": 0.98,
    "values": [
      {
        "candidate_key": "e02bb231",
        "confidence": 1.0,
        "content": "Harry",
        "polygon": [
          [
            0.1,
            0.12
          ],
          [
            0.133,
            0.12
          ],
          [
            0.133,
            0.133
          ],
          [
            0.1,
            0.133
          ]
        ]
      }
    ]
  }
}

Si l'API a correctement identifié la valeur, nous renvoyons simplement les clés candidates prévues (comme pour le prénom de Harry).

Cependant, nous ne voulons pas utiliser les valeurs «, CA » pour l'étiquette de la ville. Nous voulons utiliser la valeur « Little Whinging » à la place. Nous devons trouver la clé candidate pour les chaînes « Little » et « Whinging ». Dans la réponse de l'API avec annotations, un nouvel ensemble d'actifs « OCR ->Candidats » est disponible pour chaque page et chaque élément détecté. Ce JSON contient tous les candidats OCR pour chaque étiquette du document. Pour la seule prédiction de la ville, ce JSON est de 22 552 lignes. Il est si long car il contient toutes les chaînes correspondant aux exigences de la « ville » (une chaîne sans chiffres) dans le document W-9.

Dans notre cas, nous savons ce que nous recherchons :

[
  {
    "content": "Little",
    "key": "7832ef34",
    "polygon": [
      [
        0.098,
        0.347
      ],
      [
        0.13,
        0.347
      ],
      [
        0.13,
        0.362
      ],
      [
        0.098,
        0.362
      ]
    ]
  },
  {
    "content": "Whinging",
    "key": "6495fd94",
    "polygon": [
      [
        0.136,
        0.347
      ],
      [
        0.202,
        0.347
      ],
      [
        0.202,
        0.362
      ],
      [
        0.136,
        0.362
      ]
    ]
  }
]

Pour renvoyer cette annotation à Mindee à des fins de formation, nous devons répondre au point de terminaison d'annotation de l'API :

curl -X POST 'https://api.mindee.net/v1/products/doug1/us_w9/v1/documents//annotations'

Le DocumentID est fourni dans la réponse JSON avec les annotations. Comme toutes les autres étiquettes étaient correctes, j'ai utilisé les clés d'étiquette fournies par l'API de prédiction, en modifiant uniquement celles pour la ville :

curl -X POST 'https://api.mindee.net/v1/products/doug1/us_w9/v1/documents/{documentId}/annotations'
-H 'Authorization: Token {apikey}
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
-D
{
  "labels": [
    {
      "page_id": 0,
      "feature": "name",
      "selected": [
        "e02bb231",
        "89202491"
      ]
    },
    {
      "page_id": 0,
      "feature": "city",
      "selected": [
        "7832ef34",
        "6495fd94"
      ]
    },
    {
      "page_id": 0,
      "feature": "ssn",
      "selected": [
        "7dc15c77",
        "c48edb4a",
        "cd75f470",
        "d31e5e04",
        "dd411217",
        "8bebe180"
      ]
    },
    {
      "page_id": 0,
      "feature": "state",
      "selected": [
        "8d26e17e"
      ]
    },
    {
      "page_id": 0,
      "feature": "street_address",
      "selected": [
        "7ea04e96",
        "01abf396",
        "448cd325"
      ]
    },
    {
      "page_id": 0,
      "feature": "street_address",
      "selected": [
        "48804de1"
      ]
    }
  ]
}

Cela se traduit par une réponse de 200, indiquant que les annotations ont été ajoutées lors du prochain cycle de formation pour l'API.

Corriger une erreur d'annotation

Si vous détectez une erreur dans le POST initial, vous pouvez renvoyer les données à l'aide d'une commande PUT pour remplacer les données chargées initialement. Si vous souhaitez retirer le document de la formation, utilisez un appel DELETE au même point de terminaison d'API, et toutes les prédictions d'étiquette pour le document seront supprimées.

Conclusion

Grâce à cette simple interaction, nous avons pu établir des prévisions documentaires avec notre API ET fournir les informations d'entraînement à l'algorithme, garantissant ainsi que la prédiction de l'API continuera de s'améliorer. De cette façon, vous pouvez ajouter jusqu'à 1 000 annotations à votre jeu de données d'entraînement, rendre votre modèle très robuste et tirer parti des commentaires de vos utilisateurs. Dans des articles récents, nous avons expliqué comment créer une nouvelle API d'extraction de documents à l'aide du Document Builder. Une fois que vous avez entraîné votre API avec le premier ensemble d'apprentissage (actuellement 20 documents), vous pouvez commencer à utiliser votre API pour extraire des données de vos documents. Chaque ensemble de documents supplémentaire avec lequel vous entraînez l'API améliorera encore vos résultats, mais à un moment donné, vous devrez mettre le modèle en production. Et si vous pouviez réellement mettre votre modèle en production ET demander à vos utilisateurs de travailler pour mieux entraîner votre modèle ?

À propos

Qu'il s'agisse de simples photos, de fichiers PDF complexes ou de fichiers manuscrits, l'API de Mindee transforme les données de vos documents en JSON structuré de manière hautement fiable. Aucune formation sur les modèles n'est requise. Tous les alphabets et toutes les langues sont pris en charge.

,
,

Key Takeway

Key Takeway