На продуктовой этикетке написано, откуда товар, когда проверен и до какого дня годен. На нашей карточке факта нужны те же сведения. Для каждого ответа запишем дорожку решений: что распознали, сколько карточек нашли и почему разрешили ответ.
Готовая аптечка полезна, когда на каждом средстве есть название, срок и инструкция. Наш выпуск — тоже собранный комплект: программа, правила, учебные карточки, команда запуска и проверяемые границы. Она отвечает только на два вида коротких вопросов о вымышленном клубе.
Чайник после включения греется дольше, чем уже горячая вода наливается в чашку. У программы тоже различаются новый запуск и повторный вызов готовой функции. Измерим оба пути, объём файлов и наблюдаемые выделения памяти.
Два мастера могут разобрать один велосипед: новичок отмечает три знакомые детали, мастерская фиксирует ещё состояние каждого узла. Сравнивать полезно только совпадающие части работы. Наш урок 11 узнаёт две заранее заданные формы; adam_fst — отдельный инструмент на Rust, который разбирает казахское слово на корень и грамматические признаки. Он не является источником расписания кружка.
Вахтёр сверяет имя посетителя со списком. Если имя неразборчиво или человек просит сразу два пропуска, вахтёр уточняет, а не угадывает. Наш классификатор тоже должен остановиться на незнакомом слове, опечатке и вопросе сразу о времени и месте.
Дежурный видит в записке слова «когда» и «где». Даже если «когда» повторено дважды, он не должен решать за автора, какой вопрос важнее. Наш счётчик из прошлого урока ошибся именно так.
Учитель сначала пишет ответы к карточкам, а уже потом проверяет ученика. Для модели такая карточка состоит из вопроса и правильной учебной метки. Без ответов к примерам ей нечему учиться и нам нечем проверять ошибки.
Если ученик заранее видел ответы к контрольной, высокий балл ничего не доказывает. Поэтому мы раздадим вопросы в три конверта. Первый нужен для изучения примеров, второй — для исправления правил, третий откроем только при итоговой проверке.
Ученик замечает, что в карточках о времени часто есть «қашан», а в карточках о месте — «қайда». Мы дадим программе посчитать такие совпадения. Это маленький классификатор: он выбирает один из известных видов вопроса, не знает фактов о кружке и не строит свободный текст.
Проверяя ученика, учитель различает неверный ответ и честное «я пока не знаю». Но множество отказов тоже мешает делу. Поэтому одного красивого числа недостаточно: посмотрим, сколько ответов верны и сколько известных вопросов оставлены без ответа.
Бланк справки содержит постоянную подпись и пустое место для проверенного значения. Такой бланк не придумывает новое расписание: он только аккуратно показывает найденную карточку.
В библиотеке книга получает карточку с названием и полкой. Так же мы заведём карточку для каждого учебного сведения. Здесь «проверено» значит, что автор вымышленного клуба внёс запись в учебный каталог; это не утверждение о реальном расписании.
Если на доске два разных объявления об одном занятии, выбирать первое наугад нельзя. Если срок объявления истёк, прошлое расписание тоже нельзя выдавать за сегодняшнее. Соберём вопрос, поиск и эти два предохранителя.
На доске объявлений время занятия полезно только тогда, когда понятно, кто повесил листок и когда его проверили. Добавим эти сведения к каждой карточке.
В библиотеке фамилия автора без названия может указать на несколько книг. Нашему каталогу тоже нужны два ключа: кружок и вид сведений. Урок 15 уже получал такую пару из короткого вопроса.
Просьба «Шахмат қашан?» («Когда шахматы?») и «Шахмат қайда?» («Где шахматы?») относится к одному занятию, но требует разных записей. Тип вопроса, или *намерение*, — какую информацию хочет человек: время или место. Это ещё не сама информация. Как на бланке заказа: графа «что нужно» не равна готовому товару.
Если в библиотеке спросить «Когда открывается шахматный клуб?», библиотекарь сначала должен понять, о каком клубе речь. В нашей вымышленной учебной школе есть два названия занятий: Шахмат и Сурет («рисование»). Название, о котором спрашивают, назовём предметом вопроса. В программах его часто называют *сущностью*: это конкретный объект, который мы хотим найти в каталоге.
На двери может быть написано «зал»: без дополнительных сведений это может быть спортивный или концертный зал. У казахского ат тоже есть разные значения — «лошадь» и «имя». По одному слову нельзя честно выбрать одно. [Словарь казахского литературного языка](https://sozdikqor.kz/sozdik/?id=38) фиксирует оба значения.
Представьте два билета: один ведёт к музею, другой разрешает находиться в музее. Надпись «музей» на них общая, но назначение разное. Казахское слово тоже может сохранять основу и принадлежность, меняя последнюю часть: үйлерімізге — «к нашим домам», үйлерімізде — «в наших домах».
Кассир не выдаёт билет, если покупатель назвал два фильма и не выбрал сеанс. Он уточняет заказ. Наша модель тоже должна остановиться, когда неясно, о каком занятии или о каком виде сведений спрашивают. Отказ здесь означает «недостаточно проверенной информации для следующего шага», а не «ваш вопрос плохой».
В магазине одну и ту же вещь могут упаковать в коробки разных размеров. Значение «несколько» одно, а звучание части слова меняется ради соседних звуков. В казахском языке показатель множества имеет варианты -лар, -лер, -дар, -дер, -тар, -тер. Дефис здесь показывает границу частей при объяснении; в обычном слове дефиса нет.
Библиотекарь сначала раскладывает книги по отдельным карточкам, а потом ищет каждую. Так и модель: прежде чем узнавать основу, она должна отделить слова в вопросе. Токен здесь — одно полученное слово; разбиение — получение таких частей из строки.
Если адрес на конверте переписать с заменой одной буквы, письмо попадёт не туда. Для модели үй и уй тоже разные записи. Прежде чем искать части слова, научим программу получать именно те знаки, которые ввёл человек.
На почтовом конверте сначала пишут адрес, затем наклеивают марку; если поменять действия местами, привычная инструкция нарушится. В слове части тоже занимают места. Для нашего примера порядок таков: основа → множество → принадлежность → направление. Принадлежность отвечает на вопрос «чьи?»; направление — «к чему?». В казахском примере үй-лер-іміз-ге это «к нашим домам». Дефисы помогают увидеть части; пишут үйлерімізге.