🚀 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缩放)可以处理更大的上下文。
📄 许可证
文档中未提及许可证相关信息。
作者