AI_EXTRACT로 문서에서 정보 추출하기¶
AI_EXTRACT는 자연어로 질문하거나 추출할 정보를 설명하여 텍스트 또는 문서 파일에서 엔터티, 목록, 테이블과 같은 정형 정보를 추출할 수 있는 Cortex AI 함수입니다. 다른 함수와 함께 사용하여 다양한 사용 사례에 대한 사용자 지정 문서 처리 파이프라인을 생성할 수 있습니다(Cortex AI 함수: 문서 참조).
AI_EXTRACT는 다양한 형식의 문서를 처리하고 텍스트가 많은 단락과 로고, 필기 텍스트(예: 서명), 테이블 또는 확인 표시와 같은 그래픽 형식의 콘텐츠에서 정보를 추출할 수 있습니다. AI_EXTRACT는 다음과 같은 정형 형식으로 정보를 추출할 수 있습니다.
엔터티: 자연어로 질문하거나 추출할 정보(예: 도시, 거리 또는 ZIP 코드)를 설명합니다.
나열(또는 배열): 은행 명세서의 모든 계좌 소유자 이름 또는 문서의 모든 주소 목록과 같이 문서에 있는 정보의 배열 또는 목록을 추출하는 JSON 스키마를 제공할 수 있습니다.
테이블: 추출해야 하는 테이블 제목과 열 목록을 지정하여 문서에 있는 테이블 형식 데이터를 추출하는 JSON 스키마를 제공합니다.
AI_EXTRACT는 여러 문서를 동시에 처리하여 워크로드에 따라 자동으로 확장됩니다. 문서는 불필요한 데이터 이동을 피하기 위해 오브젝트 저장소에서 직접 처리될 수 있습니다.
참고
AI_EXTRACT 는 현재 사용자 지정 네트워크 정책 과 호환되지 않습니다.
팁
지원되는 언어, 리전별 가용성, 비용을 포함하여 AI_EXTRACT에 대한 자세한 내용은 AI_EXTRACT 섹션을 참조하세요.
추출 품질¶
AI_EXTRACT는 높은 추출 정확도를 제공하는 독점적인 비전 기반 대규모 언어 모델(LLM)인 ``arctic-extract``를 사용합니다. 다음 테이블에는 여러 표준 벤치마크에서 해당 모델이 획득한 점수가 정리되어 있으며, 다른 주요 모델들의 점수도 비교 참고용으로 함께 제공됩니다.
시각적 질문 답변(VQA)¶
제안 |
DocVQA 점수 |
|---|---|
인적 평가 |
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 |
텍스트 전용 질문 답변(SQuAD v2)¶
제안 |
ANLS |
정확한 일치 |
|---|---|---|
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 |
정보 추출을 위한 질문 최적화¶
AI_EXTRACT로 작업할 때는 자연어를 사용하여 문서에 대한 질문을 할 수 있습니다. 정확한 답변이 제공되는 질문을 하려면 다음 지침을 따르십시오.
쉬운 영어를 사용합니다.
각 질문에 대해 기대되는 답변을 파악합니다.
구체적으로 설명합니다. 예를 들어, 문서에 여러 날짜(발행일, 서명일 등)가 포함되어 있는 경우, 더 자세한 내용 없이 “What is the date?”라고 질문하지 마십시오.
각 질문에 하나의 값만 요청합니다.
AI_EXTRACT 가 사용자의 의도를 추측하거나 특정 영역에 대한 폭넓은 지식을 가지고 있을 것이라고 기대하지 마십시오.
다음 문서를 예로 들어보겠습니다. 이 매매 계약에는 제안 만료일, 구매자와 판매자 이름, 포함 품목 등의 정보가 포함되어 있습니다.
다음 테이블에는 AI_EXTRACT에 질문할 수 있는 질문의 예제와 예상 답변이 나와 있습니다.
예시 질문 |
답변 |
|---|---|
이 계약의 날짜는 언제입니까? |
|
콘도 구매자는 누구입니까? |
|
이 제품에는 어떤 가전제품이 포함되어 있나요? |
|
아파트에 포함되지 않는 물품은 무엇입니까? |
|
아파트에 건조기가 있나요? |
|
이 매매 계약서에는 어떤 부록이 첨부되어 있습니까? |
|
판매자의 팩스 번호는 무엇입니까? |
없음 |
구매자의 서명이 양식에 있습니까? |
|
MLS 번호란 무엇입니까? |
|
해당 부동산의 주소는 어디입니까? |
|
테이블 추출 모범 사례¶
이 항목에서는 AI_EXTRACT에서 테이블 추출 작업을 수행할 때의 모범 사례를 제공합니다.
특정 유형의 문서에 하나의 스키마 사용¶
각 추출 워크로드에는 동일한 유형의 문서가 포함되어야 하며, 추출하려는 데이터는 대부분의 테이블에서 유사해야 합니다. 소스 문서의 열 수가 문서마다 다르더라도, 모든 문서에 추출 대상인 정의된 하위 집합의 열이 포함되어 있고 공통 열의 이름과 위치가 동일하거나 유사하다면, 해당 공통 열을 추출할 수 있습니다.
예를 들어, 청구서에는 다양한 데이터를 포함하는 서로 다른 열 수가 있을 수 있지만, 모든 테이블의 첫 세 열(Item Description, Quantity, Price)이 동일하다면 해당 데이터를 추출할 수 있습니다.
자연어로 열 이름 정의¶
문서에서 열 이름을 복사하여 정확히 동일하게 만들 수 있습니다. 예를 들어, 열 이름을 product_code 또는 REPORT_DATE``로 지정하지 말고, 대신 ``Product Code 또는 ``Report Date``로 지정하세요.
빈 행 건너뛰기¶
미세 조정 데이터 세트를 생성할 때 답변이 없는(반환된 답변이 ``None``인) 행을 건너뜁니다.
문서에 나타나는 순서대로 열 정의¶
정확도를 높이려면 문서에 표시되는 순서와 동일한 순서로 열을 정의하세요. 일반적으로 :ref:`전치된 테이블<label-ai_extract_table_extraction_best_practices_transpose_tables>`의 경우 왼쪽에서 오른쪽 또는 위에서 아래로입니다. 순서를 다르게 정의하기로 선택할 경우, 훈련이 필요할 수 있습니다.
그러나 여러 행에 대해 값이 동일한 열의 경우(예: Invoice Number 및 Invoice Date), 시작 부분에 이러한 열을 추가합니다. 예:
Invoice NumberInvoice DateItem CodeItem NameQuantity
문서의 대소문자를 사용하여 값 정의¶
가능한 경우 문서에서 대소문자를 사용하여 값을 정의하세요. 문서 내 대소문자가 다양할 경우 첫 글자만 대문자로 작성하세요.
설명 필드 사용¶
AI_EXTRACT 응답 형식의 description 필드는 선택 사항입니다. 대부분의 경우 입력할 필요가 없습니다. 그러나 문서 내에 유사한 테이블이 여러 개 존재할 경우, 모델이 부정확하게 답변할 수 있습니다. 답변이 예상과 다른 소스 테이블에서 오거나 모델이 테이블을 찾을 수 없는 경우, description 필드를 사용해 보세요. 모델이 올바른 테이블을 식별하는 데 도움이 되는 정보(예: 테이블 제목 또는 번호)를 추가하세요.
테이블 레이아웃을 설명하는 섹션 열 추가¶
테이블이 여러 개의 명명된 섹션으로 나뉘어 있다면, 섹션 열을 추가하세요. 이는 모델이 레이아웃을 더 잘 이해하고 정확도를 향상시키는 데 도움이 됩니다. 예를 들어, 열 이름을 Section, Item section 또는 Item category 등으로 지정할 수 있습니다. 섹션에 중첩된 두 번째 수준이 있는 경우, 두 개의 열, 즉 Section 및 ``Subsection``을 추가할 수 있습니다.
값을 그룹화하려면 추가 열 생성¶
기존 테이블에 열을 추가하여 값을 그룹화할 수 있습니다. 이렇게 하면 전체 문서 세트의 결과를 단일 테이블로 결합할 수 있습니다. 예를 들면 다음과 같습니다.
청구서 번호 |
항목 상세 정보 |
항목 가격 |
수량 |
|---|---|---|---|
A |
항목 A1 |
10.00 |
1 |
A |
항목 A2 |
20.00 |
1 |
A |
항목 A3 |
30.00 |
1 |
B |
항목 B1 |
15.00 |
1 |
B |
항목 B2 |
25.00 |
1 |
B |
항목 B3 |
35.00 |
1 |
첫 번째 열의 값은 해당 항목들에 대해 반복된다는 점에 유의하세요.
문서 간 열 이름을 구분 가능하게 만들기¶
열을 의미 체계적으로 구분해 보세요. col1, val1, ``item1``과 같은 이름을 사용하지 마세요.
경우에 따라 전치가 더 효과적일 수 있는데, 특히 행 이름이 문서 간에 다르지 않거나, 약간만 다르고 닫힌 값 세트 내에 속하는 경우에 그러합니다.
지정된 열 세트로 훈련하면 결과가 개선될 수 있습니다.
계층적 헤더 작업을 할 때 상위 항목 이름을 접두사로 사용¶
계층적 헤더가 있는 테이블에서 정보를 추출하려면, 각 상위 항목 이름을 접두사로 사용하여 헤더 경로를 연결하세요. 예를 들어, 다음 테이블의 경우 열을 다음과 같이 정의하세요.
Category A Type X Column 1Category A Type Y Column 2Category A Type Y Column 3Category B Column 4Category B Column 5
필요할 경우 테이블 전치¶
문서 내 테이블의 첫 번째 열 값을 출력 테이블의 열 이름으로 사용하여 전치된 테이블에서 정보를 추출할 수 있습니다.
예를 들어, 다음 테이블의 경우 열 이름을 다음과 같이 지정하세요.
Type A: Item 1Type A: Item 2Type B: Item 3Type B: Item 4
이 예제에는 :ref:`계층적 헤더<label-ai_extract_table_extraction_best_practices_hierarchical>`가 포함되어 있음을 참고하세요.
큰 테이블의 경우 문서 분할¶
테이블 추출 모델은 최대 4096개 토큰 길이의 답변을 반환합니다. 즉, 모델은 해당 한계에 도달하면 추출을 중단합니다. 다음과 같은 방법으로 접근할 수 있습니다.
테이블이 여러 페이지에 걸쳐 있는 경우, 문서를 여러 개의 한 페이지 문서로 분할한 다음, 후처리 단계에서 결과를 결합하세요.
테이블이 너무 조밀해서 단일 페이지에서도 데이터를 추출할 수 없다면, 테이블을 열 단위로 분할하세요.
예를 들어, 테이블에 10개의 열이 포함되어 있다면, 별도의 두 값을 정의해 보세요. 하나는 테이블의 왼쪽 절반에서 5개의 열을, 다른 하나는 테이블의 오른쪽 절반에서 5개의 열을 포함하도록 합니다. 최상의 결과를 얻으려면 열 선택을 실험해 볼 필요가 있을 수 있습니다.
문서에서 이름이 지정되지 않은 열에 대해 이름 생성¶
문서의 첫 번째 열에 이름이 없는 경우, 값을 정의할 때 해당 이름을 직접 생성해야 합니다. 다음과 같은 방법으로 접근할 수 있습니다.
테이블 제목 또는 제목의 중요한 부분을 사용하세요.
열의 데이터를 나타내는 설명이 포함된 이름을 생성합니다(예:
description,type of asset,year,category).
두 개의 서로 다른 시기의 데이터 비교¶
연간 보고서와 같은 재무 문서에서 2023년과 2024년처럼 서로 다른 기간의 데이터를 비교하려면, 해당 열 앞에 “현재”와 “이전”을 접두사로 붙일 수 있습니다. 결과를 개선하기 위해 훈련이 필요할 수 있음을 유의하세요.
예제: 매매 계약서에서 정보 추출¶
다음 예제에서는 정보 추출을 위한 질문 최적화 섹션에서 볼 수 있는 콘도 매매 계약서에서 정보를 추출합니다.
엔터티 추출¶
판매자 이름과 오퍼 만료 날짜를 추출합니다.
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?']]
);
결과:
{
"error": null,
"response": {
"address": "12/12/2023",
"seller_name": "Paul Doyle"
}
}
확인란 정보 추출¶
이 예제에서는 문서에 표시된 확인란을 기반으로 포함되지 않은 항목에 대한 정보를 추출합니다.
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?']]
);
결과:
{
"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"
}
}
서명 상태 추출¶
계약이 서명되었는지 여부에 대한 정보를 추출합니다.
SELECT AI_EXTRACT(
file => TO_FILE('@db.schema.stage','document.pdf'),
responseFormat => [['signature', 'Is this document signed?']]
);
결과:
{
"error": null,
"response": {
"signature": "no"
}
}
엔터티 목록 추출¶
구매자 이름 목록을 추출합니다.
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'
}
}
}
}
);
결과:
{
"error": null,
"response": {
"buyer_list": [
"John Davis",
"Jane Davis"
]
}
}
예: 테이블에서 정보 추출¶
이 예제에서는 다음 문서에서 정보를 추출합니다.
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'
}
}
}
}
}
);
결과:
{
"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"
]
}
}
}
법적 고지¶
입력 및 출력의 데이터 분류는 다음 테이블과 같습니다.
입력 데이터 분류 |
출력 데이터 분류 |
지정 |
|---|---|---|
Usage Data |
Customer Data |
일반적으로 사용 가능한 함수는 Covered AI 기능입니다. 미리 보기 함수는 Preview AI 기능입니다. [1] |
자세한 내용은 Snowflake AI 및 ML 섹션을 참조하십시오.