🚀 LSGモデル
このモデルは、追加の事前学習なしでエンコーダ-デコーダタスク用にBART-largeを適応させたものです。同じパラメータ/レイヤー数と同じトークナイザーを使用しています。このモデルは、Local + Sparse + Global attention (LSG) を利用しており、ハブのLongformer (LED) やBigBird (Pegasus) よりも高速かつ効率的に長いシーケンスを処理できます。
前提条件
- Transformers >= 4.36.1
- このモデルはカスタムモデリングファイルに依存しているため、
trust_remote_code=True
を追加する必要があります
- 詳細は #13467 を参照してください
関連リンク
- LSGのArXiv 論文
- Githubの変換スクリプトはこの リンク から入手できます
目次
🚀 クイックスタート
このモデルは、シーケンスの長さがブロックサイズの倍数である必要があります。モデルは「適応型」で、必要に応じてシーケンスを自動的にパディングします(設定で adaptive=True
)。ただし、トークナイザーを使用して入力を切り捨てること(truncation=True
)、必要に応じてブロックサイズの倍数でパディングすること(pad_to_multiple_of=...
)をお勧めします。
このモデルはPyTorchで実装されています。

💻 使用例
基本的な使用法
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("ccdv/lsg-bart-large-4096", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-bart-large-4096")
📚 詳細ドキュメント
📦 パラメータ
以下の様々なパラメータを変更することができます。
- グローバルトークンの数 (
num_global_tokens=1
)
- ローカルブロックサイズ (
block_size=128
)
- スパースブロックサイズ (
sparse_block_size=128
)
- スパース性係数 (
sparsity_factor=2
)
- 最初のトークンをマスクする (
mask_first_token
、最初のグローバルトークンと重複するため)
- 詳細は
config.json
ファイルを参照してください
実際にはデフォルトのパラメータでも良好な結果が得られます。メモリが不足している場合は、ブロックサイズを減らし、スパース性係数を増やし、アテンションスコア行列のドロップアウトを削除してください。
from transformers import AutoModel
model = AutoModel.from_pretrained("ccdv/lsg-bart-large-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
)
🔧 スパース選択タイプ
6種類の異なるスパース選択パターンがあります。最適なタイプはタスクに依存します。
sparse_block_size=0
または sparsity_type="none"
の場合、ローカルアテンションのみが考慮されます。
- シーケンスの長さが
2*block_size
未満の場合、タイプは影響を与えません。
各タイプの詳細
sparsity_type="bos_pooling"
(新規)
- BOSトークンを使用した重み付き平均プーリング
- 一般的に最も良い結果を得られます。特に大きなスパース性係数 (8, 16, 32) で有効です。
- 追加パラメータ: なし
sparsity_type="norm"
- 最も高いノルムのトークンを選択
- 小さなスパース性係数 (2 から 4) で最適
- 追加パラメータ: なし
sparsity_type="pooling"
- 平均プーリングを使用してトークンをマージ
- 小さなスパース性係数 (2 から 4) で最適
- 追加パラメータ: なし
sparsity_type="lsh"
- LSHアルゴリズムを使用して類似したトークンをクラスタリング
- 大きなスパース性係数 (4+) で最適
- LSHはランダム投影に依存しているため、異なるシードで推論結果が若干異なる場合があります。
- 追加パラメータ:
lsg_num_pre_rounds=1
(重心を計算する前にトークンをn回事前マージ)
sparsity_type="stride"
- ヘッドごとにストライドメカニズムを使用
- 各ヘッドは、スパース化係数でストライドされた異なるトークンを使用します。
sparsify_factor > num_heads
の場合は推奨されません。
sparsity_type="block_stride"
- ヘッドごとにストライドメカニズムを使用
- 各ヘッドは、スパース化係数でストライドされたトークンのブロックを使用します。
sparsify_factor > num_heads
の場合は推奨されません。
📋 タスク
Seq2Seqの要約タスクの例
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
model = AutoModelForSeq2SeqLM.from_pretrained("ccdv/lsg-bart-large-4096",
trust_remote_code=True,
pass_global_tokens_to_decoder=True,
)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-bart-large-4096")
SENTENCE = "This is a test sequence to test the model. " * 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-bart-large-4096",
trust_remote_code=True,
pass_global_tokens_to_decoder=True,
)
tokenizer = AutoTokenizer.from_pretrained("ccdv/lsg-bart-large-4096")
SENTENCE = "This is a test sequence to test the model. " * 300
token_ids = tokenizer(
SENTENCE,
return_tensors="pt",
padding="max_length",
truncation=True
)
output = model(**token_ids)
> SequenceClassifierOutput(loss=None, logits=tensor([[-0.3051, -0.1762]], grad_fn=<AddmmBackward>), hidden_states=None, attentions=None)
📄 参考文献
@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}
}