🚀 LSG模型
LSG模型是一个基于CamemBERT-base进行适配的模型,无需额外预训练,使用相同数量的参数和层以及相同的分词器。它能够处理长序列,并且比Longformer或BigBird(来自Transformers)更快、更高效,依赖于局部+稀疏+全局注意力(LSG)机制。
🚀 快速开始
此模型依赖于自定义建模文件,需要添加trust_remote_code=True
才能使用。同时,该模型要求序列长度是块大小的倍数,模型具有“自适应”功能,必要时会自动填充序列(在配置中adaptive=True
)。不过,建议借助分词器截断输入(truncation=True
),并可选择以块大小的倍数进行填充(pad_to_multiple_of=...
)。
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("ccdv/lsg-camembert-base-4096", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-camembert-base-4096")
✨ 主要特性
- 基于CamemBERT-base适配,无需额外预训练。
- 能够处理长序列,比Longformer或BigBird更快、更高效。
- 依赖于局部+稀疏+全局注意力(LSG)机制。
- 模型具有“自适应”功能,可自动填充序列。
📦 安装指南
该模型依赖于自定义建模文件,使用时需要添加trust_remote_code=True
。同时,需要确保Transformers >= 4.36.1
。
💻 使用示例
基础用法
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("ccdv/lsg-camembert-base-4096", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-camembert-base-4096")
高级用法
参数设置
可以更改各种参数,如全局令牌数量、局部块大小、稀疏块大小、稀疏因子等。
from transformers import AutoModel
model = AutoModel.from_pretrained("ccdv/lsg-camembert-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
)
掩码填充任务
from transformers import FillMaskPipeline, AutoModelForMaskedLM, AutoTokenizer
model = AutoModelForMaskedLM.from_pretrained("ccdv/lsg-camembert-base-4096", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-camembert-base-4096")
SENTENCES = "Paris est la <mask> de la France."
pipeline = FillMaskPipeline(model, tokenizer)
output = pipeline(SENTENCES)
序列分类任务
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model = AutoModelForSequenceClassification.from_pretrained("ccdv/lsg-camembert-base-4096",
trust_remote_code=True,
pool_with_global=True,
)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-camembert-base-4096")
SENTENCE = "This is a test for sequence classification. " * 300
token_ids = tokenizer(
SENTENCE,
return_tensors="pt",
truncation=True
)
output = model(**token_ids)
训练全局令牌
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model = AutoModelForSequenceClassification.from_pretrained("ccdv/lsg-camembert-base-4096",
trust_remote_code=True,
pool_with_global=True,
num_global_tokens=16
)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-camembert-base-4096")
for name, param in model.named_parameters():
if "global_embeddings" not in name:
param.requires_grad = False
else:
param.required_grad = True
📚 详细文档
稀疏选择类型
有6种不同的稀疏选择模式,最佳类型取决于任务。
sparsity_type="bos_pooling"
(新):使用BOS令牌进行加权平均池化,通常效果最佳,尤其是在稀疏因子较大(8、16、32)时。
sparsity_type="norm"
:选择范数最高的令牌,适用于较小的稀疏因子(2到4)。
sparsity_type="pooling"
:使用平均池化合并令牌,适用于较小的稀疏因子(2到4)。
sparsity_type="lsh"
:使用LSH算法对相似令牌进行聚类,适用于较大的稀疏因子(4+)。LSH依赖于随机投影,因此不同种子的推理结果可能略有不同。
sparsity_type="stride"
:每个头使用不同的令牌,按稀疏因子跨步。如果稀疏因子大于头数,则不建议使用。
sparsity_type="block_stride"
:每个头使用按稀疏因子跨步的令牌块。如果稀疏因子大于头数,则不建议使用。
注意事项
- 如果
sparse_block_size=0
或sparsity_type="none"
,则仅考虑局部注意力。
- 对于长度小于2*块大小的序列,稀疏选择类型没有影响。
🔧 技术细节
该模型基于CamemBERT-base进行适配,使用局部+稀疏+全局注意力(LSG)机制,能够处理长序列。模型要求序列长度是块大小的倍数,具有“自适应”功能,可自动填充序列。
📄 许可证
CamemBERT引用
@inproceedings{Martin_2020,
doi = {10.18653/v1/2020.acl-main.645},
url = {https://doi.org/10.18653%2Fv1%2F2020.acl-main.645},
year = 2020,
publisher = {Association for Computational Linguistics},
author = {Louis Martin and Benjamin Muller and Pedro Javier Ortiz Su{\'{a}}rez and Yoann Dupont and Laurent Romary and {\'{E}}ric de la Clergeri and Djam{\'{e}} Seddah and Beno{\^{\i}}t Sagot},
title = {{CamemBERT}: a Tasty French Language Model},
booktitle = {Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics}
}
相关链接
- LSG ArXiv 论文
- Github/转换脚本可在这个链接获取。