/ Модель

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

Контекст
8 192 токена
Параметры
149 млн
Лицензия
MIT
Архитектура
modernbert · dense
Базовая модель
ModernBERT-base
Библиотека
sentence-transformers
Опубликована
6 окт 2025

english_code_retriever

ЭмбеддингиТекст → embedding6 профессий

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

148скачиваний за 30 дней1лайквеса обновлены27 окт 2025

Бенчмарки

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

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

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

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

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

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

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

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

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

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

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

  • COIRCodeSearchNetRetrieval

    main_score

    Результат

    0,6227

    Общий результат 0,9815Общий результат 0,7741Общий результат 0,74
    MTEB

    Публичная таблицадругая ревизия

  • WikiSQLRetrieval

    main_score

    Результат

    0,8792

    MTEB

    Публичная таблицадругая ревизия

  • CodeSearchNetCCRetrieval

    main_score

    Результат

    0,4042

    Общий результат 0,4992Общий результат 0,4939Общий результат 0,4361
    MTEB

    Публичная таблицадругая ревизия

  • CodeEditSearchRetrieval

    main_score

    Результат

    0,2989

    Общий результат 0,4037Общий результат 0,4002Общий результат 0,3958
    MTEB

    Публичная таблицадругая ревизия

  • SyntheticText2SQL

    main_score

    Результат

    0,4279

    MTEB

    Публичная таблицадругая ревизия

  • CodeSearchNetRetrieval

    main_score

    Результат

    0,8058

    Общий результат 0,9453Общий результат 0,9051Общий результат 0,887
    MTEB

    Публичная таблицадругая ревизия

  • MBPPRetrieval

    main_score

    Результат

    0,7207

    MTEB

    Публичная таблицадругая ревизия

  • Code1Retrieval

    main_score

    Результат

    0,7536

    MTEB

    Публичная таблицадругая ревизия

  • HumanEvalRetrieval

    main_score

    Результат

    0,7182

    MTEB

    Публичная таблицадругая ревизия

  • StackOverflowQA

    main_score

    Результат

    0,5653

    MTEB

    Публичная таблицадругая ревизия

  • CodeFeedbackST

    main_score

    Результат

    0,5779

    MTEB

    Публичная таблицадругая ревизия

  • CodeTransOceanContest

    main_score

    Результат

    0,6068

    MTEB

    Публичная таблицадругая ревизия

  • JapaneseCode1Retrieval

    main_score

    Результат

    0,4659

    MTEB

    Публичная таблицадругая ревизия

  • CodeTransOceanDL

    main_score

    Результат

    0,3516

    MTEB

    Публичная таблицадругая ревизия

  • AppsRetrieval

    main_score

    Результат

    0,0804

    MTEB

    Публичная таблицадругая ревизия

  • CodeFeedbackMT

    main_score

    Результат

    0,4401

    MTEB

    Публичная таблицадругая ревизия

  • CosQA

    main_score

    Результат

    0,2556

    MTEB

    Публичная таблицадругая ревизия

  • FreshStackRetrieval

    main_score

    Результат

    0,183

    MTEB

    Публичная таблицадругая ревизия

  • DS1000Retrieval

    main_score

    Результат

    0,3242

    MTEB

    Публичная таблицадругая ревизия

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

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

english_code_retriever — модель Sentence Transformers, разработанная fyaronskiy на основе answerdotai/ModernBERT-base и дообученная на наборе code_search_net с функцией потерь MultipleNegativesRankingLoss. Она предназначена для поиска фрагментов кода по текстовому запросу и для ранжирования найденных результатов. Модель строит плотные векторы размерности 768 с mean pooling; релевантность можно оценивать косинусным сходством. Максимальная длина входной последовательности — 8192 токена, размер модели — 149 млн параметров.

