Извлечение целей пользователя в диалоге
Много раз мы с вами здесь говорили о том, что настройка ИИ на человеческие предпочтения – дело сложное: у всех свои предпочтения, и заранее не угадаешь. Авторы статьи «Goal Inference from Open-Ended Dialog» предлагают обучать ИИ на предпочтениях пользователя в процессе взаимодействия.
Это не принципиально новый подход: ИИ уже обучается в процессе работы, но, как правило, в рамках одной узко поставленной задачи, и его навыки плохо распространяются на новые задачи. На более широкий спектр задач ИИ обучают перед запуском в работу, и это надёжный подход, но очень затратный.
Авторы нацелились избавиться от ограничений: сделать так, чтобы ИИ обучался «на лету» и при этом приобретал навыки, полезные для решения разнообразных задач. Подход заключается в следующем:
- Сначала у ИИ-ассистента есть некоторый заранее подготовленный список целей. Этот список может включать как единственное значение «цель не определена», так и набор целей, сформулированный на основании предыдущего взаимодействия.
- ИИ-ассистент задаёт человеку уточняющие вопросы и перевзвешивает вероятности для каждой цели из списка или добавляет новые и считает вероятности для них.
- Диалог завершается, когда наиболее вероятная цель определена.
Лирическое отступление о перевзвешивании вероятностей
Чтобы рассчитать вероятности, используется байесовский вывод (bayesian inference). Он опирается на теорему Байеса, которая позволяет корректировать вероятность гипотезы в зависимости от получаемых новых данных. Вот в этом посте есть замечательное объяснение байесовского вывода с примерами, и я заимствую один из них.
Предположим, что мы хотим определить вероятность некого заболевания у конкретного пациента. 1% всего населения страны имеет это заболевание, поэтому исходная, то есть, априорная вероятность наличия болезни у нашего пациента – 1% (0,01). Соберём больше данных: у нас есть тест, который распознаёт заболевание с точностью в 99%, когда оно есть. Если заболевания нет, тест сообщит об этом в 95% случаях, а в 5% случаев выдаст ложноположительный результат. Итак, какова вероятность того, что пациент болен, если результат теста положительный?
Согласно теореме Байеса, мы можем это вычислить, зная
- вероятность положительного результата теста,
- вероятность наличия заболевания и
- вероятность положительного результата теста при наличии заболевания.
У нас есть почти всё для решения этой задачи, нужно посчитать только вероятность положительного результата теста в общем случае (первый пункт). Примем следующие обозначения:
- вероятность события А = P(A);
- вероятность события А при условии наступления события Б = P(A|Б) – это всё стандартные обозначения;
- событие «тест положительный» = Т+, «тест отрицательный» = Т-;
- событие «заболевание есть» = З+, «заболевания нет» = Т-.
Вероятность получить положительный результат теста с заболеванием или без посчитаем следующим образом:
P(Т+) = (P(Т+|З+) * P(З+)) + (P(Т+|З-) * P(З-)) = 0,99*0,01 + 0,05*0,99 = 0,0594 ~ 0,06 (6%)
Здесь мы сложили вероятность того, что человек болен и тест положительный, и вероятность того, что человек здоров и тест положительный. Это все случаи, в которых мы можем получить положительный результат.
Отлично, теперь дело за малым. Вот что гласит теорема Байеса:
Очень логично: вероятность того, что человек болен, если его тест положительный – это отношение вероятности получить положительный результат будучи больным к вероятности получить положительный результат вообще.
17% – неожиданно низкая вероятность, не правда ли? А ведь точность теста очень высокая.
Это характерная ситуация для редких заболеваний: просто в силу того, что они редко встречаются, вероятность получить ложноположительный ответ высока. Именно поэтому врачи часто не рекомендуют пациентам, которые не наблюдают у себя характерных признаков заболевания и не находятся в группе риска, регулярно проходить тестирование. Характерный пример – скрининг на рак яичников. Его советуют начинать проводить регулярно как минимум с 35-40 лет, потому что вероятность столкнуться с ним раньше мала, а риск получить ненужное медицинское вмешательство и острый стресс из-за ложноположительного результата теста велика.
Возвращаемся к нашим ИИ-ассистентам
Вероятность цели считается по вероятности токенов, с помощью которых она сформулирована. То есть, например, цель «Я хочу какао» разбивается на токены «Я», « хочу», « ка», «ка», «о»*, для каждого выводится вероятность, их логарифмы суммируются. Это по сути то же, что и произведение вероятностей, только вычисления удобнее.
Для проверки они использовали две модели, чтобы симулировать беседу модели и человека, так что результаты могут быть не очень реалистичные. Но идея интересная.
*Авторы используют Llama, а я для этого примера привожу разбивку на токены от GPT-4o, но это чисто для иллюстрации.