Shanraq.org Shanraq.org
IT

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)

Пока нет комментариев. Будьте первым.