Модель ориентирована на английский язык и поиск по коду; в карточке перечислены Python, Java, Go и PHP. README приводит результаты на бенчмарках RTEB и COIR, но они не гарантируют такого же качества на других данных. Модель распространяется по лицензии MIT.

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

  • поиск кода по описанию на естественном языке
  • поиск похожих фрагментов кода в репозитории
  • ранжирование результатов поиска по коду
  • подбор примеров кода для ответов RAG-системы

Ограничения

Модель ориентирована на английский язык и поиск по коду, поэтому качество для других языков и задач может быть ниже. Результаты бенчмарков из README не гарантируют качество на конкретных данных.

Для каких профессий подходит6

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

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

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

Открыть на Hugging Face

SentenceTransformer

This is a answerdotai/ModernBERT-base model trained on the code_search_net dataset with MultipleNegativesRankingLoss with in-batch negatives. Model can be used for code retrieval and reranking.

Perfomance on code retrieval benchmarks

RTEB

On 14.10.2025 the model is 6th on RTEB leaderbord among models with <500M parameters:

Perfomance per task:

ModelAppsRetrievalCode1Retrieval (Private)DS1000RetrievalFreshStackRetrievalHumanEvalRetrievalJapaneseCode1Retrieval (Private)MBPPRetrievalWikiSQLRetrieval
english_code_retriever8.0475.3632.4218.3071.8246.5972.0687.92

COIR:

ModelAppsRetrievalCOIRCodeSearchNetRetrievalCodeFeedbackMTCodeFeedbackSTCodeSearchNetCCRetrievalCodeTransOceanContestCodeTransOceanDLCosQAStackOverflowQASyntheticText2SQL
english_code_retriever8.0474.2344.0157.7942.7160.6835.1625.5656.5342.79

more information you cand find in MTEB leaderbord

Model Details

Model Description

  • Model Type: Sentence Transformer
  • Maximum Sequence Length: 8192 tokens
  • Output Dimensionality: 768
  • Similarity Function: Cosine Similarity
  • Mean pooling

Usage

Using is easy with Sentence Transformers.

Pay attention that model was trained with prefixes 'search_query' for queries and 'search_document' for docs with code. So using with prefixes will improve model retrieving abilities.

import torch
from sentence_transformers import SentenceTransformer, util

device = "cuda" if torch.cuda.is_available() else "cpu"
model = SentenceTransformer("fyaronskiy/english_code_retriever").to(device)

queries = [
    "Write a Python function that calculates the factorial of a number recursively.",
    "How to check if a given string reads the same backward and forward?",
    "Combine two sorted lists into a single sorted list."
]

corpus = [
    # Relevant for Q1
    """def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n-1)""",

    # Hard negative for Q1 (similar structure but computes sum)
    """def sum_recursive(n):
    if n == 0:
        return 0
    return n + sum_recursive(n-1)""",

    # Relevant for Q2
    """def is_palindrome(s: str) -> bool:
    s = s.lower().replace(" ", "")
    return s == s[::-1]""",

    # Hard negative for Q2 (string reverse but not palindrome check)
    """def reverse_string(s: str) -> str:
    return s[::-1]""",

    # Relevant for 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 for Q3 (similar iteration but sums two lists elementwise)
    """def add_lists(a, b):
    return [x + y for x, y in zip(a, b)]"""
]


doc_embeddings = model.encode(corpus, prompt_name='search_query', convert_to_tensor=True, device=device)
query_embeddings = model.encode(queries, prompt_name='search_document', convert_to_tensor=True, device=device)

# Compute cosine similarity and retrieve top-1
for i, query in enumerate(queries):
    scores = util.cos_sim(query_embeddings[i], doc_embeddings)[0]
    best_idx = torch.argmax(scores).item()
    print(f"\n Query {i+1}: {query}")
    print(f"Top-1 match (score={scores[best_idx]:.4f}):\n{corpus[best_idx]}")

