Проверять пунктуацию для Орфограммки — приоритетная задача, хотя и очень сложная. Программа уже многому научилась и включает более 1700 пунктуационных алгоритмов по сотне правил. Чтобы продемонстрировать это, мы провели масштабное сравнение нашего сервиса с другими популярными спелл-чекерами, которые предлагают свою проверку пунктуации хотя бы с минимальной аргументацией ошибок. По итогам тестирования Орфограммка исправляет примерно в 2–16 раз лучше остальных! При этом она не просто советует пропущенный знак препинания, но и пишет развёрнутое объяснение ошибки со ссылкой на подходящее правило в справочниках.
В этой статье мы подробно расскажем о данных, этапах и принципах проверки, а также о полученных результатах.
Сбор данных
Чтобы в тестировании наверняка задействовалось множество проверок в разнообразных контекстах, требовалось собрать объёмный репрезентативный документ. При этом его содержимое должно было удовлетворять критериям:
- реальные тексты из открытых источников;
- разные жанры, которые популярны среди пользователей;
- минимум 2000 знаков с пробелами на каждый текст (статейный объём);
- достаточная плотность пунктуации в каждом тексте — количество проверяемых пунктуационных знаков (запятые, двоеточия, тире, точки с запятой), поделённое на количество всех знаков в тексте (плотность нужна, чтобы достоверно оценить работу программы: ведь если в большом тексте всего пара-тройка запятых, то их нахождение или ненахождение ещё не говорит о качестве проверки в целом).
Теперь о самом документе:
- Мы выбрали 10 типов текстов: копирайтинг, наука, научно-популярное, новость, официально-деловое, рассказ, рецензия, сочинение, википедия, инструкция.
- В каждом оригинальном тексте-кандидате исправили явные ошибки и опечатки, чтобы работать с эталонными данными.
- Оставили тексты с соответствующей эмпирически вычисленной плотностью пунктуации для каждого «жанра». Например, в научных текстах так или иначе знаков обычно меньше, в художественных — больше. В среднем получили 1,7% на текст, т. е. примерно 34 знака препинания на текст в 2000.
- Полученный документ из 153890 знаков разделили на 2 выборки:
- отладочная (85% данных) — 50 разножанровых текстов (5 текстов × 10 «жанров») или 130508 знаков; с помощью этой выборки мы улучшали текущие алгоритмы;
- контрольная (15%) — 10 разножанровых текстов или 23382 знака; по этой выборке в самом конце рассчитывали объективные показатели точности и полноты в сравнении с другими спелл-чекерами.
Разметка данных
- Тексты документа разметили специальным образом, чтобы они стали машиночитаемыми. В разметку включалась вся пунктуация, кроме знаков конца предложения, тех знаков, что относятся к типографике (например, точки с запятой в перечнях), авторскому пояснению (скобки), орфографии (например, кавычки), неотслеживаемым диалогам (тире в начале строки). Такие случаи относятся к другим или нереализуемым категориям правил.
- Документ разбили на 2439 тестов. Тест — это предложение с одним-единственным размеченным знаком препинания.
- Каждому размеченному знаку (а их по-прежнему 2439!) приписали ключ соответствующего правила из Библиотеки Орфограммки, чтобы впоследствии проверять в том числе и адекватность объяснения ошибки. Например, у теста «Узнайте(,) какие авиабилеты нельзя вернуть» ключ «7.2.1 Постановка запятой между частями сложноподчинённого предложения», а у теста «Вообще(,) ещё рано об этом говорить» — «6.1.2 Вводные слова, омонимичные членам предложения или союзам» и т. д.
Получилось 45 правил, вот 10 самых распространённых:- Постановка запятой между частями сложноподчинённого предложения.
- Запятые при однородных членах предложения, не соединенных союзами.
- Запятая между частями сложносочинённого предложения.
- Запятая в бессоюзном сложном предложении.
- Оборот после определяемого существительного.
- Обособление деепричастного оборота.
- Тире при подлежащем и сказуемом в именительном падеже.
- Запятые при вводных словах.
- Вводные слова, омонимичные членам предложения или союзам.
- Пояснительные члены предложения.
…и ещё 35 других (менее 1% на правило): тире перед «это», «вот»; вводные с распространением; прямая речь до слов и перед словами автора; однородные с повторяющимися союзами; расчленение сложного союза; двоеточие после обобщающего слова; обстоятельственные члены; сравнительные обороты; вставки; одиночное деепричастие; устойчивые сочетания, обращение и пр.
Принципы тестирования
- Предварительно из оригинальных выборок сформировали тестовые — без знаков препинания (кроме исключений, упомянутых выше).
- Тестирование на выборках запускалось дважды: совсем без пунктуации и после со знаками, проставленными по советам программы из первой итерации. (Такой принцип использовался затем со всеми спелл-чекерами.) Дело в том, что в условиях максимальной неопределённости — без пунктуации — тяжело выстроить сразу всю модель предложения. Поэтому сначала Орфограммка исправляет наиболее вероятные ошибки, а затем и менее очевидные.
Параметры оценивания
При подсчёте срабатываний учитывался каждый найденный размеченный знак, поскольку важно определять, к примеру, не только начало обособленного оборота, но и конец.
Если сервис советовал правильный или, по крайней мере, допустимый знак препинания хотя бы с минимальным обоснованием, засчитывалось +1 истинное срабатывание (true positive, TP). Когда предлагал знак совсем не там, не тот и из неподходящего правила, +1 ложное (false positive, FP). В случае игнорирования нужного места, +1 ненайденное (false negative, FN).
Проверку оценивали по трём показателям:
- Точность (Precision)— сколько раз программа советует верный или допустимый знак в подходящем месте.
Precision = TP / (TP + FP)
- Полнота (Recall)— сколько нашла правильных знаков препинания из пропущенных, а сколько мест проигнорировала.
Recall = TP / (TP + FN)
- F-мера — это среднее гармоническое между точностью и полнотой. Причём важнее всего именно эта оценка. Представьте: можно ведь получить 100-процентную полноту, просто советуя запятую в каждом пробеле, только вот точность тогда будет гораздо ниже. Так что для объективности вводится сбалансированный показатель, который учитывает и полноту, и точность.
F-мера = 2 × Precision × Recall / (Precision + Recall)
Этапы тестирования
Отладка. Орфограммка изначально уже содержала более тысячи алгоритмов, поскольку проверка пунктуации существует много лет. В процессе же отладки мы совершенствовали текущую базу, сверяясь с образцами из соответствующей выборки. Её тесты нужны были прежде всего для понимания, что стоит дорабатывать. При этом, конечно, никакой алгоритм не создавался «костылями» под исходный контекст. Это было бы слишком просто и совсем нечестно. Орфограммка рассматривает предложения, насколько это возможно, обезличенно. Программа выделяет его составляющие, связывает их отношениями, подключая машинное обучение в сложных случаях. По итогам тестирования отладочной выборки F-мера Орфограммки достигла 94,3% при полноте в 89,7% и точности — 99,3%. Проще говоря, если бы в выборке было 100 пропущенных запятых, сервис нашёл бы 90 и только одну посоветовал бы напрасно. Орфограммка может ошибиться, когда, например, недостаточно знаков для понимания структуры и лучше выделить подозрительное место, чем пропустить.
Контроль. После продолжительного и глубокого этапа отладки алгоритмов Орфограммка была готова к контролю. На «сырой» выборке мы сравнили результаты нашей проверки пунктуации с другими популярными ресурсами. Важно подчеркнуть, что Орфограммка — единственная программа, которая проверяет знаки препинания, подробно объясняя ошибки и ссылаясь на соответствующие параграфы справочников. А если потенциальных правил может быть несколько, пишет про все. (Ведь в большом тексте «вообще без знаков» бывает непросто сориентироваться даже человеку, не то что компьютеру.) Такой подбор нужного правила, конечно, на порядок усложняет реализацию проверок, но делает их более осмысленными и полезными для наших пользователей. Орфограммка помогает разобраться и стать грамотнее.
Результаты сравнения
По результатам контрольного тестирования F-мера Орфограммки составила 89,9% при полноте 81,9% и точности 99,7%! Другими словами, из условно 100 непоставленных знаков Орфограммка смогла исправить 82 и лишь одну запятую предложила зря. На финальном графике видно, что показатель нашей программы значительно выше других сервисов (на 39–80%). А значит (ещё и с учётом обстоятельных аннотаций!), проверка пунктуации Орфограммки — наиболее качественная.
Отчёт о проверке (часть срабатываний появляется при повторной проверке после простановки текущих советуемых знаков).
Обоснование сложности проверки пунктуации
Проведение синтаксического и пунктуационного анализа — непростая задача для компьютера. Особенно когда это сотни правил с исключениями, помноженные на многострочность предложений с ошибками. Поэтому в любом случае программа автоматической проверки текста с уже зашитой теорией — это большой помощник. И в то же время веб-сервисы пока находят не все ошибки или видят их там, где всё в порядке... Приведём лишь часть препятствий, с которыми сталкивается Орфограммка, проверяя пунктуацию.
- Связывать слова на большом расстоянии друг от друга: ему не могло даже прийти в голову объяснять мотивы своего поведения; собирали воду(,) чтобы измотанным родителям не приходилось далеко лететь(,) и ею же подманивали насекомых.
- Учитывать инверсию членов предложения (потому что свободный порядок слов!): поскольку отстаивать свои интересы на чужбине будет очень даже непросто; должен ведь был он проститься с ним.
- Находить границу оборотов, простого предложения в составе сложного, придаточной части: если вспомнить материал не удаётся в течение 2–3 минут…, но сократить до 2–3 минут, если подумать, материал не удаётся.
- Подозревать разные ошибки и всё равно размечать члены предложения: может (далеко не всем) понравится (→ понравиться) — это не однородные, не вводное со сказуемым, а составное глагольное сказуемое.
- Приписывать ошибкам нужные правила с учётом неоднозначности: мысль о нём дарит теплоту(,) и свет(,) даёт чувство покоя и умиротворения — мысль дарит теплоту и свет? или свет даёт покой? или, например, учёный биолог — это учёный, биолог, или учёный-биолог, или учёный — биолог?
- Видеть тонкости омонимии при идентичности структуры: их поощрения, повышения социального статуса учителей, но поощрения продвижения кандидатов на следующий этап.
- Выделять грамматическую основу, даже если предложение перегружено, а сказуемые не глагольные формы: …не требует никаких описаний(,) он просто гениальный актёр!
- Выявлять пояснительные и вводные конструкции, которые могут ими и не быть (зависит от авторского решения и акцентов): повторять материал до сна и утром(,) на свежую голову; Так, компания обещала производить пять тысяч моделей (= например), но Так компания диверсифицирует риски (= таким образом).
- Учитывать многообразие устойчивых и неразложимых сочетаний: он сделал как следует, но он знал, как следует (с ним) говорить.
- Распознавать вставки со скобками или кавычками, а также латиницу, окказионализмы и неизвестные слова, которых нет ни в одном словаре.
А ведь есть и правила, напрямую зависящие от семантики, которая подвластна только автору текста или эксперту-филологу. По таким многочисленным причинам Орфограммка, как и другие программы, не всегда отрабатывает безупречно. Поэтому пока не получается гарантировать 80 или 90% для любого текста. Но мы всё время работаем над улучшениями, и дальше — только больше.
Подробнее о том, как проверить пунктуацию в Орфограммке, можно узнать здесь.