【人工智能】Transformers之Pipeline(二十三):文档视觉问答(document-question-answering)

news2024/12/23 22:36:55

​​​​​​​

目录

一、引言 

二、文档问答(document-question-answering)

2.1 概述

2.2 impira/layoutlm-document-qa

2.2.1 LayoutLM v1

2.2.2 LayoutLM v2

2.2.3 LayoutXLM

2.2.4 LayoutLM v3

2.3 pipeline参数

2.3.1 pipeline对象实例化参数

2.3.2 pipeline对象使用参数 

2.3.3 pipeline返回参数 ​​​​​​​​​​​​​​

2.4 pipeline实战

2.5 模型排名

三、总结


一、引言 

pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks)。共计覆盖32万个模型

今天介绍多模态的第一篇:文档问答(document-question-answering),在huggingface库内有201个文档问答(document-question-answering)模型。

二、文档问答(document-question-answering)

2.1 概述

文档问答(也称为文档视觉问答)是回答文档图像上的问题的任务。文档问答模型以(文档,问题)对作为输入,并以自然语言返回答案。模型通常依赖于多模态特征,结合文本、单词位置(边界框)和图像。

2.2 impira/layoutlm-document-qa

LayoutLM系列模型是微软发布的、文档理解多模态基础模型领域最重要和有代表性的工作。目前为止总计发布LayoutLM v1、LayoutLM v2、LayoutXLM、LayoutLM v3四个版本:

  • LayoutLM v1:首次在一个框架内联合学习文本(text)和布局(layout)用于文档级预训练的模型。
  • LayoutLM v2:在一个单一的多模态框架中对文本(text)、布局(layout)和图像(image)之间的交互进行建模。
  • LayoutXLM:LayoutXLM是 LayoutLMv2的多语言扩展版本。
  • LayoutLM v3:借鉴了ViLT和BEIT,不需要经过预训练的视觉backbone,通过MLM、MIM和WPA进行预训练的多模态Transformer。在以视觉为中心的任务上(如文档图像分类和文档布局分析)和以文本为中心的任务上(表单理解、收据理解、文档问答)都表现很好。

2.2.1 LayoutLM v1

LayoutLMv1的架构相当简洁,其输入源于表格图像(见图3右下角),该图像经处理后产出两部分关键信息:

  1. 文本特征表示:这一过程涉及从图像中提取文字信息。具体来说,通过应用PDF/OCR技术,图像被解析为一系列bounding boxes(边界框),每个框界定了一段文本的位置,用坐标(x0, y0, x1, y1)表示,相当于文本在表单中的位置编码。接下来,执行文本嵌入,这是NLP领域的一项基本操作,即将识别的文字转换为高维向量。此外,为了整合位置信息,这些坐标经过归一化处理至0到1000之间,旨在消除因图像尺寸差异可能引起的识别偏差。
  2. 图像特征表示:至于图像本身的特征提取,则借助Faster R-CNN模型作为基础网络,负责捕捉图像的视觉特征。特别地,为了与文本特征中的[CLS]标记相对应,采用整个图像的ROI特征作为全局表示,其余特征则与特定文本块一一匹配

完成上述步骤后,经过预训练的模型(LayoutLM依然依托Transformer架构)会融合这些经过预处理的文本特征与图像特征。此综合特征向量随后可被用于各种下游任务的进一步处理和分析。

2.2.2 LayoutLM v2

文本和版式的预训练已经在多种富含视觉元素的文档理解任务中证明了其有效性,这得益于其高效的模型架构以及大规模未标注扫描/数字文档的优势。微软提出了LayoutLMv2架构,并引入新的预训练任务,以便在一个单一的多模态框架中对文本、版式和图像之间的交互进行建模。具体而言,通过使用双流多模态Transformer编码器,LayoutLMv2不仅利用现有的掩码视觉语言建模任务,还采用了新的文本-图像对齐和文本-图像匹配任务,这使得模型在预训练阶段能更好地捕捉跨模态交互。同时,它还将空间感知的自注意力机制整合到Transformer架构中,从而使模型能够充分理解不同文本块之间的相对位置关系。实验结果显示,LayoutLMv2大幅度超越了LayoutLM,并在多种下游富含视觉元素的文档理解任务上达到了新的最佳水平,包括FUNSD(0.7895 → 0.8420)、CORD(0.9493 → 0.9601)、SROIE(0.9524 → 0.9781)、Kleister-NDA(0.8340 → 0.8520)、RVL-CDIP(0.9443 → 0.9564)以及DocVQA(0.7295 → 0.8672)。

