Transformers 文档

牛轧糖

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Nougat

概述

Nougat 模型由 Lukas Blecher、Guillem Cucurull、Thomas Scialom 和 Robert Stojnic 在 Nougat: Neural Optical Understanding for Academic Documents 中提出。Nougat 使用与 Donut 相同的架构,这意味着一个图像 Transformer 编码器和一个自回归文本 Transformer 解码器将科学 PDF 翻译成 Markdown,从而更方便地访问这些文件。

该论文的摘要如下:

科学知识主要存储在书籍和科学期刊中,通常以 PDF 格式存储。然而,PDF 格式会导致语义信息的丢失,特别是对于数学表达式。我们提出了 Nougat(学术文档的神经光学理解),这是一种视觉 Transformer 模型,它执行光学字符识别 (OCR) 任务,将科学文档处理成标记语言,并在新的科学文档数据集上展示了我们模型的有效性。所提出的方法为增强数字时代科学知识的可访问性提供了一个有希望的解决方案,弥合了人机可读文档与机器可读文本之间的差距。我们发布了模型和代码以加速未来在科学文本识别方面的研究。

drawing Nougat 高级概述。摘自 原始论文

该模型由 nielsr 贡献。原始代码可以在这里找到 here

使用技巧

  • 开始使用 Nougat 的最快方法是查看 教程笔记本,其中展示了如何在推理时使用模型以及如何在自定义数据上进行微调。
  • Nougat 始终在 VisionEncoderDecoder 框架内使用。该模型在架构方面与 Donut 相同。

推理

Nougat 的 VisionEncoderDecoder 模型接受图像作为输入,并使用 generate() 根据输入图像自回归生成文本。

The NougatImageProcessor 类负责预处理输入图像,而 NougatTokenizerFast 将生成的目標令牌解码为目标字符串。The NougatProcessorNougatImageProcessorNougatTokenizerFast 类封装到单个实例中,以同时提取输入特征和解码预测的令牌 ID。

  • 逐步 PDF 转录
>>> from huggingface_hub import hf_hub_download
>>> import re
>>> from PIL import Image

>>> from transformers import NougatProcessor, VisionEncoderDecoderModel
>>> from datasets import load_dataset
>>> import torch

>>> processor = NougatProcessor.from_pretrained("facebook/nougat-base")
>>> model = VisionEncoderDecoderModel.from_pretrained("facebook/nougat-base")

>>> device = "cuda" if torch.cuda.is_available() else "cpu"
>>> model.to(device)
>>> # prepare PDF image for the model
>>> filepath = hf_hub_download(repo_id="hf-internal-testing/fixtures_docvqa", filename="nougat_paper.png", repo_type="dataset")
>>> image = Image.open(filepath)
>>> pixel_values = processor(image, return_tensors="pt").pixel_values

>>> # generate transcription (here we only generate 30 tokens)
>>> outputs = model.generate(
...     pixel_values.to(device),
...     min_length=1,
...     max_new_tokens=30,
...     bad_words_ids=[[processor.tokenizer.unk_token_id]],
... )

>>> sequence = processor.batch_decode(outputs, skip_special_tokens=True)[0]
>>> sequence = processor.post_process_generation(sequence, fix_markdown=False)
>>> # note: we're using repr here such for the sake of printing the \n characters, feel free to just print the sequence
>>> print(repr(sequence))
'\n\n# Nougat: Neural Optical Understanding for Academic Documents\n\n Lukas Blecher\n\nCorrespondence to: lblecher@'

查看 模型中心 以查找 Nougat 检查点。

该模型在架构方面与 Donut 相同。

NougatImageProcessor

class transformers.NougatImageProcessor

< >

( do_crop_margin: bool = True do_resize: bool = True size: Dict = None resample: Resampling = <Resampling.BILINEAR: 2> do_thumbnail: bool = True do_align_long_axis: bool = False do_pad: bool = True do_rescale: bool = True rescale_factor: Union = 0.00392156862745098 do_normalize: bool = True image_mean: Union = None image_std: Union = None **kwargs )

