Как подчинить себе машины

Кейс внедрения ML в Высшей школе экономики

Как подчинить себе машины

Искусственный интеллект можно сравнить с двигателем внутреннего сгорания. В свое время он революционизировал сотни отраслей. Но не он переносит людей по воздуху, не он стрижет лужайку под моими окнами или питает ноутбук, когда в доме отключили электричество. Это делают сложные механизмы, созданные человеком, в которых двигатель — только одна из деталей. И мало уже кого можно удивить чатом, который вежливо отвечает на простые вопросы в стиле SEO-оптимизатора.

В середине мая в бета-тестирование был выпущен AI-планировщик путешествий Mindtrip, ранее “поднявший” 7-миллионный раунд инвестиций. Его фишка в персонализации программы поездки. Он учтет, любишь ли ты ночные тусовки или размеренные каникулы с детьми, какую еду предпочитаешь и много других параметров. Другой стартап Morego предоставляет путешественнику доступ к инструментам AI, когда тот следует по проложенному гидом маршруту: бот подскажет, где перекусить поблизости, или уточнит часы работы музея.

Это происходит повсюду: люди находят для AI все больше вариантов нишевого применения, но в чистом виде он больше не вызывает восторг. Такое уже было. Сегодня никто не скажет, что криптовалюты заменят государственные деньги, при этом биткоин остается одним из ликвидных активов. Стоимость коллекционных токенов, таких как “скучающие обезьянки”, упала в ряде случаев более чем на 90%, что не мешает использовать NFT для подтверждения подлинности произведений искусства.

Наклеиваем AI-пластырь на больные места в EdTech

Мы в Высшей школе экономики занялись генеративным AI на гребне волны хайпа вокруг него летом прошлого года, но обжегшись, быстро поняли, что искусственный интеллект — это не волшебная таблетка. Скорее, набор кубиков Lego разной формы и назначения, из которых при должном старании можно собрать замок или вертолет, а можно рассыпать по полу и наступить на детальку необутой ногой, так что будет больно.

У нас уже был накоплен опыт. Еще несколько лет назад мы стали рекомендовать пользователям нашего сайта образовательные программы и новости, исходя из их поведения, а в прошлом году создали инструмент прогнозирования трафика и конверсий на лендингах на накопленных данных прошлых лет. Он помогает маркетологам планировать свои активности на предстоящую сезонную приемную кампанию.

Но теперь мы захотели решить проблему, которая с нами, кажется, вечно. Корпоративный портал НИУ ВШЭ — это около миллиона страниц, и сколько ни старайся (а мы стараемся) , никогда не добьешься, чтобы навигация по нему стала идеальной для всех целевых групп. Мы спросили себя: можем ли мы создать сервис, чтобы пользователь в свободной форме рассказал о себе, чему хочет учиться, какое образование умеет, а мы в ответ рекомендовали бы ему программу обучения.

Окей, Алиса, вот тебе пользовательский промпт, подбери образовательную программу. Но дело в том, что эта дама ничего не знает об образовательных программах Высшей школы экономики. И не только эта — мы изучили рынок и “погоняли” несколько моделей, в том числе иностранные с открытым кодом (коммерческие иностранные в расчет не принимались) .

Более того, случается, что GPT-модель фантазирует. Что называется, галлюцинирует.

Говорят: модель можно дообучить*. Яндекс предлагает решение в форме диалогов. Ты говоришь модели вопрос и сообщаешь ей правильный ответ. Так можно до 10 тысяч раз. Хорошо для статичной базы знаний. А когда каждый год меняются условия поступления и перерабатывается содержание программ, это такой себе вариант.

* UPD Теперь Модель YandexGPT не получится дообучить новой информации, например базе знаний службы поддержки. Можно лишь обучить модель отдавать ответ в определенном формате или анализировать текст.

GPT-модель – не панацея от всех проблем. Но это не значит, что для нашей задачи она бесполезна. Просто ее одной недостаточно. Для ее усиления мы использовали RAG (Retrieval Augmented Generation). Это парадигма, которая усиливает языковые модели с помощью пользовательских данных. Подход состоит из двух этапов: подготовки базы знаний и извлечения контекста из этой базы для ответа на вопрос.

