Вновь за горизонт

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

Открывает рубрику аукцион невиданной щедрости от старшего преподавателя нашей кафедры Алексея Андреевича Сорокина. Все желающие могут совершенно свободно воспользоваться анализатором, который… Дальше сложно, и мы передаём слово автору:

— Мой анализатор на самом деле состоит из трёх моделей: морфологического анализатора, синтаксического парсера и лемматизатора. Замечателен он тем, что на данный момент является абсолютно лучшим по качеству решения всех упомянутых задач из всех моделей, работающих с русским языком. Так, точность морфологического анализа на тестовой выборке корпуса SynTagRus, на котором обычно происходит сравнение, 97.8%, а точность синтаксического разбора (Labeled Attachment Score) — 93.7%. Лемматизатор, вычисляющий нормальную форму слова, не представляет собой ничего уникального: он просто использует pymorphy, выбирая из всех его разборов тот, который лучше всего согласуется с уже найденной морфологической меткой. А вот морфологический анализатор и парсер основаны на известной модели BERT, разработанной в 2018 году компанией Google.

На самом деле каких-то научных прорывов в моей модели нет, просто удалось связать воедино уже существующие компоненты. Например, биаффинная модель определения синтаксических вершин и зависимостей была предложена как минимум Дозатом и Мэннингом в 2016 году (их статья наверняка покажется знакомой второму курсу магистратуры). Другое дело, что качество модели напрямую зависит от того, какие векторные представления слов поступают на её вход. Например, раньше для синтаксиса обычно использовали конкатенацию обучаемых посимвольных векторов и предобученных эмбеддингов (например, word2vec), потом выяснили, что контекстные эмбеддинги (прежде всего, ELMo), позволяют улучшить результат. Но проблема в том, что в отличие от word2vec или fasttext, модели ELMo существуют очень для немногих языков (русский в их числе), а самостоятельно их обучить проблематично как по времени, так и по необходимым ресурсам. Как следствие, хотелось бы иметь какие-нибудь вектора, которые обладают преимуществами ELMo, но при этом гораздо более доступны.

Здесь на помощь приходит модель BERT от Google, обучавшаяся на конкатенации 103 Википедий и поэтому применимая к любому языку из этих 103, а также их близким родственникам (разумеется, с разным успехом). Наверно, нужно рассказать про неё поподробнее: BERT обучался решать задачу предсказания пропущенного слова (точнее, токена), а также определять, является ли одно из двух предложений продолжением второго. Поскольку решение этих задач требует обширных знаний о языке, модель, обучившись, может быть донастроена практически на любую задачу компьютерной лингвистики. Для этого нужно добавить к сети компонент, преобразующий эмбеддинги BERT'а в ответ задачи (в синтаксическом анализе для этого используется упомянутый биаффинный парсер), а также обучить получившуюся модель на соответствующей выборке.

Разумеется, в процессе решения возникает много подводных камней по увязке разных компонентов в единую модель, которые я в конце концов сумел устранить. В этом мне существенно помогла адаптированная реализация BERT'а, сделанная моими коллегами по физтеховской лаборатории Михаилом Архиповым и Юрием Куратовым (они её представляли на майском «Диалоге»). В частности, они сумели дообучить исходную мультиязычную модель на русской Википедии, что улучшило её качество в применении к текстам как раз на русском языке. Вообще хочется проверить, насколько улучшенная модель для русского позволит поднять качество для других славянских языков или даже просто языков с кириллической графикой, но это задача будущих исследований.

Пока же любой желающий может использовать модель, воспользовавшись кодом по ссылке https://colab.research.google.com/drive/129VyQkImW2PZ.. Код можно запускать прямо в Google Colaboratory (не забудьте задать Runtime=GPU). Единственное, для «промышленного» использования всё-таки нужна видеокарта совсем другой мощности, чем та, что предоставляет Google всем желающим, но посмотреть анализы отдельных предложений вполне можно. Так что мои курсы по прикладным предметам точно претерпят некоторые изменения.

Фото: Алексей Сорокин

Больше разных исследований и проектов в нашем сообществе ВК: https://vk.com/msu_linguistics !