Extrahieren von Informationen aus Dokumenten mit AI_EXTRACT¶
AI_EXTRACT ist eine Cortex AI-Funktion, mit der Sie strukturierte Informationen, wie Entitäten, Listen und Tabellen, aus Text- oder Dokumentdateien extrahieren können, indem Sie Fragen in natürlicher Sprache stellen oder die zu extrahierenden Informationen beschreiben. Es kann zusammen mit anderen Funktionen verwendet werden, um kundenspezifische Dokumentenverarbeitungspipelines für eine Vielzahl von Anwendungsfällen zu erstellen (siehe Cortex AI-Funktionen: Dokumente).
AI_EXTRACT kann Dokumente verschiedener Formate in mehreren Sprachen verarbeiten und Informationen sowohl aus textlastigen Absätzen als auch aus Inhalten in grafischer Form extrahieren, wie z. B. Logos, handschriftlicher Text (z. B. Signaturen), Tabellen oder Häkchen. AI_EXTRACT kann Informationen in den folgenden strukturierten Formaten extrahieren:
Entität: Stellen Sie Fragen in natürlicher Sprache, oder beschreiben Sie die zu extrahierenden Informationen (z. B. Stadt, Straße oder ZIP-Code).
Liste (oder Array): Sie können ein JSON-Schema bereitstellen, um ein Array oder eine Liste der im Dokument enthaltenen Informationen zu extrahieren, z. B. die Namen aller Kontoinhaber in einem Kontoauszug oder eine Liste aller Adressen in einem Dokument.
Tabelle: Geben Sie ein JSON-Schema an, um tabellarische Daten im Dokument zu extrahieren, indem der Tabellentitel und eine Liste der Spalten angegeben werden, die extrahiert werden sollen.
AI_EXTRACT wird automatisch mit Ihrem Workload skaliert, indem es mehrere Dokumente gleichzeitig verarbeitet. Dokumente können direkt aus dem Objektspeicher verarbeitet werden, um unnötige Datenbewegungen zu vermeiden.
Bemerkung
AI_EXTRACT ist derzeit nicht mit den benutzerdefinierten von Netzwerkrichtlinien kompatibel.
Tipp
Weitere Informationen zu AI_EXTRACT, einschließlich unterstützter Sprachen, regionaler Verfügbarkeit und Kosten, finden Sie unter AI_EXTRACT.
Qualität der Extraktion¶
AI_EXTRACT verwendet arctic-extract, ein proprietäres, visionsbasiertes großes Sprachmodell (LLM), das eine hohe Extraktionsgenauigkeit liefert. Die folgende Tabelle zeigt die Ergebnisse des Modells bei verschiedenen Standard-Benchmarks mit den Ergebnissen anderer beliebter Modelle zum Vergleich:
Visuelle Beantwortung von Fragen (VQA)¶
Angebot |
DocVQA-Punktzahl |
|---|---|
Bewertung durch Menschen |
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 |
Beantworten von Fragen mit Nur-Text (SQuAD v2)¶
Angebot |
ANLS |
Genaue Übereinstimmung |
|---|---|---|
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 |
Fragenoptimierung zum Extrahieren von Informationen¶
Wenn Sie mit AI_EXTRACT arbeiten, verwenden Sie natürliche Sprache, um Fragen zu Ihren Dokumenten zu stellen. Damit eine Frage gestellt wird, die eine genaue Antwort liefert, beachten Sie folgende Richtlinien:
Verwenden Sie einfaches Englisch.
Wissen Sie bei jeder Frage, welche Antworten Sie erwarten.
Seien Sie spezifisch. Wenn das Dokument beispielsweise mehrere Datumsangaben enthält (z. B. Ausstellungsdatum und Unterschriftsdatum), fragen Sie nicht einfach nur „What is the Date?“, ohne weitere Details anzugeben.
Stellen Sie Fragen so, dass sie genau einen Wert liefern.
Erwarten Sie nicht, dass AI_EXTRACT Ihre Intensionen errät oder über ein umfassendes Wissen in einem bestimmten Bereich verfügt.
Nehmen Sie das folgende Dokument als Beispiel. Zu den im Kaufvertrag enthaltene Informationen zählen das Ablaufdatum des Angebots, die Namen von Käufer und Verkäufer sowie die Vertragsgegenstände.
In der folgenden Tabelle finden Sie Beispiele für Fragen, die Sie AI_EXTRACT stellen können, und die erwarteten Antworten.
Beispielfrage |
Antwort |
|---|---|
What is the date of this agreement? (Was ist das Datum dieses Vertrags?) |
|
Who is the buyer of the condo? (Wer ist der Käufer der Eigentumswohnung?) |
|
What home appliances are included with the unit? (Welche Haushaltsgeräte sind im Vertrag enthalten?) |
|
What items are not included with the flat? (Welche Gegenstände sind nicht in der Wohnung?) |
|
Is there a dryer in the flat? (Gibt es einen Trockner in der Wohnung?) |
|
What addenda are attached to this purchase and sale agreement? (Welche Anhänge sind dem Kaufvertrag beigefügt?) |
|
What is the seller’s fax number? (Wie ist die Faxnummer des Verkäufers?) |
Keine |
Is the buyer’s signature present on the form? (Hat das Formular eine Unterschrift des Käufers?) |
|
What is the MLS number? (Wie ist die MLS-Nummer?) |
|
What is the property’s address? (Wie ist die Adresse des Grundstücks?) |
|
Tabellenextraktion: Best Practices¶
Dieser Abschnitt enthält Best Practices für das Arbeiten mit der Tabellenextraktion in AI_EXTRACT.
Ein Schema für einen bestimmten Dokumenttyp verwenden¶
Jeder Workload für die Extraktion muss Dokumente desselben Typs enthalten, und die Daten, die Sie extrahieren möchten, sollten für die meisten Tabellen ähnlich sein. Wenn die Anzahl der Spalten im Quelldokument von Dokument zu Dokument unterschiedlich ist, aber alle Dokumente eine definierte Teilmenge der zu extrahierenden Spalten enthalten und die gemeinsamen Spalten denselben oder einen ähnlichen Namen und Speicherort haben, dann können diese gemeinsamen Spalten extrahiert werden.
Beispiel: Rechnungen können eine unterschiedliche Anzahl von Spalten mit unterschiedlichen Daten aufweisen, wenn aber alle Tabellen die gleichen ersten drei Spalten haben (Item Description, Quantity und Price), können diese Daten extrahiert werden.
Natürliche Sprache zum Definieren von Spaltennamen verwenden¶
Sie können die Spaltennamen aus dem Dokument kopieren, sodass sie genau gleich sind. Nennen Sie die Spalten z. B. nicht product_code oder REPORT_DATE, sondern geben Sie ihnen stattdessen den Namen Product Code oder Report Date.
Leere Zeilen überspringen¶
Wenn Sie die Feinabstimmung eines Datensets erstellen, überspringen Sie die Zeilen, die keine Antwort enthalten (die zurückgegebene Antwort wäre None).
Spalten in der gleichen Reihenfolge definieren, wie sie im Dokument erscheinen¶
Um die Genauigkeit zu verbessern, definieren Sie die Spalten in der gleichen Reihenfolge, wie sie im Dokument erscheinen, d. h. normalerweise von links nach rechts oder von oben nach unten für transponierte Tabellen. Wenn Sie die Reihenfolge anders definieren möchten, ist ggf. ein Training erforderlich.
Bei Spalten, die für mehrere Zeilen die gleichen Werte aufweisen, wie z. B. Invoice Number und Invoice Date, fügen Sie dieses Spalten jedoch am Anfang hinzu. Beispiel:
Invoice NumberInvoice DateItem CodeItem NameQuantity
Werte mit Groß-/Kleinschreibung aus dem Dokument definieren¶
Definieren Sie Werte möglichst mit der Groß-/Kleinschreibung aus dem Dokument. Wenn die Groß-/Kleinschreibung im Dokument variiert, verwenden Sie Großschreibung.
Das Feld für die Beschreibung verwenden¶
Das description-Feld im AI_EXTRACT-Antwortformat ist optional. In den meisten Fällen müssen Sie es nicht ausfüllen. Wenn es jedoch mehrere ähnliche Tabellen in einem Dokument gibt, kann es sein, dass das Modell ungenau antwortet. Wenn die Antworten aus einer anderen Quelltabelle als erwartet stammen oder das Modell die Tabelle nicht finden kann, versuchen Sie, das description-Feld zu verwenden. Fügen Sie Informationen hinzu, die dem Modell dabei helfen, die richtige Tabelle zu identifizieren, z. B. den Tabellentitel oder die Tabellennummer.
Abschnittsspalte hinzufügen, um das Layout der Tabelle zu beschreiben¶
Wenn die Tabelle in mehrere benannte Abschnitte unterteilt ist, fügen Sie eine Abschnittsspalte hinzu. Dies hilft dem Modell, das Layout besser zu verstehen und die Genauigkeit zu verbessern. Sie können die Spalte zum Beispiel Section, Item section oder Item category nennen. Wenn es in den Abschnitten eine zweite Verschachtelungsebene gibt, können Sie zwei Spalten hinzufügen: Section und Subsection.
Eine zusätzliche Spalte erstellen, um Werte zu gruppieren¶
Sie können der bestehenden Tabelle eine Spalte hinzufügen, um Werte zu gruppieren. Auf diese Weise können Sie die Ergebnisse aus dem gesamten Dokumentensatz in einer einzigen Tabelle zusammenführen, zum Beispiel:
Rechnungsnummer |
Elementdetails |
Elementpreis |
Menge |
|---|---|---|---|
A |
Element A1 |
10,00 |
1 |
A |
Element A2 |
20,00 |
1 |
A |
Element A3 |
30.00 |
1 |
B |
Element B1 |
15,00 |
1 |
B |
Element B2: |
25,00 |
1 |
B |
Element B3: |
35,00 |
1 |
Beachten Sie, dass der Wert in der ersten Spalte für entsprechende Elemente wiederholt wird.
Sicherstellen, dass die Spaltennamen zwischen Dokumenten unterschieden werden können¶
Versuchen Sie, eine Spalte semantisch von anderen zu unterscheiden. Verwenden Sie keine Namen wie col1, val1 oder item1.
In manchen Fällen funktioniert die Transposition besser, insbesondere wenn sich die Zeilennamen zwischen den Dokumenten nicht unterscheiden oder sich zumindest leicht unterscheiden und innerhalb eines geschlossenen Wertebereichs liegen.
Beachten Sie, dass ein Training auf dem angegebenen Spaltensatz die Ergebnisse verbessern kann.
Bei hierarchischen Headern den Namen des übergeordneten Elements als Präfix verwenden¶
Um Informationen aus Tabellen mit hierarchischen Headern zu extrahieren, verknüpfen Sie den Header-Pfad mit jedem Namen des übergeordneten Elements als Präfix. Definieren Sie beispielsweise für die folgende Tabelle die Spalten als:
Category A Type X Column 1Category A Type Y Column 2Category A Type Y Column 3Category B Column 4Category B Column 5
Tabellen bei Bedarf transponieren¶
Sie können Informationen aus transponierten Tabellen extrahieren, indem Sie Werte aus der ersten Spalte der Tabelle des Dokuments als Spaltennamen in der Ausgabetabelle verwenden.
Benennen Sie die Spalten für die folgende Tabelle beispielsweise:
Type A: Item 1Type A: Item 2Type B: Item 3Type B: Item 4
Beachten Sie, dass dieses Beispiel hierarchische Header enthält.
Dokument bei großen Tabellen aufteilen¶
Das Modell für die Tabellenextraktion liefert Antworten, die bis zu 4096 Token lang sind. Dies bedeutet, dass das Modell die Extraktion beendet, wenn dieses Limit erreicht ist. Sie können dies auf folgende Weise lösen:
Wenn die Tabelle mehrere Seiten umfasst, teilen Sie das Dokument in mehrere einseitige Dokumente auf und führen Sie die Ergebnisse bei der Nachbearbeitung zusammen.
Wenn die Tabelle so dicht ist, dass die Daten nicht einmal von einer einzigen Seite extrahiert werden können, teilen Sie die Tabelle nach Spalten auf.
Wenn die Tabelle z. B. 10 Spalten enthält, versuchen Sie, zwei separate Werte zu definieren: einen mit 5 Spalten aus der linken Hälfte der Tabelle und den anderen mit 5 Spalten aus der rechten Hälfte. Möglicherweise müssen Sie mit der Auswahl der Spalte experimentieren, um optimale Ergebnisse zu erzielen.
Namen für die Spalten erstellen, die im Dokument keinen Namen haben¶
Wenn die erste Spalte im Dokument keinen Namen hat, müssen Sie diesen Namen beim Definieren des Werts selbst erstellen. Sie können dies wie folgt angehen:
Verwenden Sie den Tabellentitel oder einen wichtigen Teil des Titels.
Erstellen Sie einen beschreibenden Namen, der die Daten in der Spalte darstellt, z. B.
description,type of asset,year,category.
Daten aus zwei verschiedenen Zeiträumen vergleichen¶
Wenn Sie Daten aus zwei verschiedenen Zeiträumen vergleichen möchten, z. B. den Jahren 2023 und 2024 in Finanzdokumenten wie Jahresberichten, können Sie den Spalten das Präfix „aktuell“ und „vorher“ voranstellen. Beachten Sie, dass unter Umständen ein Training erforderlich ist, um die Ergebnisse zu verbessern.
Beispiele: Informationen aus einem Kaufvertrag extrahieren¶
Die folgenden Beispiele extrahieren Informationen aus dem Kaufvertrag für Eigentumsobjekte, die Sie im Abschnitt Fragenoptimierung zum Extrahieren von Informationen einsehen können.
Eine Entität extrahieren¶
Extrahieren Sie den Namen des Verkäufers und das Ablaufdatum des Angebots:
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?']]
);
Ergebnis:
{
"error": null,
"response": {
"address": "12/12/2023",
"seller_name": "Paul Doyle"
}
}
Kontrollkästcheninformationen extrahieren¶
Extrahieren Sie Informationen über Elemente, die nicht enthalten sind, basierend auf den im Dokument aktivierten Kontrollkästchen:
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?']]
);
Ergebnis:
{
"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"
}
}
Signaturstatus extrahieren¶
Extrahieren Sie Informationen darüber, ob die Vereinbarung unterzeichnet wurde:
SELECT AI_EXTRACT(
file => TO_FILE('@db.schema.stage','document.pdf'),
responseFormat => [['signature', 'Is this document signed?']]
);
Ergebnis:
{
"error": null,
"response": {
"signature": "no"
}
}
Eine Liste der Entitäten extrahieren¶
Extrahieren Sie eine Liste der Namen der Käufer:
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'
}
}
}
}
);
Ergebnis:
{
"error": null,
"response": {
"buyer_list": [
"John Davis",
"Jane Davis"
]
}
}
Beispiel: Informationen aus einer Tabelle extrahieren¶
In diesem Beispiel werden Informationen aus dem folgenden Dokument extrahiert:
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'
}
}
}
}
}
);
Ergebnis:
{
"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"
]
}
}
}
Rechtliche Hinweise¶
Die Datenklassifizierung der Eingaben und Ausgaben ist in der folgenden Tabelle aufgeführt.
Klassifizierung von Eingabedaten |
Klassifizierung von Ausgabedaten |
Benennung |
|---|---|---|
Usage Data |
Customer Data |
Die allgemein verfügbaren Funktionen sind abgedeckte AI-Features. Die Vorschaufunktionen sind Vorschau-AI-Features. [1] |
Weitere Informationen dazu finden Sie unter KI und ML in Snowflake.