GISTEmbed: Guided In-sample Selection of Training Negatives for Text Embedding Fine-tuning
Paper • 2402.16829 • Published • 1
How to use belyakoff/puzzle-search-model with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("belyakoff/puzzle-search-model")
sentences = [
"1. проверить , запущен ли процесс fox. Если запущен, закрыть\n2. открыть страницу в браузере. Адрес: avito.ru. Если будут напоминания для пользователя — согласится на все.\n3. навести мышь на меню Каталоги, дождаться появления подменю и навести мышь на меню «каталог автомобилей». Кликнуть мышкой\n4. найти все слова, которые выделены тэгом <h3>. Из списка сделать словарь, ключ - текст, значение — другие параметры в тэге.\n5. преобразовать словарь в датафрейм\n6. сгруппировать данные датафрейма. Если есть повторы в ключах, сделать один ключ, но с объединенным значением\n7. выгрузить датафрем обратно в словарь.\n8. Отправить сообщение в whatsapp об удачном завершении процесса",
"Уведомление пользователя. describe: Выводит на экран всплывающее окно с указанным текстом. Приостанавливает работу алгаритма до нажатия 'ok'. Окно закрывается по нажатию кнопки 'ok'..Блок выводит на экран всплывающее окно с указанным текстом. Окно закрывается по нажатию кнопки ‘Закрыть’. Выполнение алгоритма приостанавливается во время отображения уведомления. Чтобы скопировать содержимое уведомления, необходимо нажать кнопку “Скопировать”..Показать сообщений пользователю. Показывает в отдельном окне.",
"Добавить строку в DataFrame. describe: Добавляет строку в dataframe по номеру..Блок позволяет добавить, перезаписать и удалить строку в DataFrame. При этом необходимо указать сам DataFrame, строку для добавления/перезаписи и номер позиции..поскольку DataFrame (датафрейм) это таблица, к ней можно добавить строчку, удалить строчку или изменить строчку\nПри добавлении строки в датафрейм, нужно указать в какое место ее нужно поместить. \nПри удалении строки тоже нужно указать номер удаляемой строки.\nИ при изменении строки тоже указывается номер строки\nПри добавлении или изменении строки указывается список значений всех колонок\nПример\nДобавить строку в датафрейм dataframe\nУдалить строку из таблицы\nИзменить строку в датафрейме",
"Запущен ли процесс. describe: Проверяет, запущен ли указанный процесс. Если хотя бы один экземпляр процесса запущен, то вернет True, иначе - False..Блок проверяет, запущен ли указанный процесс. Если хотя бы один экземпляр процесса запущен, то вернет “истина”, иначе вернет “ложь”..\"Запущен ли процесс\" — это вопрос, касающийся текущего состояния процесса в операционной системе, обозначающий его активность или присутствие в системе. Процесс считается запущенным, если он был инициирован и выполняется в данный момент времени. Для проверки, запущен ли процесс, операционная система использует таблицы процессов, где каждый процесс имеет свой уникальный идентификатор (PID) и информацию о его статусе. Когда процесс находится в активном состоянии, он использует ресурсы системы, такие как CPU и память, для выполнения своих задач. Проверку статуса процесса можно осуществить с помощью различных инструментов, например, с помощью командной строки или графических интерфейсов, отображающих активные процессы."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from intfloat/multilingual-e5-large-instruct. It maps sentences & paragraphs to a 1024-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more.
SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
(1): Pooling({'word_embedding_dimension': 1024, '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})
(2): Normalize()
)
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("belyakoff/puzzle-search-model")
# Run inference
sentences = [
'с помощью bash скрипта узнать все рабочие процессы. В цикле начать их обходить. Если процесс начинается на цифру, то остановить его. В файле delete_processes.txt дописать имя закрытого процесса',
'Дописать в файл. describe: Дописывает текст в конец указанного текстового или json-файла..Блок дописывает текст в конец указанного текстового или json-файла..В конец текстового файла с расширением txt или json дописать текст\nПримеры\nДобавить в текстовый файл\nДописать текст в файл',
'Переключиться на процесс. describe: Блок позволяет подключиться к запущенному процессу «1С», для дальнейшего взаимодействия с программой..Если толстый клиент 1с открыт, но был свернут, этот блок может вернуть в фокус 1с предприятие. ',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 1024]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [3, 3]
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
1. Авторизация в 1С-веб |
Добавить фильтр 1С-веб. describe: Позволяет выбрать один или несколько вариантов для открытия страницы/переключения на страницу..Блок “Добавить фильтр 1С-веб” позволяет выбрать один или несколько вариантов для открытия страницы/переключения на страницу:Ссылка на страницу;Название страницы равно;Название страницы содержит;Название страницы не содержит.В разъем следует поместить текстовый блок с искомым названием/ссылкой..Открыть документ, справочник, отчет или любую другую форму в 1с предприятии в браузере. Нужно указать или навигационную ссылку или название формы |
1. открыть 1с |
Добавить фильтр 1С-веб. describe: Позволяет выбрать один или несколько вариантов для открытия страницы/переключения на страницу..Блок “Добавить фильтр 1С-веб” позволяет выбрать один или несколько вариантов для открытия страницы/переключения на страницу:Ссылка на страницу;Название страницы равно;Название страницы содержит;Название страницы не содержит.В разъем следует поместить текстовый блок с искомым названием/ссылкой..Открыть документ, справочник, отчет или любую другую форму в 1с предприятии в браузере. Нужно указать или навигационную ссылку или название формы |
1. открыть 1с. Авторизоваться |
Добавить фильтр 1С-веб. describe: Позволяет выбрать один или несколько вариантов для открытия страницы/переключения на страницу..Блок “Добавить фильтр 1С-веб” позволяет выбрать один или несколько вариантов для открытия страницы/переключения на страницу:Ссылка на страницу;Название страницы равно;Название страницы содержит;Название страницы не содержит.В разъем следует поместить текстовый блок с искомым названием/ссылкой..Открыть документ, справочник, отчет или любую другую форму в 1с предприятии в браузере. Нужно указать или навигационную ссылку или название формы |
GISTEmbedLoss with these parameters:{'guide': SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
(1): Pooling({'word_embedding_dimension': 1024, '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})
(2): Normalize()
), 'temperature': 0.03}
per_device_train_batch_size: 4learning_rate: 1e-05num_train_epochs: 50dataloader_drop_last: Truebatch_sampler: no_duplicatesoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: noprediction_loss_only: Trueper_device_train_batch_size: 4per_device_eval_batch_size: 8per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 1e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 50max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_ratio: 0.0warmup_steps: 0log_level: passivelog_level_replica: warninglog_on_each_node: Truelogging_nan_inf_filter: Truesave_safetensors: Truesave_on_each_node: Falsesave_only_model: Falserestore_callback_states_from_checkpoint: Falseno_cuda: Falseuse_cpu: Falseuse_mps_device: Falseseed: 42data_seed: Nonejit_mode_eval: Falseuse_ipex: Falsebf16: Falsefp16: Falsefp16_opt_level: O1half_precision_backend: autobf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonelocal_rank: 0ddp_backend: Nonetpu_num_cores: Nonetpu_metrics_debug: Falsedebug: []dataloader_drop_last: Truedataloader_num_workers: 0dataloader_prefetch_factor: Nonepast_index: -1disable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Falseignore_data_skip: Falsefsdp: []fsdp_min_num_params: 0fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}fsdp_transformer_layer_cls_to_wrap: Noneaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}deepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torchoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falsedataloader_pin_memory: Truedataloader_persistent_workers: Falseskip_memory_metrics: Trueuse_legacy_prediction_loop: Falsepush_to_hub: Falseresume_from_checkpoint: Nonehub_model_id: Nonehub_strategy: every_savehub_private_repo: Nonehub_always_push: Falsegradient_checkpointing: Falsegradient_checkpointing_kwargs: Noneinclude_inputs_for_metrics: Falseinclude_for_metrics: []eval_do_concat_batches: Truefp16_backend: autopush_to_hub_model_id: Nonepush_to_hub_organization: Nonemp_parameters: auto_find_batch_size: Falsefull_determinism: Falsetorchdynamo: Noneray_scope: lastddp_timeout: 1800torch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Nonedispatch_batches: Nonesplit_batches: Noneinclude_tokens_per_second: Falseinclude_num_input_tokens_seen: Falseneftune_noise_alpha: Noneoptim_target_modules: Nonebatch_eval_metrics: Falseeval_on_start: Falseuse_liger_kernel: Falseeval_use_gather_object: Falseaverage_tokens_across_devices: Falseprompts: Nonebatch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportional@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",
}
@misc{solatorio2024gistembed,
title={GISTEmbed: Guided In-sample Selection of Training Negatives for Text Embedding Fine-tuning},
author={Aivin V. Solatorio},
year={2024},
eprint={2402.16829},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
Base model
intfloat/multilingual-e5-large-instruct