SbertDistilV2 / README.md
Ponimash's picture
Update README.md
d7aec75 verified
metadata
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-мерное пространство ученика с минимальными потерями информации

Комбинированная функция потерь:

Ltotal=αLMSE+βLcosine+γLInfoNCE\mathcal{L}_{\text{total}} = \alpha \cdot \mathcal{L}_{\text{MSE}} + \beta \cdot \mathcal{L}_{\text{cosine}} + \gamma \cdot \mathcal{L}_{\text{InfoNCE}}

Где:

LMSE\mathcal{L}_{\text{MSE}} — среднеквадратичная ошибка для прямого согласования эмбеддингов (вес: 1.0)

Lcosine\mathcal{L}_{\text{cosine}} — косинусное сходство для сохранения направлений векторов (вес: 0.5)

LInfoNCE\mathcal{L}_{\text{InfoNCE}} — контрастное обучение для улучшения различимости представлений (вес: 0.3)

Датасет: Запросы на естественном языке

Этап 2: Дообучение на MASL

Специализация модели на задачах преобразования NL-команд в MASL спецификации.

Датасет: Пары "запрос на естественном языке / MASL структура" (9 999 примеров)

Датасет

Модель дообучена на синтетическом датасете NLI Task Specification Dataset (MASL):

  • Размер: 9 999 примеров
  • Структура: пары "команда → JSON структура"
  • Формат: Входные и выходные коннекторы с типами данных, семантическими категориями и областями знаний

Подробнее о датасете см. документацию к NLI Dataset.

Использование

Установка

pip install sentence-transformers

Базовое использование

from sentence_transformers import SentenceTransformer

# Загрузка модели
model = SentenceTransformer("FractalGPT/SbertDistilV2")

# Пример команд
commands = [
    "Преобразуй эту аудиозапись в текстовый формат",
    "Создай презентацию с анализом медицинских данных",
    "Ответь на вопрос о квантовой физике голосом"
]

# Получение эмбеддингов
embeddings = model.encode(commands)

print(f"Размерность эмбеддингов: {embeddings.shape[1]}") 
print(f"Количество векторов: {embeddings.shape[0]}")      

Поиск похожих команд

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})")

Кластеризация команд

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 (прямое согласование):

LMSE=1Ni=1NSVD(hteacher(i))hstudent(i)2\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 (сохранение направлений):

Lcosine=11Ni=1Nhteacher(i)hstudent(i)hteacher(i)hstudent(i)\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 (контрастное обучение):

LInfoNCE=logexp(sim(hi,hi+)/τ)j=1Nexp(sim(hi,hj)/τ)\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 может быть недостаточной для очень сложных семантических различий

Связанные модели

Примеры результатов

Пример 1: Транскрипция

query = "Преобразуй голосовое сообщение в текст"
similar = [
    "Транскрибируй аудио в txt",           
    "Переведи речь в текстовый формат",    
    "Распознай речь и сохрани в файл"     
]

Пример 2: Генерация отчётов

query = "Создай презентацию с анализом данных"
similar = [
    "Сделай pptx с результатами исследования",  
    "Подготовь слайды с выводами",             
    "Оформи отчёт в виде презентации"          
]

Цитирование

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