Top.Mail.Ru
МЕНЮ
04.09
09.11
Весь мир

Sberbank AI Journey. Как мы учили нейросеть сдавать экзамен

16 октября 2019

Если вы закончили школу уже во времена ЕГЭ, то вам известно, что все задания в нём имеют набор стандартных формулировок и упорядочены по типам. С одной стороны, это облегчает подготовку к экзамену: школьник уже знает, что нужно делать в задании, даже не читая его условия. С другой, любое изменение порядка вопросов может вызвать у него проблемы. Грубо говоря, на результат начинает больше влиять то, насколько человек довёл решения до автоматизма, а не то, как он рассуждает. Экзамен становится похож на работу скрипта.

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

Немного теории

Применение нейросетей к любым задачам сегодня — это уже история из серии: «Никогда такого не было, и вот опять». Но к каким новым задачам нейросети действительно стоит применять?

В понятие Artificial General Intelligence исторически теоретики закладывают следующие способности:

  • принятие решений в условиях неопределенности;
  • самообучение;
  • оперирование базой знаний о мире;
  • мультидисциплинарность, совместная обработка информации из разных источников (текст, картинки, звук).

Метафора «мозг как компьютер» во многом определила эти требования, и ни одно из них, кроме обучения, пока толком не реализовано ИИ ¯\ツ)/¯
Последние годы можно наблюдать первые попытки создать более сложные системы — например, Aristo от Allen Institute на 90% выполнила тест на общие знания для восьмого класса.

В выпускном экзамене по русскому языку 27 заданий, из которых 26 — задания с выбором ответа или открытым ответом, в котором можно вписать свой вариант, а последнее — сочинение по тексту. То есть первое задание всегда про смысл текста, четвертое — про постановку ударения, седьмое — про распространенные речевые ошибки и т.д. Это задание ставит ML-системы в ситуацию «среднего школьника», где нужно заранее получить базовый набор умений и знаний, а затем правильно отвечать на вопросы, используя их.


Чтобы сдать русский язык, школьнику необходимо:

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

Зная, что современные методы NLP все же могут справляться со многими такими задачами, мы решили их и опробовать.


Все полученные нами данные представлены в json-формате, стандартизованы и содержат четкую формулировку и текст, по которому нужно выполнить задание, варианты ответа, если они предусмотрены вопросом.

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

Как мы с этим справились в baseline?

Так как типов заданий более 27 не предусмотрено, на обучающих данных мы создали парсер json’ов, который выбирал из всего текста задания конкретно формулировку — что и как нужно сделать, — и создали на таких формулировках простейший линейный классификатор на n-грамах слов и SVM (support vector machines), который предсказывал номер задания, и система получала задание и формат ответа: https://github.com/sberbank-ai/ai-journey-2019 .

Потенциально хотелось бы реализовать в этой части решения attention-механизм или что-то подобное, чтобы найти связи между формулировками и типами вопросов. Мы надеемся, что кто-нибудь из участников подобное решение реализует.

Оценка решений

В оценке такого решения для сравнения с человеком не используются привычные метрики классификации (accuracy, f-measure.), а берется стобалльная шкала оценивания, где суммируются баллы за правильно выполненные задания.

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

Проектировка baseline

После реализации json-парсер и классификатора вопросов мы получили конкретные типы заданий. Они сводятся к такому списку:

  • проверить орфографию, вставить буквы, исправить ошибки (Н и НН, НЕ и НИ, слитно — раздельно, корни с чередованием и т.д.);
  • понять по контексту значение многозначного слова (выбор ответа по контексту);
  • выделить основные мысли в тексте (выбор из списка предложений);
  • проставить знаки препинаний (выбрать места, где нужны запятые, тире и т.д.);
  • поставить ударения в словах (найти ошибку);
  • найти грамматические ошибки в примерах и указать их тип (соотнести);
  • списать союзы между частями текста (основываясь на логике текста);
  • написание сочинения по тексту (найти проблему и раскрыть ее).

Методом пристального вглядывания далее все типы заданий мы свели к известным методам обработки текста.

Эмбеддеры (embedders)
Эмбеддеры (word2vec, fasttext, GloVe) используются для получения векторных представлений отдельных слов, предложений и текстов. Мы используем BERT на pytorch — универсальный трансформер, чаще применяется для получения свойств слов (от Google). Такой трансформер дает высокий результат на заданиях, где нужно понять смысл многозначного слова, выделить самые содержательные предложения в тексте и т.д. — задания сводятся к выбору ближайшего эмбеддинга по косинусной мере.

