/ Модель

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

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

DroidDetect-Large

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

Классификатор DroidDetect-Large определяет, написан ли код человеком, сгенерирован или доработан ИИ либо изменён для обхода обнаружения.

53скачиваний за 30 дней2лайкавеса обновлены8 авг 2025

Бенчмарки

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

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

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

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

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

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

DroidDetect-Large — модель классификации текста от project-droid, дообученная на базе answerdotai/ModernBERT-large для обнаружения происхождения программного кода. Она относит фрагменты к одному из четырёх классов: написанный человеком, сгенерированный машиной, отредактированный ИИ или adversarial-код, изменённый для затруднения обнаружения. Модель обучена на отфильтрованной части набора DroidCollection; в обучении использовались Cross-Entropy Loss и Batch-Hard Triplet Loss, помогающий разделять представления классов.

Модель принимает текст кода и выдаёт метку класса; её можно применять для анализа происхождения кода и оценки результатов генерации или доработки кода ИИ. Базовая ModernBERT-large — англоязычный двунаправленный энкодер на 395 млн параметров. Репозиторий содержит веса PyTorch, лицензия — Apache-2.0. README не уточняет поддерживаемые языки программирования, длину контекста или качество на независимых данных.

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

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

Ограничения

Карточка не сообщает оценок качества на независимых тестах или поддерживаемых языков программирования. Четыре метки отражают категории из обучающего набора и не гарантируют точного определения авторства для произвольного кода.

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

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

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

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

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

Открыть на Hugging Face

DroidDetect-Large

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

The model was trained on the DroidCollection dataset. It's designed as a 4-class 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-large
  • Loss Function: Total Loss = CrossEntropyLoss + 0.1 * TripletLoss
  • Dataset: Filtered training set of the DroidCollection.

Label Mapping

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

{
  "0": "HUMAN_GENERATED",
  "1": "MACHINE_GENERATED",
  "2": "MACHINE_REFINED",
  "3": "MACHINE_GENERATED_ADVERSARIAL",
}

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
Ревизия весов
ea7b683

0 моделей