April 8th, 2015

moose, transparent

части речи

Нашел время немного поиграться с Stanford POS Tagger, библиотекой, которая распределяет слова в тексте по частям речи (POS tagger - part-of-speech tagger). Довольно интересная штука. В одном из стандартных режимов вывода превращает, например, это первое предложение "Эммы" Джейн Остен:

Emma Woodhouse, handsome, clever, and rich, with a comfortable home
and happy disposition, seemed to unite some of the best blessings of
existence; and had lived nearly twenty-one years in the world with very
little to distress or vex her.

в следующую смесь, которую только на первый взгляд тяжело прочесть:

Emma_NNP Woodhouse_NNP ,_, handsome_JJ ,_, clever_JJ ,_, and_CC rich_JJ ,_, with_IN a_DT comfortable_JJ home_NN and_CC happy_JJ disposition_NN ,_, seemed_VBD to_TO unite_VB some_DT of_IN the_DT best_JJS blessings_NNS of_IN existence_NN ;_: and_CC had_VBD lived_VBN nearly_RB twenty-one_CD years_NNS in_IN the_DT world_NN with_IN very_RB little_JJ to_TO distress_NN or_CC vex_VB her_PRP ._.

После каждого слова через _ стоит его таг, распознанная библиотекой часть речи. Есть подробных список тагов, но вообще-то и так все понятно, NN существительные, JJ прилагательные, VB глаголы и так далее; нередко есть дополнительные варианты, например NNP - имена собственные, а JJS - превосходная степень прилагательных (тут: best).

Насколько я понимаю, такие библиотеки не пытаются "понять структуру" предложения. Они применяют статистическую модель, которая позволяет им с большой достоверностью определить часть речи слова на основании самого слова и близлежащих слов в предложении. Скажем, в английском тексте слово world наверняка будет существительным, слово lived - глаголом, а слово move может быть и тем и другим, но посмотрим на предыдущее слово. Если the move, то наверняка существительное, если to move, то наверняка глагол, а если some move, то опять непонятно, но если учесть еще одно предыдущее слово, то может станет ясно, и так далее. В основе POS tagger лежит такая модель, в которой записаны все эти факты и вероятности, а построена эта модель на основе большого корпуса текстов, в которых правильные части речи были когда-то помечены вручную. Это не вся суть работы POS Taggger, есть всякие дополнительные алгоритмы и тонкости, но это основа.

С одной стороны это удивительно и замечательно, что на основе такой простой статистики, без попытки "понять структуру", Stanford POS Tagger достигает примерно 96-97% точности в своей работе. С другой стороны, 97% точности все равно означает, что в среднем примерно каждое 30-е слово будет классифицировано неправильно. И действительно, уже в первом предложении "Эммы", процитированном выше, есть ошибка таггера (слово "distress" в конце это глагол, а помечено как существительное).

Несмотря на ошибки, автоматическая классификация частей речи меня лично очень впечатляет и кажется весьма полезной. Тривиальным делом становится, например, сравнить процент прилагательных или наречий в текстах такого-то писателя с общей нормой жанра или эпохи, вычисленной на основе широкой выборки. Конечно, надо осторожно подходить к интерпретации такого рода сравнений, но сама легкость вычислений манит. Или вот, скажем, я недавно прочитал "Эмму" и у меня создалось впечатление особой частоты и богатства в ней прилагательных, которые описывают хорошие качества людей. Мне даже захотелось составить полный список таких слов - и вот теперь я вижу, что с таггером это сделать будет намного легче.

Кстати, когда я составил и бегло просмотрел список вообще всех прилагательных "Эммы" согласно таггеру, то увидел другую интересную проблему: как помечать английский герундий (-ing). Было бы слишком наивным всегда считать его вариантом глагола: во многих словах - напр. interesting или charming - он совершенно очевидно функционирует как прилагательное, и действительно таггер помечает эти слова JJ. Тут, однако, легко подобрать примеры, которые демонстрируют фундаментальные недостатки статистического подхода. Сравните два предложения:

He's been charming me for the last three hours.
He's been charming to me for the last three hours.

В первом предложении слово charming функционирует как глагол, во втором - как прилагательное, и понять эту разницу вообще невозможно по словам, которые идут перед charming, нужно смотреть и на слова после тоже. Мне так и не удалось убедить Stanford POS Tagger распознать charming как глагол в первом типе предложения - он всегда помечает его как JJ, даже при использовании самой своей продвинутой и медленной модели, которая в принципе учитывает в какой-то мере - согласно документации - и следующие слова тоже, а не только предшествующие.

Если же говорить о реальных текстах, а не придуманных примерах, то мне было интересно, что таггер сделает со словом obliging, которое Остен использует очень часто в тексте "Эммы", практически всегда как прилагательное с значением "любезный":

They're extremely civil and obliging to us... My dear sir,you are too obliging... amiable, obliging, gentle Mr. Elton... she seems a very obliging, pretty-behaved young lady...

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

P.S. Вопрос знающим эту область: есть ли весьма точные POS taggers для русского языка? Какие из них считаются лучшими?