Shanraq.org Shanraq.org
IT

ИИ без LLM: казахская модель с нуля Урок 15 из 20

Урок 15. Просим уточнить вместо догадки

Кассир не выдаёт билет, если покупатель назвал два фильма и не выбрал сеанс. Он уточняет заказ. Наша модель тоже должна остановиться, когда неясно, о каком занятии или о каком виде сведений спрашивают. Отказ здесь означает «недостаточно проверенной информации для следующего шага», а не «ваш вопрос плохой».

Текст переведён с помощью ИИ.

Зачем это нужно

Кассир не выдаёт билет, если покупатель назвал два фильма и не выбрал сеанс. Он уточняет заказ. Наша модель тоже должна остановиться, когда неясно, о каком занятии или о каком виде сведений спрашивают. Отказ здесь означает «недостаточно проверенной информации для следующего шага», а не «ваш вопрос плохой».

Собираем предыдущие шаги

Перед кодом разберём новые знаки. text сохранит вопрос маленькими буквами, clean уберёт ? и ,, words сохранит слова. entities будет списком найденных названий, intents — списком типов вопроса. len(список) считает элементы. > 1 означает «больше одного». [0] берёт первый элемент, потому что Python начинает счёт позиций с нуля; обращаться так к пустому списку нельзя. Поэтому сперва считаем и проверяем, а затем берём элемент.

В этом уроке мы ещё не отвечаем на время или место: каталога утверждённых фактов пока нет. Выход іздеу: шахмат уақыт значит «можно искать запись о времени шахмат», а не «время найдено». Используем два названия из урока 13 и два типа из урока 14. Создайте request.py в UTF-8.

known = ["шахмат", "сурет"]
text = input("Сұрақ: ").lower()
clean = text.replace("?", "").replace(",", "")
words = clean.split()
entities = []
intents = []
for word in words:
    if word in known:
        entities.append(word)
    if word == "қашан":
        intents.append("уақыт")
    if word == "қайда":
        intents.append("орын")
if len(entities) == 0:
    print("білмеймін: қай үйірме?")
elif len(entities) > 1:
    print("нақтылаңыз: бір үйірмені атаңыз")
elif len(intents) == 0:
    print("білмеймін: уақыт па, орын ба?")
elif len(intents) > 1:
    print("нақтылаңыз: бір сұрақты таңдаңыз")
else:
    print("іздеу:", entities[0], intents[0])

Файл шага совпадает с примером.

len(entities) считает элементы списка; == 0 проверяет, что нет ни одного. Знак > означает «больше»: > 1 выявляет несколько находок. Ветви elif идут по порядку и выполняется только первая подходящая. Запись entities[0] берёт первый элемент списка: Python считает позиции с нуля. Мы обращаемся к нему только в последней ветви, когда уже известно, что элемент ровно один. Так же работает intents[0]. Если взять [0] у пустого списка, программа завершится ошибкой; проверки защищают от неё. == сравнивает, одинарный = сохраняет — вспомните урок 10.

Шахмат қашан? даёт іздеу: шахмат уақыт. Робот қашан? даёт білмеймін: қай үйірме? — имя пока не в словаре. Шахмат, сурет қайда? просит назвать одну группу. Шахмат қашан қайда? просит выбрать один тип. Шахмат неге? возвращает білмеймін: уақыт па, орын ба?. Два одинаковых упоминания тоже считаются двумя находками; улучшение этого поведения оставим на позже и не будем молча убирать текст пользователя.

Опорная карта

Вопрос → известные названия + известные типы → ровно одно каждого? → ключ поиска; иначе → объяснить, чего не хватает или что нужно уточнить. Ключ поиска → факты (начиная с урока 16), не готовый ответ.

Вспомните и пройдите проверку

Закройте код и восстановите четыре причины остановки. Затем запустите примеры выше и сравните каждое сообщение с причиной.

Задание: предскажите результат для СУРЕТ қайда?, Сурет қашан қайда? и пустого ввода. Подсказка: посчитайте два списка до проверки условий. Эталон: іздеу: сурет орын; нақтылаңыз: бір сұрақты таңдаңыз; білмеймін: қай үйірме?. Частая ошибка: воспринимать іздеу: как ответ о месте. Пока модель установила лишь два ключа будущего поиска, а сам факт ещё не проверяла.

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Комментарии (0)

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