SAGE: коррекция орфографии с помощью языковых моделей

Коррекция правописания является одной из основополагающих задач в области Natural Language Processing (NLP). Достаточно прозаичная формулировка и кажущаяся жёсткой структура орфографической системы скрывают под собой нетривиальные внутриязыковые взаимодействия, являющиеся традиционно сложными для языковых моделей. В этом посте мы расскажем, как решали эту проблему внутри SberDevices, и как это привело к созданию проекта по исследованию задачи коррекции текста. 

SAGE (Spelling correction via Augmentation and Generative distribution Emulation) — это проект, целью которого является изучение и решение проблемы коррекции правописания (далее по тексту «спеллчекинг» или «спеллчек», от английского «spellcheck»). На текущий момент мы представляем:

  • Семейство открытых предобученных генеративных моделей для коррекции правописания на русском и на английском языках:

  • Хаб с вручную размеченными параллельными датасетами для задачи коррекции правописания с естественными (сделанными человеком) ошибками, покрывающие в общей сложности около десяти текстовых источников (далее по тексту мы также можем называть их «доменами»);

  • Библиотеку SAGE с открытым исходным кодом, в которой реализованы два метода аугментации текстовых данных на основе намеренного искажения правописания, доступ к нашим открытым моделям и датасетам, а также механизм валидации моделей спеллчека;

  • Наше лучшее решение на основе модели ruM2M100–1.2B доступно в виде Cloud AI Service, оно опережает по качеству открытые решения (Yandex.Speller, HunSpell, JamSpell) и проприетарные (на момент проведения экспериментов) модели OpenAI (gpt-3.5-turbo-0301, gpt-4–0314, text-davinci-003).

Подробно наши наработки и эксперименты описаны в наших статьях A Methodology for Generative Spelling Correction via Natural Spelling Errors Emulation across Multiple Domains and Languages (review EACL 2024) и Augmentation methods for spelling corruption (Dialogue-2023).

Что будет дальше

  1. Задача

  2. Датасеты

  3. Эксперименты:

    1. Выбор моделей

    2. Задача искажения правописания:

      1. Статистический алгоритм

      2. Augmentex

    3. Предобучение

    4. Дообучение

  4. Сравнение с ChatGPT и открытыми спеллчекерами

  5. Наше лучшее решение

  6. Библиотека SAGE

  7. Заключение

Задача

Начнем с постановки. В наивной формулировке задача коррекции правописания звучит довольно просто: все слова привести к норме языка (в этом случае и далее по тексту будем называть «нормой языка» словарные эквиваленты словоформ), учитывая согласование между членами предложения*. Такая постановка однако может приводить к потере эмоциональной и даже смысловой палитры исходного текста, что на практике выражается в излишних и местами ненужных исправлениях пользовательского ввода.

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

Рассмотрим пример:

ОМГ, какооооой фильм, сто проц побегу смотртеь))

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

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

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

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

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

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

Датасеты

Кроме неоднозначной постановки задача коррекции правописания предлагает практически полное отсутствие качественных датасетов.

На момент старта нашей работы был известен только один параллельный вручную размеченный датасет — RUSpellRU с соревнования SpellRuEval Dialogue-2016. RUSpellRU отражает идею о влиянии контекста на решение об исправлении ошибки, но покрывает всего лишь один домен интернет-блогов и состоит из 4000 примеров, что кажется недостаточным для обучения качественного инструмента.

Было решено сделать новый датасет, а затем объединить все существующие, чтобы получилась коллекция датасетов (или бенчмарк) для оценки систем коррекции орфографии. Первым делом мы собрали исходный текстовый материал. Критериями были: разнообразие доменов и наличие потенциальных ошибок (то есть, например, тексты википедии брать практические бесполезно, так как опечатки и ошибки там встречаются довольно редко). Таким образом, остановились на следующих доменах:

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

  1. В первом проекте разметчику даётся исходное предложение, его необходимо переписать без ошибок;

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

Особое внимание мы уделили подбору разметчиков и разработке инструкций, по которым размечались тексты. 

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

Итоговая статистика процедуры разметки по 5 доменам представлена в таблице:

IAA — inter annotation agreement, показатель согласия между разметчиками, Total — стоимость, Overlap — пересечение, NT — количество обучающих примеров, Npage — сколько примеров помещается на странице, NC — количество контрольных заданий, NU — количество разметчиков, ART — среднее время отклика в секундах.