Как подчинить себе машины

Как это работает. На входе пользователь задает вопрос. Если голосом, то его нужно преобразовать в текст. Для этого нам подошел Yandex Speech Kit.

Далее подключается YandexGPT. Из пользовательского запроса выделяется направление обучения, интересы, возраст, желаемая профессия, город (последнее важно, потому что у нас четыре кампуса в разных городах).

Следом Yandex Embedding Model превращает запрос в вектор. Будем считать, что он достаточно прожарен, теперь переходим к ответу.

Чтобы дать ответ, сначала нужно подготовить базу знаний. Поскольку мы находимся на этапе MVP, то не осложняли себе работу сложными интеграциями, а просто спарсили контент с собственного сайта и отформатировали. Для этого мы подошла открытая библиотека BeautifulSoup.

Весь контент делится на куски – чанки по 1024 символа в каждом с перекрытием в 200 символов – и складывается в векторную базу данных. Для этого мы используем Yandex ClickHouse.

Итак, у нас есть векторизированный запрос и векторы ответов. Находим ближайший по косинусному расстоянию. Это и системный промпт снова отправляется в YandexGPT, которая формирует готовый ответ пользователю.

Процесс оставляет место для творчества GPT-модели. Если есть опасения насчет того, что конечный ответ пользователю будет недостаточно корректным (а у нас они есть), можно отказаться от последнего шага и вместо этого давать ответы из заранее подготовленной базы знаний или просто ссылку на сайт образовательной программы.

До конца мая мы находимся на этапе внедрения решения.

Что дальше? Захватываем эту Вселенную?

На этом не планируем останавливаться. В перспективе такие или модифицированные пайплайны можно использовать и для других целей – например, рекомендовать дополнительные курсы действующим студентам исходя из их оценок по основным предметам или теме курсовой работы.

Как подчинить себе машины

А пока мы об этом только мечтаем, GPT-технологии уже помогают нам в решении более прикладных задач. Недавно к нам обратились коллеги из учебного блока нашего вуза. Каждый год студенты приносят в учебные офисы десятки тысяч справок о временной нетрудоспособности. Это так называемая форма 095/у, если кто в теме. Пики таких справок приходятся, как можно догадаться, на период экзаменов. Поэтому каждая пристально проверяется на предмет того, подлинная она или нет и правильные ли на ней даты.

Сможете автоматизировать проверку, спросили они нас. Мы ответили: частично. И сделали им сервис буквально за два дня.

Как подчинить себе машины

Сначала справка загружается в систему. Если это pdf, мы используем открытую библиотеку pdf-to-image для его преобразования в jpeg.

Затем с помощью библиотеки pytesseract распознаем машинописный текст. Распознав, находим там заветные формулировки, что это та самая справка.

Дальше библиотека OpenCV помогает найти на справке три обязательные печати – круглую, треугольную и прямоугольную.

Теперь задача посложнее. С помощью YandexVision мы распознаем рукописный почерк. Тут вынужден признать, что получается неидеально. Врачебный почерк непобедим даже атомной бомбой. Но в целом система справляется.

Наконец, этот массив слов отправляется в YandexGPT. Искусственный интеллект выделяет ФИО, дату выдачи, даты освобождения с и по. Конечно, все это требует в дальнейшем подключения к задаче человека, но жизнь коллегам мы немного упростили.

Не бывает слишком много ML

Хочется кое-что сделать и для самих себя. Например, перспективы мы видим в направлении поисковой оптимизации текстов. YandexGPT мог бы отсеивать нерелевантные ключи, вычленять ключевые слова в текстах. В идеале хотелось бы полностью освободить SEO-специалиста от выполнения рутинных операций.

Но пока это только в проектах, а мы тем временем концентрируемся на узких местах в общеуниверситетских процессах. Где можно использовать AI-технологии? Например, классифицировать обращения в сервис-деск. Эта задача становится едва ли не критичной, когда у тебя тысячи обращений в день по сотням разных вопросов к десяткам разных систем.

