Pull to refresh

Comments 35

> Биграммы давали бы плохой результата, в то время как 4-граммы требовали бы существенно больше ресурсов.
Зато, тем качественнее будут тексты поискового спама.
Может быть. Я слабо знаком с поисковой оптимизацией. Но есть вероятность что они будут рассматриваться как дубли, так как текст становиться ооочень похож на исходный. В этом случае нужно использовать разные корпуса по разным тематикам.
Ну вообщем-то в Интернете и так сейчас особо искать нечего. Да и зная историю Вы я думаю спрогнозируете
что будет с княжествами (левыми сайтами) и почему появяться государства (фирменные порталы при универах
фирмах и т.п.). Явные тому примеры базы знаний при Microsoft, FreeBSD про линукс кстати не знаю есть или нет?
Одним словом скоро весь интернет перейдет в вид сообществ, социальных сетей и баз знаний… ИМХО!
Тексты интересные получаются.
Особенно понравилось: «Сноска 49 философ, сноска 130 княгиня такая-то сноска 131» и «История своим предметом не хотеть принять меня за щеку».
Нет желания написать модуль дизамбигуации (разрешения неоднозначности) к морфологическому анализатору pymorphy?)

Например, в фразе «нет вилки» — «вилки» — это существительное ед.ч., в родительном падеже. А в «Положил вилки на стол» — это существительное во мн.ч. и в винительном падеже.

По сути, тут тоже нужно составить словарь вероятностей — вероятность встретить грам. форму в зависимости от окружения слова, все на довольно большом корпусе. В окружении, думаю, стоит тоже учитывать не сами слова, а их грам. формы и части речи, в каком-то упрощенном варианте даже.

Несмотря на то, что, по сути, анализатор будет тренироваться сам на себе, думаю, подход должен сработать, т.к. не у всех слов есть те же проблемы с неоднозначностью, что и у слова «вилка» — и тут вполне можно обойтись без синтаксического анализа. Могут быть какие-то тонкости, но по сути — те же биграммы, триграммы и тд.
В идеале, конечно, тренировать не на самом себе, а на отдельно размеченном корпусе (http://www.ruscorpora.ru/), но там нет оффлайн-доступа, только ограниченный и неподходящий для таких целей online-поиск, поэтому вряд ли выйдет.
А на счет ruscorpora.ru, я честно говоря не понимаю смысл проекта. Почему бы не открыть корпус, если таковой имеется. Тем более называется национальным и создается на государственные деньги.
«Какие-либо оффлайновые версии корпуса пока недоступны, но работа в этом направлении ведётся.»

Национальный корпус русского языка
© 2003–2010

Я думаю, что этим сайтом занимаются очень уважаемые люди, и делают они хорошее дело, но заточен он под нужны лингвистов (не компьютерных), и оффлайн-доступ для этого не так востребован.
Думаю, снятие неоднозначности не очень подходит для уровня морфологии. Это что-то ближе к синтаксическому анализу, где может уйти большая часть омонимии. К примеру — «краска стекла по стене» и «в машине нет лобового стекла». Здесь выбор виден из контекста. То есть если писать дизамбигуатор только на основе n-граммной статистики, то он будет неточный и очень сильно зависимый от корпуса.

Вообще, мне не лень его написать :), но я на вскидку не вижу чем этот модуль будет полезен.
Хорошая бумага по теме: www.aot.ru/docs/RusCorporaHMM.htm

Пишут, что снятие неоднозначности очень хорошо ложится именно на уровень морфологии (т.к. на уровне синтаксиса ее делать значительно сложнее), и что вероятностный подход при этом обеспечивает отличную точность.

Модуль будет полезен хм… везде) Хотя бы отсортировать результаты разбора слова по вероятности, чтобы менее вероятные в данном контексте не учитывать. Сейчас берется первая попавшаяся форма слова, когда нужна только 1 форма (например, для склонятора).
Может быть обрисуете как вы видите этот модуль, желательно по почте ( at gmail.com)? Может быть что-то придумаем.

