Skip to content

Демо

Elmira edited this page Feb 25, 2016 · 8 revisions

Как пользоваться таггером

Модели

Чтобы таггер работал, ему нужны обученные модели. Получить модели можно двумя способами.
Способ 1
Можно скачать те, которые мы уже обучили:

  • натренированные модели без кластеров можно скачать тут
  • модели с кластерами тут

Файлы, которые нужно скачать: feature_transformer.pkl - модель, которая получает на вход слово и преобразует его в вектор признаков
model.pkl и остальные файлы - обученная модель таггера

Способ 2
Можно заново обучить свои модели: запустить classifier.py, который обучится на списке фичей (списков фичей два, можно использовать либо feature_matrix.csv, либо feature_matrix_clusters.csv).

Ура, теперь у нас есть модели!

Используем таггер

Набор тэгов частей речи такой же, как в НКРЯ.
Пользоваться таггером просто:

>>> from tagger import pos
>>> pos('тёплые')
'A'
>>> pos('коты')
'S'
>>> pos('мяукают')
'V'

Таггер может правильно определять части речи слов, которые не встретились в обучении:
>>> pos('кросскатегориальность')
'S'
>>> pos('вулканчик')
'S'

Однако таггер все-таки делает ошибки:

  • омонимичным словам таггер приписывает только один разбор
    >>> pos('стекло')
    'V'
    >>> pos('мой')
    'V'

  • таггер ошибается в местоимениях
    >>> pos('он')
    'S' - вместо S-PRO
    >>> pos('мы')
    'S'
    >>> pos('нам')
    'S'
    >>> pos('вы')
    'V'

  • таггер ошибается в служебных словах (склонен считать большинство служебных слов глаголами) =(
    >>> pos('однако')
    'V' - вместо CONJ
    >>> pos('в')
    'V' - вместо PR
    >>> pos('от')
    'V'
    >>> pos('на')
    'V'

Но не все так плохо!!
Он ведь все-таки работает в большинстве случаев!

>>> [pos(i) for i in 'национальный корпус русского языка'.split(' ')]
['A', 'S', 'A', 'S']
>>> [pos(i) for i in 'Шла Саша по шоссе'.split(' ')]
['V', 'S', 'V', 'S'] - ошибся в предлоге, а остальное правильно!

>>> sentence = 'Все счастливые семьи похожи друг на друга, каждая несчастливая семья несчастлива по-своему'
>>> [pos(i) for i in sentence.split(' ')]
['S', 'A', 'S', 'V', 'S', 'V', 'S', 'V', 'A', 'S', 'S', 'A']

Такие дела.