BROS:文档关键信息提取的革命性预训练语言模型
bros 项目地址: https://gitcode.com/gh_mirrors/br/bros
项目介绍
BROS(BERT Relying On Spatiality)是一款专注于文本和布局的预训练语言模型,旨在从文档中提取关键信息。BROS通过结合OCR结果(文本和边界框对),能够执行多种关键信息提取任务,例如从收据中提取有序的项目列表。该模型在AAAI 2022的主要技术轨道上发表,展示了其在文档处理领域的卓越性能。
项目技术分析
BROS的核心技术在于其对文本和布局的深度融合。传统的语言模型主要关注文本内容,而BROS则进一步考虑了文本在文档中的空间位置,从而提高了信息提取的准确性和效率。BROS基于BERT架构,通过预训练和微调两个阶段,使其在处理复杂文档时表现出色。
预训练模型
BROS提供了两种预训练模型:
- bros-base-uncased:参数数量小于110M,适用于大多数常规任务。
- bros-large-uncased:参数数量小于340M,适用于更复杂的任务和大规模数据处理。
这些模型都可以在Hugging Face上轻松获取和使用。
模型使用示例
以下是一个简单的使用示例,展示了如何使用BROS模型处理文档图像中的文本和布局信息:
import torch
from bros import BrosTokenizer, BrosModel
tokenizer = BrosTokenizer.from_pretrained("naver-clova-ocr/bros-base-uncased")
model = BrosModel.from_pretrained("naver-clova-ocr/bros-base-uncased")
width, height = 1280, 720
words = ["to", "the", "moon!"]
quads = [
[638, 451, 863, 451, 863, 569, 638, 569],
[877, 453, 1190, 455, 1190, 568, 876, 567],
[632, 566, 1107, 566, 1107, 691, 632, 691],
]
bbox = []
for word, quad in zip(words, quads):
n_word_tokens = len(tokenizer.tokenize(word))
bbox.extend([quad] * n_word_tokens)
cls_quad = [0.0] * 8
sep_quad = [width, height] * 4
bbox = [cls_quad] + bbox + [sep_quad]
encoding = tokenizer(" ".join(words), return_tensors="pt")
input_ids = encoding["input_ids"]
attention_mask = encoding["attention_mask"]
bbox = torch.tensor([bbox])
bbox[:, :, [0, 2, 4, 6]] = bbox[:, :, [0, 2, 4, 6]] / width
bbox[:, :, [1, 3, 5, 7]] = bbox[:, :, [1, 3, 5, 7]] / height
outputs = model(input_ids=input_ids, bbox=bbox, attention_mask=attention_mask)
last_hidden_state = outputs.last_hidden_state
print("- last_hidden_state")
print(last_hidden_state)
print()
print("- last_hidden_state.shape")
print(last_hidden_state.shape)
项目及技术应用场景
BROS的应用场景非常广泛,特别适用于需要从复杂文档中提取关键信息的领域,例如:
- 金融文档处理:自动提取合同、发票、报表中的关键数据。
- 法律文档分析:从法律文件中提取重要条款和信息。
- 医疗记录管理:自动提取病历中的关键信息,提高数据处理的效率。
- 零售业:从收据和订单中提取商品信息,用于库存管理和销售分析。
项目特点
- 空间感知:BROS不仅关注文本内容,还考虑了文本在文档中的空间位置,从而提高了信息提取的准确性。
- 高效预训练:提供了两种预训练模型,适用于不同规模和复杂度的任务。
- 易于使用:模型可以直接在Hugging Face上获取,并提供了详细的示例代码,方便开发者快速上手。
- 开源社区支持:基于Apache 2.0开源协议,鼓励社区贡献和改进。
BROS的出现为文档处理领域带来了新的可能性,无论是企业级应用还是个人项目,BROS都能提供强大的支持。立即尝试BROS,体验文档信息提取的新高度!