|
|
--- |
|
|
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. |