Bormolom

Bormolom — малая языковая модель на базе GPT-2, полученная путём SFT-дообучения модели Vladniag/Bormokrut с помощью библиотеки TRL. Модель обучена выполнять три взаимосвязанные задачи:

  1. split — разбиение сложного пользовательского запроса на отдельные подвопросы.
  2. decompose — декомпозиция вопроса на сущности, аспекты и цепочку исследовательских подзадач с указанием ролей экспертов.
  3. plan — построение пошагового плана ответа с типами блоков (definition, argument_pro, warning, conclusion и др.) и структурой.

Модель ориентирована на сценарии предварительной обработки сложных запросов: разбор, декомпозиция и планирование ответа перед генерацией основного текста.

Быстрый старт

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer, StoppingCriteria, StoppingCriteriaList
from threading import Thread

checkpoint_path = "Vladniag/Bormolom"  # укажите свой репозиторий

model = AutoModelForCausalLM.from_pretrained(
    checkpoint_path,
    device_map="auto",
    torch_dtype=torch.float16
)
tokenizer = AutoTokenizer.from_pretrained(checkpoint_path, use_fast=True)
if tokenizer.pad_token is None:
    tokenizer.pad_token = tokenizer.eos_token

class StopOnTokens(StoppingCriteria):
    def __init__(self, stop_token_ids_list):
        self.stop_token_ids_list = stop_token_ids_list
    def __call__(self, input_ids, scores, **kwargs):
        for stop_ids in self.stop_token_ids_list:
            if len(input_ids[0]) >= len(stop_ids):
                if input_ids[0][-len(stop_ids):].tolist() == stop_ids:
                    return True
        return False

stop_words = ["</result>"]
stop_ids_list = [tokenizer.encode(w, add_special_tokens=False) for w in stop_words]
stopping_criteria = StoppingCriteriaList([StopOnTokens(stop_ids_list)])

def generate_response(prompt: str, max_new_tokens: int = 512) -> str:
    processed = "▁" + prompt.lstrip().replace(" ", "▁").replace("\n", "<newline>")
    inputs = tokenizer(processed, return_tensors="pt", add_special_tokens=False).to(model.device)
    streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=False)
    kwargs = dict(
        inputs,
        streamer=streamer,
        max_new_tokens=max_new_tokens,
        do_sample=True,
        temperature=0.3,
        top_p=0.5,
        repetition_penalty=1.3,
        pad_token_id=tokenizer.pad_token_id,
        eos_token_id=tokenizer.eos_token_id,
        stopping_criteria=stopping_criteria,
    )
    thread = Thread(target=model.generate, kwargs=kwargs)
    thread.start()
    full = ""
    for chunk in streamer:
        decoded = chunk.replace("▁", " ").replace("<newline>", "\n").replace("\\n", "\n")
        if "</result>" in decoded:
            full += decoded.split("</result>")[0]
            break
        full += decoded
    return full

Форматы входных промптов

Модель обучена на строгих шаблонах. Промпт всегда начинается с тега задачи, затем следует fragment с входным текстом, и открывается тег result.

  1. Задача split Промпт:
<instruction>split</instruction>
<fragment>
Я разрабатываю курс для студентов педагогического вуза по цифровой дидактике и хочу построить модуль, посвящённый проектированию уроков на основе смешанного обучения. Помогите разобраться: каковы ключевые принципы blended learning, как выбрать подходящую модель (ротация станций, flipped classroom, гибкая модель и др.), какие цифровые инструменты эффективно интегрируются на каждом этапе урока, и как оценить результативность такого урока с помощью формирующего и суммативного оценивания.
</fragment>
<result>

Пример вывода:

 S1: Как выбрать подходящую модель — ротацию станций или flipped classroom?
 S2: Какие цифровые инструменты эффективно интегрировать на каждом этапе урока, чтобы оценить результативность урока?
  1. Задача decompose Промпт:
