英文

LSG模型

Transformers >= 4.23.1 此模型依赖于自定义的建模文件,您需要添加 trust_remote_code=True 查看 #13467

LSG ArXiv paper . 可在此 link 获得Github/转换脚本。

  • 用法
  • 参数
  • 稀疏选择类型
  • 任务

此模型是从 BART-base 改编的,用于编码器-解码器任务,无需额外的预训练。它使用了相同数量的参数/层和相同的分词器。

该模型可处理长序列,但比来自hub的Longformer(LEI)或BigBird(Pegasus)更快且更高效,并且依赖于局部+稀疏+全局注意力(LSG)。

该模型要求序列的长度是块大小的倍数。该模型是“自适应的”,如果需要会自动填充序列(config中的adaptive=True)。但是,建议通过分词器截断输入(截断=True),并可选择以块大小的倍数进行填充(pad_to_multiple_of=...)。

PyTorch实现。

用法

此模型依赖于自定义的建模文件,您需要添加 trust_remote_code=True 来使用它。

from transformers import AutoModel, AutoTokenizer

model = AutoModel.from_pretrained("ccdv/lsg-bart-base-4096", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-bart-base-4096")

参数

您可以更改各种参数,例如:

  • 全局标记数(num_global_tokens=1)
  • 本地块大小(block_size=128)
  • 稀疏块大小(sparse_block_size=128)
  • 稀疏因子(sparsity_factor=2)
  • 掩盖第一个标记(由于与第一个全局标记重复,掩盖第一个标记)
  • 查看config.json文件

默认参数在实践中效果良好。如果内存不足,请减小块大小,增加稀疏因子,并去除注意力分数矩阵中的dropout。

from transformers import AutoModel

model = AutoModel.from_pretrained("ccdv/lsg-bart-base-4096", 
    trust_remote_code=True, 
    num_global_tokens=16,
    block_size=64,
    sparse_block_size=64,
    attention_probs_dropout_prob=0.0
    sparsity_factor=4,
    sparsity_type="none",
    mask_first_token=True
)

稀疏选择类型

有5种不同的稀疏选择模式。最佳类型因任务而异。请注意,对于长度小于2 *块大小的序列,类型没有影响。

  • 稀疏类型="norm",选择最高norm的标记
    • 对于小的稀疏因子(2到4),效果最佳
    • 其他参数:
      • None
  • 稀疏类型="pooling",使用平均池化合并标记
    • 对于小的稀疏因子(2到4),效果最佳
    • 其他参数:
      • None
  • 稀疏类型="lsh",使用LSH算法聚类相似的标记
    • 对于大的稀疏因子(4+),效果最佳
    • LSH依赖于随机投影,因此不同的种子可能导致推理略有不同
    • 其他参数:
      • lsg_num_pre_rounds=1,在计算质心之前将标记预合并n次
  • 稀疏类型="stride",每个头使用步幅机制
    • 每个头将使用通过sparsify_factor跨越的不同标记
    • 如果sparsify_factor > num_heads,则不推荐使用
  • 稀疏类型="block_stride",每个头使用块步幅机制
    • 每个头将使用通过sparsify_factor跨越的块标记
    • 如果sparsify_factor > num_heads,则不推荐使用

任务

摘要生成的Seq2Seq示例:

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

model = AutoModelForSeq2SeqLM.from_pretrained("ccdv/lsg-bart-base-4096", 
    trust_remote_code=True, 
    pass_global_tokens_to_decoder=True, # Pass encoder global tokens to decoder
)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-bart-base-4096")

SENTENCE = "This is a test sequence to test the model. " * 300
token_ids = tokenizer(
    SENTENCE, 
    return_tensors="pt", 
    padding="max_length", # Optional but recommended
    truncation=True # Optional but recommended
    )
output = model(**token_ids)

分类示例:

from transformers import AutoModelForSequenceClassification, AutoTokenizer

model = AutoModelForSequenceClassification.from_pretrained("ccdv/lsg-bart-base-4096", 
    trust_remote_code=True, 
    pass_global_tokens_to_decoder=True, # Pass encoder global tokens to decoder
)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-bart-base-4096")

SENTENCE = "This is a test sequence to test the model. " * 300
token_ids = tokenizer(
    SENTENCE, 
    return_tensors="pt", 
    #pad_to_multiple_of=... # Optional
    truncation=True
    )
output = model(**token_ids)

> SequenceClassifierOutput(loss=None, logits=tensor([[-0.3051, -0.1762]], grad_fn=<AddmmBackward>), hidden_states=None, attentions=None)

BART

@article{DBLP:journals/corr/abs-1910-13461,
  author    = {Mike Lewis and
               Yinhan Liu and
               Naman Goyal and
               Marjan Ghazvininejad and
               Abdelrahman Mohamed and
               Omer Levy and
               Veselin Stoyanov and
               Luke Zettlemoyer},
  title     = {{BART:} Denoising Sequence-to-Sequence Pre-training for Natural Language
               Generation, Translation, and Comprehension},
  journal   = {CoRR},
  volume    = {abs/1910.13461},
  year      = {2019},
  url       = {http://arxiv.org/abs/1910.13461},
  eprinttype = {arXiv},
  eprint    = {1910.13461},
  timestamp = {Thu, 31 Oct 2019 14:02:26 +0100},
  biburl    = {https://dblp.org/rec/journals/corr/abs-1910-13461.bib},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}