/ Модель

Характеристики

Контекст
514 токенов
Параметры
95,2 млн
Архитектура
roberta · dense
Базовая модель
distilroberta-base
Библиотека
sentence-transformers
Опубликована
29 апр 2024

distilroberta-base-nli-2d-matryoshka

ЭмбеддингиТекст → embedding

Англоязычная модель Sentence Transformers преобразует предложения и абзацы в эмбеддинги для семантического поиска и сравнения текстов.

100скачиваний за 30 дней0лайковвеса обновлены29 апр 2024

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Эмбеддинги» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

tomaarsen/distilroberta-base-nli-2d-matryoshka — англоязычная модель Sentence Transformers, дообученная автором на базе distilbert/distilroberta-base на наборе all-nli. Она преобразует предложения и абзацы в плотные векторы размерностью 768, предназначенные для сравнения семантической близости по косинусному сходству. Модель на архитектуре RoBERTa использует mean pooling; максимальная длина входа — 512 токенов.

Модель подходит для семантического поиска, оценки сходства текстов, поиска перефразировок, кластеризации и классификации на основе эмбеддингов. Обучение Matryoshka позволяет использовать укороченные представления размерностью 512, 256, 128 или 64 для компромисса между размером вектора и качеством. В README приведены оценки на тестах семантического сходства, включая Spearman 0,8171 на sts-test.

Модель ориентирована на английский язык. Метаданные указывают библиотеку sentence-transformers и формат safetensors; сведения о лицензии в предоставленных данных отсутствуют.

Сценарии применения

  • поиск документов по смыслу запроса
  • оценка семантического сходства двух предложений
  • поиск перефразировок в коллекции текстов
  • кластеризация предложений и абзацев по смыслу
  • классификация текстов по эмбеддингам

Ограничения

Модель рассчитана на английский язык и ограничивает длину входной последовательности 512 токенами. Лицензия в предоставленных данных не указана.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

SentenceTransformer based on distilbert/distilroberta-base

This is a sentence-transformers model finetuned from distilbert/distilroberta-base on the sentence-transformers/all-nli dataset. It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more.

Model Details

Model Description

Model Sources

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: RobertaModel 
  (1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
)

Usage

Direct Usage (Sentence Transformers)

First install the Sentence Transformers library:

pip install -U sentence-transformers

Then you can load this model and run inference.

from sentence_transformers import SentenceTransformer

# Download from the 🤗 Hub
model = SentenceTransformer("tomaarsen/distilroberta-base-nli-2d-matryoshka")
# Run inference
sentences = [
    'A plane in the sky.',
    'Two airplanes in the sky.',
    'Nelson Mandela undergoes surgery',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 768]

# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings)
print(similarities.shape)
# [3, 3]

Evaluation

Metrics

Semantic Similarity

MetricValue
pearson_cosine0.8395
spearman_cosine0.8425
pearson_manhattan0.8433
spearman_manhattan0.8436
pearson_euclidean0.8441
spearman_euclidean0.8449
pearson_dot0.7638
spearman_dot0.757
pearson_max0.8441
spearman_max0.8449

Semantic Similarity

MetricValue
pearson_cosine0.8187
spearman_cosine0.8171
pearson_manhattan0.8117
spearman_manhattan0.8049
pearson_euclidean0.8127
spearman_euclidean0.8058
pearson_dot0.7396
spearman_dot0.7256
pearson_max0.8187
spearman_max0.8171

Training Details

Training Dataset

sentence-transformers/all-nli

  • Dataset: sentence-transformers/all-nli at 65dd388
  • Size: 557,850 training samples
  • Columns: anchor, positive, and negative
  • Approximate statistics based on the first 1000 samples:
    anchorpositivenegative
    typestringstringstring
    detailsmin: 7 tokensmean: 10.38 tokensmax: 45 tokensmin: 6 tokensmean: 12.8 tokensmax: 39 tokensmin: 6 tokensmean: 13.4 tokensmax: 50 tokens
  • Samples:
    anchorpositivenegative
    A person on a horse jumps over a broken down airplane.A person is outdoors, on a horse.A person is at a diner, ordering an omelette.
    Children smiling and waving at cameraThere are children presentThe kids are frowning
    A boy is jumping on skateboard in the middle of a red bridge.The boy does a skateboarding trick.The boy skates down the sidewalk.
  • Loss: Matryoshka2dLoss with these parameters:
    {
        "loss": "MultipleNegativesRankingLoss",
        "n_layers_per_step": 1,
        "last_layer_weight": 1.0,
        "prior_layers_weight": 1.0,
        "kl_div_weight": 1.0,
        "kl_temperature": 0.3,
        "matryoshka_dims": [
            768,
            512,
            256,
            128,
            64
        ],
        "matryoshka_weights": [
            1,
            1,
            1,
            1,
            1
        ],
        "n_dims_per_step": 1
    }
    