2.2.3 LayoutXLM

LayoutXLM是 LayoutLMv2的多语言扩展版本。结合文本、版式和图像的多模态预训练已经在视觉丰富的文档理解任务上达到了最先进的(SOTA)性能,这展示了跨不同模态联合学习的巨大潜力。LayoutXLM是一个面向多语言文档理解的多模态预训练模型,旨在为视觉丰富的文档理解打破语言障碍。为了准确评估LayoutXLM,论文中还引入了一个多语言表单理解基准数据集,名为XFUND,该数据集包含了7种语言(中文、日语、西班牙语、法语、意大利语、德语、葡萄牙语)的表单理解样本,并为每种语言的手工标注了键值对。实验结果表明,LayoutXLM模型在XFUND数据集上显著超越了它之前的跨语言预训练模型的SOTA性能。

2.2.4 LayoutLM v3

自监督预训练技术在文档AI领域取得了显著进展。大多数多模态预训练模型采用掩码语言建模(MLM)目标来学习文本模态上的双向表示,但它们在图像模态的预训练目标上存在差异。这种不一致性为多模态表示学习增加了难度。LayoutLMv3旨在通过统一的文本和图像掩码方式预训练多模态Transformer以服务文档AI。此外,LayoutLMv3还通过word-patch alignment目标进行预训练,通过预测文本词对应的图像块是否被掩码,来学习跨模态对齐

这一简单统一的架构和训练目标使得LayoutLMv3成为既适用于文本为中心也适用于图像为中心的文档AI任务的通用预训练模型。

实验结果表明,LayoutLMv3不仅在以文本为中心的任务上,包括表单理解、收据理解及文档视觉问答,取得了最前沿的表现,而且在以图像为中心的任务上,如文档图像分类和文档布局分析,也同样表现出色

如下图所示,与之前的工作(例如,DocFormer[2]和SelfDoc[31])的比较:

(1)图像嵌入:LayoutLMv3使用线性patches来减少CNN的计算瓶颈,并消除在训练目标检测器时对区域监督的需求;

(2)图像模态的预训练目标:LayoutLMv3学习重构遮罩patches的离散图像tokens,而不是原始像素或区域特征,以捕获高层次的布局结构而不是噪声细节

2.3 pipeline参数

2.3.1 pipeline对象实例化参数

  • model(PreTrainedModel或TFPreTrainedModel)— 管道将使用其进行预测的模型。 对于 PyTorch,这需要从PreTrainedModel继承;对于 TensorFlow,这需要从TFPreTrainedModel继承。
  • tokenizer ( PreTrainedTokenizer ) — 管道将使用其对模型的数据进行编码的 tokenizer。此对象继承自 PreTrainedTokenizer。
  • image_processor ( BaseImageProcessor ) — 管道将使用的图像处理器来为模型编码数据。此对象继承自 BaseImageProcessor。
  • modelcardstrModelCard可选) — 属于此管道模型的模型卡。
  • frameworkstr可选)— 要使用的框架,"pt"适用于 PyTorch 或"tf"TensorFlow。必须安装指定的框架。
  • taskstr,默认为"")— 管道的任务标识符。
  • num_workersint可选,默认为 8)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的工作者数量。
  • batch_sizeint可选,默认为 1)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的批次的大小,对于推理来说,这并不总是有益的,请阅读使用管道进行批处理。
  • args_parser(ArgumentHandler,可选) - 引用负责解析提供的管道参数的对象。
  • deviceint可选,默认为 -1)— CPU/GPU 支持的设备序号。将其设置为 -1 将利用 CPU,设置为正数将在关联的 CUDA 设备 ID 上运行模型。您可以传递本机torch.devicestr
  • torch_dtypestrtorch.dtype可选) - 直接发送model_kwargs(只是一种更简单的快捷方式)以使用此模型的可用精度(torch.float16,,torch.bfloat16...或"auto"
  • binary_outputbool可选,默认为False)——标志指示管道的输出是否应以序列化格式(即 pickle)或原始输出数据(例如文本)进行。