''' Query 1: Write a Python function that calculates the factorial of a number recursively.
Top-1 match (score=0.5983):
def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n-1)

 Query 2: How to check if a given string reads the same backward and forward?
Top-1 match (score=0.4925):
def is_palindrome(s: str) -> bool:
    s = s.lower().replace(" ", "")
    return s == s[::-1]

 Query 3: Combine two sorted lists into a single sorted list.
Top-1 match (score=0.6524):
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
'''

Using with Transformers

import torch
from transformers import AutoTokenizer, AutoModel

device = "cuda" if torch.cuda.is_available() else "cpu"

model_name = "fyaronskiy/english_code_retriever"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name).to(device)
model.eval()



queries = [
"function of addition of two numbers",
"finding the maximum element in an array",
"sorting a list in ascending order"
]

corpus = [
    "def add(a, b): return a + b",
    "def find_max(arr): return max(arr)",
    "def sort_list(lst): return sorted(lst)"
]

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]  # (batch_size, seq_len, hidden_dim)
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return (token_embeddings * input_mask_expanded).sum(1) / input_mask_expanded.sum(1).clamp(min=1e-9)

def encode_texts(texts):
    encoded = tokenizer(
        texts,
        padding=True,
        truncation=True,
        return_tensors="pt",
        max_length=8192
    ).to(device)
    with torch.no_grad():
        model_output = model(**encoded)
    return mean_pooling(model_output, encoded["attention_mask"])

doc_embeddings = encode_texts(["search_document: " + document  for document in corpus])
query_embeddings = encode_texts(["search_query: " + query  for query in queries])

# Normalize embeddings for cosine similarity
doc_embeddings = torch.nn.functional.normalize(doc_embeddings, p=2, dim=1)
query_embeddings = torch.nn.functional.normalize(query_embeddings, p=2, dim=1)

# Compute cosine similarity and retrieve top-1
for i, query in enumerate(queries):
    scores = torch.matmul(query_embeddings[i], doc_embeddings.T)
    best_idx = torch.argmax(scores).item()
    print(f"\n Query {i+1}: {query}")
    print(f"Top-1 match (score={scores[best_idx]:.4f}):\n{corpus[best_idx]}")

''' Query 1: function of addition of two numbers
Top-1 match (score=0.6047):
def add(a, b): return a + b

 Query 2: finding the maximum element in an array
Top-1 match (score=0.7772):
def find_max(arr): return max(arr)

 Query 3: sorting a list in ascending order
Top-1 match (score=0.7389):
def sort_list(lst): return sorted(lst)
'''

Evaluation

Metrics

Information Retrieval

MetricValue
cosine_accuracy@10.8926
cosine_accuracy@30.9454
cosine_accuracy@50.9545
cosine_accuracy@100.9638
cosine_precision@10.8926
cosine_precision@30.3151
cosine_precision@50.1909
cosine_precision@100.0964
cosine_recall@10.8926
cosine_recall@30.9454
cosine_recall@50.9545
cosine_recall@100.9638
cosine_ndcg@100.9313
cosine_mrr@100.9206
cosine_map@1000.9212

Training Details

Training Dataset

code_search_net

  • Dataset: train part of code_search_net
  • Size: 1,880,853 training samples
  • queries - function docstrings in english, relevant document - code of function
  • negatives was sampled from batch
  • Distribution of programming languages:

image

Training Hyperparameters

Non-Default Hyperparameters

  • batch_size: 64
  • learning_rate: 2e-05
  • num_epochs: 2
  • warmup_ratio: 0.1

Framework Versions

  • Python: 3.10.11
  • Sentence Transformers: 5.1.0
  • Transformers: 4.52.3
  • PyTorch: 2.6.0+cu124
  • Accelerate: 1.10.0
  • Datasets: 3.6.0
  • Tokenizers: 0.21.4

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

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

GPU в ailist

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

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

Подбираем GPU…

Класс архитектуры
ModernBertModel
Ревизия весов
14807ee

0 моделей