IAA — inter annotation agreement, показатель согласия между разметчиками, Total — стоимость, Overlap — пересечение, NT — количество обучающих примеров, Npage — сколько примеров помещается на странице, NC — количество контрольных заданий, NU — количество разметчиков, ART — среднее время отклика в секундах.

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

Так выглядит итоговая статистика числа текстов после всех процедур разметки:

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

Мы прогнали найденные сеты через второй этап ручной разметки и получили итоговую статистику по собранным корпусам:

1S-A и 2S-A обозначают наличие разметки на первом и втором этапе соответственно, Size - количество примеров, которые пошли в итоговый корпус, Length - средняя длина текстов в символах

1S-A и 2S-A обозначают наличие разметки на первом и втором этапе соответственно, Size — количество примеров, которые пошли в итоговый корпус, Length — средняя длина текстов в символах

По итогу мы создали хаб с датасетами, посвящёнными задаче коррекции правописания и объединёнными в один бенчмарк. Бенчмарк доступен на HuggingFace, и вы можете использовать его стандартными средствами библиотеки datasets:

from datasets import load_dataset

dataset = load_dataset("ai-forever/spellcheck_benchmark", "RUSpellRU”)

В бенчмарке на текущий момент доступны следующие датасеты:

  1. RUSpellRU: исходные тексты из блог-постов, коррекции были написаны квалифицированными разметчиками;

  2. MultidomainGold: исходные тексты из семи различных источников, коррекции были написаны и проверены в два этапа квалифицированными разметчиками;

  3. MedSpellchecker: исходные тексты собраны из медицинских анамнезов, коррекции были проверены квалифицированными разметчиками;

  4. GitHubTypoCorpusRu: исходные тексты собраны из коммитов на гитхабе, коррекции были проверены квалифицированными разметчиками.

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

P. S.

С английскими датасетами все получилось проще — мы взяли существующие признанные и изученные датасеты BEA60k и JFLEG, так как проблема коррекции текста для английского языка представлена шире в плане датасетов.

Эксперименты

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

Выбор моделей

Задача генеративного спеллчека, то есть генерации правильного текста по некоторому входному, хорошо ложится в парадигму sequence-to-sequence задач, поэтому очевидным выбором было попробовать описанные в этом посте модели семейства FRED-T5 (на момент написания данной статьи лучшая модель на лидерборде RussianSuperGLUE) и T5 для английского языка. 

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

M2M100 — это мультиязычная модель для перевода текста со 100 языков на 100 языков, среди которых есть и русский. Мы выбрали русские и часть английских токенов из словаря модели, убрали эмбединги, которые не соответствуют этим токенам, и переоборудовали токенайзер под новый набор токенов. После этого мы начали разработку процедуры предобучения.

Задача искажения правописания

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

Процедура организована следующим образом:

  1. Агрегация достаточно обширного корпуса текстов;

  2. Вставка в тексты корпуса искусственных ошибок, таким образом получается параллельный датасет;

  3. Предобучение модели на полученном датасете, затем дообучение на сетах с естественными ошибками. 

После нескольких экспериментов со стратегиями вставки ошибок, стали очевидны две вещи:

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

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

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

Для решения этих проблем были разработаны два метода расстановки ошибок, каждый из которых по-своему основан на статистике естественных опечаток. Оба метода подробно описаны в нашей статье с конференции Dialogue-2023, а их код вместе с демо есть в нашей открытой библиотеке SAGE. 

Статистический алгоритм

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

  1. Количество ошибок на предложение;

  2. Тип ошибки, мы выделяем 6:

    1. Вставка символа (»Исправление орфографии» → »Исправлеэние орфографии»);

    2. Удаление символа (»Исправление орфографии» → »Исправл_ние орфографии»);

    3. Замена символа (»Исправление орфографии» → »Исправляние орфографии»);

    4. Перестановка двух соседних символов местами (»Исправление орфографии» → »Исправелние орфографии»);

    5. Удаление пробела (»Исправление орфографии» → »Исправлениеорфографии»);

    6. Вставка пробела (»Исправление орфографии» → »Исправление орфографии»);

  3. Абсолютная и относительная (относительно предложения) позиции в предложении.

Далее нам нужен параллельный корпус: тип ошибки определяется относительно корректного предложения, то есть определить тип ошибки по одному исходному предложению без коррекции не получится. По всему корпусу собираем статистику по трём величинам и приводим их к дискретным распределениям. Таким образом, получается распределение числа ошибок, их типов и позиций (внутри каждого типа). Математическое описание корректности всех введённых определений и вытекающих свойств описаны в нашей статье.

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

Отдельно стоит упомянуть, как определять тип и позицию ошибки. Для этого мы:

  1. Строили матрицу Дамерау-Левенштейна между префиксами текста с ошибками и коррекции;

  2. Проходили вдоль главной диагонали начиная с правого нижнего элемента;

  3. На основании окружающих элементов определяли тип и позицию ошибки.

Такая постановка позволяет определять корректность работы алгоритма расстановки ошибок в том числе визуальными средствами: можно взять параллельный датасет, считать распределения ошибок, «обучить» статистический алгоритм, взять коррекции из исходного датасета, расставить там ошибки и сравнить полученные распределения и исходные.

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

72f92bbd6d35fa1c85b4bc13dc57fcdf.jpeg

Augmentex

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

Для удобства использования мы поделили их по принципу атомарной единицы, на которой каждый тип аугментаций работает:

  1. На уровне символов;

  2. На уровне слов.

Вы можете контролировать количество аугментаций, используя три основных параметра: min_aug, max_aug и unit_prob. Последний отвечает за количество аугментаций, указывая количество процентов слов или символов исходной строки, к которым следует применить аугментации. Первые два параметра задают нижний и верхний пределы количества применений аугментаций к фразе. Также есть четвертый параметр batch_prob, который используется в методе aug_batch и указывает процент фраз, к которым будут применены аугментации в пакетной обработке.

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

Ниже мы приводим краткое описание всех методов:

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

  2. Метод орфографической ошибки. Он использует статистику, которая представляет собой матрицу относительных частот, когда вместо правильного использования буквы X ошибочно будет использоваться буква Y. В строках есть правильные употребления, а в столбцах — ошибочные. Каждой строке индивидуально присваивается одно максимальное значение. Таким образом, наиболее частая ошибка в каждой строке будет весить 1,0. Тепловая карта будет выглядеть следующим образом:

    018856027ce199538159108e043d045a.png
  3. Метод опечатки. В его основе лежит поведение человека, когда он пропускает клавишу и случайно касается соседней клавиши. Мы создали словарь, где ключом является 1 из 33 символов русского алфавита или 1 из 10 цифр. По умолчанию каждый символ на клавиатуре имеет шесть соседей, если не учитывать крайние символы. Например, у символа «п» будет 6 соседей: «е», «н», «р», «и», «м» и «а». Поэтому в качестве значений мы помещаем список, содержащий соседние символы. При применении метода соседние символы выбираются с равной вероятностью и заменяются исходным символом.

  4. Метод удаления символа. При вызове этого метода случайным образом удаляется символ.

  5. Метод вставки случайного символа. При вызове этого метода случайным образом выбирается место для вставки и случайный символ из словаря (для русского языка это 33 буквы).

  6. Метод повторения символа. Метод основан на эвристике залипания клавиши при наборе текста и в результате повторения последовательных символов в тексте. Имеет дополнительный параметр mult_num, который отвечает за верхний предел количества повторений исходного символа. Во время применения количество повторений выбирается случайным образом из диапазона целых чисел от 1 до mult_num.

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

  8. Метод замены слов. Этот метод очень похож на свой символьный аналог — метод орфографических ошибок. Только теперь словарь в качестве ключей имеет правильно написанное слово, а значением является список пар вида (слово с ошибкой, вероятность написания этого слова). Он имеет 22187 ключей и в среднем 4,1 пары.

  9. Метод удаления слов. При применении метода вместо исходного слова возвращается пустая строка. Логика работы аналогична методу удаления символа.

  10. Метод перестановки слов. Этот метод переставляет местами два соседних слова. Он имитирует синтаксическую ошибку, когда порядок слов в предложении нарушен.

  11. Метод добавления слов-паразитов. Для реализации этого метода был собран корпус наиболее распространённых слов-паразитов из различных открытых источников. Мощность набора равна 70 словам. При его применении одно из слов-паразитов с равной вероятностью вставляется в случайное место предложения, что моделирует неграмотное употребление слов в речи. Они засоряют смысл текста, делая его нечётким и трудным для понимания.

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

С исходным кодом и примерами работы можно ознакомиться в репозитории Augmentex.

Предобучение

Мы рассказали о двух методах, с помощью которых проводили эксперименты по подготовке текстов для обучения моделей. Для того, чтобы подготовить корпуса для предобучения, мы использовали статистический метод, статистику брали с обучающей части датасета RUSpellRU. В качестве корректных текстов брали дамп русскоязычной Википедии и транскрипции русскоязычных видео. Из обоих доменов взяли по 3,5 Гб текстов, предварительно убрав все неалфавитные символы (брали русский и английский алфавиты) и тексты короче 40 символов. 

На этом корпусе мы обучали три модели: M2M100–1.2B обучалась около двух недель на 8 A100, чтобы обучить M2M100–418M нужно было 2 карты A100 в течение полутора недель, а FredT5-large обучался около недели на тех же 8 картах.

Для предобучения англоязычной модели брали 6 Гб текстов: по 3 Гб из Википедии и новостных блогов, заранее обработанных по той же методологии. T5-large обучалась аналогично FRED«у — неделю на 8 картах A100.

Дообучение

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

Дообучение мы проводили на четырёх собранных корпусах, описанных в секции про датасеты.

RUSpellRU и MultidomainGold каждый включают в себя наборы для обучения и тестирования, в то время как в MedSpellchecker и GitHubTypoCorpusRu есть только тестовый срез данных. Модели дообучались на каждом из RUSpellRU и MultidomainGold по отдельности, а также на объединённом датасете. 

Мы получили следующие результаты:

da31eb45d5949b6af482b4a317f3991b.png

Чтобы посмотреть, как методы аугментации, которые мы описали в главе Задача искажения правописания, влияют на поведение моделей во время дообучения, мы также аугментировали каждый из обучающих наборов с помощью Augmentex и статистического метода. Чтобы сравнение было как можно более честным, мы использовали две стратегии аугментации:  

  1. Add — в тексты, в которых уже есть ошибки, добавляются ещё ошибки, сгенерированные соответствующим методом, увеличивая таким образом плотность шума;

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

Табличка с результатами получилась объёмной, однако содержит интересные наблюдения:

89033f970c08e493e44586c023c36210.png

Мы оценивали в первую очередь способность алгоритмов генерации искусственных ошибок улучшать метрики существующих решений (в таблице они обозначены Best-of-FT/PT.). Как видно из результатов экспериментов, и Augmentex, и статистический метод способны улучшать результаты моделей спеллчека не только путём подготовки корпусов для предобучения, но и в качестве эффективной аугментации текстов уже содержащих естественные ошибки. 

Сравнение с ChatGPT и с открытыми спеллчекерами

Мы сравнивали наши решения для русского и английского языков с моделями от OpenAI (gpt-3.5-turbo-0301 gpt-4–0314; text-davinci-003) и с публичными системами. 

В качестве открытых корректоров для русского языка мы взяли Hunspell, Jamspell и Yandex.Speller, для английского языка — модели из проекта Neuspell (не стали брать Hunspell и Jamspell по той причине, что модели из Neuspell тоже с ними сравниваются и превосходят).

Для сравнения с моделями OpenAI были написаны три промпта (точнее сказать, оставлены после проб, ошибок и эмпирической валидации) для русского и английского языков, с которыми мы впоследствии запускали модели. Анализируя полученные результаты, мы отобрали лучшие комбинации модель-промпт и сравнились с нашими моделями и открытыми решениями. Результаты представлены в таблицах:

e1dc27358a555649c9c43c0869252ccc.png9c4a8861cb18a84687c264e72cf055be.png

Выбранные комбинации модель-промпт для русского языка:

  1. gpt-3.5-turbo-0301 — «Перепиши текст без орфографических, грамматических ошибок и опечаток, сохраняя исходный стиль текста, пунктуацию, не раскрывая аббревиатуры, не изменяя корректный текст. Напиши только правильный ответ без дополнительных объяснений.»

  2. gpt-4–0314 — »Перепиши текст без орфографических, грамматических ошибок и опечаток, сохраняя исходный стиль текста, пунктуацию, не раскрывая аббревиатуры, не изменяя корректный текст. Напиши только правильный ответ без дополнительных объяснений.»

  3. text-davinci-003 — »Перепиши текст без орфографических, грамматических ошибок и опечаток, сохраняя исходный стиль текста, пунктуацию, не раскрывая аббревиатуры, не изменяя корректный текст. Напиши только правильный ответ без дополнительных объяснений.»

Выбранные комбинации модель-промпт для английского языка:

  1. gpt-3.5-turbo-0301 — »Rewrite text without spelling errors, grammatical errors and typos, preserve the original text style, punctuation, do not open abbreviations and do not change the correct text. Do not provide any interpretation of your answer.»

  2. gpt-4–0314 — »Rewrite text without spelling errors, grammatical errors and typos, preserve the original text style, punctuation, do not open abbreviations and do not change the correct text. Do not provide any interpretation of your answer.»

  3. text-davinci-003 — »Rewrite text without spelling errors, grammatical errors and typos, preserve the original text style, punctuation, do not open abbreviations and do not change the correct text. Do not provide any interpretation of your answer.»

Наше лучшее решение

В ходе экспериментов, мы получили модель, которая обходит открытые спеллчекеры и модели OpenAI на большинстве датасетов, на которых мы проводили замеры:

1ada1a092dcb037bfd4cd869cc4ac641.png

Модель на базе M2M100–1.2B обучалась на 7 Гб параллельных текстов из Википедии и транскриптов видео, с правописанием, предварительно искажённым при помощи статистического метода, семь эпох в течение двух недель. Затем она дообучалась на комбинации датасетов RUSpellRU и MultidomainGold. 

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

Это решение мы обернули в AI Service, который доступен в Cloud по внутренней ссылке для зарегистрированных пользователей. 

Базовое использование модели в AI Service подразумевает работу с уже обученной моделью в режиме инференса. Мы предоставляем API для взаимодействия с нашей лучшей моделью, которая умеет переписывать переданный текст без ошибок. На вход подаётся оригинальный текст в поле text, модель генерирует текст без ошибок и выдаёт результат:
{'comment': ['OK'], 'origin': 'тест с ошыбкой', 'predictions': 'тест с ошибкой', 'success': True, 'version': '1.0.0'}

На сегодняшний день решение публикуется в виде beta версии и открыто для использования. Мы будем рады обратной связи ;)

