Skip to content
Elmira edited this page Mar 27, 2016 · 10 revisions

Moore tagger replication

Этот проект является попыткой повторить быстрый частеречный таггер, описанный в статье Moore (2014) http://www.aclweb.org/anthology/C14-1110

Задача

Цель проекта - сделать быстрый частеречный таггер методом машинного обучения.

Как обычно делают таггеры Как делает Moore и мы
  • классифицируем последовательности
  • фичи на несколько токенов вокруг
  • алгоритмы для сужения области поиска
  • всё равно медленно
  • классифицируем один токен
  • фичи только этого токена
  • больше фичей, чтоб всё получилось
  • быстро
Подробнее о содержании статьи и наших упрощениях можно почитать на странице [Содержание статьи](https://github.com/Sereni/Moore-tagger/wiki/%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8).

Данные

Данные в статье Наши данные
Penn Treebank Wall Street Journal (WSJ) III

1 203 648 слов
49 191 предложений
2 312 текстов

Вручную размечены части речи

Национальный корпус руского языка (НКРЯ)

5 944 205 слов
516 844 предложений
2 147 текстов

Вручную размечена вся морфологическая информация

Методы

Фичи

  • Словоформа
  • Словоформа в нижнем регистре
  • В слове есть:
    • заглавная буква
    • цифра
    • дефис
  • Префиксы и суффиксы слова от 1 до 4 букв
  • Shape 1: Петя1 --> Хххх1
  • Shape 2: Петя1 --> Хх1
  • Кластер слова (см. ниже)

Кластер слова как фича

Идея:
поделить все слова на какие-нибудь группы, основываясь на их совместной встречаемости.

Зачем:
все другие фичи несут информацию только о данном токене, а эта фича (хоть и косвенно) несет информацию о токенах, которые бывают рядом.

Как:

  • скачиваем информацию о биграммах и частотах слов с сайта НКРЯ
  • генерируем фичи для кластеринга:
    • частота слова и длина слова
    • сколько из топ-100 частотных слов бывают слева / справа от слова
    • частоты топ-10 биграмм, в которых слово на 1м / 2м месте
  • кластеризуем слова из биграмм на 256 групп с помощью KMeans из sklearn.clusters
  • если слово не встретилось в кластерах, то его кластер - 257-й

В статье делалось примерно так же, но там гораздо больше слов (не несколько миллионов, а несколько сотен миллионов), фичей и более сложный алгоритм кластеризации.

Машинное обучение

Stochastic Gradient Descent Classifier с Grid Search:

  • loss function: hinge (SVM), log (логистическая регрессия)
  • constant learning rate
  • η = 2^-8
  • alpha: разные :) – почти как в статье, но попробовали больше разных параметров

Результат

Мы измеряли точность таггера:

В статье У нас
Без кластеров 97.23% 87.73%
С кластерами 97.34% 89.43%

Подробнее об обучении и результатах: Машинное обучение.

Примеры работы полученного таггера: Демо.