Криско Първи
Мъничък чат модел на български, написан и обучен от нулата от Кристиян Зайнелов на 12.11.2026.
Пробвай го направо в браузъра: https://huggingface.co/spaces/Kirsko/krisko-purvi
Моделът в HuggingFace: https://huggingface.co/Kirsko/krisko-purvi · Кодът в GitHub: https://github.com/kristiqnzainleov/krisko-purvi
Това е учебен проект: моделът разпознава ограничен брой теми и отговаря със заучени реплики. Не е асистент с общи знания.
Какво представлява
- Архитектура: собствен трансформър (декодер), написан на ръка в model.py – 3 слоя, 4 глави на вниманието, размер 128.
- Размер: 622 314 параметъра, около 2,5 MB.
- Токенизатор: символ по символ, с речник от 106 символа.
- Инструменти: Python и PyTorch. Не се ползват предварително обучени модели и готови архитектури.
Какво може
- Поздравява и води кратък разговор („здрасти“, „как си?“, „благодаря“, „чао“).
- Разказва за себе си: име, създател, дата на създаване, с какво е направен.
- Отговаря осъзнато на въпроси за самия себе си: има ли съзнание и чувства, как мисли, какво не може, има ли памет, вижда ли, може ли да учи, защо не знае колко е часът.
- Смята: събиране и изваждане с числа до 999, умножение до 20 по 20 и на двуцифрено число по число до 12, деление без остатък („колко е 347 + 589“, „15 по 15“, „56 / 8“).
- Проверява се, когато му кажеш „грешно е“: пресмята последната сметка наново и или се извинява и дава верния отговор, или казва, че не е сгрешил.
- Повтаря името ти, ако е сред често срещаните („казвам се Иван“).
- На един и същ въпрос може да отговори с различни думи.
Колко добре смята
Всичко се пресмята от самата невронна мрежа, без калкулатор. Преди отговора моделът пише резултата отзад напред в скрита чернова (например [58]47 плюс 38 е 85.), както се смята на лист – първо единиците, после десетиците с преноса. Черновата не се показва.
Измерено върху примери, които моделът не е виждал при обучението:
| Действие | Верни |
|---|---|
| Събиране до 99 | 300 от 300 |
| Изваждане до 99 | 300 от 300 |
| Събиране до 999 | 300 от 300 |
| Изваждане до 999 | 296 от 300 |
| Умножение до 20 по 20 | 441 от 441 |
| Двуцифрено число по число до 12 | 109 от 150 |
| Деление без остатък | 274 от 289 |
Колко добре се проверява
Когато след сметка му кажеш „грешно е“:
| Случай | Познава |
|---|---|
| Сметката е била вярна → казва, че не е сгрешил | 127 от 145 |
| В сметката е сложена нарочно грешка → извинява се и дава верния отговор | 133 от 155 |
| Собствена истинска грешка → извинява се и се поправя вярно | 4 от 44 |
Собствените си грешки почти не хваща: ако е сбъркал една сметка, при повторното смятане обикновено бърка пак. При разговорни реплики проверката е ненадеждна.
Какво не може
- Не разбира езика в общия смисъл – разпознава познати теми и близки до тях формулировки.
- Не помни разговора. Вижда предишната размяна само когато му кажеш, че е сгрешил; иначе всяко съобщение се гледа само за себе си.
- Не смята с числа над 999, не дели с остатък и не смята с десетични дроби или с повече от две числа наведнъж. При умножение на по-големи числа често греши.
- На непознат въпрос или непознато име може да отговори грешно или с безсмислици.
- Отговорите му за съзнание и чувства са заучени реплики, а не истинска осъзнатост.
Как да го пуснеш
Нужен е Python 3.9 или по-нов.
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python app.py
Отваря се чат в браузъра на http://127.0.0.1:7860. За чат в терминала: .venv/bin/python chat.py.
Файлове
| Файл | Какво съдържа |
|---|---|
model.py |
архитектурата, токенизаторът, генерирането и записът на модела |
model/ |
обучените тегла (model.safetensors) и настройките (config.json) |
chat.py |
чат в терминала |
app.py |
уеб интерфейс |
train.py |
данните и обучението |
За обучението
Моделът е с 3 слоя и прозорец от 256 символа. Обучаван е на няколко кръга с train.py --continue, който дообучава сегашния модел с данните от файла; броят стъпки се задава със STEPS, например STEPS=25000 .venv/bin/python train.py --continue. Пуснат без --continue, train.py започва отначало.
В края на обучението се отпечатва проверка върху примери, които моделът не е виждал – оттам са числата в таблиците по-горе.