参数

  • do_crop_margin (bool, 可选, 默认为 True) — 是否裁剪图像边距。
  • do_resize (bool, 可选, 默认为 True) — 是否将图像的(高度,宽度)尺寸调整为指定的 size。可以在 preprocess 方法中被 do_resize 覆盖。
  • size (Dict[str, int] 可选, 默认值 {"height" -- 896, "width": 672}): 调整大小后图像的大小。可以在 preprocess 方法中由 size 覆盖。
  • resample (PILImageResampling, 可选, 默认值 Resampling.BILINEAR) — 如果调整图像大小,要使用的重采样滤波器。可以在 preprocess 方法中由 resample 覆盖。
  • do_thumbnail (bool, 可选, 默认值 True) — 是否使用缩略图方法调整图像大小。
  • do_align_long_axis (bool, 可选, 默认值 False) — 是否通过旋转 90 度将图像的长轴与 size 的长轴对齐。
  • do_pad (bool, 可选, 默认值 True) — 是否将图像填充到批次中最大图像大小。
  • do_rescale (bool, 可选, 默认值 True) — 是否按指定的比例 rescale_factor 重新缩放图像。可以在 preprocess 方法中由 do_rescale 参数覆盖。
  • rescale_factor (intfloat, 可选, 默认值 1/255) — 如果重新缩放图像,要使用的缩放比例。可以在 preprocess 方法中由 rescale_factor 参数覆盖。
  • do_normalize (bool, 可选, 默认值 True) — 是否归一化图像。可以在 preprocess 方法中由 do_normalize 覆盖。
  • image_mean (floatList[float], 可选, 默认值 IMAGENET_DEFAULT_MEAN) — 如果归一化图像,要使用的均值。这是一个浮点数或浮点数列表,长度与图像中通道的数量相同。可以在 preprocess 方法中由 image_mean 参数覆盖。
  • image_std (floatList[float], 可选, 默认值 IMAGENET_DEFAULT_STD) — 图像标准差。

构造一个 Nougat 图像处理器。

preprocess

  • images (ImageInput) — 预处理的图像。预期单个或批量的图像,像素值范围为 0 到 255。
  • do_crop_margin (bool, 可选, 默认值为 self.do_crop_margin) — 是否裁剪图像边距。
  • do_resize (bool, 可选, 默认值为 self.do_resize) — 是否调整图像大小。
  • size (Dict[str, int], 可选, 默认值为 self.size) — 调整大小后图像的大小。图像的最短边调整为 min(size[“height”], size[“width”]),最长边调整为保持输入纵横比。
  • resample (int, 可选, 默认值为 self.resample) — 如果调整图像大小,要使用的重采样滤波器。这可以是枚举 PILImageResampling 中的一个。只有当 do_resize 设置为 True 时才有效。
  • do_thumbnail (bool, 可选, 默认值为 self.do_thumbnail) — 是否使用缩略图方法调整图像大小。
  • do_align_long_axis (bool, 可选, 默认值为 self.do_align_long_axis) — 是否通过旋转 90 度将图像的长轴与 size 的长轴对齐。
  • do_pad (bool, 可选, 默认值为 self.do_pad) — 是否将图像填充到批次中最大图像大小。
  • do_rescale (bool, 可选, 默认值为 self.do_rescale) — 是否按指定的比例 rescale_factor 对图像进行重新缩放。
  • rescale_factor (intfloat, 可选, 默认为 self.rescale_factor) — 如果调整图像大小,要使用的缩放比例。
  • do_normalize (bool, 可选, 默认为 self.do_normalize) — 是否对图像进行归一化。
  • image_mean (floatList[float], 可选, 默认为 self.image_mean) — 用于归一化的图像均值。
  • image_std (floatList[float], 可选, 默认为 self.image_std) — 用于归一化的图像标准差。
  • return_tensors (strTensorType, 可选) — 要返回的张量类型。 可以是以下之一:
    • 未设置:返回 np.ndarray 列表。
    • TensorType.TENSORFLOW'tf':返回 tf.Tensor 类型的批次。
    • TensorType.PYTORCH'pt':返回 torch.Tensor 类型的批次。
    • TensorType.NUMPY'np':返回 np.ndarray 类型的批次。
    • TensorType.JAX'jax':返回 jax.numpy.ndarray 类型的批次。
  • data_format (ChannelDimensionstr, 可选, 默认为 ChannelDimension.FIRST) — 输出图像的通道维度格式。 可以是以下之一:
    • ChannelDimension.FIRST:图像格式为 (通道数, 高度, 宽度)。
    • ChannelDimension.LAST:图像格式为 (高度, 宽度, 通道数)。
    • 未设置:默认为输入图像的通道维度格式。
  • input_data_format (ChannelDimensionstr, 可选) — 输入图像的通道维度格式。 如果未设置,则从输入图像推断通道维度格式。 可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:图像格式为 (通道数, 高度, 宽度)。
    • "channels_last"ChannelDimension.LAST:图像格式为 (高度, 宽度, 通道数)。
    • "none"ChannelDimension.NONE:图像格式为 (高度, 宽度)。

