Различают следующие виды ошибок в русском языке [1, 2]:
Вид ошибки | Раздел русского языка |
---|---|
Орфографические ошибки | Орфография |
Пунктуационные ошибки | Синтаксис |
Грамматические ошибки | Морфология |
Речевые ошибки | Лексика |
Стилистические ошибки | Лексика и Развитие речи |
Логические ошибки | Развитие речи |
Фактические ошибки | Развитие речи |
Нарушение абзацного членения | Синтаксис и Развитие речи |
Бедность и однообразие синтаксических конструкций | Развитие речи |
С ошибкой | Без ошибки |
---|---|
Внизапно пашел снег. | Внезапно пошел снег. |
Прелители грачи. | Прилетели грачи. |
Он неуспел растроится. | Он не успел расстроиться. |
С ошибкой | Без ошибки |
---|---|
Красные ягоды листья узорные… | Красные ягоды, листья узорные… |
Всё деревья, кусты, листва на земле трепетало от порывистого ветра. | Всё: деревья, кусты, листва на земле – трепетало от порывистого ветра. |
Инспектор ответил: Я не согласен. | Инспектор ответил: «Я не согласен». |
Вид ошибки | С ошибкой | Без ошибки |
---|---|---|
Ошибочное словообразование | Трудолюбимый Равнодушество Подскользнуться Военоначальник | Трудолюбивый Равнодушие Поскользнуться Военачальник |
Ошибочное образование формы существительного | Многие чуда техники | Многие чудеса техники |
Ошибочное образование формы прилагательного | Красивше выглядит | Красивее выглядит |
Ошибочное образование формы числительного | Обоим сестрам | Обеим сестрам |
Ошибочное образование формы местоимения | Ихние дети | Их дети |
Ошибочное образование формы глагола | По вечерам я дремаю у телевизора. | По вечерам я дремлю у телевизора. |
Нарушение согласования | Я знаком с группой ребят, увлекающимися джазом. | Я знаком с группой ребят, увлекающихся джазом |
Нарушение управления | повествует читателей | повествует читателям |
Нарушение связи между подлежащим и сказуемым | Кто это пришла? | Кто это пришел? |
Нарушение способа выражения сказуемого в отдельных конструкциях | Все были рады, счастливы и весёлые. | Все были рады, счастливы и веселы. |
Ошибки в построении предложения с однородными членами | Страна любила и гордилась поэтом. Построена школа и больница. | Страна любила поэта и гордилась им. Построены школа и больница |
Ошибки в построении предложения с деепричастным оборотом | Читая этот текст, возникает такое чувство… | Когда я читаю этот текст, возникает такое чувство… |
Ошибки в построении предложения с причастным оборотом | Узкая дорожка была покрыта проваливающимся снегом под ногами. | Узкая дорожка была покрыта проваливающимся под ногами снегом. |
Ошибки в построении сложного предложения | Эта книга научила меня ценить и уважать друзей, которую я прочитал еще в детстве. | Эта книга, которую я прочитал еще в детстве, научила меня ценить и уважать друзей. |
Смешение прямой и косвенной речи | Автор сказал, что я не согласен с мнением рецензента. | Автор сказал, что он не согласен с мнением рецензента. |
Нарушение границ предложения | Когда герой опомнился. Было уже поздно. | Когда герой опомнился, было уже поздно. |
Нарушение видовременной соотнесённости глагольных форм | Замирает на мгновение сердце и вдруг застучит вновь. | Замирает на мгновение сердце и вдруг стучит вновь. |
Неверное употребление местоимений | Данный текст написал В. Белов. Он относится к художественному стилю. | Данный текст написал В. Белов. Текст относится к художественному стилю. |
С ошибкой | Без ошибки |
---|---|
Благодаря творениям потрясающих авторов Серебряного века, мы слышим «громкую мелодию эпохи». | Благодаря великим произведениям известных поэтов Серебряного века, мы слышим «громкую мелодию эпохи». |
Правда зачастую скрыта в глубинах произведения. | Правда часто скрыта писателем между строк произведения. |
С ошибкой | Без ошибки |
---|---|
Попечитель богоугодных заведений подлизывается к ревизору. | Попечитель богоугодных заведений заискивает перед ревизором. |
В этом эпизоде главный герой накосячил. | В этом эпизоде главный герой допустил просчет / совершил ошибку. |
Стилистический и смысловой разнобой между частями предложения | |
Рыжий, толстый, здоровый, с лоснящимся лицом, певец Таманьо привлекал Серова как личность огромной внутренней энергии. | Огромная внутренняя энергия, которой привлекал Серова певец Таманьо, сказывалась и в его внешности: массивный, с буйной рыжей шевелюрой, с брызжущим здоровьем лицом. |
С ошибкой | Без ошибки |
---|---|
Вспоминаются слова известной песни: «Жить без любви, может и просто, но как на свете без любви прожить?» | Вспоминаются слова известной песни: «Жить без любви, быть может, просто, но как на свете без любви прожить?» |
Трагедия А.Н. Островского «Гроза» была совершенно новым явлением в русской литературе. | Драма А.Н.Островского « Гроза» была совершенно новым явлением в русской литературе. |
Расстояние Левенштейна, или расстояние редактирования между двумя строками – это минимальное количество операций вставки, удаления и замены символа на другой, необходимых для превращения одной строки в другую [3].
Пусть S1 и S2 – две строки длиной M и N соответственно. Тогда расстояние Левенштейна d(S1, S2) можно рассчитать по следующей рекуррентной формуле (первый элемент строки имеет номер 1):
d(S1, S2) = D(M, N),
где
где m(a, b) = 0 , если a = b, или 1 – в противном случае.
Здесь шаг по i символизирует удаление из первой строки, по j – вставку в первую строку, а шаг по обоим индексам символизирует замену символа или отсутствие изменений.
Справедливы следующий утверждения:
Выполняется поиск проверяемого слова в словаре, и если слово не найдено, то оно подчеркивается. Кандидаты на замену слова с ошибкой (ССО) определяются как слова из словаря, наиболее близкие к ССО. Близость устанавливается по расстоянию Левенштейна [4].
Достоинством метода является его простота.
Недостатки:
Пример: Microsoft Word. Приложение не исправляет слово с ошибкой, но предлагает выбор для его замены.
Каждому слову русского языка сопоставляются всевозможные варианты ошибочных написаний, а также им присваиваются вероятности их появления (существуют наборы данных реальных ошибок пользователей и частота их появлений). Введенное слово с ошибкой исправляется на наиболее вероятное корректное слово.
Достоинством метода является простота использования.
Недостатки:
Вычисляются расстояния Левенштейна от слова с ошибкой до каждого слова словаря, а затем для замены из словаря выбирается слово с минимальным расстоянием Левенштейна. При обнаружении нескольких вариантов замен используются дополнительные критерии выбора. Этот способ правки необычайно дорог [5].
Если слово не найдено в словаре, то генерируются все возможные комбинации слова с заданным расстоянием редактирования (операции удаления, перестановки, замены и вставки) и выполняется их поиск в словаре [6]. Если эти шаги приводят к слову, содержащемуся в словаре, то оценивается расстояние до исходного слова. Чтобы измерить близость слов, используется расстояние Левенштейна или одна из его модификаций [7]. Из числа найденных слов для замены выбирается слово с наименьшим расстоянием Левенштейна.
Метод весьма ресурсоемок. Так, для слова длины n, размера алфавита a, расстояния редактирования d = 1, будут выполнены n удалений букв, n – 1 перестановок, a * n изменений и a * (n + 1) вставок. В общей сложности число получаемых модификаций исходного слова равно 2n + 2an + a – 1. Число модификаций будет еще больше, если добавить операцию вставки пробела.
Этот способ хоть и лучше наивного подхода, однако все же весьма дорогостоящий по времени поиска и зависит от языка. Так для n = 9, a = 36, d = 2 получается 114 324 комбинации. Алфавит используется для генерации комбинаций, и он может быть очень большим. Так, в китайском языке а = 70'000 Unicode Han-символов.
Достоинство алгоритма: использование расстояния Левенштейна, что повышает точность ответов.
Недостатки:
Пример: Спеллчекер Питера Норвига.
Орфографическая коррекция на основе симметричного удаления (Symmetric Delete Spelling Correction - SymSpell) использует модификации исходного слова с заданным расстоянием редактирования, полученные только в результате применения операции удаления символа.
SymSpell использует тот факт, что расстояние между двумя выражениями симметрично: добавление символа в словаре эквивалентно удалению символа из входной строки и наоборот. Поэтому мы можем с обеих сторон ограничить преобразование только удалением.
Генерация модификаций слов словаря выполняется единожды на этапе инициализации SymSpell. Далее сгенерированные модификации проверяемого слова сравниваются с модификациями, полученными на предварительном этапе.
Рассмотрим следующий пример с заменой (в примере будет использоваться расстояние редактирования равное единице). Пусть в оригинальном словаре содержится слово тест. А было введено слово темт. В индексе, полученном на предварительном этапе, будут находится все «удаления» слова тест, а именно: ест, тст, тет, тес. Для слова темт «удаления» будут следующими: емт, тмт, тет, тем. Поскольку удаление тет содержится в индексе, то это означает, что слову с опечаткой темт соответствует слово тест.
Число модификаций исходного слова, получаемых в результате удалений, не зависит от размера алфавита и вычисляется по следующей формуле:
x = Ckd,
где n – длина слова, d – расстояние редактирования.
Так, при n = 9, d = 2 получим x = 36, что на несколько порядков меньше аналогичного показателя стратегии промаха для тех же значений n и d: x = 114'324.
Обобщая вышесказанное, можно утверждать, что стоимость данного подхода заключается лишь во времени предварительного расчета и объеме хранилища для всех удалений каждого слова в словаре.
Таким образом, например, для максимального расстояния редактирования 2 и средней длины слова в 5, и 100 000 записей в словаре необходимо дополнительно сохранить 1'500'000 «удалений».
Система исправления ошибок, использующая рассматриваемый подход, включает следующие таблицы:
- словарь с правильными написаниями слов;
- таблицу всех модификаций слов словаря.
Таблица модификаций исходных слов формируется по следующему алгоритму:
Замечание. В алгоритме учтено, что разные слова в словаре могут приводить к одной и той же модификации.
В рассматриваемом подходе список кандидатов на замену слова с ошибкой формируется по следующему алгоритму:
В качестве исправления исходного слова, используется первое слово в отсортированном списке кандидатов.
Ускорение поиска в таблице модификаций и в словаре достигается за счет их индексирования. Для выбора замены из списка кандидатов можно использовать частоту встречаемости слов, которую можно хранить в словаре.
Приведенный алгоритм формирования списка слов-кандидатов является достаточно быстрым, о чем говорят следующие факторы:
Если индекс основан на таблице хэшей, поиск по которой занимает константное О(1) время, то алгоритм SymSpell имеет вычислительную сложность О(1), в то время как, например, алгоритм, основанный на BK-деревьях имеет вычислительную сложность О(log(размер_словаря)) [4, 8].
Является модификацией стратегии промаха. Описываются всевозможные правила согласования слов русского языка, с учетом их морфологических признаков. Среди кандидатов на исправление опечаток выбирается тот, который наилучшим образом подходит описанным правилам.
Достоинство: учет контекста.
Недостаток: сложность (почти невозможность) реализации.
Модель языка умеет отвечать на вопрос, с какой вероятностью данное предложение может встретится в языке. На сегодняшний день в основном используются два подхода: модели на основе N-грамм [9] и применение искусственного интеллекта на основе нейросетей [10].
а) N-граммная модель.
N-грамма – это последовательность из n элементов. Например, последовательность звуков, слогов, слов или букв.
N-граммная модель работает следующим образом. По тексту, используемому для обучения модели, проходим окном размером в N слов и подсчитываем количество обнаружений каждой n-граммы. При запросе к модели аналогичным образом проходим окном по предложению и считаем произведение вероятностей всех n-грамм. Вероятность встретить n-грамму оцениваем по количеству таких n-грамм в обучающем тексте.
Вероятность P(w1, ..., wm) встретить предложение (w1,..., wm) из m слов примерно равна произведению всех n-грамм размера n, из которых состоит это предложение:
Вероятность каждой n-граммы определяется через количество обнаружений n-граммы по отношению к количеству нахождений такой же n-граммы, но без последнего слова:
На практике в чистом виде такую модель не используют, так как у неё есть следующая проблема. Если какая-то n-грамма не встречалась в обучающем тексте, то всё предложение сразу же получит нулевую вероятность. Для решения этой проблемы используют один из вариантов сглаживания. В простом виде – это добавление единицы к частоте встречаемости всех n-грамм, в более сложном – использование n-грамм более низкого порядка при отсутствии n-граммы высокого порядка.
Самая популярная техника сглаживания – Kneser–Ney smoothing [11]. Однако она требует для каждой n-граммы хранить дополнительную информацию, а выигрыш по сравнению с более простым сглаживанием получается незначительным (по крайней мере в экспериментах с небольшими моделями, до 50 миллионов n-грамм). Для простоты в качестве сглаживания будем считать вероятность каждой n-граммы как произведение n-грамм всех порядков, например, для триграмм:
Теперь, имея модель языка, будем выбирать среди кандидатов на исправление опечаток того, для которого модель языка с учетом контекста будет выдавать наилучшую оценку. Кроме того, добавим к оценке небольшой штраф за изменение исходного слова, чтобы избежать большого числа ложных срабатываний. Изменение данного штрафа позволяет регулировать процент ложных срабатываний: например, в текстовом редакторе можно оставить процент ложных срабатываний выше, а для автоматического исправления текстов ниже.
Достоинство алгоритма: учет контекста.
Недостатки:
Пример: JamSpell.
б) Модель на основе ИИ.
Для учета контекста можно использовать нейросеть типа LSTM (Long Short Term Memory) – нейросеть с короткой и длинной памятью [12]. Суть LSTM в том, что нейроны этой сети имеют определенный параметр, который запоминает, о чем идет речь в том или ином предложении [13, 14]. Важным аспектом является то, какие слова в предложении значимы, а какие нет. Для этого используется NLP (Natural Language Processing) – обработка естественного языка. Техника NLP позволяет определить интонацию предложения, понять, о чем идет речь, и выделить ключевые слова.
Достоинство: учет контекста.
Недостаток: сложность реализации.
Примеры: Spell-Checker [15], Яндекс.Спеллер – использует машинное обучение и библиотеку машинного обучения CatBoost [16].
Алгоритм пригоден для исправления орфографических ошибок. Все буквы можно разбить на классы эквивалентности по принципу фонетической близости звуков, которым они соответствуют. В границах каждого класса существует некоторая не очень маленькая вероятность того, что на месте одной буквы класса пользователь, совершив ошибку, напишет другую. Выбрав из каждого класса одного представителя и заменив все буквы в слове на представителя их класса, получаем фонетическую метку [17].
Здесь и далее фонетические метки на любой стадии обработки будут заключаться в угловые скобки. Ошибочное написание слов будет предваряться знаком *.
Правила компиляции фонетической метки:
1. Слитно, раздельно, через дефис.
Большой класс орфографических ошибок – написание раздельно/слитно/через дефис. Поэтому при компиляции фонетической метки все символы, кроме русских букв, удаляются. Этот пункт применим к словарным записям, представляющих собой устойчивые группы из нескольких слов, например, "потому что"; "в течение"; "за границу".
Например:
Рис. 1. Тепловая карта букв «я» и «ё» и их ошибочных написаний
Фонетически буква «Ё» может передавать два звука «ЙОТ»-«О». И если посмотреть по статистике пользовательских ошибок, то пара «Ё»-«О» является наиболее вероятной. Но на практике, если ваш словарь не содержит буквы Ё или пользователи не используют Ё при вводе, то лучше сводить «Ё» к «И»-классу (ы, и, е, э).Рис. 2. Тепловая карта пар эталон-ошибка и предшествующим им буквам
7. Оглушение согласных:Недостатки:
Примеры: Soundex, Metaphone, Double Metaphone.
Структура дерева имеет следующий вид: каждый узел представляет собою пару «ключ, значение». В ключе записываются буквы слов, а значениями являются элементы дерева [18].
Пары «ключ, значение» формируются следующим образом: берётся первый символ слова, записываем в ключ узла, далее получаем ссылку на соответствующее поддерево (при необходимости оно тут же и создаётся). Рекурсивно записываем остаток строки в это поддерево. Когда строка исчерпана, к последнему узлу добавляется «знак остановки» – ключ '$' с пустым поддеревом.
Если представить дерево как некую многократно разветвляющуюся дорогу, то функция поиска слова – путник, идущий по этой дороге. Путнику дан маршрут (искомое слово), и в соответствии с ним он переходит от узла к узлу, зачеркивая пройденные буквы маршрута. Если буквы кончились, остаётся проверить, виден ли «знак остановки».
Теперь представим, что клоны путника одновременно отправляются во все стороны сразу. Каждый из его клонов на каждой развилке действует по одной схеме, и так до тех пор, пока в каждую из конечных остановок (то есть листьев дерева) кто-нибудь не придёт. Общее количество клонов путника равно количеству слов, записанных в дерево, и каждый из них пройдёт по индивидуальному пути.
Пусть всем им изначально задано одно и то же слово-маршрут. При каждом переходе каждый путник, как и раньше, зачеркивает по одной букве в своей копии маршрута. Но если реальное направление перехода не совпадает с зачёркнутой буквой, путник получает штраф. В результате в конце пути у каждого будет накоплена некоторая задолженность. Выстроим всех в ряд, отсортировав по возрастанию этой величины.
Если искомое слово присутствует в словаре, то один путник пройдёт весь путь без штрафов – в отсортированном списке он будет первым. Если слово в словаре отсутствует, то лидировать будет тот, кто прошёл путь с минимальным количеством нарушений.
Смысл в том, что путь, пройденный лидером, будет ближайшим исправлением заданного слова (или самим этим словом, если опечаток нет), а количество нарушений (отклонений от заданного маршрута) – количеством опечаток. Таким образом осуществляется нечеткий поиск.
Достоинства алгоритма:
Недостатки:
В [19] проектируется нейронная сеть, находящее слово по его левому контексту. В системах проверки правописания это слово может быть использовано для пополнения списка кандидатов на замещение слова с ошибкой. Предварительно по технологии word2vec в [19] создается словарь с векторным представлением слов. Далее проектируется и обучается нейронная сеть, принимающая на входе левый контекст слова и выдающая на выходе слово, с наибольшей вероятностью отвечающее этому контексту. После этого в word2vec-словаре находятся слова, семантически близкие в полученному от нейронной сети слову. Из этих слов предлагается выбрать слово, продолжающее полученный на входе нейронной сети левый контекст. Глубина левого контекста, взятая в [19], равна 1 (на вход сети подается одно слово).
Достоинства:
Недостатки: