/ Модель

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

Контекст
8 192 токена
Лицензия
Apache 2.0
Архитектура
custom_model · dense
Базовая модель
ModernBERT-base
Опубликована
26 мая 2025

DroidDetect-Base-Binary

Классификация текстаТекст → label3 профессии

Дообученный на DroidCollection классификатор определяет, написан ли код человеком или сгенерирован ИИ.

153скачиваний за 30 дней0лайковвеса обновлены16 июн 2025

Бенчмарки

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

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

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

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

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

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

DroidDetect-Base-Binary — модель классификации текста от project-droid, дообученная на answerdotai/ModernBERT-base для различения кода, написанного человеком, и кода, сгенерированного ИИ. Она обучена на отфильтрованной выборке DroidCollection и предсказывает один из двух классов: HUMAN_GENERATED или MACHINE_GENERATED.

При обучении использовалась комбинация Cross-Entropy Loss и Batch-Hard Triplet Loss: дополнительная контрастивная составляющая помогает разделять представления двух классов. Модель предназначена для автоматической проверки фрагментов кода; базовая ModernBERT-base — англоязычный энкодер BERT-типа на 149 млн параметров. Репозиторий содержит веса PyTorch, лицензия — Apache-2.0.

Классификатор различает только два заданных класса и не объясняет, какие признаки повлияли на результат. Его предсказания не следует считать гарантированным доказательством авторства кода.

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

  • проверка фрагментов кода на генерацию ИИ
  • предварительный анализ кода при проверке домашних заданий
  • фильтрация кода для последующего ручного аудита
  • сравнение доли человеческого и машинного кода в наборе примеров

Ограничения

Модель выдаёт только один из двух классов и не предоставляет объяснений предсказания; результат классификации не является достоверным доказательством авторства. Языки программирования и качество на разных языках в предоставленных данных не описаны.

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

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

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

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

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

Открыть на Hugging Face

DroidDetect-Base

This is a text classification model based on answerdotai/ModernBERT-base, fine-tuned to distinguish between human-written and AI-generated code.

The model was trained on the DroidCollection dataset. It's designed as a binary classifier to address the core task of AI code detection.

A key feature of this model is its training objective, which combines standard Cross-Entropy Loss with a Batch-Hard Triplet Loss. This contrastive loss component encourages the model to learn more discriminative embeddings by pushing representations of human vs. machine code further apart in the vector space.


Model Details

  • Base Model: answerdotai/ModernBERT-base
  • Loss Function: Total Loss = CrossEntropyLoss + 0.1 * TripletLoss
  • Dataset: Filtered training set of the DroidCollection.

Label Mapping

The model predicts one of two classes. The mapping from ID to label is as follows:

{
  "0": "HUMAN_GENERATED",
  "1": "MACHINE_GENERATED"
}

Model Code

The following code can be used for reproducibility:

TEXT_EMBEDDING_DIM = 768


class TLModel(nn.Module):
    def __init__(self, text_encoder, projection_dim=128, num_classes=NUM_CLASSES, class_weights=None):
        super().__init__()
        self.text_encoder = text_encoder
        self.num_classes = num_classes
        text_output_dim = TEXT_EMBEDDING_DIM
        self.additional_loss = losses.BatchHardSoftMarginTripletLoss(self.text_encoder)

        self.text_projection = nn.Linear(text_output_dim, projection_dim)
        self.classifier = nn.Linear(projection_dim, num_classes)
        self.class_weights = class_weights

    def forward(self, labels=None, input_ids=None, attention_mask=None):
        actual_labels = labels
        sentence_embeddings = self.text_encoder(input_ids=input_ids, attention_mask=attention_mask).last_hidden_state
        sentence_embeddings = sentence_embeddings.mean(dim=1)
        projected_text = F.relu(self.text_projection(sentence_embeddings))
        logits = self.classifier(projected_text)
        loss = None
        cross_entropy_loss = None
        contrastive_loss = None

        if actual_labels is not None:
            loss_fct_ce = nn.CrossEntropyLoss(weight=self.class_weights.to(logits.device) if self.class_weights is not None else None)
            cross_entropy_loss = loss_fct_ce(logits.view(-1, self.num_classes), actual_labels.view(-1))
            contrastive_loss = self.additional_loss.batch_hard_triplet_loss(embeddings=projected_text, labels=actual_labels)
            lambda_contrast = 0.1
            loss = cross_entropy_loss + lambda_contrast * contrastive_loss


        output = {"logits": logits, "fused_embedding": projected_text}
        if loss is not None:
            output["loss"] = loss
        if cross_entropy_loss is not None:
             output["cross_entropy_loss"] = cross_entropy_loss
        if contrastive_loss is not None:
             output["contrastive_loss"] = contrastive_loss

        return output

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

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

GPU в ailist

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

Нельзя запустить

Архитектура custom_model неизвестна transformers в образе рантайма.

Класс архитектуры
Model
Ревизия весов
4328ba9

0 моделей