预处理图像或图像批次。

NougatTokenizerFast

class transformers.NougatTokenizerFast

< >

( vocab_file = None tokenizer_file = None clean_up_tokenization_spaces = False unk_token = '<unk>' bos_token = '<s>' eos_token = '</s>' pad_token = '<pad>' **kwargs )

参数

  • tokenizer_file (str, 可选) — tokenizers 文件(通常具有 .json 扩展名),其中包含加载分词器所需的一切。
  • clean_up_tokenization_spaces (str, 可选,默认值为 False) — 是否在解码后清理空格,清理包括删除潜在的伪影,如多余的空格。
  • unk_token (str, 可选,默认值为 "<unk>") — 未知标记。不在词汇表中的标记无法转换为 ID,而是设置为此标记。
  • bos_token (str, 可选,默认值为 "<s>") — 在预训练期间使用的序列开始标记。可以用作序列分类标记。
  • eos_token (str, 可选,默认值为 "</s>") — 序列结束标记。
  • pad_token (str, 可选,默认值为 "<pad>") — 用于填充的标记,例如在对不同长度的序列进行批处理时。
  • model_max_length (int, 可选) — 变压器模型输入的最大长度(以标记数表示)。当使用 from_pretrained() 加载分词器时,这将设置为 max_model_input_sizes 中与关联模型存储的值(见上文)。如果没有提供值,将默认为 VERY_LARGE_INTEGER (int(1e30))。
  • padding_side (str, 可选) — 模型应在哪个侧应用填充。应从 [‘right’, ‘left’] 中选择。默认值从同名类属性中获取。
  • truncation_side (str, 可选) — 模型应在哪个侧应用截断。应从 [‘right’, ‘left’] 中选择。默认值从同名类属性中获取。
  • chat_template (str, 可选) — 将用于格式化聊天消息列表的 Jinja 模板字符串。有关完整说明,请参阅 https://huggingface.co/docs/transformers/chat_templating
  • bos_token (strtokenizers.AddedToken可选) — 表示句子开头的特殊标记。 将与 self.bos_tokenself.bos_token_id 相关联。
  • eos_token (strtokenizers.AddedToken可选) — 表示句子结尾的特殊标记。 将与 self.eos_tokenself.eos_token_id 相关联。
  • unk_token (strtokenizers.AddedToken可选) — 表示生僻词的特殊标记。 将与 self.unk_tokenself.unk_token_id 相关联。
  • sep_token (strtokenizers.AddedToken可选) — 表示同一输入中两个不同句子的特殊标记(例如 BERT 使用)。 将与 self.sep_tokenself.sep_token_id 相关联。
  • pad_token (strtokenizers.AddedToken可选) — 用于使标记数组大小相同的特殊标记,以便进行批量处理。 然后将被注意力机制或损失计算忽略。 将与 self.pad_tokenself.pad_token_id 相关联。
  • cls_token (strtokenizers.AddedToken可选) — 表示输入类别的特殊标记(例如 BERT 使用)。 将与 self.cls_tokenself.cls_token_id 相关联。
  • mask_token (strtokenizers.AddedToken可选) — 表示遮蔽标记的特殊标记(用于 BERT 等掩蔽语言模型预训练目标)。 将与 self.mask_tokenself.mask_token_id 相关联。
  • additional_special_tokens (strtokenizers.AddedToken 的元组或列表,可选) — 附加特殊标记的元组或列表。 在此处添加它们以确保在使用 skip_special_tokens 设置为 True 解码时跳过它们。 如果它们不属于词汇表,它们将被添加到词汇表末尾。
  • clean_up_tokenization_spaces (bool可选,默认值为 True) — 模型是否应该清理在标记化过程中分割输入文本时添加的空格。
  • split_special_tokens (bool可选,默认值为 False) — 特殊标记在标记化过程中是否应该被分割。 传递将影响标记器的内部状态。 默认行为是不分割特殊标记。 这意味着如果 <s>bos_token,则 tokenizer.tokenize("<s>") = ['<s>']。 否则,如果 split_special_tokens=True,则 tokenizer.tokenize("<s>") 将给出 ['<','s', '>']
  • tokenizer_object (tokenizers.Tokenizer) — 一个来自 🤗 tokenizers 的 tokenizers.Tokenizer 对象,用于实例化。有关更多信息,请参见 使用来自 🤗 tokenizers 的分词器
  • tokenizer_file (str) — 指向本地 JSON 文件的路径,该文件表示之前序列化的来自 🤗 tokenizers 的 tokenizers.Tokenizer 对象。

