Extraindo informações de documentos com AI_EXTRACT¶
AI_EXTRACT é uma função de AI do Cortex que permite extrair informações estruturadas, como entidades, listas e tabelas, de arquivos de texto ou de documento, fazendo perguntas em linguagem natural ou descrevendo as informações a serem extraídas. Ela pode ser usada com outras funções para criar pipelines de processamento de documentos personalizados para uma variedade de casos de uso (consulte Cortex AI Functions: documentos).
A AI_EXTRACT pode processar documentos de vários formatos em muitos idiomas e extrair informações tanto de parágrafos com muito texto quanto de conteúdo em formato gráfico, como logotipos, texto manuscrito (por exemplo, assinaturas), tabelas ou marcas de seleção. A AI_EXTRACT pode extrair informações nos seguintes formatos estruturados:
Entidade: faça perguntas em linguagem natural ou descreva as informações a serem extraídas (como cidade, rua ou código ZIP).
Lista (ou matriz): você pode fornecer um esquema JSON para extrair uma matriz ou lista de informações presentes no documento, como o nome de todos os titulares de contas em um extrato bancário ou uma lista de todos os endereços em um de documento.
Tabela: forneça um esquema JSON para extrair dados tabulares presentes no documento especificando o título da tabela e uma lista de colunas que devem ser extraídas.
A AI_EXTRACT é dimensionada automaticamente conforme sua carga de trabalho, processando vários documentos ao mesmo tempo. Os documentos podem ser processados diretamente do armazenamento de objetos para evitar movimentação desnecessária de dados.
Nota
AI_EXTRACT é atualmente incompatível com políticas de rede personalizadas.
Dica
Para obter mais informações sobre AI_EXTRACT, incluindo idiomas compatíveis, disponibilidade regional e custo, consulte AI_EXTRACT.
Qualidade da extração¶
A AI_EXTRACT usa arctic-extract, um modelo de linguagem grande (Large Language Model, LLM) baseado em visão proprietária que entrega extração de alta precisão. A tabela a seguir apresenta as pontuações do modelo com base em vários parâmetros de comparação padrão, com as pontuações de outros modelos populares para comparação:
Resposta visual a perguntas (VQA)¶
Oferta |
Pontuação DocVQA |
|---|---|
Avaliação humana |
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 |
Resposta somente texto a perguntas (SQuAD v2)¶
Oferta |
ANLS |
Correspondência exata |
|---|---|---|
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 |
Otimização de perguntas para extração de informações¶
Ao trabalhar com AI_EXTRACT, use linguagem natural para fazer perguntas sobre seus documentos. Para fazer uma pergunta que retorne uma resposta precisa, siga estas diretrizes:
Use uma linguagem simples.
Para cada pergunta, saiba quais respostas esperar.
Seja específico; por exemplo, se o documento incluir várias datas (como data de emissão e data de assinatura), não pergunte “Qual é a data?” sem incluir mais detalhes.
Peça um único valor por pergunta.
Não espere que a AI_EXTRACT adivinhe suas intenções ou tenha amplo conhecimento em um domínio específico.
Considere o seguinte documento como exemplo. Este contrato de compra e venda inclui informações como a data de expiração da oferta, os nomes dos compradores e do vendedor e os itens inclusos.
A tabela a seguir fornece exemplos de perguntas que você pode fazer para AI_EXTRACT e as respostas esperadas.
Exemplo de pergunta |
Resposta |
|---|---|
Qual é a data deste contrato? |
|
Quem é o comprador do condomínio? |
|
Quais eletrodomésticos estão incluídos na unidade? |
|
Quais itens não estão inclusos no apartamento? |
|
Há uma secadora no apartamento? |
|
Quais adendos foram anexados a este contrato de compra e venda? |
|
Qual é o número de fax do vendedor? |
Nenhum |
A assinatura do comprador está presente no formulário? |
|
Qual é o número MLS? |
|
Qual é o endereço do imóvel? |
|
Práticas recomendadas para extração de tabelas¶
Esta seção fornece as práticas recomendadas para trabalhar com extração de tabelas em AI_EXTRACT.
Usar um esquema para um tipo específico de documento¶
Cada carga de trabalho de extração deve conter documentos do mesmo tipo, e os dados que você deseja extrair devem ser semelhantes para a maioria das tabelas. Se o número de colunas no documento de origem for diferente entre um documento e outro, mas todos os documentos incluírem um subconjunto definido de colunas a serem extraídas e as colunas comuns tiverem nome e localização iguais ou semelhantes, essas colunas comuns poderão ser extraídas.
Por exemplo, as faturas podem ter números diferentes de colunas com vários dados, mas se todas as tabelas tiverem as mesmas três primeiras colunas, Item Description, Quantity e Price, os dados poderão ser extraídos.
Uso de linguagem natural para definir nomes de colunas¶
Você pode copiar os nomes das colunas do documento para que sejam exatamente iguais. Por exemplo, não insira nomes de colunas como product_code ou REPORT_DATE; em vez disso, insira Product Code ou Report Date.
Ignorar as linhas vazias¶
Ao criar um conjunto de dados de ajuste fino, ignore as linhas sem resposta (em que a resposta retornada seria None).
Definição de colunas na mesma ordem em que aparecem no documento¶
Para melhorar a precisão, defina as colunas na mesma ordem em que aparecem no documento, que geralmente é da esquerda para a direita ou de cima para baixo para tabelas transpostas. Se você definir a ordem de forma diferente, poderá ser necessário treinamento.
No entanto, para colunas em que os valores são os mesmos para várias linhas, como Invoice Number e Invoice Date, adicione essas colunas no início. Por exemplo:
Invoice NumberInvoice DateItem CodeItem NameQuantity
Definição de valores usando as letras maiúsculas e minúsculas do documento¶
Quando possível, defina valores usando as letras maiúsculas e minúsculas do documento. Se o uso de letras maiúsculas e minúsculas no documento for variado, use maiúsculas.
Usar o campo de descrição¶
O campo description no formato de resposta AI_EXTRACT é opcional; na maioria dos casos, não é necessário preenchê-lo. No entanto, se houver várias tabelas semelhantes em um documento, o modelo poderá responder de forma imprecisa. Se as respostas vierem de uma tabela de origem diferente da esperada ou se o modelo não conseguir encontrar a tabela, tente usar o campo description. Adicione informações que ajudem o modelo a identificar a tabela correta, como título ou número da tabela.
Adição da coluna de seção para descrever o layout da tabela¶
Se a tabela for dividida em várias seções nomeadas, adicione uma coluna de seção. Isso ajuda o modelo a entender melhor o layout e melhorar a precisão. Por exemplo, você pode inserir um nome de coluna Section, Item section``ou ``Item category. Se houver um segundo nível de aninhamento nas seções, você poderá adicionar duas colunas: Section e Subsection.
Criação de uma coluna adicional para agrupar valores¶
Você pode adicionar uma coluna à tabela existente para agrupar valores. Dessa forma, você pode unir os resultados de todo o conjunto de documentos em uma única tabela. Por exemplo:
Número da fatura |
Detalhes do item |
Preço do item |
Quantidade |
|---|---|---|---|
A |
Item A1 |
10,00 |
1 |
A |
Item A2 |
20,00 |
1 |
A |
Item A3 |
30,00 |
1 |
B |
Item B1 |
15,00 |
1 |
B |
Item B2 |
25,00 |
1 |
B |
Item B3 |
35,00 |
1 |
Observe que o valor na primeira coluna é repetido para os itens correspondentes.
Distinção dos nomes das colunas entre documentos¶
Tente distinguir semanticamente uma coluna. Não use nomes como col1, val1 ou item1.
Em alguns casos, a transposição pode funcionar melhor, especialmente quando os nomes das linhas são iguais entre os documentos ou são ligeiramente diferentes e estão dentro de um conjunto fechado de valores.
Observe que o treinamento no conjunto de colunas especificado pode melhorar os resultados.
Uso do nome pai como prefixo ao trabalhar com cabeçalhos hierárquicos¶
Para extrair informações de tabelas com cabeçalhos hierárquicos, una o caminho do cabeçalho usando cada nome pai como prefixo. Por exemplo, para a tabela a seguir, defina as colunas como:
Category A Type X Column 1Category A Type Y Column 2Category A Type Y Column 3Category B Column 4Category B Column 5
Transposição das tabelas, se necessário¶
Você pode extrair informações de tabelas transpostas usando os valores da primeira coluna da tabela no documento como nomes de colunas na tabela de saída.
Por exemplo, para a tabela a seguir, insira estes nomes de colunas:
Type A: Item 1Type A: Item 2Type B: Item 3Type B: Item 4
Observe que este exemplo inclui cabeçalhos hierárquicos.
Divisão do documento para tabelas grandes¶
O modelo para extração de tabela retorna respostas com até 4096 tokens. Isso significa que o modelo para de extrair quando atinge esse limite. Você pode trabalhar com isso das seguintes maneiras:
Se a tabela ocupar várias páginas, divida o documento em vários documentos de uma página e una os resultados no pós-processamento.
Se a tabela for muito densa a ponto de inviabilizar a extração dos dados até mesmo de uma única página, divida a tabela por colunas.
Por exemplo, se a tabela tiver 10 colunas, tente definir dois valores separados: um com 5 colunas da metade esquerda da tabela e outro com 5 colunas da metade direita da tabela. Talvez você tenha que testar a opção da coluna para obter melhores resultados.
Criação de nomes para colunas sem nome no documento¶
Se a primeira coluna no documento não tiver um nome, você mesmo deverá criar esse nome ao definir o valor. Você pode trabalhar com isso das seguintes maneiras:
Use o título ou uma parte significativa do título da tabela.
Crie um nome descritivo que represente os dados na coluna; por exemplo,
description,type of asset,year,category.
Comparação de dados de dois períodos de tempo diferentes¶
Se quiser comparar os dados de dois períodos de tempo diferentes, por exemplo, dos anos 2023 e 2024 em documentos financeiros, como relatórios anuais, você poderá inserir os prefixos «atual» e «anterior» nas colunas. Observe que pode ser necessário treinamento para melhorar os resultados.
Exemplos: extração de informações de um contrato de compra e venda¶
Os exemplos a seguir extraem informações do contrato de compra e venda de um imóvel, que você pode visualizar na seção Otimização de perguntas para extração de informações.
Extrair uma entidade¶
Extraia o nome do vendedor e a data de vencimento da oferta:
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?']]
);
Resultado:
{
"error": null,
"response": {
"address": "12/12/2023",
"seller_name": "Paul Doyle"
}
}
Extrair informações de caixas de seleção¶
Extraia informações sobre itens que não estão incluídos, com base nas caixas de seleção marcadas no documento:
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?']]
);
Resultado:
{
"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"
}
}
Extrair o status da assinatura¶
Extraia informações sobre se o contrato foi assinado:
SELECT AI_EXTRACT(
file => TO_FILE('@db.schema.stage','document.pdf'),
responseFormat => [['signature', 'Is this document signed?']]
);
Resultado:
{
"error": null,
"response": {
"signature": "no"
}
}
Extrair uma lista de entidades¶
Extraia uma lista de nomes de compradores:
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'
}
}
}
}
);
Resultado:
{
"error": null,
"response": {
"buyer_list": [
"John Davis",
"Jane Davis"
]
}
}
Exemplo: Extrair informações de uma tabela¶
Este exemplo extrai informações do seguinte documento:
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'
}
}
}
}
}
);
Resultado:
{
"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"
]
}
}
}
Avisos legais¶
A classificação dos dados de entradas e saídas é definido na tabela a seguir.
Classificação de dados de entrada |
Classificação de dados de saída |
Designação |
|---|---|---|
Usage Data |
Customer Data |
As funções disponíveis ao público em geral são recursos de AI cobertos. As funções em versão preliminar são recursos de AI em versão preliminar. [1] |
Para obter informações adicionais, consulte AI e ML Snowflake.