🚀 ruRoPEBert ロシア語用文章モデル
これは、Tochka AIによるRoPEBertアーキテクチャに基づくエンコーダーモデルです。我々のHabr記事に記載されているクローニング手法を用いています。
モデルの訓練にはCulturaXデータセットが使用されました。元のモデルとしてhivaze/ru - e5 - base(intfloat/multilingual - e5 - baseの英語とロシア語の埋め込みのみ)が使用され、このモデルは、encodechkaベンチマークのS+W
スコアによると、作成時点で他のすべてのモデルを上回っています。
モデルのソースコードは[modeling_rope_bert.py](https://huggingface.co/Tochka - AI/ruRoPEBert - e5 - base - 2k/blob/main/modeling_rope_bert.py)ファイルにあります。
このモデルは長さ最大2048トークンのコンテキストで訓練されていますが、より大きなコンテキストでも使用できます。
🚀 クイックスタート
✨ 主な機能
- 高性能:encodechkaベンチマークの
S+W
スコアにおいて、作成時点で他のモデルを上回る性能を発揮します。
- 長文対応:最大2048トークンのコンテキストで訓練され、大きなコンテキストでも使用可能です。
- 柔軟性:様々な使用方法や設定が可能で、分類器としての使用やRoPEスケーリングによるコンテキストウィンドウの拡張などができます。
📦 インストール
重要: transformers
の推奨バージョンは4.37.2以上です。モデルを正しく読み込むには、モデルのリポジトリからコードをダウンロードする機能を有効にする必要があります: trust_remote_code=True
。これにより、modeling_rope_bert.pyスクリプトがダウンロードされ、正しいアーキテクチャに重みが読み込まれます。
それ以外の方法として、このスクリプトを手動でダウンロードし、そこからクラスを直接使用してモデルを読み込むこともできます。
💻 使用例
基本的な使用法(効率的なアテンションなし)
model_name = 'Tochka-AI/ruRoPEBert-e5-base-2k'
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 = 4096
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 - e5 - base - 512 |
0.793 |
0.704 |
0.457 |
0.803 |
0.970 |
0.788 |
0.802 |
0.749 |
0.328 |
0.396 |
0.758 |
0.679 |
ruRoPEBert - e5 - base - 2k |
0.787 |
0.708 |
0.460 |
0.804 |
0.970 |
0.792 |
0.803 |
0.749 |
0.402 |
0.423 |
0.759 |
0.689 |
intfloat/multilingual - e5 - base |
0.834 |
0.704 |
0.458 |
0.795 |
0.964 |
0.782 |
0.803 |
0.740 |
0.234 |
0.373 |
0.76 |
0.668 |
🔧 技術詳細
このモデルはTochka AIによって開発され、RoPEBertアーキテクチャに基づいています。訓練にはCulturaXデータセットが使用され、元のモデルとしてhivaze/ru - e5 - baseが使用されています。
📄 ライセンス
原文書にライセンス情報は記載されていません。
👥 作者
- Sergei Bratchikov (Tochka AI Team, HF, GitHub)
- Maxim Afanasiev (Tochka AI Team, HF, GitHub)