Nougat 的快速分词器(由 HuggingFace 分词器库支持)。

此分词器继承自 PreTrainedTokenizerFast,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。此类主要添加 Nougat 特定方法,用于对生成的文本进行后处理。

类属性(由派生类覆盖)

  • vocab_files_names (Dict[str, str]) — 一个字典,键是模型所需的每个词汇文件的 __init__ 关键字名称,关联值为保存关联文件的名称(字符串)。
  • pretrained_vocab_files_map (Dict[str, Dict[str, str]]) — 一个字典的字典,高层键是模型所需的每个词汇文件的 __init__ 关键字名称,低层是预训练模型的 短路名称,关联值为关联预训练词汇文件的 url
  • model_input_names (List[str]) — 模型前向传递中预期的输入列表。
  • padding_side (str) — 模型应应用填充的一侧的默认值。应为 'right''left'
  • truncation_side (str) — 模型应应用截断的一侧的默认值。应为 'right''left'

correct_tables

< >

( generation: str ) str

参数

  • generation (str) — 要后处理的生成的文本。

返回

str

后处理的文本。

获取生成的字符串,并修复表格/表格以使其与所需的 Markdown 格式匹配。

示例

correct_tables("\begin{table} \begin{tabular}{l l} & \ \end{tabular} \end{table}")
"\begin{table}
abular}{l l} & \ \end{tabular}
le}"

post_process_generation

< >

( generation: Union fix_markdown: bool = True num_workers: int = None ) Union[str, List[str]]

参数

  • generation (Union[str, List[str]]) — 生成的文本或生成的文本列表。
  • fix_markdown (bool, 可选,默认为 True) — 是否执行 Markdown 格式修复。
  • num_workers (int, 可选) — 可选的 worker 数量,用于利用多处理(并行后处理多个文本)。

返回

Union[str, List[str]]

后处理的文本或后处理的文本列表。

后处理生成的文本或生成的文本列表。

此函数可用于对生成的文本执行后处理,例如修复 Markdown 格式。

后处理速度很慢,因此建议使用多处理来加快处理速度。

post_process_single

< >