SAGE

Результаты исследования мы обернули в библиотеку SAGE:

  1. Алгоритмы (статистический алгоритм (в библиотеке он называется Statistic-based spelling corruption) и Augmentex) для аугментации данных путем искажения правописания;  

  2. Доступ к четырём вручную размеченным датасетам с натуральными ошибками;

  3. Доступ к четырём открытым предобученным на задаче коррекции правописания генеративным моделям для русского и английского языков;

  4. Функционал для валидации работы моделей / систем коррекции орфографии.

Библиотека открытая, её код находится здесь, есть также демо по работе с инструментами аугментации, а также демо как пользоваться моделями и датасетами.

Вместо заключения: мы открыты для новых экспериментов и языков

Сегодня мы рассказали про проблему коррекции правописания и про то, как мы её решали с помощью генеративных языковых моделей. Мы открыты для коллаборации и готовы продолжать исследования в данной области и дообучение моделей на других языках. Если у вас есть идея, на каком языке ещё стоит дообучить спеллчекер, есть данные и новые домены, а также желание с нами коллаборировать, пишите пожалуйста нам в ТГ-коммьюнити SaluteTechGroup и авторам статьи. 

По вопросам связанным с продуктизацией решения и использованием API Cloud — пожалуйста, напишите на почту.

Ccылки:

  • Библиотека SAGE на GitHub;

  • Модели ruM2M100–1.2B, ruM2M100–418M, FredT5-large-spell, T5-large-spell на Hugging Face;

  • Хаб с датасетами для спеллчека на Hugging Face;

  • API модели доступна в AI Service в Cloud по ссылке для зарегистрированных пользователей;

  • Наши академические публикации:

#lms #языковые модели #NLP #spell-correction #проверкаорфографии #augmentation

Команда разработчиков: SberDevices, AGI NLP — идея и обучение моделей @NikitaMartynov@alenusch@nkozlova @Katerina_Kolomeytseva и команда SberDevices, Собеседника — создатели Augmentex@Andriljo, @e0xextazy <3

© Habrahabr.ru