Мы продолжаем заниматься разработкой бота для обслуживания пользователей. Виртуальный библиотекарь обучается отвечать на большинство вопросов, с которыми сталкиваются пользователи библиотеки и будет на связи 24/7.
Виртуальный библиотекарь – реализуется на платформе Телеграм с использованием нейронных сетей YandexGPT и GigaChat. Цифровой помощник знает ответы на вопросы различной тематики: получение читательского билета; адреса и режимы работы подразделений библиотеки; получение и продление печатных изданий; фото- видео, экскурсии и мероприятия в стенах библиотеки.
Пользователи могут задавать любые вопросы в текстовом формате. Виртуальный библиотекарь ориентируется в поднятой теме или поставленной задаче, не требуя заново начинать с ним диалог.
Бот поможет сориентироваться в разнообразии электронных ресурсов, подсказать как использовать электронную подписку, решить проблемы с удаленным доступом к электронным ресурсам.
В целом всё общение с Виртуальным библиотекарем строится в форме диалога, поэтому пользователь всегда может задать ему дополнительный вопрос, если не хватает данных или он чего-то не понял в предоставленной информации.
Нашей задачей является научить нейронную сеть понимать человеческий язык и выполнять просьбы пользователей, как если бы мы просили об этом человека.
Обучение Виртуального библиотекаря происходит с использованием техники RAG (retrieval-augmented generation, генерация, дополненная релевантной для пользователя информацией), основанной на идее: а что, если кроме самого вопроса подать на вход информацию, которая потенциально могла бы помочь модели ответить правильно?
Например, помимо вопроса о наличии в подписке ресурса JSTOR, дать модели справку о самой системе из описания электронного ресурса? Вероятность, что модель даст правильный ответ, будет выше, поскольку релевантная справка из web-страницы «Электронные ресурсы Библиотеки НИУ ВШЭ» уже содержит в себе ответ на вопрос – модели нужно будет только его извлечь.
Данные для обучения могут быть в формате PDF объемом до 300 тысяч cлов и включают в себя: информацию по библиотечным продуктам и услугам, часто задаваемые вопросы (FAQ), страницы сайта библиотеки, базу данных с парами вопрос-ответ, презентации с тренингов и другое.
Нахождения полезной информации, исходя из запроса пользователя, осуществляется с помощью эмбеддингов – наборов чисел, которые отражают семантику (смысловое значение) данных. Чем у двух текстов наборы чисел более похожи, тем эти тексты семантически более близки, и наоборот.
Генерация ответов производится с помощью языковой модели и специальных шаблонов. Благодаря исключению выдуманных ответов, техника RAG позволяет получать релевантные ответы.
В данный момент продолжаем обучать и тестировать бота, оценивая его точность и эффективность.
Собираем всё вместе: пример работы технологии RAG
Теперь, когда мы разобрали все компоненты, разберём работу RAG на конкретном примере с электронным ресурсом JSTOR
Итак, пользователь задаёт вопрос: «Есть ли доступ к платформе JSTOR?»
Шаг 1 – поиск релевантной информации в базе с текстами с web-страницы «Электронные ресурсы Библиотеки НИУ ВШЭ».
Вопрос пользователя подаётся на вход системе поиска по базе, и она выдаёт релевантную информацию. Допустим, что в базе нашлась информация об этом электронном ресурсе со следующим содержанием:
«JSTOR содержит издания по экономике, бизнесу, социологии, политологии, статистике, математике, здравоохранению, биологии, физике, философии, античным исследованиям, языкознанию, литературе и др. Охват — с первого выпуска издания до 2012–2014 гг. ».
Шаг 2 – формирование запроса для языковой модели по определённому шаблону.
Шаблон запроса может выглядеть так:
«Пользователь задал вопрос: {вопрос}. Вот релевантная информация, найденная в базе: {найденная информация}. Ответь на вопрос пользователя, основываясь только на данной выше информации. Если данная информация не содержит ответ на вопрос пользователя, то ответь, что ты не знаешь».
В этом случае для заданного пользователем вопроса в базе уже существующих вопросов-ответов производится поиск, а затем результат добавляется в вопрос для языковой модели по следующему шаблону:
«Пользователь задал вопрос: {вопрос}. Вот список похожих вопросов с ответами на них:
{Вопрос 1}. Ответ: {Ответ на вопрос 1}.
{Вопрос 2}. Ответ: {Ответ на вопрос 2}.
Ответь на вопрос пользователя, основываясь только на ответах на похожие вопросы, которые перечислены выше. Если данная информация не содержит ответ на вопрос пользователя, то ответь, что ты не знаешь».
В шаблон вставляется вопрос пользователя и найденная на первом шаге информация:
Пользователь задал вопрос: «Есть ли доступ к платформе JSTOR?»
Вот релевантная информация, найденная в базе: «JSTOR содержит издания по экономике, бизнесу, социологии, политологии, статистике, математике, здравоохранению, биологии, физике, философии, античным исследованиям, языкознанию, литературе и др. Охват – с первого выпуска издания до 2012–2014 гг..
Ответь на вопрос пользователя, основываясь только на данной выше информации. Если данная информация не содержит ответ на вопрос пользователя, то ответь, что ты не знаешь».
Шаг 3 – генерация финального ответа.
Языковая модель извлекает нужную информацию из запроса, сформированного на предыдущем шаге, и генерирует финальный ответ:
«Да, доступ к платформе JSTOR возможен через сайт Библиотеки НИУ ВШЭ.»
На уточняющий вопрос «есть ли в JSTOR издания по математике за 2010 год» получаем релевантный ответ:
«Да, в JSTOR есть издания по математике за 2010 год.»
Используя RAG, можно ускорить процесс поиска ответа: вместе с запросом пользователя подать языковой модели содержимое нескольких релевантных сайтов, из которых она и сгенерирует ответ.