Оценка возможностей морфологических анализаторов для успешного определения частей речи слов и прочих характеристик предложения.
Ключевые слова: NLP, морфологический анализ, NLTK, нейронные сети.
Assessing the abilities of morphological analyzers to successfully identify word’s part of speech and other sentence characteristics.
Keywords: NLP, morphological analysis, NLTK, neural networks.
Введение
Одной из возможных проблем, возникающих при обучении интеллектуальных систем человеком, является слабая сформированность поступающей информации. В особенности это касается человеческой речи. Я сейчас говорю не о точности распознавания голоса в текст, а о том, как данный текст можно подать в более удобоваримом состоянии для обучения или обработки информационной системой, нейронной сетью.
Способность выделить смысл из целого предложения является основополагающим фактором для возможности как-то классифицировать и сохранить/обрабатывать информацию, работая не с какими-то упрощенными ключевыми конструкциями, а распознавания и выделения конкретного запроса. Основополагающим для обработки является грамматическая основа предложения, описывающая субъект и его состояние.
В переводе с англ. Natural Language Processing обозначает методы обработки человеческого языка в той форме, в какой он есть, безо всяких подстраиваний под шаблон, язык, на котором мы разговариваем друг с другом. Благодаря данным методам обработки возможно создавать системы распознавания речи и текста, обработки документов, машинного перевода, выявления спама, распознавания сущностей или ответов на вопросы и т. д.
А можно ли как-то упростить поиск того самого смысла или предиката (или грамматической основы)? Можно, если предусмотреть возможные построения предложения (возможные подлежащие и возможные сказуемые), во всех случаях они описываются частью речи или связкой частей речи с определенным падежом, родом ли или частью речи. В самом простейшем случае это будут существительное в именительном падеже и глагол изъявительного наклонения того же рода, но отнюдь далеко не всегда.
Методика исследований
Возникает мысль, что если бы мы могли получить сведения о каждом слове в предложении, о части речи, о падеже или наклонении, о роде, о числе, то мы, в теории, могли бы без труда определить грамматическую основу предложения. Программа, скрипт, библиотека-методов, другая сложная система занимающаяся этим, будет называться морфологическим анализатором.
Возьмем это за основу и перейдем к более далекой от лингвистики области, но куда более интересной нам. Рассмотрим же возможность проведения анализа текстовой информации при помощи морфологического анализа.
Конечно, можно разработать собственные методы морфологического анализа, или создать свою нейронную сеть, натренированную на анализ (и собственную методику), можно воспользоваться библиотеками, предназначенными для такого обучения (например OpenCorpora), а можно использовать готовые морфологические анализаторы, разрабатываемые под конкретные языки программирования.
Раз уж речь зашла о программировании, впредь и далее все примеры будут действительны только в отношении Python, так как все дальнейшие изыскания проводились на нем, все библиотеки использовались для его третьей версии. Однако в целом мне не хочется акцентировать внимание на конкретном языке программирования, так как аналоги есть и в других средах разработки. Мной же использовался Python, так как также рассматривалась возможность включения результатов морфологического анализа в более сложный проект, также написанный на этом языке.
Для оценки правильности работы анализатора, его парсинг слов и предложения сравнивался с заранее подготовленным для этого эталон.
Были рассмотрены две библиотеки, это NLTK(версии 3.5) и Pymorphy (Версия, работающая под третьим python’ом называется pymorphy2). Средняя вероятность успешного разбора тем и иным анализатором показана на Рис.1. Стоит отметить что ожидаемо результат далек от совершенства, но не так уж и плох.
Рис. 1: Средняя вероятность ошибки при разборе разными средствами
Также следует отметить зависимости нарастания ошибки разбора при увеличении длины вводимого предложения (Рис.2), и зависимость средней оценки точности разбора (Рис. 3–4). Подробнее обратим внимание на последнее: сама по себе эта оценка зависит от изучаемого материала и характеризует вероятность данного употребления в тексте на основе библиотечных прецедентов.
Рис. 2: Процент выбора верного разбора при различной длине разбираемого материала (1=100 %)
Дело в том, что в речи есть такие слова, как омонимы, которые могут обозначать совершенно разные части речи в совершенно разных формах, при этом имея абсолютно идентичное написание. Оценка же правильности разбора будет зависеть от используемой библиотеки обучения. Это одна из возможных причин иной интерпретации контекста предложения и его частей, коих может быть очень много, ведь даже люди порой не всегда понимают тот смысл который был заложен в слова изначально.
На втором рисунке можно заметить, что для коротких предложений в 6–7 слов достигается наибольшая точность анализа. Т. е. для тех предложений, которые достаточно распространены, чтобы передавать основную мысль простыми конструкциями, исключив неоднозначность, вызванную краткостью, и без осложненности конструкциями, разбор которых будет происходить труднее.
Рис. 3: Увеличение вероятности неправильного разбора слова в зависимости от длины анализируемой последовательности для модуля Pymorphy
Рис. 4: Увеличение вероятности неправильного разбора слова в зависимости от длины анализируемой последовательности для модуля NLTK
Аналогичную картину на Рис.3 и на Рис.4 заметно, что Pymorphy куда более чувствителен к длине предложения. И дело тут не только в используемых алгоритмах или общем качестве, NLTK работает на основе английского языка, данные к которому и из которого в случае русского языка нужно переводить (автономно), что в свою очередь не только занимает больше времени, но также и сглаживает возможную неточность, образуя этакий фильтр, поскольку в современных переводчиках используется похожая технология.
Оценить ошибку F процентно можно по следующей формуле:
где f i — это ошибки при данной длине предложения в каждом из испытаний (при n =2 это f 1 и f 2 ), k с — это средние оценки достоверности разбора слов в данном предложении, N — объем выборки, K — количество разбираемых слов.
где n — количество испытаний, f i — количество ошибок на каждом из испытаний, L — достоверность разбора.
где f j — характеристика слова, показывающая ошибочный разбор или нет.
Для того чтобы увеличить вероятность правильного разбора слова можно выделить несколько локальных решений:
— Разбивать сложные конструкции на более простые.
— Проводить поверхностный анализ частей речи, выделяя те, что получается установить достоверно, и согласно ним косвенно устанавливать наиболее точный разбор возникших неоднозначностей.
— Использовать комбинирование методик анализа текста для разрешения возникающих неопределенностей
Стоит вспомнить о том, как хорошо на данный момент развились онлайн-сервисы перевода, и перспектива использования nltk заиграла новыми красками. Так как нам на самом деле нужен смысл предложения, то некоторую точность придется оставить при переводе, сочтем это допустимым, но только в том случае когда после обратного перевода сохранился смысл. В английском языке несколько иное представление о грамматической основе предложения. В простейшем случае это подлежащее и сказуемое, однако выделяют предикат предложения и полный предикатив, первое и будет содержать самую важную информацию, а его полная вариация содержит уточняющие факторы. Сложные механики перевода по словарям и синонимичным выражениям сделают свое дело.
С целью установить, какое из API предпочтительнее использовать в своих целях, было решено провести небольшое исследование зависимостей разных переводчиков, а точнее установить, как они будут справляться с задачами разного характера:
— насколько точным будет перевод, как дословным, так и передачей общего смысла. Отметим сразу, что была подобрана база из не самых простых предложений, зачастую имелись иносказания, осложнения или не одна грамматическая основа. Это было сделано с той целью, чтобы рассмотреть в самых разных условиях результаты, так как резонно предположить, что на самых простых предложениях проблем не будет никаких.
— зависимость перевода от длины предложения, от количества слов.
— зависимость перевода от осложненности предложения(обороты, перечисления, союзы, вводные слова и т. д.)
— зависимость перевода от того, сложное предложение(несколько грамматических основ) или простое(одна).
А также сравнить взаимосвязь этих факторов.
Таблица 1
Пример результатов для выявления взаимосвязанностей при переводе через распространенные API
№ |
Кол-во слов |
Осложненность да/нет (1;0) |
Сложное предложение да/нет(1;0) |
Точность перевода (-1;0 … 1) Yandex |
|
DeepL |
1 |
3 |
0 |
0 |
1 |
0.7 |
0.8 |
2 |
11 |
0 |
1 |
1 |
1 |
0.7 |
3 |
9 |
1 |
0 |
0 |
1 |
0.8 |
4 |
6 |
0 |
0 |
1 |
1 |
1 |
5 |
12 |
0 |
1 |
0.5 |
0 |
0 |
... |
... |
... |
... |
... |
... |
... |
90 |
16 |
1 |
1 |
0.6 |
0.9 |
0 |
По результатам были построены несколько графиков для анализа.
Общая зависимость усредненных оценок точности двойного перевода от количества слов в предложении показана на Рис. 5. Можно заметить, что перевод сервисом Google более правильно сохраняет смысл предложения, часто заменяя слова синонимами, пусть и несколько меняющих эмоциональную окраску, а также это позволяет избежать внезапных неверных интерпретаций слов, в отличие от сервиса Yandex.
Рис. 5. Общая зависимость точности двойного перевода от количества слов в предложении через различные API (-1: перевод неверный; 0: сохранен общий смысл, получены заметные искажения или несогласованность второстепенных членов предложения; 1: при переводе сохранен смысл, не нарушена структура предложения или перевод дословно совпал)
Наиболее предсказуемым и поддающийся анализу взаимосвязанностей также оказался сервис Google Translate (Рис. 6), в то время как у других сервисов тоже прослеживаются похожие тенденции, но куда слабее. Так можно заметить, что распространенное предложение обрабатывается лучше нераспространенного, наличие нескольких грамматических основ — слабо влияющий фактор, а вот осложненность предложения — напротив, ухудшает результат.
Рис. 6. Взаимная зависимость характеристик на качество перевода для сервиса от Google
Выводы
В результате рассмотрения вариантов проведения морфологического анализа с целью разбора предложения можно сказать, что такой метод обработки естественной речи человека имеет перспективы для дальнейшего развития и улучшения и пригоден для выполнения более сложных задач, относящихся к нечеткой логике и анализа текста. Получена приемлемая точность, без учета улучшений и модификаций, дополнительных проверок, и разборе только по одной стратегии вычисления: top-down (около 77,2 % по примерным расчетам)
Литература:
- Steven Bird, Ewan Klein, Edward Loper. Natural Language Processing with Python. — O'Reilly Media, 2009..
- Perkins, Jacob. Python Text Processing with NLTK 2.0 Cookbook. — Packt Publishing, 2010.
- Tom Young, Devamanyu Hazarika, Soujanya Poria, Erik Cambria. Recent Trends in Deep Learning Based Natural Language Processing. — 2018–11–24.
- Shervin Minaee, Nal Kalchbrenner, Erik Cambria, Narjes Nikzad, Meysam Chenaghlu. Deep Learning Based Text Classification: A Comprehensive Review. — 2020–04–05.