Evaluation Dataset

sentence-transformers/stsb

  • Dataset: sentence-transformers/stsb at ab7a5ac
  • Size: 1,500 evaluation samples
  • Columns: sentence1, sentence2, and score
  • Approximate statistics based on the first 1000 samples:
    sentence1sentence2score
    typestringstringfloat
    detailsmin: 5 tokensmean: 15.0 tokensmax: 44 tokensmin: 6 tokensmean: 14.99 tokensmax: 61 tokensmin: 0.0mean: 0.47max: 1.0
  • Samples:
    sentence1sentence2score
    A man with a hard hat is dancing.A man wearing a hard hat is dancing.1.0
    A young child is riding a horse.A child is riding a horse.0.95
    A man is feeding a mouse to a snake.The man is feeding a mouse to the snake.1.0
  • Loss: Matryoshka2dLoss with these parameters:
    {
        "loss": "MultipleNegativesRankingLoss",
        "n_layers_per_step": 1,
        "last_layer_weight": 1.0,
        "prior_layers_weight": 1.0,
        "kl_div_weight": 1.0,
        "kl_temperature": 0.3,
        "matryoshka_dims": [
            768,
            512,
            256,
            128,
            64
        ],
        "matryoshka_weights": [
            1,
            1,
            1,
            1,
            1
        ],
        "n_dims_per_step": 1
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • eval_strategy: steps
  • per_device_train_batch_size: 128
  • per_device_eval_batch_size: 128
  • num_train_epochs: 1
  • warmup_ratio: 0.1
  • fp16: True
  • batch_sampler: no_duplicates

All Hyperparameters

  • overwrite_output_dir: False
  • do_predict: False
  • eval_strategy: steps
  • prediction_loss_only: False
  • per_device_train_batch_size: 128
  • per_device_eval_batch_size: 128
  • per_gpu_train_batch_size: None
  • per_gpu_eval_batch_size: None
  • gradient_accumulation_steps: 1
  • eval_accumulation_steps: None
  • learning_rate: 5e-05
  • weight_decay: 0.0
  • adam_beta1: 0.9
  • adam_beta2: 0.999
  • adam_epsilon: 1e-08
  • max_grad_norm: 1.0
  • num_train_epochs: 1
  • max_steps: -1
  • lr_scheduler_type: linear
  • lr_scheduler_kwargs: {}
  • warmup_ratio: 0.1
  • warmup_steps: 0
  • log_level: passive
  • log_level_replica: warning
  • log_on_each_node: True
  • logging_nan_inf_filter: True
  • save_safetensors: True
  • save_on_each_node: False
  • save_only_model: False
  • no_cuda: False
  • use_cpu: False
  • use_mps_device: False
  • seed: 42
  • data_seed: None
  • jit_mode_eval: False
  • use_ipex: False
  • bf16: False
  • fp16: True
  • fp16_opt_level: O1
  • half_precision_backend: auto
  • bf16_full_eval: False
  • fp16_full_eval: False
  • tf32: None
  • local_rank: 0
  • ddp_backend: None
  • tpu_num_cores: None
  • tpu_metrics_debug: False
  • debug: []
  • dataloader_drop_last: False
  • dataloader_num_workers: 0
  • dataloader_prefetch_factor: None
  • past_index: -1
  • disable_tqdm: False
  • remove_unused_columns: True
  • label_names: None
  • load_best_model_at_end: False
  • ignore_data_skip: False
  • fsdp: []
  • fsdp_min_num_params: 0
  • fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
  • fsdp_transformer_layer_cls_to_wrap: None
  • accelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
  • deepspeed: None
  • label_smoothing_factor: 0.0
  • optim: adamw_torch
  • optim_args: None
  • adafactor: False
  • group_by_length: False
  • length_column_name: length
  • ddp_find_unused_parameters: None
  • ddp_bucket_cap_mb: None
  • ddp_broadcast_buffers: None
  • dataloader_pin_memory: True
  • dataloader_persistent_workers: False
  • skip_memory_metrics: True
  • use_legacy_prediction_loop: False
  • push_to_hub: False
  • resume_from_checkpoint: None
  • hub_model_id: None
  • hub_strategy: every_save
  • hub_private_repo: False
  • hub_always_push: False
  • gradient_checkpointing: False
  • gradient_checkpointing_kwargs: None
  • include_inputs_for_metrics: False
  • eval_do_concat_batches: True
  • fp16_backend: auto
  • push_to_hub_model_id: None
  • push_to_hub_organization: None
  • mp_parameters:
  • auto_find_batch_size: False
  • full_determinism: False
  • torchdynamo: None
  • ray_scope: last
  • ddp_timeout: 1800
  • torch_compile: False
  • torch_compile_backend: None
  • torch_compile_mode: None
  • dispatch_batches: None
  • split_batches: None
  • include_tokens_per_second: False
  • include_num_input_tokens_seen: False
  • neftune_noise_alpha: None
  • optim_target_modules: None
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: proportional

Training Logs

EpochStepTraining Losslosssts-dev_spearman_cosinests-test_spearman_cosine
0.02291006.27793.99590.8008-
0.04592004.32123.58180.7956-
0.06883003.71353.44220.7940-
0.09184003.55673.54580.7951-
0.11475003.12973.12530.8050-
0.13766002.70013.43660.7996-
0.16067002.86643.66090.8033-
0.18358002.66563.37360.7975-
0.20659002.6333.37350.8076-
0.229410002.43353.64990.7996-
0.252411002.41653.63010.8015-
0.275312002.29423.15410.7994-
0.298213002.24023.42840.7977-
0.321214002.21483.37750.7988-
0.344115002.22853.60970.8016-
0.367116002.05913.38390.7926-
0.390017002.02533.11130.7981-
0.412918002.02443.82890.7954-
0.435919001.85823.35150.8000-
0.458820001.9773.30540.7917-
0.481821001.90283.21660.7927-
0.504722001.83163.65040.7955-
0.527623001.84043.28220.7843-
0.550624001.84553.25830.7941-
0.573525001.94883.39700.7971-
0.596526001.94032.89480.7959-
0.619427001.88843.22270.8008-
0.642328001.86553.19480.7920-
0.665329001.85673.43740.7913-
0.688230001.84233.11180.7949-
0.711231001.74753.13590.8062-
0.734132001.81662.99270.7984-
0.757133001.56263.51430.8405-
0.780034001.20383.39090.8411-
0.802935001.15793.24580.8413-
0.825936001.09783.15920.8404-
0.848837001.02832.95570.8408-
0.871838000.99933.40730.8430-
0.894739000.97273.05700.8434-
0.917640000.96922.93570.8439-
0.940641000.94122.94940.8428-
0.963542001.00633.40470.8422-
0.986543000.96783.42990.8425-
1.04359---0.8171

Environmental Impact

Carbon emissions were measured using CodeCarbon.

  • Energy Consumed: 0.178 kWh
  • Carbon Emitted: 0.069 kg of CO2
  • Hours Used: 0.626 hours

Training Hardware

  • On Cloud: No
  • GPU Model: 1 x NVIDIA GeForce RTX 3090
  • CPU Model: 13th Gen Intel(R) Core(TM) i7-13700K
  • RAM Size: 31.78 GB

Framework Versions

  • Python: 3.11.6
  • Sentence Transformers: 3.0.0.dev0
  • Transformers: 4.41.0.dev0
  • PyTorch: 2.3.0+cu121
  • Accelerate: 0.26.1
  • Datasets: 2.18.0
  • Tokenizers: 0.19.1

Citation

BibTeX

Sentence Transformers

@inproceedings{reimers-2019-sentence-bert,
    title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
    author = "Reimers, Nils and Gurevych, Iryna",
    booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
    month = "11",
    year = "2019",
    publisher = "Association for Computational Linguistics",
    url = "https://arxiv.org/abs/1908.10084",
}

Matryoshka2dLoss

@misc{li20242d,
    title={2D Matryoshka Sentence Embeddings}, 
    author={Xianming Li and Zongxi Li and Jing Li and Haoran Xie and Qing Li},
    year={2024},
    eprint={2402.14776},
    archivePrefix={arXiv},
    primaryClass={cs.CL}
}

MatryoshkaLoss

@misc{kusupati2024matryoshka,
    title={Matryoshka Representation Learning}, 
    author={Aditya Kusupati and Gantavya Bhatt and Aniket Rege and Matthew Wallingford and Aditya Sinha and Vivek Ramanujan and William Howard-Snyder and Kaifeng Chen and Sham Kakade and Prateek Jain and Ali Farhadi},
    year={2024},
    eprint={2205.13147},
    archivePrefix={arXiv},
    primaryClass={cs.LG}
}

MultipleNegativesRankingLoss

@misc{henderson2017efficient,
    title={Efficient Natural Language Response Suggestion for Smart Reply}, 
    author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
    year={2017},
    eprint={1705.00652},
    archivePrefix={arXiv},
    primaryClass={cs.CL}
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · sentence-transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
RobertaModel
Ревизия весов
fd1a504

0 моделей