Как бы я давил дорвеи, сделанные по «цепям Маркова»

В одном из постов ниже я выплескивал все свои гадкие мысли по поводу убийства дорвеев. Однако, есть класс дорвеев, который не убивается такими способами. Это дорвеи, генеренные с использованием цепей Маркова – они сохраняют грамматику оригинала (с пунктуацией, правда, проблемы, но ее отлавливать вряд ли возможно)

Что такое «цепи Маркова»?

Есть компьютерная игрушка – алгоритм, угадывающий мысли. Я тоже когда-то писал по нему программу :). Мысли человек формулирует в виде последовательности ноликов и единичек, введенных в компьютер. А компьютер отвечает или не отвечает так: после того, как ты задумал число, он пытается его угадать, а ты потом его вводишь. Обманывать компьютер нельзя, это нечестно! 🙂

Через некоторое время он начинает прилично угадывать. Даже удивительно. А алгоритм основан на том, что датчик случайных мыслей (цифирок :)) в человеке не случаен, а берет на вход предыдущие сгенеренные цифирки. И то, что следующим ходом человек сгенерит, определяется тем, какие цифры он сгенерил до того. И как ему компьютер отвечал (как вариант игры – он может угадывать втихую и не отвечать сразу, а отвечать потом).

Короче говоря, вся ситуация отслеживается на 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 будут неуникальных.

Ну и дальше сайт – ф топку. Т.е., звонок модератору.

