Document AI 表提取:最佳实践¶
使用 Document AI,您可以从实体中提取信息(以单个值或值列表的形式),或根据指定列的列表从表格中提取信息。有关在 Document AI 界面中使用表格提取的信息,请参阅 定义 Document AI 模型构建的值。
本主题提供了在 Document AI 中进行表格提取时的最佳实践。
使用一个模型同时进行实体提取和表格提取¶
要同时提取实体值和表值,请在创建模型构建时使用 :ref:` 表提取处理类型 <label-document_ai_define_values>`。为所有表格定义数值,然后添加一个附加表格,将所有实体集中到其中。对于列名,使用提取实体的名称。请注意,可能需要进行训练以提高结果的准确性。
为特定类型的文档使用一个模型构建¶
每个模型构建必须包含相同类型的文档,并且大多数表格中要提取的数据应具有相似性。如果源文档中的列数因文档而异,但所有文档都包含要提取的定义子集列,且这些公共列的名称和位置相同或相似,则可以提取这些公共列。
例如,发票可能包含不同数量的列和各种数据,但如果所有表格的前三列相同(Item Description
、Quantity
、Price
)则这些数据可以被提取。
使用自然语言定义列名¶
您可以从文档中复制列名,以确保它们完全一致。例如,不要将列命名为 product_code
或 REPORT_DATE
;应将它们命名为 Product Code
或 Report Date
。
查看时,请正确指定空行¶
当您查看模型提供的答案时,对于空行,请在每个单元格中使用 -
,而不是 None
。在训练过程中,模型会忽略每个单元格中包含 None
的行。
按照文档中出现的顺序定义列¶
为提高准确性,请按照文档中列的出现顺序定义列,通常是从左到右,或者对于 转置表格,则从上到下。如果您选择以不同的方式定义顺序,则可能需要训练。
但是,对于包含多行数据的列,例如 Invoice Number
和 Invoice Date
,应将这些列放在开头。例如:
Invoice Number
Invoice Date
Item Code
Item Name
Quantity
使用文档中的大小写定义数值¶
在可能的情况下,请使用文档中的大小写(大写和小写)来定义数值。如果文档中的大小写不一致,请使用首字母大写。
仅在必要时使用定位器字段¶
定位器字段 是可选的;在大多数情况下,您不必填写。但是,如果文档中有多个相似的表格,则模型的回答可能不准确。如果答案来自与预期不同的源表格,请尝试使用定位器字段。添加有助于模型识别正确表格的信息,例如表格标题或数字。
添加章节列来描述表格的布局¶
如果表分为多个命名部分,请添加一个分区列。这有助于模型更好地理解布局,从而提高准确性。例如,您可以将列命名为 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 |
请注意,第一列的值会在对应的物品中重复出现。
如果您想添加更多列或表格较大,Snowflake 建议创建一个单行的附加表格(如 使用一个模型同时进行实体提取和表格提取 章节中所述),以优化成本。
使各文档之间的列名可区分¶
尝试从语义上区分一列。不要使用诸如 col1
、val1
、item1
之类的名称。
在某些情况下,转置可能效果更好,尤其是当行名在各文档之间相同或仅略有差异且属于有限的取值范围时。
请注意,对指定列集进行训练可能会提高结果的准确性。
在处理层级标头时,将父级名称用作前缀¶
要从具有层级标头的表格中提取信息,请将标头路径连接起来,每个父级名称作为前缀。例如,对于下表,将列定义为:
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

如有需要,对表格进行转置¶
您可以通过使用文档中表格第一列的值作为输出表格的列名,从转置表格中提取信息。
例如,对于下列表格,将列命名为:
Type A: Item 1
Type A: Item 2
Type B: Item 3
Type B: Item 4

请注意,此示例包含 分层标头。
对于大型表格,拆分文档¶
表格提取模型返回的答案最长可达 2048 个词元。这意味着模型在达到该限制时会停止提取。您可以通过以下方式来实现:
如果表格跨越多页,请将文档拆分为多个单页文档,并在后处理阶段合并结果。
如果表格过于密集,以至于即使在单页上也无法提取数据,请按列拆分表格。
例如,如果表格包含 10 列,可以尝试定义两个独立的值:一个取表格左半部分的 5 列,另一个取右半部分的 5 列。您可能需要对列的选择进行试验,以获得最佳效果。
为文档中没有名称的列创建列名¶
如果文档中的第一列没有名称,则在定义该值时必须自行创建列名。您可以通过以下方式处理:
使用表格标题或标题中的重要部分。
创建一个能描述列中数据的名称,例如
description
、type of asset
、year
、category
。
比较两个不同时期的数据¶
如果您想比较两个不同时期的数据,例如在年度报告等财务文档中比较 2023 年和 2024 年的数据,可以在列名前添加“current”和“previous”前缀。请注意,可能需要进行训练以提高结果的准确性。