2.3.2 pipeline对象使用参数 

  • imagestrPIL.Image)——管道处理三种类型的图像:

    • 包含指向图像的 http 链接的字符串
    • 包含图像本地路径的字符串
    • 直接在 PIL 中加载的图像

    该管道可以接受单幅图像或一批图像。如果给定单幅图像,则可以将其广播到多个问题。

  • questionstr) — 针对文档提出的问题。
  • word_boxesList[str, Tuple[float, float, float, float]]可选)— 单词和边界框的列表(标准化 0->1000)。如果您提供此可选输入,则管道将使用这些单词和边界框,而不是在图像上运行 OCR 来为需要它们的模型(例如 LayoutLM)导出它们。这允许您在管道的多次调用中重复使用 OCR 的结果,而不必每次都重新运行它。
  • top_k可选int,默认为 1)— 返回的答案数量(将按可能性顺序选择)。请注意,如果上下文中没有足够的选项,我们将返回少于 top_k 个答案。
  • doc_strideint可选,默认为 128)— 如果文档中的单词太长,无法满足模型的问题,则会将其分成几个部分,并有一定的重叠。此参数控制重叠的大小。
  • max_answer_lenint可选,默认为 15)——预测答案的最大长度(例如,只考虑长度较短的答案)。
  • max_seq_len ( int可选,默认为 384) — 传递给模型的每个块的标记中整个句子(上下文 + 问题)的最大长度。如果需要,上下文将被分成几个块(使用doc_stride重叠)。
  • max_question_len ( int可选,默认为 64) — 标记化后问题的最大长度。如果需要,它将被截断。
  • handle_impossible_answerbool可选,默认为False)——我们是否接受不可能作为答案。
  • langstr可选)— 运行 OCR 时使用的语言。默认为英语。
  • tesseract_configstr可选)——运行 OCR 时传递给 tesseract 的附加标志。
  • timeout可选float,默认为 None)— 等待从网络获取图像的最长时间(以秒为单位)。如果为 None,则不设置超时,并且调用可能会永远阻塞。

2.3.3 pipeline返回参数 ​​​​​​​​​​​​​​

  • scorefloat)—— 与答案相关的概率。
  • start ( int) — 答案的起始词索引(在输入的 OCR 版本中或提供的 中 word_boxes)。
  • end ( int) — 答案的结束词索引(在输入的 OCR 版本中或提供的 中 word_boxes)。
  • answerstr) — 问题的答案。
  • words ( list[int]) — 答案中每个单词/框对的索引

2.4 pipeline实战

基于pipeline的document-question-answering任务,采用impira/layoutlm-document-qa进行文档视觉问答,代码如下:

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"

from transformers import pipeline
from PIL import Image

document_qa = pipeline(task="document-question-answering",model="impira/layoutlm-document-qa")
image = Image.open("./image.jpg")                   
output=document_qa(
    image=image,
    question="What is the purchase amount?",
)
print(output)

需要先安装tesseract-ocr:

apt-get install tesseract-ocr

执行后,自动下载模型文件并进行识别:

2.5 模型排名

在huggingface上,我们将文档视觉问答(document-question-answering)模型按热度从高到低排序,总计200个模型,layoutlm排名第一。

三、总结

本文对transformers之pipeline的文档视觉问答(document-question-answering)从概述、技术原理、pipeline参数、pipeline实战、模型排名等方面进行介绍,读者可以基于pipeline使用文中的2行代码极简的使用多模态中的文档视觉问答(document-question-answering)模型。

