🚀 ruRoPEBert Classic Model for Russian language
このモデルは、Tochka AIによるエンコーダーモデルで、RoPEBertアーキテクチャに基づいています。当社のHabr記事で説明されているクローニング手法を使用しています。
モデルの学習にはCulturaXデータセットが使用されました。元となるモデルにはai-forever/ruBert-baseが使用されており、encodechkaベンチマークによると、このモデルはそれを品質面で上回っています。
モデルのソースコードは、modeling_rope_bert.pyファイルで入手できます。
このモデルは、長さ最大512トークンのコンテキストで学習されていますが、より大きなコンテキストでも使用できます。より高い品質を得るには、拡張コンテキスト対応のこのモデルのバージョン - Tochka-AI/ruRoPEBert-classic-base-2kを使用してください。
🚀 クイックスタート
✨ 主な機能
このモデルは、ロシア語用のエンコーダーモデルで、RoPEBertアーキテクチャをベースに構築されています。CulturaXデータセットを使用して学習され、ai-forever/ruBert-baseモデルを上回る品質を持ちます。また、512トークンまでのコンテキストで学習されていますが、拡張コンテキスト対応のバージョンもあります。
📦 インストール
transformers
の推奨バージョンは4.37.2以上です。モデルを正しく読み込むには、モデルのリポジトリからコードをダウンロードする機能を有効にする必要があります: trust_remote_code=True
。これにより、modeling_rope_bert.pyスクリプトがダウンロードされ、正しいアーキテクチャに重みが読み込まれます。
それ以外の方法として、このスクリプトを手動でダウンロードし、そこからクラスを直接使用してモデルを読み込むこともできます。
💻 使用例
基本的な使用法
model_name = 'Tochka-AI/ruRoPEBert-classic-base-512'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name, trust_remote_code=True, attn_implementation='eager')
高度な使用法
SDPA (効率的なアテンション) を使用する場合
model = AutoModel.from_pretrained(model_name, trust_remote_code=True, attn_implementation='sdpa')
埋め込みを取得する場合
正しいプーラー (mean
) はすでにモデルアーキテクチャに組み込まれており、アテンションマスクに基づいて埋め込みを平均化します。また、最初のトークンに対して学習可能な線形変換を行うプーラータイプ (first_token_transform
) を選択することもできます。
組み込みのプーラー実装を変更するには、AutoModel.from_pretrained
関数のpooler_type
パラメータを使用します。
test_batch = tokenizer.batch_encode_plus(["Привет, чем занят?", "Здравствуйте, чем вы занимаетесь?"], return_tensors='pt', padding=True)
with torch.inference_mode():
pooled_output = model(**test_batch).pooler_output
また、正規化と行列乗算を使用して、バッチ内のテキスト間のコサイン類似度を計算することができます。
import torch.nn.functional as F
F.normalize(pooled_output, dim=1) @ F.normalize(pooled_output, dim=1).T
分類器として使用する場合
トレーニング可能な分類ヘッド付きでモデルを読み込むには (num_labels
パラメータを変更します)。
model = AutoModelForSequenceClassification.from_pretrained(model_name, trust_remote_code=True, attn_implementation='sdpa', num_labels=4)
RoPEスケーリングを使用する場合
RoPEスケーリングに許可されているタイプは、linear
とdynamic
です。モデルのコンテキストウィンドウを拡張するには、トークナイザーの最大長を変更し、rope_scaling
パラメータを追加する必要があります。
モデルのコンテキストを2倍に拡張する場合:
tokenizer.model_max_length = 1024
model = AutoModel.from_pretrained(model_name,
trust_remote_code=True,
attn_implementation='sdpa',
rope_scaling={'type': 'dynamic','factor': 2.0}
)
P.S. リソースを効率的に使用するために、必要なdtypeとデバイスを指定することを忘れないでください。
📚 ドキュメント
メトリクス
このモデルのencodechkaベンチマークでの評価結果:
モデル名 |
STS |
PI |
NLI |
SA |
TI |
IA |
IC |
ICX |
NE1 |
NE2 |
平均S (NEなし) |
平均S+W (NEあり) |
ruRoPEBert-classic-base-512 |
0.695 |
0.605 |
0.396 |
0.794 |
0.975 |
0.797 |
0.769 |
0.386 |
0.410 |
0.609 |
0.677 |
0.630 |
ai-forever/ruBert-base |
0.670 |
0.533 |
0.391 |
0.773 |
0.975 |
0.783 |
0.765 |
0.384 |
- |
- |
0.659 |
- |
🔧 技術詳細
このモデルは、Tochka AIによって開発されたロシア語用のエンコーダーモデルです。RoPEBertアーキテクチャをベースにしており、CulturaXデータセットを使用して学習されています。ai-forever/ruBert-baseモデルを元に、クローニング手法を用いて構築されており、encodechkaベンチマークでそのモデルを上回る品質を示しています。
📄 ライセンス
原文書にライセンス情報は含まれていません。
作者
- Sergei Bratchikov (Tochka AI Team, HF, GitHub)
- Maxim Afanasiev (Tochka AI Team, HF, GitHub)