Как бы я давил дорвеи, сделанные по «цепям Маркова»: 22 комментария

  1. В принципе моделирование текста цепями Маркова используется уже давно в различных алгоритмах сжатия, см. например http://www.maxime.net.ru/compr.dmc.shtml
    Отсюда ещё один способ: если текст на сайте жмётся при помощи такого марковского моделера слишком хорошо (выше среднего), то текст явно сгенерён автоматически.

  2. То есть выход простой – размещать созданные страницы на разных сайтах?

  3. А не попадутся в то же поле научные тексты? Там тоже крайне редко используемые словосочетания используются с повышенной частотой.

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

    Но я не могу понять, что мешает взять начальный текст по объему сравнимый с тем, что нужно генерить? Все равно ведь его надо тематический из инета рыть – просто распарсить не одну первую страницу в гугле, а, например, 1000 результатов выдачи. Строишь инвертированный индекс и, я думаю, по секунде на дорвейную страницу – вполне реальный результат. Естественно надо размер базы подбирать, чтобы полностью в оперативке сидела и на диск не кэшировалась.

    В результате при сравнимом объеме текстов скорее всего не сработает ни один из предложенных алгоритмов определения.

  5. >Но я не могу понять, что мешает взять начальный текст по объему сравнимый с тем, что нужно генерить?
    -так откуда ж его, большой текст, взять? Ведь это должен быть тематический текст, а не текст "ни о чем". Скажем, как ты впихнешь нормально слово "кондиционер" в ээ… "Войну и мир"? 🙂
    >Все равно ведь его надо тематический из инета рыть – просто распарсить не одну первую страницу в гугле, а, например, 1000 результатов выдачи. Строишь инвертированный индекс
    -я, например, сильно не уверен, что эти тексты уникальные… Мусора набрать очень просто… Имхо, ситуация "из интернета" – посильна только для самих поисковиков…

    При сравнимом объеме, конечно, не сработает.

  6. -я, например, сильно не уверен, что эти тексты уникальные… Мусора набрать очень просто…

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

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

  7. Ну, в принципе, даже если взять "Войну и Мир" и переколбасить по Маркову – как в окончательный текст напихать слово "кондиционер", чтобы было в ладах с падежами и т.п.? 🙂
    А вот уникальных текстов по заранее заданной теме и еще в большом количестве, думаю, нарыть сложно…

  8. Ну, в принципе, даже если взять "Войну и Мир" и переколбасить по Маркову – как в окончательный текст напихать слово "кондиционер", чтобы было в ладах с падежами и т.п.? 🙂

    Чисто в теории у меня для этого лингвомодуль есть:). Я правда его для других целей пользую, но и для этого подойдет без проблем:).

    >А вот уникальных текстов по заранее заданной теме и еще в большом количестве, думаю, нарыть сложно…

    А в чем сложность? Ввел в яндекс-директе "кондиционер" – получил первые 100-200 запросов для основного яндекса. Прошелся по этим запросам, регулярно тыкая "Еще с сайта". В принципе, если не лень, то дубли можно давить. Предложения меньше 5 слов выкидывать. И вот тебе примерно 10 мег уникальных текстов по кондиционерам. При этом таких, что яндекс не считает их плохими:).

    Насколько я понимаю, если самому взять на себя роль постановщика задачи и руководителя, то по Владимирским меркам это обойдется в 1500-2000 баксов и примерно 2 месяца времени. Другое дело, что немного стремно программисту отдавать такой продукт. Но в этом случае можно поделить это дело на 2-3 части – будет быстрее, но больше мороки для руководителя.

  9. Нет: то, что яндекс не считает плохим, на данный момент не есть уникальное…
    Вот я как-то сильно сомневаюсь, что в Рунете написано 10 метров уникального текста по кондиционерам. Даже и мега не наберется… Даже 100 К…

    Для сравнения, на lib.ru:

    Война и мир. Том 1 913k
    Война и мир. Том 2 679k
    Война и мир. Том 3 883k
    Война и мир. Том 4 745k

    🙂

  10. Тю. Кто ж тексты с выдачи берет. Это или отдельно делается с вырубанием больших кусокв текста и проверкой на уникальность или берутся сайты из дмоза, яхиного каталога и им подобных ручками собранных коллекций.

    И конечно проверка на уникальность час отного распределения слов-словосочетаний выдаст с потрохами дор. Только текст берется больше чем сам генерируемый сайт.

  11. Кто ж тексты с выдачи берет.

    Я не понял, а почему их нельзя брать для создания словаря пар? Для троек возможно и нельзя, но я сомневаюсь, что многие используют тройки.

    Ведь если поисковик посчитал тексты нормальными (даже если это дорвеи), то соответственно и сгенеренный текст будет приемлимым.

  12. Mauser,
    >Только текст берется больше чем сам генерируемый сайт.
    -а вот приведи пример. Из разряда: дорвейный сайт – столько-то страниц, каждая по столько-то килобайт. Уникальный текст на тему… ээ… phentermine, xanax, viagra [дальше не знаю, сами допишете:)] – столько-то К.
    И просто будет интересно, откуда на эту тему столько уникальных текстов взялось. Из дмоза, каталогов яху? Сам пойду поищу, не верю! 🙂

  13. Ну во-первых, метод не сработает. Ты неправильно описал алгоритм генерации текста. (Слишком упростил).
    Во-вторых – по поводу где брать кучу текстов. Сейчас в США развиты конторы, которые нанимают удаленных сотрудников, по 3-5 баксов за кило писать тексты (статейки) под ключевые слова, ключевые слова сам понимаешь берутся из тех же самых жирных тем.
    Может помнишь с вордпрессом скандал был? Вот подобные тексты скармливаешь в марковизатор, результат получается – чудо просто. 🙂

  14. Interitus, возможно, и упростил. Я учет вероятностей комбинаций выбросил. Но метод должен сработать и без них. Или ты что-то другое имеешь в виду?
    >Сейчас в США развиты конторы, которые нанимают удаленных сотрудников, по 3-5 баксов за кило писать тексты (статейки) под ключевые слова
    -так тогда это не дорвеи уже, а обычные сайты…

  15. Interitus, возможно, и упростил. Я учет вероятностей комбинаций выбросил. Но метод должен сработать и без них. Или ты что-то другое имеешь в виду?

    Не только учет вероятностей, но в основном он. Если для одного сайта в качестве исходного брать сопоставимый объем текста, метод не срабатывает.

    -так тогда это не дорвеи уже, а обычные сайты…

    Обычные конечно, я к тому что по жирной какой-то теме, по которой на первый взляд – тексты неясно где вообще брать, ну казалось бы где набрать 200 кило уникального текста по теме Online poker rooms, текстов на самом деле вот в таких сборниках статей можно награбить. (это вообще я всё комментировал твою фразу: И просто будет интересно, откуда на эту тему столько уникальных текстов взялось. )

  16. А вообще радикальное решение – делать вместо дорвейных обычные сайты. Против лома нет приема. 😀

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

  17. Может помнишь с вордпрессом скандал был?

    Interitus, а можно поподробней ? что за скандал ?

  18. BoG: дак хранили вордпресовцы на своем домене доры с ппц-выдачей, да ссылки с хомпаги невидимые на них ставили.

  19. Ты слишком просто применил маровскую цепь. Это очень простой алгоритм. По нему ты конечно вычеслишь. Но так не делают. (если делают то гуг отлавливает уже). А вот как можно использовать цепи, это к сожалению тебе сказать не могу. Я думаю сам догадаешься.

Комментарии запрещены.