File size: 11,781 Bytes
7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 7453d10 d7aec75 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
---
license: apache-2.0
language:
- ru
base_model:
- FractalGPT/SbertDistil
- intfloat/multilingual-e5-large-instruct
library_name: sentence-transformers
tags:
- sentence-transformers
- sentence-similarity
- feature-extraction
- embeddings
- distillation
- nli
- masl
- task-specification
- agent
pipeline_tag: sentence-similarity
---
# SbertDistilV2
**Автор:** Потанин М. В.
## Описание модели
SbertDistilV2 — компактная модель эмбеддингов, специализированная для работы с задачами NLI (Natural Language Interface) и преобразования команд в формат MASL (Multi-agent system language). Модель получена путём двухэтапного обучения с применением дистилляции знаний и дообучения на специализированном датасете.
### Ключевые характеристики
- **Базовая модель**: `FractalGPT/SbertDistil`
- **Модель-учитель**: `intfloat/multilingual-e5-large-instruct`
- **Размерность эмбеддингов**: 384 (против 1024 у учителя)
- **Язык**: Русский
- **Специализация**: NLI задачи, MASL спецификации
## Архитектура обучения
Обучение проводилось в **два этапа**:
### Этап 1: Дистилляция знаний
Передача знаний от большой модели-учителя (`multilingual-e5-large-instruct`, 1024 dim) к компактной модели-ученику (`SbertDistil`, 384 dim).
**Метод согласования размерностей:**
- SVD-проекция для сжатия 1024-мерных эмбеддингов учителя в 384-мерное пространство ученика с минимальными потерями информации
**Комбинированная функция потерь:**
$$\mathcal{L}_{\text{total}} = \alpha \cdot \mathcal{L}_{\text{MSE}} + \beta \cdot \mathcal{L}_{\text{cosine}} + \gamma \cdot \mathcal{L}_{\text{InfoNCE}}$$
Где:
$$\mathcal{L}_{\text{MSE}}$$ — среднеквадратичная ошибка для прямого согласования эмбеддингов (вес: **1.0**)
$$\mathcal{L}_{\text{cosine}}$$ — косинусное сходство для сохранения направлений векторов (вес: **0.5**)
$$\mathcal{L}_{\text{InfoNCE}}$$ — контрастное обучение для улучшения различимости представлений (вес: **0.3**)
**Датасет:** Запросы на естественном языке
### Этап 2: Дообучение на MASL
Специализация модели на задачах преобразования NL-команд в MASL спецификации.
**Датасет:** Пары "запрос на естественном языке / MASL структура" (9 999 примеров)
## Датасет
Модель дообучена на синтетическом датасете NLI Task Specification Dataset (MASL):
- **Размер**: 9 999 примеров
- **Структура**: пары "команда → JSON структура"
- **Формат**: Входные и выходные коннекторы с типами данных, семантическими категориями и областями знаний
Подробнее о датасете см. документацию к [NLI Dataset](https://huggingface.co/datasets/Ponimash/nli_dataset).
## Использование
### Установка
```bash
pip install sentence-transformers
```
### Базовое использование
```python
from sentence_transformers import SentenceTransformer
# Загрузка модели
model = SentenceTransformer("FractalGPT/SbertDistilV2")
# Пример команд
commands = [
"Преобразуй эту аудиозапись в текстовый формат",
"Создай презентацию с анализом медицинских данных",
"Ответь на вопрос о квантовой физике голосом"
]
# Получение эмбеддингов
embeddings = model.encode(commands)
print(f"Размерность эмбеддингов: {embeddings.shape[1]}")
print(f"Количество векторов: {embeddings.shape[0]}")
```
### Поиск похожих команд
```python
from sentence_transformers import SentenceTransformer, util
import torch
model = SentenceTransformer("FractalGPT/SbertDistilV2")
# База команд
commands_db = [
"Преобразуй речь в текст",
"Создай презентацию по физике",
"Сделай аудио ответ на вопрос",
"Проанализируй медицинский документ",
"Переведи аудио в текстовый файл"
]
# Запрос пользователя
query = "Транскрибируй голосовое сообщение в txt"
# Получение эмбеддингов
query_embedding = model.encode(query, convert_to_tensor=True)
db_embeddings = model.encode(commands_db, convert_to_tensor=True)
# Вычисление косинусного сходства
cosine_scores = util.cos_sim(query_embedding, db_embeddings)[0]
# Сортировка результатов
results = torch.argsort(cosine_scores, descending=True)
print(f"Запрос: {query}\n")
print("Наиболее похожие команды:")
for idx in results[:3]:
print(f" {commands_db[idx]} (Score: {cosine_scores[idx]:.4f})")
```
### Кластеризация команд
```python
from sentence_transformers import SentenceTransformer
from sklearn.cluster import KMeans
import numpy as np
model = SentenceTransformer("FractalGPT/SbertDistilV2")
commands = [
"Преобразуй аудио в текст",
"Транскрибируй голос в txt",
"Создай презентацию по биологии",
"Сделай pptx с анализом данных",
"Ответь голосом на вопрос",
"Озвучь ответ на запрос"
]
# Получение эмбеддингов
embeddings = model.encode(commands)
# Кластеризация (3 кластера: транскрипция, презентации, голосовые ответы)
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(embeddings)
# Группировка по кластерам
for i in range(3):
cluster_commands = [cmd for cmd, cluster in zip(commands, clusters) if cluster == i]
print(f"\nКластер {i+1}:")
for cmd in cluster_commands:
print(f" - {cmd}")
```
## Применение
Модель оптимизирована для следующих задач:
### 1. Семантический поиск команд
Поиск похожих команд в базе знаний мультиагентной системы для переиспользования существующих решений.
### 2. Кластеризация задач
Группировка схожих запросов для оптимизации маршрутизации в агентных системах.
### 3. Классификация намерений
Определение типа задачи (транскрипция, генерация отчётов, голосовые ответы и т.д.) по векторному представлению.
### 4. Ранжирование инструментов
Поиск наиболее подходящих инструментов для выполнения пользовательской команды на основе семантического сходства.
### 5. Дедупликация запросов
Выявление дублирующихся или очень похожих запросов для оптимизации обработки.
## Технические детали
### Оптимизации обучения
- **Mixed Precision Training**: использование bfloat16/float16 для ускорения обучения
- **Gradient Accumulation**: накопление градиентов для эффективной работы с большими батчами
- **SVD Projection**: оптимальное сжатие размерности с сохранением максимальной дисперсии
### Математическое обоснование
**MSE Loss** (прямое согласование):
$$\mathcal{L}_{\text{MSE}} = \frac{1}{N} \sum_{i=1}^{N} \|\text{SVD}(\mathbf{h}_{\text{teacher}}^{(i)}) - \mathbf{h}_{\text{student}}^{(i)}\|^2$$
**Cosine Similarity Loss** (сохранение направлений):
$$\mathcal{L}_{\text{cosine}} = 1 - \frac{1}{N} \sum_{i=1}^{N} \frac{\mathbf{h}_{\text{teacher}}^{(i)} \cdot \mathbf{h}_{\text{student}}^{(i)}}{\|\mathbf{h}_{\text{teacher}}^{(i)}\| \|\mathbf{h}_{\text{student}}^{(i)}\|}$$
**InfoNCE Loss** (контрастное обучение):
$$\mathcal{L}_{\text{InfoNCE}} = -\log \frac{\exp(\text{sim}(\mathbf{h}_i, \mathbf{h}_i^+) / \tau)}{\sum_{j=1}^{N} \exp(\text{sim}(\mathbf{h}_i, \mathbf{h}_j) / \tau)}$$
Где $\tau$ — температурный параметр контрастного обучения.
## Ограничения
- Модель оптимизирована для **русского языка**
- Специализирована на задачах NLI и MASL, может показывать сниженное качество на общих задачах эмбеддингов
- Размерность 384 может быть недостаточной для очень сложных семантических различий
## Связанные модели
- [Qwen2.5-NLI-7B](https://huggingface.co/Ponimash/Qwen2.5-nli-7b) — генеративная модель для создания MASL спецификаций
- [FractalGPT/SbertDistil](https://huggingface.co/FractalGPT/SbertDistil) — базовая модель
- [multilingual-e5-large-instruct](https://huggingface.co/intfloat/multilingual-e5-large-instruct) — модель-учитель
## Примеры результатов
### Пример 1: Транскрипция
```python
query = "Преобразуй голосовое сообщение в текст"
similar = [
"Транскрибируй аудио в txt",
"Переведи речь в текстовый формат",
"Распознай речь и сохрани в файл"
]
```
### Пример 2: Генерация отчётов
```python
query = "Создай презентацию с анализом данных"
similar = [
"Сделай pptx с результатами исследования",
"Подготовь слайды с выводами",
"Оформи отчёт в виде презентации"
]
```
## Цитирование
```bibtex
@misc{sbertdistilv2-nli-masl,
author = {Потанин, М. В.},
title = {SbertDistilV2-NLI-MASL: Compact Embeddings for Natural Language Interface Tasks},
year = {2024},
publisher = {HuggingFace},
howpublished = {\url{https://huggingface.co/FractalGPT/SbertDistilV2}}
}
```
## Лицензия
Модель распространяется под лицензией Apache 2.0. |