Языковые модели (language models)
Языковые модели могут давать полезную информацию о вероятности следующего слова, перплексии предложения. В привязке к экзаменам их можно использовать для обнаружения и исправления речевых ошибок (нечастотные фрагменты заменять на похожие частотные) и для генерации текстов. В baseline мы использовали базу частот n-грам национального корпуса русского языка, выбирая по ней нормативные слова, а отсутствующие считали кандидатами на ошибку. Эту базу мы также используем для подстановки пропущенных букв в слова. Для генерации текстов сочинение мы также взяли «универсальную модель» — ULMFit. Это LSTM с множественным дропаутом от fast.ai, очень хорошо для генерации последовательностей. Ее мы натренировали на школьных сочинениях по литературе, которые собрали в сети. Получилось хоть и бессмысленно, зато почти без ошибок.

Парсеры морфологии и синтаксиса
Для определения части речи, падежей, числа, рода, нормальной формы слова и связей между словами мы использовали pymorphy2 и UDPipe.

Классификаторы
Задачи по пунктуации можно свести к классификации — ставить запятую в конкретном месте или нет, по какому правилу поставлено тире и т.д.

Два типа задач мы решали следующими типами архитектур:

Siamese neural network получает на вход два BERT-эмбеддинга пары предложений, решает, по одному правилу в них ставятся тире, двоеточия или нет.

Классификатор на CatBoost получает на вход окно тэгов части речи длины 6 (вида «NOUN VERB NOUN ADJ NOUN NOUN») и принимает решение ставить или не ставить в середине запятую.

Базы знаний
То, что школьникам нужно запомнить и выучить, мы собрали из открытых источников:

  1. Орфоэпический словарь (ударения) — как в школьной программе.
  2. Словарь тропов — литературных средств: синонимов, антонимов, паронимов, фразеологизмов и т.д., собранный с сайтов по литературе.
  3. Сборник школьных сочинений по литературе — для дообучения генеративной модели.

Модели для сочинения
Генерация текста, суммаризация, тематическое моделирование. Здесь простор для мысли был большой. В итоге мы взяли, как уже упоминалось, ULMFit для генерации текста. Но сочинение должно быть по тексту и отвечать множеству критериев. Если считать, что орфографию и связность текста мы получаем за счет ULMFit, то остается еще как минимум авторская позиция и тематическая связность нашего сочинения и данного текста.

Эти подзадачи мы решили так:

LDA + заготовленная первая фраза. Собранные варианты школьных сочинений группируются на основании word n-грам на 30 тем, которые были нами проинтерпретированы. Каждая из тем оказалась связана с творчеством одного-двух писателей в смежной теме — сочинения про судьбу России, про положение народа, про произведения Достоевского, про творчество А. Ахматовой и ее значение для русской культуры XX века и т.д.
TextRank + шаблоны. Алгоритм суммаризации вытаскивает 2-3 самых содержательных предложения из данного текста, и эти предложения вставляются в набор шаблонов, обрамляющих цитаты с авторской позицией.

Итоговый пайплайн: тематическая модель определяет тему текста и выдает генеративной модели первую фразу. Генеративная модель получает первую фразу и продолжает ее до конца сочинения. Затем модель суммаризации вставляет в этот текст второй абзац, в котором «отражена» авторская позиция.

Итоговая архитектура baseline

Итоговое решение имеет следующую логику:

  1. Поступающее на вход задание типируется классификатором — получает тип от 1 до 27.
  2. На каждый из 27 заданий создан свой solver — скрипт с парсингом формулировок задания, получающий из пула доступных ML-моделей и баз знаний нужную информацию и выдающий ответ в правильном формате.

Пул моделей и баз знаний у всех solver’ов общий, загружается в память один раз.

Что же в итоге?

Baseline (пока без проверки сочинений) дает 27 баллов из 100 — базовым решением воспользовалось более 60 команд. По критериям выпускного экзамена, чтобы получить аттестат, нужно набрать 24, но, чтобы подать документы в вуз нужно минимум 36 баллов. Эту отметку сейчас прошли 2 лучших команды.

Многие участники используют наше решение как базовое, улучшая и дорабатывая подходы. Если вы интересуетесь искусственным интеллектом и готовы попробовать свои силы в такой интересной задаче, то у вас есть еще пара недель! А мы сами продолжаем улучшать модели, подаваясь вне конкурса под ником CDS_team


Финал соревнования пройдет 8 и 9 ноября на конференции AI Journey в Москве. Зарегистрироваться на соревнование и на конференцию можно здесь.

Источник: habr.com

AIJ 2020

Регистрация на мероприятие пока не началась, пожалуйста, заполните форму ниже и мы уведомим вас об открытии регистрации на AI Journey 2020

Закрыть
Закрыть
Наш сайт использует файлы cookie. Оставаясь на нашем сайта, не меняя настроек cookie в браузере, вы даете согласие на обработку файлов cookie. Кроме того, при посещении сайта происходит автоматический сбор иных данных, в том числе: технических характеристик устройства, IP-адреса, информации об используемом браузере и языке, даты и времени доступа к сайту, адресов запрашиваемых страниц и иной подобной информации.
Принять