- PVSM.RU - https://www.pvsm.ru -

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

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

image [1]

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

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

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

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

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

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

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

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

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

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

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

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

Скриншот из Яндекс.Репетитора [5]

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

В искусстве ставить вопросы законоучитель Горачек был настоящий виртуоз. Он заставлял учеников перечислять в обратном порядке десять заповедей господних или требовал:
— Людвик, отвечай быстро, негодяй, какая заповедь на третьем месте от конца, перед «Не убий»?
Ярослав Гашек, «Урок закона божьего»

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

Ответ: ¡ɯǝɓn̯оɔ ʞɐɯ и

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

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

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

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

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

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

Проектировка 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 самых содержательных предложения из данного текста, и эти предложения вставляются в набор шаблонов, обрамляющих цитаты с авторской позицией.

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

Вот пример типичного сочинения, который у нас получился на такой модели (шаблоны выделены курсивом, первая фраза из тематической модели — жирным).

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

Автор иллюстрирует данную проблему на примере предложений “Когда я говорю о том, что человек не должен идти против своей совести, не должен совершать с ней сделку, я вовсе не имею в виду, что человек не может или не должен ошибаться, оступаться.” и “Я ей ответил, что не только можно, но и нужно писать об ошибках великих людей, что велик человек не тем, что он ни в чём не ошибался.”. На мой взгляд, читатель наблюдает авторскую позицию в предложении: “Но, если даже не удалось сберечь честь смолоду, её нужно и можно вернуть себе в зрелом возрасте, переломить себя, найти в себе смелость и мужество признать ошибки.”

Война — это та часть личности, которая должна дать человеку возможность иного всеобщего служения. Будущее — это освобождение, стремление к свободе, горячая любовь к родине. Это — вера в возможность Отечества. Можно сказать, что, несмотря на христианство, Пьер не может нарушить ход истории, но сделала это и в самом деле. Войну 1812 года Толстой показывает, как борьбу нового Наполеона с простым народной средой и с народом.

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

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

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

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

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

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

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

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

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

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

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

Автор: Rybolos

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/333421

Ссылки в тексте:

[1] Image: https://habr.com/ru/company/sberbank/blog/471742/

[2] конференции AI Journey: https://ai-journey.ru/

[3] призовой фонд: https://ai-journey.ru/competitions

[4] Aristo: https://allenai.org/aristo/

[5] Яндекс.Репетитора: https://yandex.ru/tutor/subject/tag/problems/?ege_number_id=173&tag_id=19

[6] https://github.com/sberbank-ai/ai-journey-2019: https://github.com/sberbank-ai/ai-journey-2019

[7] стобалльная шкала оценивания: https://4ege.ru/novosti-ege/4023-shkala-perevoda-ballov-ege.html

[8] решение: https://github.com/sberbank-ai/ai-journey-2019/tree/

[9] под ником CDS_team: https://contest.ai-journey.ru/ru/leaderboard

[10] здесь: https://ai-journey.ru/ru

[11] Источник: https://habr.com/ru/post/471742/?utm_campaign=471742&utm_source=habrahabr&utm_medium=rss