<instruction>decompose</instruction><fragment>
<subject><newline>experts: историк; философ; социолог; культуролог; этнограф; антрополог; востоковед; конфликтолог; религиовед; литературовед; гуманитарий_общий; физик; химик; биолог; географ; геолог; эколог; ученый_общий; астроном; математик; врач; психолог; нейробиолог; инженер; строитель; энергетик; технолог; архитектор; материаловед; программист; аналитик_данных; специалист_по_иб; системный_администратор; архитектор_по; экономист; менеджер; маркетолог; логист; бухгалтер; юрист; политолог; военный; педагог; методист; искусствовед; музыкант; художник; дизайнер; режиссер; филолог; журналист; спортсмен; тренер; турист; кулинар; агроном; ветеринар; смежник<newline></subject>
Каков социокультурный и гастрономический потенциал региона плато Лаго-Наки через призму его историко-архитектурного наследия и аутентичных кулинарных традиций?
</fragment>
<result>

Пример вывода:

 Reason: Для ответа на вопрос необходимо изучить историю возникновения и развития плато Лаго-Наки, включая его архитектуру, культурные особенности и традиции, а также оценить его вклад в развитие туризма и гастрономического образа региона. Важно учесть влияние этих факторов на формирование уникального культурного ландшафта плато Лаго-Наки.

 Entity: плато Лаго-Наки
 Aspects: социокультурное и гастрономическое потенциал; историко-архитектурное наследие; аутентичные кулинарные традиции

 Q1: история возникновения и развития плато Лаго-Наки
 R: историк
 D: none
 Q2: археологические находки и их значение для понимания истории плато
 R: историк
 D: Q1
 Q3: эстетические и культурные особенности местности
 R: искусствовед
 D: Q1
 Q4: влияние исторических событий на современную культуру и гастрономическую жизнь
 R: историк; искусствовед
 D: Q1, Q2
 Q5: как историко-архитектурная среда влияет на современные кухни и традиционные блюда
 R: историк; экономист
 D: Q1, Q2, Q3
 Q6: общий социокультурный и гастрономический потенциал плато Лаго-Наки
 R: историк; экономист
 D: Q1, Q2, Q3, Q4, Q5

 Merge: synthesis

3. Задача plan Промпт:

<instruction>plan</instruction><fragment>
<subject><newline>block_types: application, argument_con, argument_pro, clarification, comparison, conclusion, definition, example, history, mechanism, summary, warning<newline>structures: argumentative, causal, clarification, comparative, descriptive, explanatory, narrative, procedural<newline></subject>
Какова цель и в чем заключается суть инициативы «Открытая кремниевая фотоника для ИИ-систем», запущенной компанией Lightmatter совместно с партнерами?
</fragment>
<result>

Пример вывода:

Reason: Необходимо структурировать информацию о цели и сути инициативы, учитывая её взаимосвязь с другими компаниями.
Step1: Определить цель инициативы «Открытая кремниевая фотоника для ИИ-систем»
Type1: definition
Depends1: none
Step2: Аргументировать значимость проекта для развития ИИ-систем
Type2: argument_pro
Depends2: Step1
Step3: Указать на потенциальные риски и ограничения при реализации проекта
Type3: warning
Depends3: Step2
Step4: Сделать вывод о влиянии инициативы на развитие ИИ-систем
Type4: conclusion
Depends4: Step3
Structure: argumentative

Обучение

Модель дообучена методом Supervised Fine-Tuning (SFT) с использованием SFTTrainer из библиотеки TRL. Базовая модель — Vladniag/Bormokrut. Данные для обучения включали 578714 размеченных примера трёх задач с целевыми ответами в формате, показанном выше.

Ограничения

Модель малая и предназначена для узких задач предобработки; она не является универсальным чат-ассистентом.

Качество декомпозиции и планирования зависит от корректности списка экспертов и типов блоков, переданных в <subject>.

Модель обучена на русскоязычных данных; генерация на других языках может быть нестабильной.

Downloads last month
351
Safetensors
Model size
35.1M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Vladniag/Bormolom

Finetuned
(1)
this model