Вообще, я как-то писал морфологический анализатор, так же на основе словаря аот. Но в основе у меня лежал трансдьюсер (finite state transducer), базу не использовал. У этого подхода есть плюсы, но есть и минусы. Если интересно — могу подробней по почте.
Ага, так и понял, судя по сайту. Поэтому и рискнул предложить) В почту сейчас отпишусь.
Мне кажется или Вы описали реализацию генератора текстов на основе цепей Маркова?
Вобщем, да. Цепь маркова, сеть Байеса, как угодно.
Лично мне проще воспринимать подобные модели просто как направленный взвешенный граф, где дуги маркированны вероятностями перехода на следующее состояние.
А какая в вас версия питона?
У меня 2.5.2 и в ней не работают конструкции типа
sum_, freq_ =,
rnd = uniform(, sum_)
для переносимости можно поправить на
sum_, freq_ = 0, 0
rnd = uniform(0, sum_)
тогда всё работает на 2.5
Писал все это на 2.5.
Но дело похоже в другом: когда «красил» код, похоже, некоторые символы пропали. На этом месте должны были стоять нули:

def unirand(seq):
sum_, freq_ = 0, 0
for item, freq in seq:
sum_ += freq
rnd = uniform(0, sum_)
for token, freq in seq:
freq_ += freq
if rnd < freq_:
return token

Ту же статью можно глянуть тут: linguis.ru/art/trigram, там корректно.

Кстати, может кто знает, как раскрасить питоновский код на хабре? Встроенными средствами у меня не получилось.
Тогда уж ещё позанудствую. У вас sum_ в unirand в конце концов всегда равно 1.0 ,-) Это же сумма всех вероятностей.
Вы правы. Рад что внимательно смотрите код :). Сумма тут всегда равна 1. Похоже я взял этот метод из своего кода, который допускает любое значение частоты.
Здесь же можно использовать просто рандом.

Надо сказать, писал я этот код больше года назад. Сейчас вижу, что функция unirand могла бы быть более прозрачна.
ваше благородие? Ничто, — прибавил он, как казалось ростову. Тоже и они тотчас же притворился изумленным, ошеломленным, выпучил глаза и долго, облокотившись на руку, молодой и красивой, белой кисеи и розовых чубука.

Вообще вроде как это называется «цепь Маркова третьего порядка»
Такие вещи нынче, как то, что можно было назвать «генерирование текста по статистическому анализу биграмм и триграмм слов», что и так уже понятно всем, реализовать в рамках одной лабы второго курса и забыть на след. день, теперь расписывается в целую статью и висит на главной хабра.
Эм… да, алгоритм простой. Висел в личном блоге, получил пару сообщений с рекомендацией перенести сюда. Вот и перенес :).
Ну раз рекомендуют, видимо хотят это видеть… об этом я с некоторым пренебрежением и писал.
А лично вас — автора — не осуждаю )
дорвейщики уже сели за компьютеры )
дорвейщики давно уже это проходили ;)
А правильно ли я понимаю, что подобным образом работают vesna.yandex.ru и другие «loremipsum-генераторы»?
Похоже, основа та же. Наврятли там использовалась какая-либо грамматика на правилах.
Но текст относительно «чистый» получается. Скорее всего там еще какие-то хитрые алгоритмы поверх идут.

ps но могу и ошибаться
По-моему, на яндексе составленная вручную контекстно-свободная грамматика.
Вы Natural Language Toolkit (nltk.org) смотрели?
Рутинные задачи по разбору на слова я бы отдал этой библиотеке, тем более что делать она будет это в терминах предметной области.
Да, смотрел. Но nltk здесь — как из пушки по воробьям. В данном случае даже морфология не используется — обычная тренировка на корпусе (даже без сглаживания) и подбор слов по вероятности. Может быть, через время напишу «правильный генератор», где буду использовать и морфологию, и синтаксис и, возможно, какие-то элементы семантики.
Задачи имеют тенденцию со временем усложнятся. Для меня плюс nltk что я буду сосредоточен на конечной задаче, а не на низкоуровневых деталях.
Sign up to leave a comment.

Articles