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.

Beispieldokument (Vereinbarung über den Kauf und Verkauf von Eigentumsobjekten).

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?)

'October 6, 2023'

Who is the buyer of the condo? (Wer ist der Käufer der Eigentumswohnung?)

'John Davis', 'Jane Davis'

What home appliances are included with the unit? (Welche Haushaltsgeräte sind im Vertrag enthalten?)

'stove/range', 'refrigerator', 'washer', 'dishwasher', 'attached television(s)', 'microwave'

What items are not included with the flat? (Welche Gegenstände sind nicht in der Wohnung?)

'dryer', 'security system', 'satellite dish', 'wood stove', 'fireplace insert', 'hot tub', 'attached speaker(s)', 'generator'

Is there a dryer in the flat? (Gibt es einen Trockner in der Wohnung?)

'No'

What addenda are attached to this purchase and sale agreement? (Welche Anhänge sind dem Kaufvertrag beigefügt?)

'22A (Financing)', '2AA (Appraisal)', '22FSBO (Owner Sale)'

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?)

'No'

What is the MLS number? (Wie ist die MLS-Nummer?)

'59844680'

What is the property’s address? (Wie ist die Adresse des Grundstücks?)

'604 Bishop Crossing Land, Fort Lauderdale, Broward County, FL, 33338'

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 Number

  • Invoice Date

  • Item Code

  • Item Name

  • Quantity

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 1

  • Category A Type Y Column 2

  • Category A Type Y Column 3

  • Category B Column 4

  • Category B Column 5

Eine Tabelle mit Headern mit den Namen „Kategorie A“ und „Kategorie B“, wobei „Kategorie A“ Zwischenheader enthält: Typ X und Typ Y.

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 1

  • Type A: Item 2

  • Type B: Item 3

  • Type B: Item 4

Beispiel für eine Tabelle, die transponiert werden kann.

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?']]
);
Copy

Ergebnis:

{
    "error": null,
    "response": {
        "address": "12/12/2023",
        "seller_name": "Paul Doyle"
    }
}
Copy

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?']]
);
Copy

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"
    }
}
Copy

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?']]
);
Copy

Ergebnis:

{
  "error": null,
    "response": {
        "signature": "no"
    }
}
Copy

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'
            }
        }
        }
    }
);
Copy

Ergebnis:

{
    "error": null,
    "response": {
        "buyer_list": [
        "John Davis",
        "Jane Davis"
        ]
    }
}
Copy

Beispiel: Informationen aus einer Tabelle extrahieren

In diesem Beispiel werden Informationen aus dem folgenden Dokument extrahiert:

Tabelle: Granger-Kausalitätstests – P-Werte
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'
                    }
                }
            }
        }
    }
);
Copy

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"
            ]
        }
    }
}
Copy