Comments 35
> Биграммы давали бы плохой результата, в то время как 4-граммы требовали бы существенно больше ресурсов.Зато, тем качественнее будут тексты поискового спама.
Может быть. Я слабо знаком с поисковой оптимизацией. Но есть вероятность что они будут рассматриваться как дубли, так как текст становиться ооочень похож на исходный. В этом случае нужно использовать разные корпуса по разным тематикам.
Кстати, у Яндекса есть статья о том, как они с этим борются:
«Поиск неестественных текстов», Евгений Гречников, Глеб Гусев, Андрей Кустарев, Андрей Райгородский.
«Поиск неестественных текстов», Евгений Гречников, Глеб Гусев, Андрей Кустарев, Андрей Райгородский.
Ну вообщем-то в Интернете и так сейчас особо искать нечего. Да и зная историю Вы я думаю спрогнозируете
что будет с княжествами (левыми сайтами) и почему появяться государства (фирменные порталы при универах
фирмах и т.п.). Явные тому примеры базы знаний при Microsoft, FreeBSD про линукс кстати не знаю есть или нет?
Одним словом скоро весь интернет перейдет в вид сообществ, социальных сетей и баз знаний… ИМХО!
что будет с княжествами (левыми сайтами) и почему появяться государства (фирменные порталы при универах
фирмах и т.п.). Явные тому примеры базы знаний при Microsoft, FreeBSD про линукс кстати не знаю есть или нет?
Одним словом скоро весь интернет перейдет в вид сообществ, социальных сетей и баз знаний… ИМХО!
Достойно! Прочитал, попробовал :)
Тексты интересные получаются.
Особенно понравилось: «Сноска 49 философ, сноска 130 княгиня такая-то сноска 131» и «История своим предметом не хотеть принять меня за щеку».
Особенно понравилось: «Сноска 49 философ, сноска 130 княгиня такая-то сноска 131» и «История своим предметом не хотеть принять меня за щеку».
Нет желания написать модуль дизамбигуации (разрешения неоднозначности) к морфологическому анализатору pymorphy?)
Например, в фразе «нет вилки» — «вилки» — это существительное ед.ч., в родительном падеже. А в «Положил вилки на стол» — это существительное во мн.ч. и в винительном падеже.
По сути, тут тоже нужно составить словарь вероятностей — вероятность встретить грам. форму в зависимости от окружения слова, все на довольно большом корпусе. В окружении, думаю, стоит тоже учитывать не сами слова, а их грам. формы и части речи, в каком-то упрощенном варианте даже.
Несмотря на то, что, по сути, анализатор будет тренироваться сам на себе, думаю, подход должен сработать, т.к. не у всех слов есть те же проблемы с неоднозначностью, что и у слова «вилка» — и тут вполне можно обойтись без синтаксического анализа. Могут быть какие-то тонкости, но по сути — те же биграммы, триграммы и тд.
Например, в фразе «нет вилки» — «вилки» — это существительное ед.ч., в родительном падеже. А в «Положил вилки на стол» — это существительное во мн.ч. и в винительном падеже.
По сути, тут тоже нужно составить словарь вероятностей — вероятность встретить грам. форму в зависимости от окружения слова, все на довольно большом корпусе. В окружении, думаю, стоит тоже учитывать не сами слова, а их грам. формы и части речи, в каком-то упрощенном варианте даже.
Несмотря на то, что, по сути, анализатор будет тренироваться сам на себе, думаю, подход должен сработать, т.к. не у всех слов есть те же проблемы с неоднозначностью, что и у слова «вилка» — и тут вполне можно обойтись без синтаксического анализа. Могут быть какие-то тонкости, но по сути — те же биграммы, триграммы и тд.
В идеале, конечно, тренировать не на самом себе, а на отдельно размеченном корпусе (http://www.ruscorpora.ru/), но там нет оффлайн-доступа, только ограниченный и неподходящий для таких целей online-поиск, поэтому вряд ли выйдет.
А на счет ruscorpora.ru, я честно говоря не понимаю смысл проекта. Почему бы не открыть корпус, если таковой имеется. Тем более называется национальным и создается на государственные деньги.
«Какие-либо оффлайновые версии корпуса пока недоступны, но работа в этом направлении ведётся.»
Национальный корпус русского языка
© 2003–2010
Я думаю, что этим сайтом занимаются очень уважаемые люди, и делают они хорошее дело, но заточен он под нужны лингвистов (не компьютерных), и оффлайн-доступ для этого не так востребован.
Национальный корпус русского языка
© 2003–2010
Я думаю, что этим сайтом занимаются очень уважаемые люди, и делают они хорошее дело, но заточен он под нужны лингвистов (не компьютерных), и оффлайн-доступ для этого не так востребован.
Думаю, снятие неоднозначности не очень подходит для уровня морфологии. Это что-то ближе к синтаксическому анализу, где может уйти большая часть омонимии. К примеру — «краска стекла по стене» и «в машине нет лобового стекла». Здесь выбор виден из контекста. То есть если писать дизамбигуатор только на основе n-граммной статистики, то он будет неточный и очень сильно зависимый от корпуса.
Вообще, мне не лень его написать :), но я на вскидку не вижу чем этот модуль будет полезен.
Вообще, мне не лень его написать :), но я на вскидку не вижу чем этот модуль будет полезен.
Хорошая бумага по теме: www.aot.ru/docs/RusCorporaHMM.htm
Пишут, что снятие неоднозначности очень хорошо ложится именно на уровень морфологии (т.к. на уровне синтаксиса ее делать значительно сложнее), и что вероятностный подход при этом обеспечивает отличную точность.
Модуль будет полезен хм… везде) Хотя бы отсортировать результаты разбора слова по вероятности, чтобы менее вероятные в данном контексте не учитывать. Сейчас берется первая попавшаяся форма слова, когда нужна только 1 форма (например, для склонятора).
Пишут, что снятие неоднозначности очень хорошо ложится именно на уровень морфологии (т.к. на уровне синтаксиса ее делать значительно сложнее), и что вероятностный подход при этом обеспечивает отличную точность.
Модуль будет полезен хм… везде) Хотя бы отсортировать результаты разбора слова по вероятности, чтобы менее вероятные в данном контексте не учитывать. Сейчас берется первая попавшаяся форма слова, когда нужна только 1 форма (например, для склонятора).
Может быть обрисуете как вы видите этот модуль, желательно по почте ( at gmail.com)? Может быть что-то придумаем.
Вообще, я как-то писал морфологический анализатор, так же на основе словаря аот. Но в основе у меня лежал трансдьюсер (finite state transducer), базу не использовал. У этого подхода есть плюсы, но есть и минусы. Если интересно — могу подробней по почте.
Вообще, я как-то писал морфологический анализатор, так же на основе словаря аот. Но в основе у меня лежал трансдьюсер (finite state transducer), базу не использовал. У этого подхода есть плюсы, но есть и минусы. Если интересно — могу подробней по почте.
Мне кажется или Вы описали реализацию генератора текстов на основе цепей Маркова?
А какая в вас версия питона?
У меня 2.5.2 и в ней не работают конструкции типа
sum_, freq_ =,
rnd = uniform(, sum_)
для переносимости можно поправить на
sum_, freq_ = 0, 0
rnd = uniform(0, sum_)
тогда всё работает на 2.5
У меня 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, там корректно.
Кстати, может кто знает, как раскрасить питоновский код на хабре? Встроенными средствами у меня не получилось.
Но дело похоже в другом: когда «красил» код, похоже, некоторые символы пропали. На этом месте должны были стоять нули:
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 могла бы быть более прозрачна.
Здесь же можно использовать просто рандом.
Надо сказать, писал я этот код больше года назад. Сейчас вижу, что функция unirand могла бы быть более прозрачна.
ваше благородие? Ничто, — прибавил он, как казалось ростову. Тоже и они тотчас же притворился изумленным, ошеломленным, выпучил глаза и долго, облокотившись на руку, молодой и красивой, белой кисеи и розовых чубука.
Вообще вроде как это называется «цепь Маркова третьего порядка»
Вообще вроде как это называется «цепь Маркова третьего порядка»
Такие вещи нынче, как то, что можно было назвать «генерирование текста по статистическому анализу биграмм и триграмм слов», что и так уже понятно всем, реализовать в рамках одной лабы второго курса и забыть на след. день, теперь расписывается в целую статью и висит на главной хабра.
дорвейщики уже сели за компьютеры )
уникальность текста 69%
А правильно ли я понимаю, что подобным образом работают vesna.yandex.ru и другие «loremipsum-генераторы»?
Вы Natural Language Toolkit (nltk.org) смотрели?
Рутинные задачи по разбору на слова я бы отдал этой библиотеке, тем более что делать она будет это в терминах предметной области.
Рутинные задачи по разбору на слова я бы отдал этой библиотеке, тем более что делать она будет это в терминах предметной области.
Да, смотрел. Но nltk здесь — как из пушки по воробьям. В данном случае даже морфология не используется — обычная тренировка на корпусе (даже без сглаживания) и подбор слов по вероятности. Может быть, через время напишу «правильный генератор», где буду использовать и морфологию, и синтаксис и, возможно, какие-то элементы семантики.
Sign up to leave a comment.
Генератор текста на основе триграмм (python)