Многие современные программные продукты в которых пользователь работает с текстом оснащены системами исправления опечаток. По мере того как пользователь набирает текст, система в режиме реального времени делает исправления, а иногда указывает на потенциальную ошибку и подсказывает возможный вариант верного написания слова. От качества системы исправления опечаток может зависеть удобство печатания для пользователя, а также различные функции конкретного программного продукта, например, качество поиска, если рассматривается текст вводимый в поисковую строку.
Качественная система исправления опечаток должна брать во внимание контекст, в котором употребляется то или иное слово, так как в зависимости от контекста корректными могут быть разные варианты написания. Кроме того, окружающий контекст может значительно помочь в детекции опечатки и поиске верного варианта исправления.
Большинство современных исследований систем исправления опечаток использует техники обработки естественного языка, главным образом применяющие нейронные сети [4] [6] [14] [5] [8], в то время как более классические подходы [1] [13] [11] основаны на редакционном расстоянии и словарях.
При разработке системы исправления опечаток важной характеристикой помимо качества исправлений является также скорость работы, потому как если не брать в расчет скорость, можно будет попробовать в качестве исправления абсолютно любое слово из словаря, и оценить какое лучше. Такой подход не применим на практике.
Существующие нейросетевые архитектуры содержащие в себе авторегрессионную часть, такие как трансформер с кодировщиком и декодировщиком, имеют потенциал справляться с исправлением опечаток лучше, чем модели без этой части, так как исправление опечаток содержит в себе этап генерации верного написания, который, в свою очередь, напрямую вписывается в авторегрессионную архитектуру.
В компании JetBrains существует система исправления опечаток, поставляемая вместе со всеми IDE, действующая на устройстве пользователя. Система применяется для исправления опечаток в комментариях, а также при работе с Markdown и другими текстовыми файлами. В силу ограничений по памяти, на системы которые можно поставлять в комплекте IDE, данная модель имеет недостаточно ресурсов, чтобы применять нейросетевые или иные подходы использующие контекст для исправления опечаток. С другой стороны, если развертывать модель на удаленном сервере, то ограничений по памяти будет на порядок меньше, а это, в свою очередь, позволит построить более сильную модель, которая может использовать тяжеловесные нейронные сети и качественно учитывать контекст.
Цель работы:
Создание новых методов исправления опечаток, которые превзошли бы по качеству существующие подходы. Предложенные методы должны учесть недостатки существующих методов, объединив в себе нейронные сети с авторегрессионной частью для использования информации про контекст, а также способы ускорения работы нейронных сетей, чтобы модель могла использоваться в режиме реального времени в IDE JetBrains.
Задачи работы:
• Анализ существующих методов исправления опечаток
• Исследование нейросетевых моделей исправления опечаток
• Ускорение модели для работы в режиме реального времени
• Оценка качества предложенных методов на существующих датасетах и сравнение с существующими моделями
В этой работе было исследовано несколько способов построения модели исправления опечаток. Было показано, что char-level модели существенно проигрывают token-level моделям на этой задаче. Кроме того, было обнаружено, что если явное указание модели на слова с опечатками, повышает качество исправлений. Лучшим из рассмотренных подходов оказался Sep-Mask-All BART fine-tune, который объединяет в себе идеи использования сильной предобученной языковой модели и указания модели на слова с ошибками через механизм маскирования. На основе лучшего подхода удалось предложить эффективную, ускоренную модель ранжирования кандидатов на исправление опечатки, которая интегрируется в IDE JetBrains.
На открытом датасете реальных опечаток BEA60k было установлено, что предложенный метод превосходит по качеству исправления ошибок открыто доступные существующие методы, тем самым доказывая, что авторегрессионная генерация исправления ошибки является эффективным подходом.
Полученные модели поддерживают использование через CLI. Модели, код обучения и датасеты доступны для публичного использования и выложены в отрытый доступ по адресу: https://github.com/melnikoff-oleg/spellchecker.
[1] Atkinson K. GNU Aspell. — 2019.—Access mode: http://aspell.net/.
[2] BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension / Lewis M., Liu Y., Goyal N., Ghazvininejad M., Mohamed A., Levy O., Stoyanov V., and Zettlemoyer L. // CoRR.— 2019.— Vol. abs/1910.13461.— arXiv : 1910.13461.
[3] Belinkov Y., Bisk Y. Synthetic and Natural Noise Both Break Neural Machine Translation // CoRR. — 2017.—Vol. abs/1711.02173.—arXiv : 1711.02173.
[4] Jayanthi S. M., Pruthi D., Neubig G. NeuSpell: A Neural Spelling Correction Toolkit // CoRR. —2020.—Vol. abs/2010.11085. — arXiv : 2010.11085.
[5] Kuznetsov A., Urdiales H. Spelling Correction with Denoising Transformer // CoRR. —2021.—Vol. abs/2105.05977. — arXiv : 2105.05977.
[6] Li X., Liu H., Huang L. Context-aware Stand-alone Neural Spelling Correction // CoRR. —2020.—Vol. abs/2011.06642. — arXiv : 2011.06642.
[7] Lu J. Speller100: Zero-shot spelling correction at scale for 100-plus languages. — 2021. — Access mode: https://www.microsoft.com/en-us/research/blog/ speller100-zero-shot-spelling-correction-at-scale-for-100-plus-languages/.
[8] Misspelling Correction with Pre-trained Contextual Language Model / Hu Y., Jing X., Ko Y., and Rayz J. T. // CoRR. — 2021. — Vol. abs/2101.03204. — arXiv : 2101.03204.
[9] Misspelling Oblivious Word Embeddings / Piktus A., Edizel N. B., Bojanowski P., Grave E., Ferreira R., and Silvestri F. // Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers). — Minneapolis, Minnesota : Association for Computational Linguistics. — 2019. — June. — P. 32263234. — Access mode: https://aclanthology.org/N19-1326.
[10] Napoles C., Sakaguchi K., Tetreault J. JFLEG: A Fluency Corpus and Benchmark for Grammatical Error Correction // Proceedings of the 15th Conference of the European Chapter of the Association for Computational Linguistics: Volume 2, Short Papers. — Valencia, Spain : Association for Computational Linguistics. — 2017. — Apr. — P. 229-234. — Access mode: https://aclanthology.org/ E17-2037.
[11] Nemeth L. Hunspell. — 2002. — Access mode: http://hunspell.github.io.
[12] One Billion Word Benchmark for Measuring Progress in Statistical Language Modeling / Chelba C., Mikolov T., Schuster M., Ge Q., Brants T., and Koehn P. // CoRR.— 2013.— Vol. abs/1312.3005. — arXiv : 1312.3005.
[13] Ozinov F. Jamspell. — 2019. — Access mode: https://jamspell.com.
[14] Robsut Wrod Reocginiton via semi-Character Recurrent Neural Network / Sakaguchi K., Duh K., Post M., and Durme B. V. // CoRR. — 2016. —Vol. abs/1608.02214. — arXiv : 1608.02214.