Комментарии 22
А есть ли что-то подобное (русский язык из коробки), но для Thrano/Keras?
Как у него с классикой:
1. Эти типы стали…
2. На косой косе Косой…
Не удивлюсь, что если я выделил бы 1 процессор для виртуалки вместо 4, то оперативной памяти понадобилось бы раза в 4 меньше, т.е. хватило бы 3 ГБ. Возможно, количество параллельных процессов при сборке можно задать где-то в конфигурации Bazel, я не искал.
Насчет классики, результаты такие:
Нарисуйте, пожалуйста, вывод для фразы «Маша увидела зелёного крокодила». Я долго смеялся, какой частью речи оказался бедный крокодил.
P.S. Во входном формате знаки пунктуации — отдельные токены. Пожалуйста, отделите пробелом запятую после слова «печь» в посте, тогда прикрепление этого и соседних слов должно исправиться.
Ну и ещё точка в конце предложения иногда что-то меняет, например, в этом предложении — dobj на nmod у слова «состоянием».
Да, действительно, с точкой и без точки разница может быть весьма существенной, пробелы перед символами пунктуации тоже влияют на результат. Тоже обращал на это внимание, но за давностью дел забыл упомянуть об этом в тексте. Спасибо. Ваши примеры:
С точкой:
Без точки и вправду сенсация, открыт новый глагол.
Кстати, получается, что предложения лучше скармливать анализатору так, чтобы перед знаками пунктуации стояли пробелы, а в конце предложения стояла точка (или "!", "?")?
(И, наверное, лучше добавление пробелов сделать с помощью регулярного выражения у вас в коде, чтобы больше так не ошибаться :) ).
Крокодила — глагол, потому что такого слова морф. модель не видела, и оно похоже по форме на «родила». А «крокодила.», с точкой на конце, — это совсем другое слово, которое модель морфологии считает существительным.
Мне в плане пробелов перед знаками пунктуации повезло, потому что я перед построением синтаксического дерева разбиваю текст на предложения с помощью Томита-парсера от Яндекса, а он отдает результат как раз в таком виде.
В какой-то книге видел такой пример для обмана анализаторов: «Дочь генерала на балконе». Там «генерала» тоже как глагол парсился.
1 Дочь _ VERB _ Animacy=Inan|Case=Nom|Gender=Fem|Number=Sing|fPOS=NOUN++ 0 ROOT _ _
2 генерала _ NOUN _ Animacy=Anim|Case=Gen|Gender=Masc|Number=Sing|fPOS=NOUN++ 1 nmod _ _
3 на _ ADP _ fPOS=ADP++ 4 case _ _
4 балконе _ NOUN _ Animacy=Inan|Case=Loc|Gender=Masc|Number=Sing|fPOS=NOUN++ 1 nmod _ _
Дочь — это определенно новый глагол :-)
Можно попросить тестовый доступ к парсеру Аббии Compreno — обычно не отказывают.
Или можно посмотреть актуальный список парсеров здесь.
Моё мнение — решения на нейронных сетях всё ещё проигрывают основанным на наборах правил. Особенно во всяких экзотических случаях, характерных для тяжёлого канцелярита или высокого штиля.
А лучшие результаты дают комбинированные решения — правила плюс обучения на корпусах.
В том виде, как я установил на виртуалку — скорость не высокая. В среднем текст, отправленный на парсинг, обрабатывается 7 секунд, 6.5 из которых загружается в память сам анализатор. Если тексты обрабатываются фоновыми процессами, то это приемлемая скорость, особенно если обработка разных текстов идет в нескольких параллельных процессах.
Скорость можно увеличить раз в 10, если настроить связку с Tensorflow Serving. Может быть еще есть способы.
echo "мама мыла раму" | docker run --rm -i inemo/syntaxnet_rus
Не пробовали с Питон 3.4 устанавливать?
И еще: в НКРЯ есть семантический корпус http://www.ruscorpora.ru/corpora-sem.html — было бы полезно для глаголов знать, что это глаголы служебные, а для наречий, что они указывают на направление, для качеств вроде «умный» — что это качества человека и т.п. — то есть пометы, которые делают разметку уже смысла для каждого слова.
Существуют ли аналоги этого корпуса для того, чтобы обучить нейросеть (сам не встречал)?
Но с тех пор некоторые пакеты, используемые для сборки, переехали в другие репозитории
parsey_universal на сегодняшний день тоже выпилили, так что те самые готовые 40 моделей из данных Universal Dependencies на новой версии нечем запускать.
Синтаксический анализ текстов с помощью SyntaxNet