В одном из постов ниже я выплескивал все свои гадкие мысли по поводу убийства дорвеев. Однако, есть класс дорвеев, который не убивается такими способами. Это дорвеи, генеренные с использованием цепей Маркова – они сохраняют грамматику оригинала (с пунктуацией, правда, проблемы, но ее отлавливать вряд ли возможно)
Что такое «цепи Маркова»?
Есть компьютерная игрушка – алгоритм, угадывающий мысли. Я тоже когда-то писал по нему программу :). Мысли человек формулирует в виде последовательности ноликов и единичек, введенных в компьютер. А компьютер отвечает или не отвечает так: после того, как ты задумал число, он пытается его угадать, а ты потом его вводишь. Обманывать компьютер нельзя, это нечестно! 🙂
Через некоторое время он начинает прилично угадывать. Даже удивительно. А алгоритм основан на том, что датчик случайных мыслей (цифирок :)) в человеке не случаен, а берет на вход предыдущие сгенеренные цифирки. И то, что следующим ходом человек сгенерит, определяется тем, какие цифры он сгенерил до того. И как ему компьютер отвечал (как вариант игры – он может угадывать втихую и не отвечать сразу, а отвечать потом).
Короче говоря, вся ситуация отслеживается на N ходов назад, и данные аккумулируются в таком виде: для каждой последовательности из N введенных ранее [0,1] считаем число введенных ПОСЛЕ этой последовательности единичек и число нулей. И считаем вероятность того, что человек введет следующим ходом. Если статистика по единичкам сильно больше, значит, «угадываем» единичку. Наоборот – ноль. Примерно одинаково – генерим случайно. А еще есть вариант игры с ответом «не знаю» в виде двойки, только тогда для эффективного угадывания данные накапливать дольше надо.
Вот такая простая скотина этот человек :). Сложным натурам можно на 3 хода назад отслеживать, простым – на 2.
Так вот цепи Маркова – это цепи событий. Они используются в жизни таких вариантах:
- когда надо посчитать некое стационарное состояние (распределение) при наличии ограниченного набора событий. Например, перескоки электронов по энергетическим уровням. Или перескоки юзера по матрице ссылок при расчете PageRank: http://www.yandex.ru/yandsearch?text=цепи маркова pagerank&stype=www
- Или когда надо предсказать поведение системы на основе ее нынешнего состояния. Тут используется понятно какая гипотеза – что развитие ситуации определяется тем, как она развивалась раньше на N ходов. Например, тот же текст может быть описан как последовательность и по ней выбрано слово, появление которого в тексте «следующим ходом» наиболее вероятно.
Так вот про текст и говорим. Слов, однако, гораздо больше, чем 2 (ноль и единица), поэтому эффективно угадать следующее слово не выйдет. А неэффективно, но грамматически связно – пожалуйста! Это и есть генерация по цепям Маркова.
***
Вот несколько ссылок по теме:
Про PageRank: http://www.mediacraft.ru/sections/articles/1/2.html
На форуме SeoChase: http://www.seochase.com/viewtopic.php?t=2149
Про генерацию текстов: http://predpinimatel-cd.com.ru/book/Programming/Praktical_programing/Glava3/Index2.htm (терминология там, правда, стремная)
***
Короче говоря, вероятности в случае генерации связного текста можно выбросить за ненадобностью… Алгоритм получается такой:
0) берем текст, разбиваем его по предложениям, а внутри каждого предложения выделяем последовательности из N (допустим, 2-х) слов и пишем в таблицу
1) Берем случайно одно из «первых» слов в предложении, и ставим эту пару как первую.
2) По второму слову в паре выбираем все те пары, в которых это слово идет первым и дополняем текст вторым словом
3) Идем к предыдущему пункту 2, не забывая иногда закрывать предложение (например, парами, которые встречаются в концах предложений)
Вот примерно так. Это дает грамматически связный текст в любых количествах. Для размножения можно использовать и вероятности появления той или иной последовательности, и увеличивать N, выбирая одно следующее слово по предыдущим N-1. И все цепочки слов (здесь: пары) встречаются в реальной жизни, а на пробивку по тройкам и N-кам слов никаких ресурсов у поисковика не хватит.
А как бороться с «дорвеями по цепям Маркова»?
А так, что основная цель дорвейщика – увеличить количество текста. И, взяв на вход 100-200 КБ (15-30 тыс. слов), получить на выходе огромную гору текста, разбитую по страницам.
Но свойство любого текста будет в том, что распределение тех же пар слов будет иметь длинный и тонкий хвост из редко (1 раз, например) используемых словосочетаний. Просто потому, что в русском языке слов – до фига. Даже словарный запас из 100 тыс. слов –больше, чем весь исходный для дорвейщика текст. И длина этого хвоста (ну, скажем, число пар, встречающихся в тексте 1 раз, поделенное на общее число пар) – будет измеряться в десятках процентов. А то и до 70-90%, чую, доходить будет. Ну это поверяется легко.
А поскольку лорвейщик текста нагенерил в 10-100 раз больше, чем был исходный текст, словосочетания там поюзаны многократно. Гораздо больше, чем 1 раз. Конечно, дорвейщик разбил текст по страницам, так что ловить надо в пределах сайта.
В принципе, даже ресурсов много не надо… Пробить по нескольким хорошим крупным сайтам свойства текстов. Прикинуть, например, сколько из 10 тыкнутых наугад пар слов встречаются на сайте более 1 раза. Допустим, 10-30%.
А у дорвейщика будет сильно больше 99%. Например, если дорвейщик из 100 Кб текста нагенерил 10 Мб, он каждое словосочетание использует где-то 100 раз. Ну и вероятность, что ты попадешь на уникальное в пределах сайта словосочетание – порядка 1%. А 99 будут неуникальных.
Ну и дальше сайт – ф топку. Т.е., звонок модератору.
В принципе моделирование текста цепями Маркова используется уже давно в различных алгоритмах сжатия, см. например http://www.maxime.net.ru/compr.dmc.shtml
Отсюда ещё один способ: если текст на сайте жмётся при помощи такого марковского моделера слишком хорошо (выше среднего), то текст явно сгенерён автоматически.
То есть выход простой – размещать созданные страницы на разных сайтах?
А не попадутся в то же поле научные тексты? Там тоже крайне редко используемые словосочетания используются с повышенной частотой.
Ну, если уровень программирования на уровне больинства тех, кто в вышеуказанном топике не сеокейзе отметился, то пожалуй алгоритм сработает (хотя ой как дофига машинных ресурсов надо).
Но я не могу понять, что мешает взять начальный текст по объему сравнимый с тем, что нужно генерить? Все равно ведь его надо тематический из инета рыть – просто распарсить не одну первую страницу в гугле, а, например, 1000 результатов выдачи. Строишь инвертированный индекс и, я думаю, по секунде на дорвейную страницу – вполне реальный результат. Естественно надо размер базы подбирать, чтобы полностью в оперативке сидела и на диск не кэшировалась.
В результате при сравнимом объеме текстов скорее всего не сработает ни один из предложенных алгоритмов определения.
>Но я не могу понять, что мешает взять начальный текст по объему сравнимый с тем, что нужно генерить?
-так откуда ж его, большой текст, взять? Ведь это должен быть тематический текст, а не текст "ни о чем". Скажем, как ты впихнешь нормально слово "кондиционер" в ээ… "Войну и мир"? 🙂
>Все равно ведь его надо тематический из инета рыть – просто распарсить не одну первую страницу в гугле, а, например, 1000 результатов выдачи. Строишь инвертированный индекс
-я, например, сильно не уверен, что эти тексты уникальные… Мусора набрать очень просто… Имхо, ситуация "из интернета" – посильна только для самих поисковиков…
При сравнимом объеме, конечно, не сработает.
Если ты в состоянии построить инвертированный индекс, то отобрать почти уникальные тексты не так уж и сложно (обычно). По крайней мере звонок модератору едва ли возможно будет выдать, даже если тексты не будут полностью уникальными – за счет массы – за счет того, что сайты просто разные.
Хотя возможно и будут небольшие сбои, если в какой-либо тематике произошла монополизация выдачи несколькими дорвейщиками. Но ведь в этом случае модераторы поисковика должны были уже до этого удавить все эти дорвеи, т.к. звоночек то у них уже звенел. А если дорвеи на активизируют звоночек, то они вполне подходящие для набора текстов:).
Ну, в принципе, даже если взять "Войну и Мир" и переколбасить по Маркову – как в окончательный текст напихать слово "кондиционер", чтобы было в ладах с падежами и т.п.? 🙂
А вот уникальных текстов по заранее заданной теме и еще в большом количестве, думаю, нарыть сложно…
Чисто в теории у меня для этого лингвомодуль есть:). Я правда его для других целей пользую, но и для этого подойдет без проблем:).
>А вот уникальных текстов по заранее заданной теме и еще в большом количестве, думаю, нарыть сложно…
А в чем сложность? Ввел в яндекс-директе "кондиционер" – получил первые 100-200 запросов для основного яндекса. Прошелся по этим запросам, регулярно тыкая "Еще с сайта". В принципе, если не лень, то дубли можно давить. Предложения меньше 5 слов выкидывать. И вот тебе примерно 10 мег уникальных текстов по кондиционерам. При этом таких, что яндекс не считает их плохими:).
Насколько я понимаю, если самому взять на себя роль постановщика задачи и руководителя, то по Владимирским меркам это обойдется в 1500-2000 баксов и примерно 2 месяца времени. Другое дело, что немного стремно программисту отдавать такой продукт. Но в этом случае можно поделить это дело на 2-3 части – будет быстрее, но больше мороки для руководителя.
Нет: то, что яндекс не считает плохим, на данный момент не есть уникальное…
Вот я как-то сильно сомневаюсь, что в Рунете написано 10 метров уникального текста по кондиционерам. Даже и мега не наберется… Даже 100 К…
Для сравнения, на lib.ru:
Война и мир. Том 1 913k
Война и мир. Том 2 679k
Война и мир. Том 3 883k
Война и мир. Том 4 745k
🙂
Тю. Кто ж тексты с выдачи берет. Это или отдельно делается с вырубанием больших кусокв текста и проверкой на уникальность или берутся сайты из дмоза, яхиного каталога и им подобных ручками собранных коллекций.
И конечно проверка на уникальность час отного распределения слов-словосочетаний выдаст с потрохами дор. Только текст берется больше чем сам генерируемый сайт.
Я не понял, а почему их нельзя брать для создания словаря пар? Для троек возможно и нельзя, но я сомневаюсь, что многие используют тройки.
Ведь если поисковик посчитал тексты нормальными (даже если это дорвеи), то соответственно и сгенеренный текст будет приемлимым.
Mauser,
>Только текст берется больше чем сам генерируемый сайт.
-а вот приведи пример. Из разряда: дорвейный сайт – столько-то страниц, каждая по столько-то килобайт. Уникальный текст на тему… ээ… phentermine, xanax, viagra [дальше не знаю, сами допишете:)] – столько-то К.
И просто будет интересно, откуда на эту тему столько уникальных текстов взялось. Из дмоза, каталогов яху? Сам пойду поищу, не верю! 🙂
Ну во-первых, метод не сработает. Ты неправильно описал алгоритм генерации текста. (Слишком упростил).
Во-вторых – по поводу где брать кучу текстов. Сейчас в США развиты конторы, которые нанимают удаленных сотрудников, по 3-5 баксов за кило писать тексты (статейки) под ключевые слова, ключевые слова сам понимаешь берутся из тех же самых жирных тем.
Может помнишь с вордпрессом скандал был? Вот подобные тексты скармливаешь в марковизатор, результат получается – чудо просто. 🙂
Interitus, возможно, и упростил. Я учет вероятностей комбинаций выбросил. Но метод должен сработать и без них. Или ты что-то другое имеешь в виду?
>Сейчас в США развиты конторы, которые нанимают удаленных сотрудников, по 3-5 баксов за кило писать тексты (статейки) под ключевые слова
-так тогда это не дорвеи уже, а обычные сайты…
Не только учет вероятностей, но в основном он. Если для одного сайта в качестве исходного брать сопоставимый объем текста, метод не срабатывает.
Обычные конечно, я к тому что по жирной какой-то теме, по которой на первый взляд – тексты неясно где вообще брать, ну казалось бы где набрать 200 кило уникального текста по теме Online poker rooms, текстов на самом деле вот в таких сборниках статей можно награбить. (это вообще я всё комментировал твою фразу: И просто будет интересно, откуда на эту тему столько уникальных текстов взялось. )
>Если для одного сайта в качестве исходного брать сопоставимый объем текста
-это само собой, тогда не работает.
А вообще радикальное решение – делать вместо дорвейных обычные сайты. Против лома нет приема. 😀
Ну это даже не столько обычные сайты, сколько те же самые дорвеи, только вручную сделанные конвеерным методом (домохозяйками или студентами). Как бы да, есть такая технология. 🙂 Правда дорогая зараза.
Хм, не заполнились поля, это я был.
Interitus, а можно поподробней ? что за скандал ?
BoG: дак хранили вордпресовцы на своем домене доры с ппц-выдачей, да ссылки с хомпаги невидимые на них ставили.
Ты слишком просто применил маровскую цепь. Это очень простой алгоритм. По нему ты конечно вычеслишь. Но так не делают. (если делают то гуг отлавливает уже). А вот как можно использовать цепи, это к сожалению тебе сказать не могу. Я думаю сам догадаешься.