Первичную классификацию делает пользователь. Он может выбрать ту или иную форму для подачи заявки — об ошибке, с запросом на доработку или чтобы получить консультацию. Здесь он часто ошибается. Или пытается манипулировать системой: “если я помечу свой запрос как запрос об ошибке, ее, скорее всего, быстрее отработают”.

Некорректная маршрутизация заявок отнимает человекочасы и снижает удовлетворенность пользователей. Если сразу пустить их по правильному пути, это позволит ускорить ответы и снимет часть бюрократии по перекидыванию задачек с команды на команду.

Задача, на первый взгляд, не выглядит проблемной. Требуется изучить содержание заявки и исходя из написанного пользователем классифицировать ее тем или иным образом. Сложность возникает при выборе подхода к решению задачи. Мы посчитали правильным сравнить несколько подходов и выбрать из них самый эффективный.

Самое простое — поискать в тексте заявке ключевые слова из конечного перечня. Например:

«Ошибка": [«ошибк", "сбо", "не работа", »баг»],

«Консультация": [«консультац", "вопрос", "помощ", »совет»]

Другой способ — перепоручить задачу GPT-модели. Тот же YandexGPT с определенным промптом может определить, правильно ли заявка отнесена к типу заявок об ошибке или о консультации, и в ответе указать правильный, по его мнению, тип.

Третий вариант — дерево решений. Это инструмент, созданный специально под задачи классификации. Дерево решений имеет иерархическую древовидную структуру, состоящую из ветвей (правил вида «если …, то …») и листьев (значений векторов). Эту модель можно обучать на своем датасете, в результате правила генерируются автоматически в процессе обучения.

Про дерево решений нужно понимать следующее. Во-первых, оно подойдет для таких случаев, как наш, где число классификационных типов можно пересчитать по пальцам одной руки, но если их будет, скажем, триста, оно не подойдет. Во-вторых, обучая модель, важно соблюсти баланс. Если сначала дать ей обучиться на заявках одного типа, дальше она будет относить к “любимому” типу практически все заявки.

Чему мы уже успели научиться?

Не все задачи решаемы с помощью доступных нам технологий. Повторюсь, искусственный интеллект — это не таблетка от всего.

Так, мы до сих пор не смогли найти какое-либо простое и элегантное решение, чтобы создать нишевый сервис для помощи преподавателям. Они заполняют заявки на рекрутинг студентов для участия в проектной работе и сталкиваются с тем, что не знают, кого звать - образовательных программ много, поди разберись, кто тебе нужен. Задача - изучить описание проекта и рекомендовать для него студентов контентных образовательных программ.

У задачи есть более сложное решение, предполагающее внедрение так называемой компетентностной модели для классификации образовательных программ, курсов, достижений студентов и слушателей. Вполне возможно, что те или иные модели искусственного интеллекта помогут нам на одном из этапов ее проектирования.

Другой урок, который мы вынесли для себя - не бояться формулировать самые смелые задачи и затем декомпозировать их на более мелкие подзадачи.

Несколько лет назад нашей команде потребовалось перенести к себе большой массив плохо структурированного контента. Разработчики написали замысловатый парсер, который, однако, так и не оправдал надежд, которые на него возлагали. Буквально пару дней назад на статусе решили очень похожую проблему всего двумя промптами для GPT.

И, наконец. Искусственный интеллект - как и двигатель внутреннего сгорания - займет положенное ему место в технологических процессах, но в 99 процентах случаев процесс будет намного сложнее, чем эта одна его составляющая. Это касается, в том числе, времени и денег. Подготовка и файн-тюнинг ML-модели может занять продолжительное время, но не меньше вы потратите на промышленное внедрение. Планируйте внедрение ответственно.

О нас: Дмитрий Коптюбенко, CPO (Digital Marketing), Семен Лобачевский, руководитель отдела веб-аналитики и моделирования, Высшая школа экономики

1
1 комментарий