Transformers 4.37 中文文档(二十一)

2024-06-26 15:30:28 浏览数 (2)

原文:huggingface.co/docs/transformers

BART

原始文本:huggingface.co/docs/transformers/v4.37.2/en/model_doc/bart

概述

Bart 模型是由 Mike Lewis, Yinhan Liu, Naman Goyal, Marjan Ghazvininejad, Abdelrahman Mohamed, Omer Levy, Ves Stoyanov 和 Luke Zettlemoyer 在 2019 年 10 月 29 日提出的,题为 BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension。

根据摘要,

  • Bart 使用标准的 seq2seq/机器翻译架构,具有双向编码器(类似于 BERT)和从左到右的解码器(类似于 GPT)。
  • 预训练任务涉及随机打乱原始句子的顺序和一种新颖的填充方案,其中文本段被替换为单个掩码标记。
  • BART 在文本生成的微调时特别有效,但也适用于理解任务。它在 GLUE 和 SQuAD 上与 RoBERTa 的性能相匹配,实现了一系列抽象对话、问答和总结任务的最新成果,ROUGE 提升高达 6 个百分点。

这个模型是由sshleifer贡献的。作者的代码可以在这里找到。

使用提示:

  • BART 是一个具有绝对位置嵌入的模型,因此通常建议在右侧而不是左侧填充输入。
  • 具有编码器和解码器的序列到序列模型。编码器接收到被损坏版本的标记,解码器接收到原始标记(但有一个掩码来隐藏未来的单词,就像常规的 transformers 解码器)。以下转换的组合应用于编码器的预训练任务:
    • 掩盖随机标记(就像在 BERT 中)
    • 删除随机标记
    • 用单个掩码标记掩盖 k 个标记的范围(0 个标记的范围是插入一个掩码标记)
    • 排列句子
    • 旋转文档,使其从特定标记开始

实现注意事项

  • Bart 不使用 token_type_ids 进行序列分类。使用 BartTokenizer 或 encode() 来获得正确的分割。
  • BartModel 的前向传递将创建 decoder_input_ids,如果它们没有被传递。这与一些其他建模 API 不同。这个特性的一个典型用例是掩码填充。
  • forced_bos_token_id=0 时,模型预测应该与原始实现相同。然而,这仅在您传递给 fairseq.encode 的字符串以空格开头时才有效。
  • generate() 应该用于像总结这样的有条件生成任务,可以查看文档字符串中的示例。
  • 加载 facebook/bart-large-cnn 权重的模型将没有 mask_token_id,也无法执行掩码填充任务。

掩码填充

facebook/bart-basefacebook/bart-large 检查点可用于填充多个标记掩码。

代码语言:javascript复制
from transformers import BartForConditionalGeneration, BartTokenizer

model = BartForConditionalGeneration.from_pretrained("facebook/bart-large", forced_bos_token_id=0)
tok = BartTokenizer.from_pretrained("facebook/bart-large")
example_english_phrase = "UN Chief Says There Is No <mask> in Syria"
batch = tok(example_english_phrase, return_tensors="pt")
generated_ids = model.generate(batch["input_ids"])
assert tok.batch_decode(generated_ids, skip_special_tokens=True) == [
    "UN Chief Says There Is No Plan to Stop Chemical Weapons in Syria"
]

资源

一个官方的 Hugging Face 和社区(由

0 人点赞