AI без LLM: создаем свою модель ИИ Урок 22 из 30
Урок 22. Разделяем обучение, настройку и контроль
Если ученик заранее видел ответы к контрольной, высокий балл ничего не доказывает. Поэтому мы раздадим вопросы в три конверта. Первый нужен для изучения примеров, второй — для исправления правил, третий откроем только при итоговой проверке.
Текст переведён с помощью ИИ.
Зачем это нужно
Если ученик заранее видел ответы к контрольной, высокий балл ничего не доказывает. Поэтому мы раздадим вопросы в три конверта. Первый нужен для изучения примеров, второй — для исправления правил, третий откроем только при итоговой проверке.
До программы
Новое поле split указывает конверт: train — обучение, tune — настройка, test — контроль. В этом файле 8 обучающих и 5 настроечных вопросов. Шесть контрольных вопросов с метками находятся в отдельном файле шага 25: до итоговой проверки его не открываем. Состав вопросов распределён вручную, без случайности: результат можно повторить. Один и тот же текст не должен попасть в разные конверты. seen — список уже прочитанных текстов; valid запоминает, обнаружена ли ошибка. True значит «верно», False — «неверно».
[
{
"text": "Шахмат қашан?",
"label": "уақыт",
"split": "train"
},
{
"text": "Сурет қашан?",
"label": "уақыт",
"split": "train"
},
{
"text": "Шахмат уақыты?",
"label": "уақыт",
"split": "train"
},
{
"text": "Сурет уақыты?",
"label": "уақыт",
"split": "train"
},
{
"text": "Шахмат қайда?",
"label": "орын",
"split": "train"
},
{
"text": "Сурет қайда?",
"label": "орын",
"split": "train"
},
{
"text": "Шахмат орны?",
"label": "орын",
"split": "train"
},
{
"text": "Сурет орны?",
"label": "орын",
"split": "train"
},
{
"text": "Шахмат қашан өтеді?",
"label": "уақыт",
"split": "tune"
},
{
"text": "Сурет қайда өтеді?",
"label": "орын",
"split": "tune"
},
{
"text": "Шахмат нешеде?",
"label": "уақыт",
"split": "tune"
},
{
"text": "Шахмат неге?",
"label": "белгісіз",
"split": "tune"
},
{
"text": "Шахмат қашан және қайда өтеді? Уақыты қандай?",
"label": "белгісіз",
"split": "tune"
}
]
Из корня проекта перейдите в папку шага и запустите программу:
cd course/kazakh-ai/step-22
python3 splits.py
В Windows вместо последней команды выполните py splits.py.
import json
with open("examples.json", encoding="utf-8") as file:
rows = json.load(file)
counts = {"train": 0, "tune": 0, "test": 0}
seen = []
valid = True
for row in rows:
if row["text"] in seen:
print("Қайталанған сұрақ:", row["text"])
valid = False
seen.append(row["text"])
split = row["split"]
if split in counts:
counts[split] += 1
else:
print("Қате бөлік:", split)
valid = False
print("Оқыту:", counts["train"])
print("Баптау:", counts["tune"])
print("Бақылау:", counts["test"])
print("Жинақ жарамды:", valid)
Как работает код
Сначала программа смотрит, встречался ли текст раньше. seen.append добавляет его после проверки. Затем счётчик нужного конверта увеличивается на единицу. Неизвестное имя конверта или повтор делают valid = False. Проверка сравнивает тексты буквально: изменение регистра или знака вопроса пока может скрыть повтор; это граница упражнения. До урока 25 контрольные метки мы не используем для выбора правил.
Опорная карта
13 открытых карточек → train 8 / tune 5 / test 0; ещё 6 контрольных пока закрыты → проверка повторов → честный будущий контроль.
Вспомните и проверьте
Закройте код и объясните назначение каждого конверта. Скопируйте одну строку с вопросом в конец файла. Подсказка: seen уже содержит этот текст. Эталон: появится Қайталанған сұрақ: и Жинақ жарамды: False; сумма счётчиков станет 14. Верните файл к исходному виду. Частая ошибка: менять правило после просмотра контрольных ответов и всё равно считать контроль независимым.
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.