🚀 LSGモデル
このモデルは、長いシーケンスを処理することができ、LongformerやBigBird(Transformersから)よりも高速かつ効率的で、Local + Sparse + Global attention (LSG)に基づいています。また、このモデルはCamemBERT-baseから適応されており、追加の事前学習はまだ行われていません。
注意事項
- Transformers >= 4.36.1 が必要です。
- このモデルはカスタムモデリングファイルに依存しているため、
trust_remote_code=True
を追加する必要があります。
- 詳細は #13467 を参照してください。
LSGのArXiv 論文 はこちらです。
Githubの変換スクリプトはこの リンク から入手できます。
🚀 クイックスタート
このモデルを使用するには、カスタムモデリングファイルに依存しているため、trust_remote_code=True
を追加する必要があります。
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(Transformersから)よりも高速かつ効率的です。
- Local + Sparse + Global attention (LSG) に基づいています。
- シーケンスの長さがブロックサイズの倍数である必要があります。必要に応じて自動的にパディングされます(configで
adaptive=True
)。ただし、トークナイザーを使用して入力を切り捨てることをお勧めします(truncation=True
)。
📦 インストール
このモデルを使用するには、transformers
ライブラリが必要です。transformers
のバージョンは 4.36.1 以上である必要があります。
pip install 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
)
📚 ドキュメント
パラメータ
以下のようなさまざまなパラメータを変更することができます。
- グローバルトークンの数 (
num_global_tokens=1
)
- ローカルブロックサイズ (
block_size=128
)
- スパースブロックサイズ (
sparse_block_size=128
)
- スパース性係数 (
sparsity_factor=2
)
- 最初のトークンをマスクする (
mask_first_token
、最初のグローバルトークンと重複するため)
config.json
ファイルを参照してください。
実際には、デフォルトのパラメータがうまく機能します。メモリが不足している場合は、ブロックサイズを小さくし、スパース性係数を大きくし、注意スコア行列のドロップアウトを削除してください。
スパース選択タイプ
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+) |
lsg_num_pre_rounds=1 (セントロイドを計算する前にトークンをn回事前マージ) |
sparsity_type="stride" |
ヘッドごとにストライドメカニズムを使用 |
- |
各ヘッドが sparsify_factor でストライドされた異なるトークンを使用します。sparsify_factor > num_heads の場合は推奨されません。 |
sparsity_type="block_stride" |
ヘッドごとにストライドメカニズムを使用 |
- |
各ヘッドが sparsify_factor でストライドされたトークンブロックを使用します。sparsify_factor > num_heads の場合は推奨されません。 |
タスク
マスク埋め込みの例
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
📄 ライセンス
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árez and Yoann Dupont and Laurent Romary and Éric de la Clergeri and Djamé Seddah and Benoît Sagot},
title = {{CamemBERT}: a Tasty French Language Model},
booktitle = {Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics}
}