基于Vision Transformers的文档理解简介

2023-02-01 10:03:54 浏览数 (2)

文档理解是从pdf、图像和Word文档中提取关键信息的技术。这篇文章的目标是提供一个文档理解模型的概述。

文档理解算法使用编码器-解码器结构分析文档内容,该管道结合了计算机视觉(CV)和自然语言处理(NLP)方法。管道的CV部分将文档作为输入图像进行分析,生成transformer可以处理的表示形式。在下图中,CV模型生成图像嵌入,并将其馈送到多模态transformer中。

在以前,卷积神经网络(cnn)如ResNet已经主导了CV领域。最近,类似于NLP架构(如BERT)的VIT作为cnn的替代方法获得了更多的关注。ViTs首先将输入图像分割为若干块,将这些块转换为线性嵌入序列,然后将这些嵌入馈送到transformer 编码器中。这个过程如图2所示。线性嵌入的作用类似于NLP中的令牌。与NLP模型一样,transformer 的输出可用于图像分类等任务。

vit比cnn有几个优势。可以获得全局关系,并对对抗性攻击表现出更强的弹性。缺点是训练vit需要更多的样本,因为cnn有归纳偏差,允许用更少的例子来训练它们。我们可以通过使用大型图像数据集预训练VIT来缓解这个问题。vit也是计算密集型的——运行transformer 所需的计算量随着令牌数量的增加而成倍增长。VIT现在可以作为HuggingFace视觉编码解码器模型的一部分,如下面的代码片段所示。

代码语言:javascript复制
 from transformers import BertConfig, ViTConfig, VisionEncoderDecoderConfig, VisionEncoderDecoderModel
 
 config_encoder = ViTConfig()
 config_decoder = BertConfig()
 config = VisionEncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder)
 model = VisionEncoderDecoderModel(config=config)

视觉编码器解码器为许多文档理解模型提供了基础。Donut[3]模型首先使用图像transformer 处理输入图像,然后将其提供给解码器以生成输入文档的结构化表示。在下面的示例中,我们使用收据的图像,并输出了一个结构化JSON,其中包含了收据的行项。

尽管一些文档理解模型(如LayoutLMv3[1])需要预处理来识别边界框并执行OCR,但Donut将输入图像直接转换为目标JSON,如下面的代码所示。这种方法的一个缺点是输出不包括边界框,因此不提供关于提取来自文档中的哪个位置的任何信息。

代码语言:javascript复制
 from donut.model import DonutModel
 from PIL import Image
 model = DonutModel.from_pretrained("./custom-fine-tuned-model")
 
 prediction = model.inference(
     image=Image.open("./example-invoice.jpeg"), prompt="<s_dataset-donut-generated>"
 )["predictions"][0]
 
 print(prediction)
 {
     "InvoiceId": "# 560578",
     "VendorName": "THE LIGHT OF DANCE ACADEMY",
     "VendorAddress": "680 Connecticut Avenue, Norwalk, CT, 6854, USA",
     "InvoiceDate": "4/11/2003",
     "AmountDue": "Balance Due:",
     "CustomerName": "Eco Financing",
     "customerAddress": "2900 Pepperrell Pkwy, Opelika, AL, 36801, USA",
     "items": [
         {
             "Description": "FURminator deShedding Tool",
             "Quantity": "5",
             "UnitPrice": "$8.09",
             "Amount": "$40.46"
         },
         {
             "Description": "Roux Lash & Brow Tint",
             "Quantity": "5",
             "UnitPrice": "$68.61",
             "Amount": "$343.03"
         },
         {
             "Description": "Cranberry Tea by Alvita - 24 Bags",
             "Quantity": "1",
             "UnitPrice": "$42.30",
             "Amount": "$42.30"
         }
     ],
     "InvoiceTotal": "$425.79"
 }

以上就是文档理解的简介,西洼港对你有所帮助。

作者:Unstructured-IO

0 人点赞