(

参数

  • 生成文本 (str) — 要进行后处理的生成的文本。
  • 修复Markdown格式 (bool, optional) — 是否执行Markdown格式修复。默认值为True。

返回

str

后处理的文本。

对单个生成的文本进行后处理。这里使用的正则表达式直接取自Nougat文章作者。这些表达式为了清晰起见进行了注释,并且在大多数情况下都进行了端到端的测试。

remove_hallucinated_references

< >

( text: str ) str

参数

  • 文本 (str) — 包含引用的输入文本。

返回

str

包含移除虚假引用的文本。

从文本中移除虚假或缺失的引用。

此函数识别并移除从输入文本中标记为缺失或虚假的引用。

NougatProcessor

class transformers.NougatProcessor

< >

( image_processor tokenizer )

参数

构造一个Nougat处理器,将Nougat图像处理器和Nougat tokenizer封装到一个单独的处理器中。

NougatProcessor 提供了 NougatImageProcessorNougatTokenizerFast 的所有功能。有关更多信息,请参见 调用()解码()

__调用__

< >

( images = None text = None do_crop_margin: bool = None do_resize: bool = None size: Dict = None resample: PILImageResampling = None do_thumbnail: bool = None do_align_long_axis: bool = None do_pad: bool = None do_rescale: bool = None rescale_factor: Union = None do_normalize: bool = None image_mean: Union = None image_std: Union = None data_format: Optional = 'channels_first' input_data_format: Union = None text_pair: Union = None text_target: Union = None text_pair_target: Union = None add_special_tokens: bool = True padding: Union = False truncation: Union = None max_length: Optional = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: Optional = None return_tensors: Union = None return_token_type_ids: Optional = None return_attention_mask: Optional = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True )

从预训练模型中加载

< >

( pretrained_model_name_or_path: Union cache_dir: Union = None force_download: bool = False local_files_only: bool = False token: Union = None revision: str = 'main' **kwargs )

参数

  • pretrained_model_name_or_path (stros.PathLike) — 可以是以下内容:

    • 一个字符串,表示托管在 huggingface.co 模型库中的预训练特征提取器的模型 ID。
    • 一个路径,指向使用 save_pretrained() 方法保存的特征提取器文件所在的目录,例如:./my_model_directory/
    • 一个路径或 URL,指向保存的特征提取器 JSON 文件,例如:./my_model_directory/preprocessor_config.json。 **kwargs — 传递给 from_pretrained()~tokenization_utils_base.PreTrainedTokenizer.from_pretrained 的其他关键字参数。

实例化与预训练模型关联的处理器。

此类方法只是调用特征提取器 from_pretrained()、图像处理器 ImageProcessingMixin~tokenization_utils_base.PreTrainedTokenizer.from_pretrained 方法。有关更多信息,请参阅上述方法的文档字符串。

保存到预训练模型

< >

( save_directory push_to_hub: bool = False **kwargs )

参数

  • save_directory (stros.PathLike) — 保存特征提取器 JSON 文件和分词器文件的目录(如果目录不存在,将创建该目录)。
  • push_to_hub (bool, 可选, 默认值 False) — 是否在保存模型后将其推送到 Hugging Face 模型中心。可以使用 repo_id 指定要推送到哪个仓库(将默认使用 save_directory 的名称作为您的命名空间)。
  • kwargs (Dict[str, Any], 可选) — 传递给 push_to_hub() 方法的额外关键字参数。

将此处理器的属性(特征提取器、分词器等)保存到指定的目录,以便可以使用 from_pretrained() 方法重新加载它们。

此类方法只是调用 save_pretrained()save_pretrained()。请参阅上面方法的文档字符串以获取更多信息。

batch_decode

< >

( *args **kwargs )

此方法将所有参数转发给 NougatTokenizer 的 batch_decode()。请参阅此方法的文档字符串以获取更多信息。

decode

< >

( *args **kwargs )

此方法将所有参数转发给 NougatTokenizer 的 decode()。请参阅此方法的文档字符串以获取更多信息。

post_process_generation

< >

( *args **kwargs )

此方法将所有参数转发给 NougatTokenizer 的 ~PreTrainedTokenizer.post_process_generation。请参阅此方法的文档字符串以获取更多信息。

< > 在 GitHub 上更新