🚀 ruRoPEBert俄語句子模型
這是一個由Tochka AI基於RoPEBert架構開發的編碼器模型,採用了我們在Habr上發表的文章中描述的克隆方法。
模型訓練使用了CulturaX數據集。以hivaze/ru - e5 - base(即intfloat/multilingual - e5 - base的英語和俄語嵌入部分)模型為基礎;根據encodechka基準測試的S+W
分數,該模型在創建時在質量上超過了它以及其他所有模型。
模型源代碼可在文件modeling_rope_bert.py中獲取。
該模型在長度最長為2048個標記的上下文上進行訓練,但也可用於更長的上下文。
🚀 快速開始
✨ 主要特性
- 基於RoPEBert架構,由Tochka AI開發。
- 使用CulturaX數據集進行訓練。
- 在質量上超越了其他模型(根據encodechka基準測試的
S+W
分數)。
- 可處理最長2048個標記的上下文,也支持更大的上下文。
📦 安裝指南
重要提示:建議使用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}
)
⚠️ 重要提示
別忘了指定所需的數據類型和設備,以有效利用資源。
📚 詳細文檔
指標
該模型在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 |
🔧 技術細節
模型基於RoPEBert架構,採用克隆方法進行開發。訓練使用了CulturaX數據集,以hivaze/ru - e5 - base模型為基礎。在訓練過程中,模型在長度最長為2048個標記的上下文上進行學習,但通過一些調整(如RoPE縮放)可以處理更大的上下文。
📄 許可證
文檔中未提及許可證相關信息。
作者