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

​​​​​​​

目录

一、引言 

二、文档问答(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 Imagedocument_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.rhkb.cn/news/469630.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python酷库之旅-第三方库Pandas(206)

目录 一、用法精讲 961、pandas.IntervalIndex.mid属性 961-1、语法 961-2、参数 961-3、功能 961-4、返回值 961-5、说明 961-6、用法 961-6-1、数据准备 961-6-2、代码示例 961-6-3、结果输出 962、pandas.IntervalIndex.length属性 962-1、语法 962-2、参数 …

【论文阅读】利用SEM二维图像表征黏土矿物三维结构

导言 在油气储层研究中,黏土矿物对流体流动的影响需要在微观尺度上理解,但传统的二维SEM图像难以完整地表征三维孔隙结构。常规的三维成像技术如FIB-SEM(聚焦离子束扫描电子显微镜)虽然可以获取高精度的3D图像,但成本…

前端入门一之ES6--面向对象、够着函数和原型、继承、ES5新增方法、函数进阶、严格模式、高阶函数、闭包

前言 JS是前端三件套之一,也是核心,本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点,这篇是ES6;这篇文章是本人大一学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。 文章目录 JS高级 ES61、面向对象1.1…

数据安全、信息安全、网络安全区别与联系

关键字: 信息安全 数据安全 网络安全 [导读] 在 “互联网 ” 被广泛提及的今天,安全问题也越来越多的受到人们关注,然而很多人对于 “信息安全”、“数据安全”、“网络安全” 的概念并不是很清楚。我们汇总了官方机构给这三者的定义&#…

Linux——简单认识vim、gcc以及make/Makefile

前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。 1、vim操作: 默认打开vim时,vim处于命令模式。(在其他模式中,Esc就能够返回命令模式) 常用的命令有: n gg:跳转到n行&…

Java反序列化之CommonsCollections2链的学习

一、前言 Apache Commons Collections 是一个著名的辅助开发库,包含了一些Java中没有的数据结构和辅助方法,不过随着Java 9 以后的版本中原生库功能的丰富,以及反序列化漏洞的影响,它也在逐渐被升级或替代。 在2015年底的common…

前端web

题目&#xff1a;制作带有下拉悬停菜单的导航栏 效果图 一、先制作标签 <body> <div id"menu"> <div id"container"> <div class"item">游戏1 <div class…

【大数据学习 | kafka高级部分】kafka中的选举机制

controller的选举 首先第一个选举就是借助于zookeeper的controller的选举 第一个就是controller的选举&#xff0c;这个选举是借助于zookeeper的独享锁实现的&#xff0c;先启动的broker会在zookeeper的/contoller节点上面增加一个broker信息&#xff0c;谁创建成功了谁就是主…

Android 开发指南:初学者入门

Android 是全球最受欢迎的移动操作系统之一&#xff0c;为开发者提供了丰富的工具和资源来创建各种类型的应用程序。本文将为你提供一个全面的入门指南&#xff0c;帮助你从零开始学习 Android 开发。 目录 1. 了解 Android 平台[1]2. 设置开发环境[2]3. 学习基础知识[3]4. 创…

漏洞挖掘 | 某医院小程序支付漏洞+越权

漏洞挖掘 | 某医院小程序支付漏洞越权 登陆后点击个人信息&#xff0c;抓包&#xff0c;放到repeter模块 修改strUserID参数可以越权查看别人信息 放intruder模块可以跑数据&#xff0c;这里有几万信息泄露 回到首页&#xff0c;点击医生咨询功能点 随便选一个需要付费的医…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数&#xff0c;它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形&#xff0c;特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型&#xff1a;BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

基于Python的膳食健康系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

头歌网络安全(11.12)

头歌禁止复制解决 必须先下篡改猴&#xff01;&#xff01;&#xff01;&#xff01; 头歌复制助手 Educoder Copy Helperhttps://scriptcat.org/zh-CN/script-show-page/1860 Java生成验证码 第1关&#xff1a;使用Servlet生成验证码 任务描述 本关任务&#xff1a;使用se…

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析

在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…

第七部分:2. STM32之ADC实验--AD多通道(AD采集三路传感器模块实验:光敏传感器、热敏传感器、反射式传感器附赠温湿度传感器教程)

这个多通道采用非扫描模式--单次转换模式 1.代码配置链路图 2. ADC的输入通道 3.ADC的非扫描模式的转换模式&#xff08;单次和连续&#xff09; 4.ADC的扫描模式的转换模式&#xff08;单次和连续&#xff09; 5.采集校准 代码实验&#xff1a; 代码部分&#xff1a; #inclu…

crond 任务调度 (Linux相关指令:crontab)

相关视频链接 crontab 进行 定时任务 的设置 概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序 任务调度的分类&#xff1a; 1.系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等。 2.个别用户可能希望执行某些程序&#xff0c;比如…

基于python 的opencv 使用GrabCut算法分割图像代码

#利用grabcut算法分割图像import numpy as np import cv2 from matplotlib import pyplot as plt import warningswarnings.filterwarnings("ignore", module "matplotlib")imgpath E:/code/image_opencv_test/lena.jpg img cv2.imread(imgpath)Coords1x…

AndroidStudio-文本显示

一、设置文本的内容 1.方式&#xff1a; &#xff08;1&#xff09;在XML文件中通过属性&#xff1a;android:text设置文本 例如&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andr…

css:没错又是我

背景 给元素添加背景样式 还可以设置背景颜色、背景图片&#xff08;教练我要学这个&#xff09;、背景平铺、背景图片位置、背景图像固定 背景颜色 这个我们用过&#xff0c;就是&#xff1a; a {background-color: hotpink; } 一般默认值是transparent&#xff0c;也就…

使用Git工具在GitHub的仓库中上传文件夹(超详细)

如何使用Git工具在GitHub的仓库中上传文件夹&#xff1f; 如果觉得博主写的还可以&#xff0c;点赞收藏关注噢~ 第一步&#xff1a;拥有一个本地的仓库 可以fork别人的仓库或者自己新创建 fork别人的仓库 或者自己创建一个仓库 按照要求填写完成后&#xff0c;点击按钮创建…