Extractions d’informations de documents avec AI_EXTRACT¶
AI_EXTRACT est une fonction Cortex AI qui vous permet d’extraire des informations structurées, telles que des entités, des listes et des tables, à partir de fichiers texte ou de documents, en posant des questions en langage naturel ou en décrivant les informations à extraire. Elle peut être utilisée avec d’autres fonctions pour créer des pipelines de traitement de documents personnalisés pour de nombreux cas d’utilisation (voir Fonctions Cortex AI : Documents).
AI_EXTRACT peut traiter des documents de différents formats dans plusieurs langues et extraire des informations à la fois des paragraphes avec beaucoup de texte et du contenu sous une forme graphique, comme des logos, du texte écrit à la main (par exemple, des signatures), des tables ou des marques de contrôle. AI_EXTRACT peut extraire des informations dans les formats structurés suivants :
Entité : Posez des questions en langage naturel ou décrivez les informations à extraire (comme la ville, la route ou le code ZIP).
Liste (ou tableau) : Vous pouvez fournir un schéma JSON pour extraire un tableau ou une liste d’informations présentes dans le document, telles que le nom de tous les titulaires de comptes dans un relevé bancaire ou une liste de toutes les adresses dans un document.
Table : Fournissez un schéma JSON pour extraire les données tabulaires présentes dans le document en spécifiant le titre de la table et une liste des colonnes à extraire.
AI_EXTRACT s’adapte automatiquement à votre charge de travail en traitant plusieurs documents simultanément. Les documents peuvent être traités directement à partir du stockage d’objets pour éviter les mouvements de données inutiles.
Note
AI_EXTRACT est actuellement incompatible avec les politiques de réseau personnalisées.
Astuce
Pour plus d’informations sur AI_EXTRACT, y compris les langues prises en charge, la disponibilité régionale et le coût, consultez AI_EXTRACT.
Qualité de l’extraction¶
AI_EXTRACT utilise arctic-extract, un grand modèle de langage (LLM) propriétaire basé sur une vue qui offre une grande précision d’extraction. Le tableau suivant présente les scores du modèle sur différents benchmarks standard, avec les scores d’autres modèles populaires à des fins de comparaison :
Réponse visuelle aux questions (VQA)¶
Offre |
Score DocVQA |
|---|---|
Évaluation humaine |
0.9811 |
Snowflake Arctic-Extract |
0.9433 |
Azure OpenAI GPT-o3 |
0.9339 |
Google Gemini 2.5-Pro |
0.9316 |
Google Anthropic Claude 4 Sonnet |
0.9119 |
Azure Document Intelligence + GPT-o3 |
0.8853 |
Google Document AI + Gemini |
0.8497 |
Azure OpenAI GPT-o3 |
0.9339 |
AWS Textract |
0.8313 |
Réponse aux questions en texte seul (SQuAD v2)¶
Offre |
ANLS |
Correspondance exacte |
|---|---|---|
Snowflake Arctic-Extract |
81.18 |
78.74 |
Anthropic Claude 4 Sonnet |
80.54 |
77.10 |
Meta LLaMA 3.1 405B |
80.37 |
76.56 |
Meta LLaMA 4 Scout |
74.30 |
70.70 |
OpenAI GPT 4.1 |
70.71 |
66.81 |
Meta LLaMA 3.1 8B |
59.13 |
54.48 |
Optimisation des questions pour l’extraction d’informations¶
Lorsque vous travaillez avec AI_EXTRACT, utilisez le langage naturel pour poser des questions sur vos documents. Pour poser une question dont la réponse sera exacte, suivez les instructions suivantes :
Utilisez un anglais simple.
Pour chaque question, sachez quelles réponses vous attendez.
Soyez précis ; par exemple, si le document comporte plusieurs dates (telles que la date de délivrance et la date de signature), ne demandez pas « Quelle est la date ? » sans donner plus de détails.
Demandez une seule valeur pour chaque question.
N’attendez pas de AI_EXTRACT qu’il devine vos intentions ou qu’il ait des connaissances approfondies dans un domaine spécifique.
Prenons l’exemple du document suivant. Ce contrat d’achat et de vente comprend des informations telles que la date d’expiration de l’offre, les noms des acheteurs et du vendeur et les éléments inclus.
Le tableau suivant fournit des exemples de questions que vous pouvez poser à AI_EXTRACT et les réponses attendues.
Exemple de question |
Réponse |
|---|---|
Quelle est la date de ce contrat ? |
|
Qui est l’acheteur de l’immeuble ? |
|
Quels sont les appareils électroménagers inclus dans l’appartement ? |
|
Quels sont les éléments qui ne sont pas inclus dans l’appartement ? |
|
Y a-t-il un sèche-linge dans l’appartement ? |
|
Quels sont les avenants joints à ce contrat d’achat et de vente ? |
|
Quel est le numéro de fax du vendeur ? |
Aucun(e) |
La signature de l’acheteur figure-t-elle sur le formulaire ? |
|
Qu’est-ce que le numéro MLS ? |
|
Quelle est l’adresse du bien ? |
|
Bonnes pratiques pour l’extraction de tables¶
Cette rubrique présente les bonnes pratiques lorsque vous utilisez l’extraction de tables dans AI_EXTRACT.
Utiliser un schéma pour un type spécifique de document¶
Chaque charge de travail d’extraction doit contenir des documents du même type, et les données que vous souhaitez extraire doivent être similaires pour la plupart des tables. Si le nombre de colonnes du document source diffère d’un document à l’autre, mais que tous les documents contiennent un sous-ensemble défini de colonnes à extraire et que les colonnes communes ont le même nom et le même emplacement, ces colonnes communes peuvent être extraites.
Par exemple, les factures peuvent comporter un nombre différent de colonnes avec des données diverses, mais si toutes les tables ont les trois mêmes premières colonnes — Item Description, Quantity, et Price — ces données peuvent être extraites.
Utiliser le langage naturel pour définir les noms des colonnes¶
Vous pouvez copier les noms des colonnes à partir du document pour qu’ils soient exactement les mêmes. Par exemple, ne nommez pas les colonnes product_code ou REPORT_DATE; au lieu de cela, nommez-les Product Code ou Report Date.
Ignorer les lignes vides¶
Lorsque vous créez un ensemble de données de mise au point, ignorez les lignes sans réponse (où la réponse renvoyée serait``None``).
Définir les colonnes dans le même ordre qu’elles apparaissent dans le document¶
pour améliorer la précision, définissez les colonnes dans le même ordre que celui dans lequel elles apparaissent dans le document, c’est-à-dire généralement de gauche à droite, ou de haut en bas pour les tables transposées. Si vous choisissez de définir l’ordre différemment, une formation peut être nécessaire.
Cependant, pour les colonnes où les valeurs sont les mêmes pour plusieurs lignes, comme Invoice Number et Invoice Date, ajoutez ces colonnes au début. Par exemple :
Invoice NumberInvoice DateItem CodeItem NameQuantity
Définir les valeurs en utilisant la casse du document¶
Lorsque cela est possible, définissez les valeurs en utilisant la casse (majuscules et minuscules) du document. Si la casse dans le document change, utilisez les majuscules.
Utiliser le champ de description¶
Le champ description dans le format de réponse AI_EXTRACT est facultatif. Dans la plupart des cas, vous n’êtes pas obligé de le remplir. Toutefois, s’il existe plusieurs tables similaires dans un document, le modèle peut répondre de manière inexacte. Si les réponses proviennent d’une table source différente de celle attendue, ou si le modèle ne trouve pas la table, essayez d’utiliser le champ description. Ajoutez des informations qui aident le modèle à identifier le bon tableau, comme le titre ou le numéro du tableau.
Ajouter une colonne de section pour décrire la disposition du tableau¶
Si le tableau est divisé en plusieurs sections nommées, ajoutez une colonne de section. Cela aide le modèle à mieux comprendre la disposition et à améliorer la précision. Par exemple, vous pouvez nommer la colonne Section, Item section, ou Item category. s’il existe un deuxième niveau d’imbrication dans les sections, vous pouvez ajouter deux colonnes : Section et Subsection.
Pour regrouper des valeurs, créez une colonne supplémentaire¶
Vous pouvez ajouter une colonne à la table existante pour regrouper les valeurs. De cette manière, vous pouvez joindre les résultats de l’ensemble des documents dans un seul tableau ; par exemple :
Numéro de facture |
Détails de l’article |
Prix de l’article |
Quantité |
|---|---|---|---|
A |
Article A1 |
10.00 |
1 |
A |
Article A2 |
20.00 |
1 |
A |
Article A3 |
30.00 |
1 |
B |
Article B1 |
15,00 |
1 |
B |
Article B2 |
25,00 |
1 |
B |
Article B3 |
35.00 |
1 |
Notez que la valeur de la première colonne est répétée pour les éléments correspondants.
Distinguer les noms de colonnes entre les documents¶
Essayez de distinguer sémantiquement une colonne. n’utilisez pas de noms tels que col1, val1, item1.
Dans certains cas, la transposition peut mieux fonctionner, en particulier lorsque les noms des lignes ne diffèrent pas entre les documents ou diffèrent légèrement et se trouvent dans un ensemble de valeurs fermé.
Notez que l’entraînement sur l’ensemble de colonnes spécifié peut améliorer les résultats.
Utiliser le nom du parent comme préfixe lorsque vous travaillez avec des en-têtes hiérarchiques¶
Pour extraire des informations à partir de tables avec des en-têtes hiérarchiques, joignez le chemin d’en-tête en utilisant chaque nom de parent comme préfixe. Par exemple, pour le tableau suivant, définissez les colonnes comme suit :
Category A Type X Column 1Category A Type Y Column 2Category A Type Y Column 3Category B Column 4Category B Column 5
Transposer les tables si nécessaire¶
Vous pouvez extraire des informations des tables transposées en utilisant les valeurs de la première colonne de la table du document comme noms de colonnes dans la table de sortie.
Par exemple, pour le tableau suivant, nommez les colonnes :
Type A: Item 1Type A: Item 2Type B: Item 3Type B: Item 4
Notez que cet exemple comprend des en-têtes hiérarchiques.
Pour les grandes tables, fractionner le document¶
Le modèle d’extraction de tables renvoie des réponses d’une longueur maximale de 4 096 jetons. Cela signifie que le modèle arrête l’extraction lorsqu’il atteint cette limite. Vous pouvez approcher ce problème de la manière suivante :
Si le tableau couvre plusieurs pages, divisez le document en plusieurs documents d’une page, et joignez les résultats lors du post-traitement.
Si le tableau est tellement plein que les données ne peuvent pas être extraites d’une seule page, divisez le tableau par colonnes.
Par exemple, si le tableau contient 10 colonnes, essayez de définir deux valeurs distinctes : l’une avec 5 colonnes de la moitié gauche et l’autre avec 5 colonnes de la moitié droite du tableau. Vous devrez peut-être essayer différents types de colonnes pour obtenir les meilleurs résultats.
Créer des noms pour les colonnes qui n’en ont pas dans le document¶
Si la première colonne du document n’a pas de nom, vous devez créer vous-même ce nom lors de la définition de la valeur. Vous pouvez l’approcher des manières suivantes :
Utilisez le titre du tableau ou une partie importante du titre.
Créez un nom descriptif qui représente les données de la colonne, par exemple
description,type of asset,yearoucategory.
Comparer les données de deux périodes différentes¶
Si vous souhaitez comparer des données de deux périodes différentes, par exemple les années 2023 et 2024 dans des documents financiers tels que des rapports annuels, vous pouvez ajouter un préfixe aux colonnes tel que « actuel » et « précédent ». Notez qu’un entraînement peut être nécessaire pour améliorer les résultats.
Exemples : extraire des informations d’un contrat d’achat et de vente¶
Les exemples suivants extraient des informations du contrat d’achat et de vente de copropriété que vous pouvez consulter dans la section Optimisation des questions pour l’extraction d’informations.
Extraire une entité¶
Extrayez le nom du vendeur et la date d’expiration de l’offre :
SELECT AI_EXTRACT(
file => TO_FILE('@db.schema.stage','document.pdf'),
responseFormat => [['seller_name', 'What is the seller name?'], ['address', 'What is the offer expiration date?']]
);
Résultat :
{
"error": null,
"response": {
"address": "12/12/2023",
"seller_name": "Paul Doyle"
}
}
Extraire des informations sur les cases à cocher¶
Extrayez des informations sur les éléments qui ne sont pas inclus, en fonction des cases à cocher marquées dans le document :
SELECT AI_EXTRACT(
file => TO_FILE('@db.schema.stage','document.pdf'),
responseFormat => [['flat_items', 'What items are not included with the flat?'], ['default', 'What Default is selected?']]
);
Résultat :
{
"error": null,
"response": {
"default": "Forfeiture of Earnest Money",
"flat_items": "dryer, security system, satellite dish, wood stove, fireplace insert, hot tub, attached speaker(s), generator, other"
}
}
Extraire l’état de la signature¶
Extrayez des informations indiquant si le contrat a été signé :
SELECT AI_EXTRACT(
file => TO_FILE('@db.schema.stage','document.pdf'),
responseFormat => [['signature', 'Is this document signed?']]
);
Résultat :
{
"error": null,
"response": {
"signature": "no"
}
}
Extraire une liste d’entités¶
Extrayez une liste de noms d’acheteurs :
SELECT AI_EXTRACT(
file => TO_FILE('@db.schema.files', 'report.pdf'),
responseFormat => {
'schema': {
'type': 'object',
'properties': {
'buyer_list': {
'description': 'What are the buyer names?',
'type': 'array'
}
}
}
}
);
Résultat :
{
"error": null,
"response": {
"buyer_list": [
"John Davis",
"Jane Davis"
]
}
}
Exemple : Extraire des informations d’une table¶
L’exemple suivant extrait les informations du document suivant :
SELECT AI_EXTRACT(
file => TO_FILE('@db.schema.files', 'report.pdf'),
responseFormat => {
'schema': {
'type': 'object',
'properties': {
'income_table': {
'description': 'Table 2: Granger Causality Tests - P-values',
'type': 'object',
'column_ordering': ['description', 'countries','lags','z','z_approx'],
'properties': {
'description': {
'description': 'Description',
'type': 'array'
},
'countries': {
'description': 'Countries',
'type': 'array'
},
'lags': {
'description': 'Lags',
'type': 'array'
},
'z': {
'description': 'Z',
'type': 'array'
},
'z_approx': {
'description': 'Z approx.',
'type': 'array'
}
}
}
}
}
);
Résultat :
{
"error": null,
"response": {
"income_table": {
"countries": [
"33","80","29","84","34"
],
"description": [
"Commodity exporters",
"Non-commodity exporters",
"AE",
"EMDE",
"Large or market-dominant countries"
],
"lags": [
"2","1","1","1","1"
],
"z": [
"0.11","0.08","0.89","0.12","0.07"
],
"z_approx": [
"0.25","0.19","0.95","0.25","0.14"
]
}
}
}
Avis juridiques¶
La classification des données d’entrées et de sorties est présentée dans la table suivante.
Classification des données d’entrée |
Classification des données de sortie |
Désignation |
|---|---|---|
Usage Data |
Customer Data |
Les fonctions généralement disponibles sont des fonctions AI couvertes. Les fonctions d’aperçu sont les fonctions AI d’aperçu. [1] |
Pour plus d’informations, reportez-vous à Snowflake AI et ML.