Как стать автором
Обновить

Комментарии 22

Пользуясь случаем хотел спросить.
А есть ли что-то подобное (русский язык из коробки), но для Thrano/Keras?

А для других языков там есть реализации? Если есть пример как это делают для другого языка, то скорее всего удастся сделать по аналогии, обучив на нужном корпусе.

Поскольку у меня нет машины с 12Г ОЗУ, спрошу здесь.
Как у него с классикой:
1. Эти типы стали…
2. На косой косе Косой…

Не удивлюсь, что если я выделил бы 1 процессор для виртуалки вместо 4, то оперативной памяти понадобилось бы раза в 4 меньше, т.е. хватило бы 3 ГБ. Возможно, количество параллельных процессов при сборке можно задать где-то в конфигурации Bazel, я не искал.

Насчет классики, результаты такие:


Эти типы стали есть на складе

image


Косил косой косой косой

image


На косой косе Косой косил

image

Скажите, пожалуйста, в какой реальной задаче может потребоваться такое дерево? На ум приходит только перевод текста, но с этой задачей успешно справляются уже существующие сервисы. Неужели вы пилите велосипед-переводчик?

Мне синтаксическое дерево понадобилось в модуле определения тональности слов/коротких фраз в тексте. Если построить дерево, то становится понятно, какие тональные признаки связаны с интересующей фразой, а какие нет.

На самом деле, синтаксический анализ там намного лучше работал бы, если бы не было ошибок в модели морфологии, которая не основана на словарях, а тоже является нейросетью. Кто бы взялся это починить…
Нарисуйте, пожалуйста, вывод для фразы «Маша увидела зелёного крокодила». Я долго смеялся, какой частью речи оказался бедный крокодил.
P.S. Во входном формате знаки пунктуации — отдельные токены. Пожалуйста, отделите пробелом запятую после слова «печь» в посте, тогда прикрепление этого и соседних слов должно исправиться.
Ну и ещё точка в конце предложения иногда что-то меняет, например, в этом предложении — dobj на nmod у слова «состоянием».

Да, действительно, с точкой и без точки разница может быть весьма существенной, пробелы перед символами пунктуации тоже влияют на результат. Тоже обращал на это внимание, но за давностью дел забыл упомянуть об этом в тексте. Спасибо. Ваши примеры:


С точкой:


Маша увидела зелёного крокодила.

image


Без точки и вправду сенсация, открыт новый глагол.


Маша увидела зелёного крокодила

image


Соблюдайте правила безопасности при использовании печи , следите за состоянием дымоходов

image


Кстати, получается, что предложения лучше скармливать анализатору так, чтобы перед знаками пунктуации стояли пробелы, а в конце предложения стояла точка (или "!", "?")?

Что значит «лучше скармливать»? Перед финальной точкой тоже должен стоять пробел, так устроен входной формат и на таких примерах модель обучалась. Знаки пунктуации моделью должны выдаваться как отдельный токен под названием PUNCT, если таких токенов нет — значит, вы их не отбили пробелом от слов :)
(И, наверное, лучше добавление пробелов сделать с помощью регулярного выражения у вас в коде, чтобы больше так не ошибаться :) ).
Крокодила — глагол, потому что такого слова морф. модель не видела, и оно похоже по форме на «родила». А «крокодила.», с точкой на конце, — это совсем другое слово, которое модель морфологии считает существительным.

Мне в плане пробелов перед знаками пунктуации повезло, потому что я перед построением синтаксического дерева разбиваю текст на предложения с помощью Томита-парсера от Яндекса, а он отдает результат как раз в таком виде.

В какой-то книге видел такой пример для обмана анализаторов: «Дочь генерала на балконе». Там «генерала» тоже как глагол парсился.

В нашем случае:
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. Может быть еще есть способы.

Недавно сделал для Syntaxnet на русском докер-контейнер: inemo/syntaxnet_rus. С докером установка еще проще:
echo "мама мыла раму" | docker run --rm -i inemo/syntaxnet_rus
В syntaxnet на Гитхабе (https://github.com/tensorflow/models/tree/master/syntaxnet) сказано, что поддерживается только Питон 2.7 python 2.7: python 3 support is not available yet
Не пробовали с Питон 3.4 устанавливать?

И еще: в НКРЯ есть семантический корпус http://www.ruscorpora.ru/corpora-sem.html — было бы полезно для глаголов знать, что это глаголы служебные, а для наречий, что они указывают на направление, для качеств вроде «умный» — что это качества человека и т.п. — то есть пометы, которые делают разметку уже смысла для каждого слова.
Существуют ли аналоги этого корпуса для того, чтобы обучить нейросеть (сам не встречал)?
Но с тех пор некоторые пакеты, используемые для сборки, переехали в другие репозитории

parsey_universal на сегодняшний день тоже выпилили, так что те самые готовые 40 моделей из данных Universal Dependencies на новой версии нечем запускать.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории