加载中…
加载中…
This is a sentence-transformers model trained on the cornstack_python, cornstack_python_pairs, codesearchnet, codesearchnet_pairs and solyanka_qa datasets. It maps sentences & paragraphs to a 768-dimensional dense vector space.
Model can be used for text-to-code, code-to-text retrieval tasks where text is in Russian/English and code is in Python/Java/Javascript/Go/Php/Ruby. Queries, documents also can be mix of natural language text and code. The quality of the model in code-to-code tasks wasn't measured.
SentenceTransformer(
(0): Transformer({'max_seq_length': 8192, 'do_lower_case': False, 'architecture': 'ModernBertModel'})
(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})
)
First install the Sentence Transformers library:
pip install -U sentence-transformers
Then you can load this model and run inference.
import torch
from sentence_transformers import SentenceTransformer, util
device = "cuda" if torch.cuda.is_available() else "cpu"
model = SentenceTransformer("fyaronskiy/code_retriever_ru_en").to(device)
queries_ru = [
"Напиши функцию на Python, которая рекурсивно вычисляет факториал числа.",
"Как проверить, является ли строка палиндромом?",
"Объедини два отсортированных списка в один отсортированный список."
]
corpus_ru = [
# Релевантный для Q1
"""def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)""",
# Hard negative для Q1
"""def sum_recursive(n):
if n == 0:
return 0
return n + sum_recursive(n - 1)""",
# Релевантный для Q2
"""def is_palindrome(s: str) -> bool:
s = s.lower().replace(" ", "")
return s == s[::-1]""",
# Hard negative для Q2
"""def reverse_string(s: str) -> str:
return s[::-1]""",
# Релевантный для Q3
"""def merge_sorted_lists(a, b):
result = []
i = j = 0
while i < len(a) and j < len(b):
if a[i] < b[j]:
result.append(a[i])
i += 1
else:
result.append(b[j])
j += 1
result.extend(a[i:])
result.extend(b[j:])
return result""",
# Hard negative для Q3
"""def add_lists(a, b):
return [x + y for x, y in zip(a, b)]"""
]
doc_embeddings = model.encode(corpus_ru, convert_to_tensor=True, device=device)
query_embeddings = model.encode(queries_ru, convert_to_tensor=True, device=device)
# Выполняем поиск по каждому запросу
for i, query in enumerate(queries_ru):
scores = util.cos_sim(query_embeddings[i], doc_embeddings)[0]
best_idx = torch.argmax(scores).item()
print(f"\nЗапрос {i+1}: {query}")
print('Скоры всех документов в корпусе: ', scores)
print(f"Наиболее подходящий документ (Скор={scores[best_idx]:.4f}):\n{corpus_ru[best_idx]}")
Model was trained with Matryoshka Loss with dims: 768, 512, 256, 128, 64. So for decreasing memory for your vector databaset and make inference faster you can truncate embeddings.
To do this you need to initialize model as follows:
matryoshka_dim = 128
model = SentenceTransformer("fyaronskiy/code_retriever_ru_en", truncate_dim=matryoshka_dim).to(device)
Perfomance on code retrieval benchmark ruCoIR:
| code_retriever_ru_en | code_retriever_ru_en_512d | code_retriever_ru_en_256d | code_retriever_ru_en_128d | code_retriever_ru_en_64d | |
|---|---|---|---|---|---|
| CodeSearchNet-python. | 0.91 | 0.9 | 0.9 | 0.88 | 0.84 |
| codefeedback-st. | 0.81 | 0.8 | 0.79 | 0.76 | 0.7 |
| CodeSearchNet-php. | 0.83 | 0.83 | 0.82 | 0.8 | 0.75 |
| stackoverflow-qa. | 0.81 | 0.8 | 0.8 | 0.77 | 0.72 |
| CodeSearchNet-ruby. | 0.8 | 0.8 | 0.79 | 0.74 | 0.72 |
| cosqa. | 0.25 | 0.24 | 0.24 | 0.21 | 0.19 |
| CodeSearchNet-go. | 0.76 | 0.75 | 0.74 | 0.74 | 0.67 |
| apps. | 0.14 | 0.13 | 0.12 | 0.11 | 0.07 |
| CodeSearchNet-java. | 0.74 | 0.74 | 0.73 | 0.71 | 0.67 |
| CodeSearchNet-javascript. | 0.57 | 0.56 | 0.54 | 0.52 | 0.47 |
| mean | 0.66 | 0.66 | 0.65 | 0.62 | 0.58 |
InformationRetrievalEvaluator| Metric | Value |
|---|---|
| cosine_accuracy@1 | 0.8684 |
| cosine_accuracy@3 | 0.9439 |
| cosine_accuracy@5 | 0.9566 |
| cosine_accuracy@10 | 0.9668 |
| cosine_precision@1 | 0.8684 |
| cosine_precision@3 | 0.3146 |
| cosine_precision@5 | 0.1913 |
| cosine_precision@10 | 0.0967 |
| cosine_recall@1 | 0.8684 |
| cosine_recall@3 | 0.9439 |
| cosine_recall@5 | 0.9566 |
| cosine_recall@10 | 0.9668 |
| cosine_ndcg@10 | 0.9224 |
| cosine_mrr@10 | 0.9076 |
| cosine_map@100 | 0.9083 |
InformationRetrievalEvaluator| Metric | Value |
|---|---|
| cosine_accuracy@1 | 0.8742 |
| cosine_accuracy@3 | 0.9425 |
| cosine_accuracy@5 | 0.9549 |
| cosine_accuracy@10 | 0.9644 |
| cosine_precision@1 | 0.8742 |
| cosine_precision@3 | 0.3142 |
| cosine_precision@5 | 0.191 |
| cosine_precision@10 | 0.0964 |
| cosine_recall@1 | 0.8742 |
| cosine_recall@3 | 0.9425 |
| cosine_recall@5 | 0.9549 |
| cosine_recall@10 | 0.9644 |
| cosine_ndcg@10 | 0.9234 |
| cosine_mrr@10 | 0.9098 |
| cosine_map@100 | 0.9105 |
ru_query, document, negative_0, negative_1, negative_2, negative_3, negative_4, negative_5, negative_6, negative_7, negative_8, negative_9, negative_10, negative_11, negative_12, negative_13, negative_14, and negative_15| ru_query | document | negative_0 | negative_1 | negative_2 | negative_3 | negative_4 | negative_5 | negative_6 | negative_7 | negative_8 | negative_9 | negative_10 | negative_11 | negative_12 | negative_13 | negative_14 | negative_15 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| type | string | string | string | string | string | string | string | string | string | string | string | string | string | string | string | string | string | string |
| details |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ru_query | document | negative_0 | negative_1 | negative_2 | negative_3 | negative_4 | negative_5 | negative_6 | negative_7 | negative_8 | negative_9 | negative_10 | negative_11 | negative_12 | negative_13 | negative_14 | negative_15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
установите значение business_id сообщения данных в конкретное значение |
def step_impl_the_ru_is_set_to(context, business_id): |
def business_id(self, business_id): |
def business_phone(self, business_phone): |
def business_phone_number(self, business_phone_number): |
def bus_ob_id(self, bus_ob_id): |
def bus_ob_id(self, bus_ob_id): |
def _set_id(self, value): |
def business_email(self, business_email): |
def mailing_id(self, val: str): |
def message_id(self, val: str): |
def business_model(self, business_model): |
def business_account(self, business_account): |
def update_business(current_user, businessId): |
def set_company_id_value(self, company_id_value): |
def id(self, value): |
def set_bribe(self, bribe_amount): |
|
self.bribe = bribe_amount |
def business_owner(self, business_owner): |
||||||||||||||||
Установить состояние правил sid |
def set_state_sid_request(ruleset_name, sid): |
def sid(self, sid): |
def set_state(self,s): |
def set_state(self, state: int): |
def setstate(self, state): |
def set_rule(self, rule): |
def _set_state(self, state): |
def set_state( self ): |
def set_ident(self, new_ident: int): |
def set_state(self, state): |
def setstate(self, state): |
def setstate(self, state): |
def state_id(self, state_id): |
def set_state(self, state: int): |
def set_domain_sid(self, sid): |
def set_state(self,state): |
def set_srid(self, srid: ir.IntegerValue) -> GeoSpatialValue: |
Отправить события sid в ruleset |
def post_sid_events(ruleset_name, sid): |
def post_events(ruleset_name): |
def set_state_sid_request(ruleset_name, sid): |
def sid(self, sid): |
def post(self, request, *args, **kwargs): |
def informed_consent_on_post_save(sender, instance, raw, created, **kwargs): |
def post_event(self, event): |
||||||||||
from evennia.scripts.models import ScriptDB |
|||||||||||||||||
if event.public_event: |
|||||||||||||||||
event_manager = ScriptDB.objects.get(db_key="Event Manager") |
|||||||||||||||||
event_manager.post_event(event, self.owner.player, event.display()) |
def post(self, event, *args, **kwargs): |
def post(self, request): |
def register_to_event(request): |
def setFilterOnRule(request): |
def store_event(self, violations): |
def test_post_event_on_schedule_page(self): |
def _push(self, server): |
def post(self, slug = None, eid = None): |
def events(self): |
def post(self): |
MatryoshkaLoss with these parameters:{
"loss": "CachedMultipleNegativesRankingLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
en_query, ru_query, and label| en_query | ru_query | label | |
|---|---|---|---|
| type | string | string | float |
| details |
|
|
|
| en_query | ru_query | label |
|---|---|---|
set the message data business_id to a specific value |
установите значение business_id сообщения данных в конкретное значение |
1.0 |
Set ruleset state sid |
Установить состояние правил sid |
1.0 |
Post sid events to the ruleset |
Отправить события sid в ruleset |
1.0 |
MatryoshkaLoss with these parameters:{
"loss": "CoSENTLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
ru_func_documentation_string and func_code_string| ru_func_documentation_string | func_code_string | |
|---|---|---|
| type | string | string |
| details |
|
|
| ru_func_documentation_string | func_code_string |
|---|---|
Мультипроцессинг-целевой объект для устройства очереди zmq |
def zmq_device(self): |
Чисто завершите работу сокета роутера |
def close(self): |
До форка нам нужно создать устройство zmq роутера |
def pre_fork(self, process_manager): |
MatryoshkaLoss with these parameters:{
"loss": "CachedMultipleNegativesRankingLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
en_func_documentation_string, ru_func_documentation_string, and label| en_func_documentation_string | ru_func_documentation_string | label | |
|---|---|---|---|
| type | string | string | float |
| details |
|
|
|
| en_func_documentation_string | ru_func_documentation_string | label |
|---|---|---|
Multiprocessing target for the zmq queue device |
Мультипроцессинг-целевой объект для устройства очереди zmq |
1.0 |
Cleanly shutdown the router socket |
Чисто завершите работу сокета роутера |
1.0 |
Pre-fork we need to create the zmq router device |
До форка нам нужно создать устройство zmq роутера |
1.0 |
MatryoshkaLoss with these parameters:{
"loss": "CoSENTLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
Как происходит взаимодействие нескольких языков программирования? Понятно, что большинство (если не все) крупные энтерпрайз сервисы, приложения и тд. (не только веб) написаны с использованием не одного языка программирования, а нескольких. И эти составные части, написанные на разных языках, как-то взаимодействуют между собой (фронт, бизнес-логика, еще что-то). |
Несколько языков могут сосуществовать как в рамках одного процесса, так и в рамках нескольких. |
Слэши и ковычки после использования stringify Есть подобный скрипт: |
Может сразу сделать валидный JSON |
Оптимизация поиска числа в списке Есть функция. Она принимает число от 1 до 9 (мы ищем, есть ли оно в списке), и список, в котором мы его ищем) |
> |
MatryoshkaLoss with these parameters:{
"loss": "CachedMultipleNegativesRankingLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
ru_func_documentation_string and func_code_string| ru_func_documentation_string | func_code_string | |
|---|---|---|
| type | string | string |
| details |
|
|
| ru_func_documentation_string | func_code_string |
|---|---|
Обучить модель deepq. |
def learn(env, |
Сохранить модель в pickle, расположенный по пути |
def save_act(self, path=None): |
CNN из статьи Nature. |
def nature_cnn(unscaled_images, **conv_kwargs): |
MatryoshkaLoss with these parameters:{
"loss": "CachedMultipleNegativesRankingLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
en_func_documentation_string and func_code_string| en_func_documentation_string | func_code_string | |
|---|---|---|
| type | string | string |
| details |
|
|
| en_func_documentation_string | func_code_string |
|---|---|
Train a deepq model. |
def learn(env, |
Save model to a pickle located at |
def save_act(self, path=None): |
CNN from Nature paper. |
def nature_cnn(unscaled_images, **conv_kwargs): |
MatryoshkaLoss with these parameters:{
"loss": "CachedMultipleNegativesRankingLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
en_func_documentation_string, ru_func_documentation_string, and label| en_func_documentation_string | ru_func_documentation_string | label | |
|---|---|---|---|
| type | string | string | float |
| details |
|
|
|
| en_func_documentation_string | ru_func_documentation_string | label |
|---|---|---|
Train a deepq model. |
Обучить модель deepq. |
1.0 |
Save model to a pickle located at |
Сохранить модель в pickle, расположенный по пути |
1.0 |
CNN from Nature paper. |
CNN из статьи Nature. |
1.0 |
MatryoshkaLoss with these parameters:{
"loss": "CoSENTLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
Atom IDE произвольное изменение строк Пользуюсь Atom IDE, установлены плагины для GIT'а, использую тему Material theme (может быть кому то это что то даст), в общем проблема такая, что в php файлах при сохранении файла, даже если я изменил всего один символ, он добавляет изменения очень странные,берет 2-3 строки (хз как выбирает) и удаляет их, а потом вставялет их же, без каких то либо изменений. При этом GIT фиксирует это изменение... |
Проблема заключалась в том, что все IDE испльзуют свой символ перехода на следующую строку, если в команде разработчики используют разные IDE, у которых разный перенос строки, то при сохранении файла чужие переносы строк будут заменяться на свои :) |
print() с частью текста и форматированием как переменная Python3 Есть повторяющаяся функция |
[code] |
Не получается перегрузить оператор присваивания в шаблонном классе Нужно перегрузить оператор присваивания в шаблонном классе, не могу понять, почему не работает стандартный синтаксис, при реализации выдает эту ошибку (/home/anton/Programming/tree/tree.h:96: ошибка: overloaded 'operator=' must be a binary operator (has 1 parameter)). Объявление и реализация в одном .h файле. |
Ну надо указать, какому классу он принадлежит... А так вы пытались реализовать унарный оператор |
MatryoshkaLoss with these parameters:{
"loss": "CachedMultipleNegativesRankingLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
eval_strategy: stepsper_device_train_batch_size: 4per_device_eval_batch_size: 16gradient_accumulation_steps: 32learning_rate: 2e-05num_train_epochs: 2warmup_ratio: 0.1bf16: Trueresume_from_checkpoint: ../models/RuModernBERT-base_bs128_lr_2e-05_2nd_epoch/checkpoint-27400auto_find_batch_size: Truebatch_sampler: no_duplicatesoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: stepsprediction_loss_only: Trueper_device_train_batch_size: 4per_device_eval_batch_size: 16per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 32eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 2e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 2max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_ratio: 0.1warmup_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: Truefp16: 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: Falsedataloader_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: ../models/RuModernBERT-base_bs128_lr_2e-05_2nd_epoch/checkpoint-27400hub_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: Truefull_determinism: Falsetorchdynamo: Noneray_scope: lastddp_timeout: 1800torch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: 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: proportionalrouter_mapping: {}learning_rate_mapping: {}@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{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}
}
@misc{gao2021scaling,
title={Scaling Deep Contrastive Learning Batch Size under Memory Limited Setup},
author={Luyu Gao and Yunyi Zhang and Jiawei Han and Jamie Callan},
year={2021},
eprint={2101.06983},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@article{10531646,
author={Huang, Xiang and Peng, Hao and Zou, Dongcheng and Liu, Zhiwei and Li, Jianxin and Liu, Kay and Wu, Jia and Su, Jianlin and Yu, Philip S.},
journal={IEEE/ACM Transactions on Audio, Speech, and Language Processing},
title={CoSENT: Consistent Sentence Embedding via Similarity Ranking},
year={2024},
doi={10.1109/TASLP.2024.3402087}
}
deepvk/RuModernBERT-base