期待您的3连+关注,如何还有时间,欢迎阅读我的其他文章:

《Transformers-Pipeline概述》

【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用

《Transformers-Pipeline 第一章:音频(Audio)篇》

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)

【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)

【人工智能】Transformers之Pipeline(四):零样本音频分类(zero-shot-audio-classification)

《Transformers-Pipeline 第二章:计算机视觉(CV)篇》

【人工智能】Transformers之Pipeline(五):深度估计(depth-estimation)

【人工智能】Transformers之Pipeline(六):图像分类(image-classification)

【人工智能】Transformers之Pipeline(七):图像分割(image-segmentation)

【人工智能】Transformers之Pipeline(八):图生图(image-to-image)

【人工智能】Transformers之Pipeline(九):物体检测(object-detection)

【人工智能】Transformers之Pipeline(十):视频分类(video-classification)

【人工智能】Transformers之Pipeline(十一):零样本图片分类(zero-shot-image-classification)

【人工智能】Transformers之Pipeline(十二):零样本物体检测(zero-shot-object-detection)​​​​​​​

《Transformers-Pipeline 第三章:自然语言处理(NLP)篇》

【人工智能】Transformers之Pipeline(十三):填充蒙版(fill-mask)​​​​​​​

【人工智能】Transformers之Pipeline(十四):问答(question-answering)

【人工智能】Transformers之Pipeline(十五):总结(summarization)

【人工智能】Transformers之Pipeline(十六):表格问答(table-question-answering)

【人工智能】Transformers之Pipeline(十七):文本分类(text-classification)

【人工智能】Transformers之Pipeline(十八):文本生成(text-generation)​​​​​​​

【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)

【人工智能】Transformers之Pipeline(二十):令牌分类(token-classification)

【人工智能】Transformers之Pipeline(二十一):翻译(translation)

【人工智能】Transformers之Pipeline(二十二):零样本文本分类(zero-shot-classification)

《Transformers-Pipeline 第四章:多模态(Multimodal)篇》

【人工智能】Transformers之Pipeline(二十三):文档问答(document-question-answering)

【人工智能】Transformers之Pipeline(二十四):特征抽取(feature-extraction)

【人工智能】Transformers之Pipeline(二十五):图片特征抽取(image-feature-extraction)

【人工智能】Transformers之Pipeline(二十六):图片转文本(image-to-text)

【人工智能】Transformers之Pipeline(二十七):掩码生成(mask-generation)

【人工智能】Transformers之Pipeline(二十八):视觉问答(visual-question-answering)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务day06

MQ入门 同步处理业务: 异步处理: 将任务处理后交给MQ来进行分发处理。 MQ的相关知识 同步调用 同步调用的小结 异步调用 MQ技术选型 RabbitMQ 安装部署 其中包含几个概念: publisher:生产者,也就是发送消息的一方 …

[CKS] K8S RuntimeClass SetUp

最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于RuntimeClass创建和挂载的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS…

Halcon基于laws纹理特征的SVM分类

与基于区域特征的 SVM 分类不同,针对图像特征的 SVM 分类的算子不需要直接提取 特征,下面介绍基于 Laws 纹理特征的 SVM 分类。 纹理在计算机视觉领域的图像分割、模式识别等方面都有着重要的意义和广泛的应 用。纹理是指由于物体表面的物理属性不同所…

初始Python篇(6)—— 字符串

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 字符串的常见操作 格式化字符串 占位符 f-string 字符串的 format 方法 字符串的编码与解码 与数据验证相关的方法 …

基于Spring Boot+Vue的养老院管理系统【原创】

一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框架Vue.js;UI库:ElementUI; 开发工具&…

Maven 中央仓库地址 mvnrepository.com

下载一些 jar 包驱动,不需用去官网下了,直接去 Maven 中央仓库,高效、简单 Maven 中央仓库地址 https://mvnrepository.com/open-source 我们下期见,拜拜!

2024 年将 Postman 文档导出为 HTML 或 Markdown

2024 年将 Postman 文档导出为 HTML 或 Markdown

