原文:
huggingface.co/docs/transformers
LayoutLM
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/layoutlm
概述
LayoutLM 模型是由 Yiheng Xu,Minghao Li,Lei Cui,Shaohan Huang,Furu Wei 和 Ming Zhou 在论文LayoutLM: Pre-training of Text and Layout for Document Image Understanding中提出的。这是一种简单但有效的文本和布局预训练方法,用于文档图像理解和信息提取任务,如表单理解和收据理解。它在几个下游任务上取得了最先进的结果:
- 表单理解:FUNSD数据集(包含 199 个带有超过 30,000 个单词的注释表单)。
- 收据理解:SROIE数据集(包含 626 张收据用于训练和 347 张收据用于测试)。
- 文档图像分类:RVL-CDIP数据集(包含 400,000 张图像,属于 16 个类别之一)。
论文摘要如下:
近年来,预训练技术在各种 NLP 任务中取得了成功。尽管预训练模型在 NLP 应用中被广泛使用,但它们几乎完全专注于文本级别的操作,而忽略了对于文档图像理解至关重要的布局和样式信息。在本文中,我们提出了 LayoutLM,以共同建模扫描文档图像中文本和布局信息之间的交互,这对于许多真实世界的文档图像理解任务(如从扫描文档中提取信息)是有益的。此外,我们还利用图像特征将单词的视觉信息整合到 LayoutLM 中。据我们所知,这是文本和布局首次在单个框架中共同学习以进行文档级预训练。它在几个下游任务中取得了最新的最先进结果,包括表单理解(从 70.72 到 79.27)、收据理解(从 94.02 到 95.24)和文档图像分类(从 93.07 到 94.42)。
使用提示
- 除了input_ids之外,forward()还需要输入
bbox
,这是输入标记的边界框(即 2D 位置)。这些可以使用外部 OCR 引擎(如 Google 的Tesseract)获取(有一个Python 包装器可用)。每个边界框应该采用(x0,y0,x1,y1)格式,其中(x0,y0)对应于边界框左上角的位置,(x1,y1)表示右下角的位置。请注意,首先需要将边界框归一化为 0-1000 的比例。要进行归一化,可以使用以下函数:
def normalize_bbox(bbox, width, height):
return [
int(1000 * (bbox[0] / width)),
int(1000 * (bbox[1] / height)),
int(1000 * (bbox[2] / width)),
int(1000 * (bbox[3] / height)),
]
这里,width
和height
对应于标记出现的原始文档的宽度和高度。可以使用 Python Image Library(PIL)库来获取这些,例如:
from PIL import Image
# Document can be a png, jpg, etc. PDFs must be converted to images.
image = Image.open(name_of_your_document).convert("RGB")
width, height = image.size
资源
官方 Hugging Face 和社区(由