🧠 RUcover Lite Mini

1. О модели

RUcover Lite Mini — это лёгкая авторегрессионная языковая модель на русском языке (≈10 млн параметров), основанная на архитектуре Transformer Decoder с улучшениями: Rotary Positional Embeddings (RoPE), RMSNorm и SwiGLU.

Модель обучена на 4.3 ГБ текстового корпуса, включающего:

  • Русскую классическую и современную прозу
  • Новостные статьи
  • Тысячи диалогов (датасет RLDD)
  • Научно-популярные и исторические тексты

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


2. Возможности

Область Что умеет
✍️ Генерация текста Связные рассказы, стихи, новости, ответы на вопросы
💬 Диалог Поддерживает беседу (вопрос-ответ, реплики)
Скорость ~40–60 токенов/сек на CPU, до 200+ токенов/сек на GPU
🧠 Память Около 500 МБ RAM в режиме инференса
🌍 Язык Только русский (словарь 32000 BPE-токенов)
🔓 Открытость Полный код и веса под лицензией MIT

3. Быстрый старт

Установка

pip install transformers torch

Пример использования

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("ваш_профиль/RUcover-Lite-Mini")
model = AutoModelForCausalLM.from_pretrained("ваш_профиль/RUcover-Lite-Mini")

text = "Привет, как дела?"
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(**inputs, max_length=50)

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

3. Технические характеристики

Параметр Значение
Архитектура: Transformer Decoder (RoPE + SwiGLU + RMSNorm)
Параметры: ~10 млн
Слои: 6
Размер эмбеддинга: 384
Голов внимания: 6
Размер FFN: 1536
Длина контекста: 1024 токена
Словарь: 32000 (BPE)
Функция активации: SwiGLU
Нормализация: RMSNorm
Позиционное кодирование: RoPE

4. Схема работы

[Входной текст]
      │
      ▼
┌─────────────┐
│ BPE токенизатор │ → [101, 452, 890, ...]
└─────────────┘
      │
      ▼
┌─────────────┐
│ Token Embedding │ → [batch, seq_len, 384]
└─────────────┘
      │
      ▼
┌─────────────────────────────────────────┐
│           6× Transformer Block          │
│  ┌───────────┐    ┌───────────────┐    │
│  │ MultiHead │    │ RMSNorm       │    │
│  │  (RoPE)   │    │ + Residual    │    │
│  └───────────┘    └───────────────┘    │
│         │                               │
│         ▼                               │
│  ┌───────────┐    ┌───────────────┐    │
│  │  SwiGLU   │    │ RMSNorm       │    │
│  │   FFN     │    │ + Residual    │    │
│  └───────────┘    └───────────────┘    │
└─────────────────────────────────────────┘
      │
      ▼
┌─────────────┐
│  RMSNorm    │
└─────────────┘
      │
      ▼
┌─────────────┐
│ Language    │ → [vocab_size] probabilities
│   Head      │
└─────────────┘
      │
      ▼
  [следующий токен] → повторяется авторегрессивно

Краткий алгоритм:

  1. Токенизируем входной текст.
  2. Превращаем токены в векторы (эмбеддинги).
  3. Прогоняем через 6 слоёв внимания и FFN (с остаточными связями и нормализациями).
  4. Получаем распределение вероятностей следующего токена.
  5. Выбираем токен (жадно или случайно с температурой).
  6. Добавляем его к входу и повторяем шаги 2–6 до нужной длины.

5. Планы на будущее

  • Увеличение размера модели до 50–100 млн параметров.
  • Дообучение на корпусе Taiga (> 2 ГБ).
  • Поддержка инструкционного формата (instruction tuning).
  • Квантизация (int8) для мобильных устройств.
  • Выпуск готового Gradio-чата на Hugging Face Spaces.
  • API для удалённого вызова (через Inference Endpoints).
  • Умение писать код P.S. Все это ждите в RuCover_lite_mini CODE Edition или RuCover_nano

6. Интеграция с Hugging Face API и локальное использование

6.1 Установка зависимостей

pip install torch tokenizers

6.2 Загрузка модели и токенизатора из этого репозитория

import torch
from tokenizers import Tokenizer
from model import RUcoverLiteMini
from config import RUcoverConfig

# Загрузка токенизатора
tokenizer = Tokenizer.from_pretrained("ваш_логин/RUcover-Lite-Mini")

# Загрузка конфигурации и модели
config = RUcoverConfig()
model = RUcoverLiteMini(config)

# Загрузка весов
model.load_state_dict(torch.load("rucover_lite_mini.pt", map_location="cpu"))
model.eval()

6.3 Функция генерации

def generate_text(prompt, max_new_tokens=80, temperature=0.8, top_k=40):
    input_ids = tokenizer.encode(prompt).ids
    input_tensor = torch.tensor([input_ids])
    
    for _ in range(max_new_tokens):
        with torch.no_grad():
            logits = model(input_tensor)
        logits = logits[0, -1, :] / temperature
        
        # Top-k фильтрация
        top_k_vals, top_k_idx = torch.topk(logits, top_k)
        logits = torch.full_like(logits, -float('inf'))
        logits[top_k_idx] = top_k_vals
        
        probs = torch.softmax(logits, dim=-1)
        next_token = torch.multinomial(probs, 1)
        input_tensor = torch.cat([input_tensor, next_token.unsqueeze(0)], dim=1)
        
    return tokenizer.decode(input_tensor[0].tolist())

6.4 Пример использования

prompt = "Почему небо голубое?"
answer = generate_text(prompt, max_new_tokens=50)
print(answer)

📄 Лицензия

MIT License — свободно используйте, модифицируйте и распространяйте.


🙏 Благодарности

  • Hugging Face за экосистему.
  • Авторам датасетов RLDD, Taiga, Lenta, Fontanka, Arzamas.
  • Сообществу российских NLP-разработчиков.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support