/ Модель

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

Лицензия
Apache 2.0
Архитектура
nucengram · dense
Библиотека
transformers
Опубликована
9 июл 2026

NucEngram

Заполнение пропусковТекст → текст3 профессии

NucEngram — модель ModernBERT для заполнения масок и получения контекстных представлений последовательностей ДНК длиной до 8192 нуклеотидов.

27скачиваний за 30 дней0лайковвеса обновлены9 июл 2026

Бенчмарки

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

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

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

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

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

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

FreakingPotato/NucEngram — геномная языковая модель для анализа последовательностей ДНК, разработанная автором репозитория FreakingPotato. Это символьная модель на основе энкодера ModernBERT, обученная предсказывать замаскированные нуклеотиды. Она принимает последовательности из символов A, C, G, T и N и формирует контекстные векторные представления для каждого нуклеотида. Контекстное окно составляет до 8192 нуклеотидов; доступны варианты разного размера, включая mini (~150 млн параметров), base (~229 млн) и pro (~364 млн).

Модель подходит для заполнения масок и извлечения признаков для классификации промоторов, сайтов сплайсинга, энхансеров и других регуляторных элементов, а также для предсказания свойств последовательностей; извлечённые представления можно использовать замороженными или дообучать. Для загрузки пользовательской архитектуры требуется trust_remote_code=True. Лицензия — Apache-2.0.

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

  • заполнение замаскированных нуклеотидов в последовательности ДНК
  • извлечение признаков для классификации промоторов
  • классификация сайтов сплайсинга
  • классификация энхансеров и регуляторных элементов
  • предсказание свойств геномных последовательностей

Ограничения

Модель рассчитана на символьные последовательности ДНК из алфавита A/C/G/T/N и не предназначена для непосредственной обработки естественного языка. Для загрузки пользовательской архитектуры требуется включить trust_remote_code=True.

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

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

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

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

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

Открыть на Hugging Face

NucEngram

A genomic language model (GLM) for DNA sequences. It is a character-level (single-nucleotide) model over the alphabet A / C / G / T / N, pretrained with masked language modeling on genomic sequence, built on a ModernBERT encoder with an 8192-nucleotide context window.

It produces a per-nucleotide contextual embedding that you can pool and use as features for downstream genomics tasks — promoter / splice-site / enhancer / regulatory-element classification, sequence property prediction, etc. — either as a frozen feature extractor or by fine-tuning.

The custom architecture ships with the repo, so load it with trust_remote_code=True.

Available sizes

Four sizes are released. They share the same architecture, tokenizer and 8192-nt context and differ only in the transformer's width (hidden size) and depth (layers) — i.e. capacity and compute:

varianthiddenlayersheadsparametersdownloadhow to load
mini38486~150M0.60 GBsubfolder="mini"
base5122216~229M0.92 GB(default — repo root)
pro7682412~364M1.46 GBsubfolder="pro"
max10242416~542M2.17 GBsubfolder="max"

Rule of thumb: mini is the fastest / lightest and a good default for large screens or limited GPU memory; max gives the strongest representations at the highest compute cost; base / pro sit in between. Same API for all.

from transformers import AutoModel

# base (default, repo root)
base = AutoModel.from_pretrained("FreakingPotato/NucEngram", trust_remote_code=True)

# any other size via subfolder
mini = AutoModel.from_pretrained("FreakingPotato/NucEngram", subfolder="mini", trust_remote_code=True)
pro  = AutoModel.from_pretrained("FreakingPotato/NucEngram", subfolder="pro",  trust_remote_code=True)
maxm = AutoModel.from_pretrained("FreakingPotato/NucEngram", subfolder="max",  trust_remote_code=True)

Install

pip install "transformers>=4.44" torch safetensors

Quick start — embeddings

from transformers import AutoModel

model = AutoModel.from_pretrained("FreakingPotato/NucEngram",
                                  trust_remote_code=True).eval()

# convenience helper: sequence(s) -> pooled embedding [B, hidden]
emb = model.embed(["ACGTACGTACGTGGTAAGT", "TTGCCGCGCGATCGATCG"])
print(emb.shape)   # torch.Size([2, 512])   (512 = base hidden size)

Per-nucleotide hidden states (for token-level tasks):

ids, attention_mask = model.encode("ACGT...")     # char-level tokenizer, pad id 0
out = model(ids, attention_mask)
h = out.last_hidden_state                          # [B, T, hidden]

Downstream task — fine-tuning

Add a pooling + linear head and fine-tune (or freeze base for linear probing). Swap the subfolder= argument to choose a size:

import torch, torch.nn as nn
from transformers import AutoModel

class SequenceClassifier(nn.Module):
    def __init__(self, n_classes, size=None, freeze_base=False):
        super().__init__()
        kw = {"trust_remote_code": True}
        if size:                       # None -> base (root); else "mini"/"pro"/"max"
            kw["subfolder"] = size
        self.base = AutoModel.from_pretrained("FreakingPotato/NucEngram", **kw)
        hidden = self.base.config.hidden_size
        if freeze_base:
            for p in self.base.parameters():
                p.requires_grad_(False)
        self.head = nn.Linear(hidden, n_classes)

    def forward(self, input_ids, attention_mask):
        h = self.base(input_ids, attention_mask).last_hidden_state   # [B, T, hidden]
        m = attention_mask.unsqueeze(-1).float()
        pooled = (h * m).sum(1) / m.sum(1).clamp(min=1.0)            # mean-pool
        return self.head(pooled)

clf = SequenceClassifier(n_classes=2, size="mini").train()
ids, am = clf.base.encode(["ACGT...", "GGGT..."])   # your batch of sequences
logits = clf(ids, am)
# ... standard cross-entropy training loop on your labelled dataset ...

For masked-LM scoring / filling:

from transformers import AutoModelForMaskedLM
mlm = AutoModelForMaskedLM.from_pretrained("FreakingPotato/NucEngram",
                                           trust_remote_code=True).eval()
ids, am = mlm.encode("ACGTACGT")
logits = mlm(ids, am).logits        # [B, T, 9] over A/C/G/T/N + special tokens

Details

BackboneModernBERT encoder (see the size table above)
Contextup to 8192 nucleotides
Vocabulary9 tokens (A, C, G, T, N + pad/bos/eos/mask), char-level
Attentionsdpa by default (no flash-attn required)
Precisionfp32 weights (cast with .half() / .bfloat16() as you like)

Input sequences are uppercase DNA strings; the built-in encode() maps characters to ids and pads with id 0. Use attention_mask to ignore padding.

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

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

GPU в ailist

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

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

Модели нужен код из репозитория; автор пока не в списке доверенных организаций.

Класс архитектуры
NucEngramModel
Ревизия весов
ad5b35f

0 моделей