Anaconda安装库

相信有些人可能遇到pip直接安装失败,conda直接安装失败,pip镜像安装仍然失败的可能性,下面我记录一下我的一种解决方法。 我使用的是上面的miniconda3配置。 1.创建虚拟环境 首先,先新建一个虚拟环境 conda create -n py39 pyt…

linux命令详解,openssl+历史命令详解

openssl openssl是一个开源的加密工具包,提供了各种加密、解密、签名、验证等功能 openssl passwd -1 123password表示这个命令用于处理密码相关的操作,-1参数指定使用MD5加密算法对密码“123”进行加密处理。MD5是一种常用的哈希算法,它将…

Flink运行时架构以及核心概念

1.运行构架 1.提交作业后启动一个客户端进程,客户端解析参数(-d -t 等等),后进行封装由Actor通信系统提交,取消,更新任务给JobManager。 2.JobManager(进程)通信系统一个组件叫分发…

解决C盘空间不足的三种方案

方案一:网上盛传的C盘磁盘碎片整理🧩(原理:将分散的文件片段整理到相邻的磁盘区域,减少文件的碎片化程度)(效果不明显) 方案二:把其他盘的空间给C盘 💽(效果显著&#xf…

echarts-gl 3D柱状图配置

1. 源码 此demo可以直接在echarts的编辑器中运行 option {title: {text: 产量图,textStyle: {color: rgba(255, 255, 255, 1),fontSize: 17},left: center},tooltip: {},legend: {show: false,orient: vertical,x: left,top: 0,right: 20,textStyle: {fontSize: 12}},visualM…

C++笔记---智能指针

1. 什么是智能指针 1.1 RALL设计思想 RAII(Resource Acquisition Is Initialization,资源获取即初始化)是一种资源管理类的设计思想,广泛应用于C等支持对象导向编程的语言中。它的核心思想是将资源的管理与对象的生命周期紧密绑定…

「QT」几何数据类 之 QVector4D 四维向量类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

docker desktop运行rabittmq容器,控制台无法访问

docker desktop运行rabittmq容器,控制台无法访问 启动过程:…此处缺略,网上一大堆 原因 原因是在Docker上运行的RabbitMQ,默认情况下是没有启用管理插件和管理页面的 解决办法 使用命令 docker exec -it 容器id /bin/bash 进…

MySQL-事务(详细版)

目录 事务的含义 举一个例子 事务的特征(面试高频) 原子性 一致性 隔离性 持久性 事务结束 查看事务提交方式 查看事务提交的变量值:on 自动提交 off 不是自动提交 实例 事务回滚 验证事务回滚 事务实现:是数据库提…

Python “文件和IO操作” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中“文件和IO操作”的一些题目,方便学习完Python的函数之后进行一些知识检验,感兴趣的小伙伴可以试一试,含选择题、判断题、填空题。 在做题之前可以先学习或者温习一下Python的异常处理机制,推荐阅读下面这篇…

【Docker】自定义网络:实现容器之间通过域名相互通讯

文章目录 一. 默认网络:docker0网络的问题二. 自定义网络三. nginx容器指之间通过主机名进行内部通讯四. redis集群容器(跳过宿主机)内部网络通讯1. 集群描述2. 基于bitnami镜像的环境变量快速构建redis集群 一. 默认网络:docker0…

Kafka-Eagle的配置——kafka可视化界面

通过百度网盘分享的文件:kafka-eagle-bin-2.0.8.tar.gz 链接:https://pan.baidu.com/s/1H3YONkL97uXbLTPMZHrfdg?pwdsltu 提取码:sltu 一、界面展示 二、软件配置 1、关闭kafka集群 kf.sh stop 2、将该软件上传到/opt/modules下 cd /opt…

计算机图形学论文 | 木工设计与制造计划的共同优化

🦌🦌🦌读论文 我们的系统共同探索离散设计变量和制造计划的空间,以生成(设计,制造计划)对的帕累托前沿,使制造成本最小化。在该图中,(a)是椅子的输入设计和仅探索该设计的…