Catene di Markov [Spam che piace ai motori Pt 1] Saturday, Sep 16 2006
Dentro il Motore 12:48 am

Premettendo che al fine ultimo di leggere questo articolo è consigliata una buona dose di alcol nelle sue forme più pregiate (l’amico Raele consiglia un Amarone, l’amico Stuart Delta suggerisce un Nobile di Montepulciano DocG, possibilmente del 1997 o 2001, l’amico Jacopo Gonzales propende per un Whisky), è altrettanto auspicabile il parallelo ascolto dei seguenti brani in ordine sparso:
1. Mr Self Destruct dei Nine Inches Nails
2. Catherine di Paolo Benvegnù
3. Stop in the name of love dei Bang Gang
4. La noyee di Yann Tiersen
5. Love in the old country di Preston Reed
6. All the Landslides Birds Have Seen Since the Beginning of the World di Kaki King
7. Avril Lavigne dei Laghetto
8. Lilies dei Cranes
9. Elizabeth on the bathroom floor degli Eels
10. Gabriel delle Electrelane
11. Rivers of sand di Fennesz
12. 21st Century Schizoid Man dei King Crimson
13. Brite tha’ day dei Need New Body
14. A sun that never sets dei Neurosis
15. In fondo in fondo siamo tutti assistenti pedagogici dei RUNI
16. Videoginnastica degli Scisma
17. Karma police dei Radiohead
Premessa numero 2
Con questo post inizierò una serie di articoli che tratteranno argomenti correlati allo spam visti da un ottica Grey Hat SEO.
Per intenderci non vi darò codici per la realizzazione di spam engines, ma userò ciò che ho imparato tramite questi per fornirvi teorie e/o informazioni implementabili sia in siti white hat che in siti black hat.
Sta a voi usare queste conoscenze come meglio credete e sta sempre a voi smentirmi ogni qual volta ne sentiate la necessità .
Basta divagare, cominciamo…
(leggete lentamente che sennò vi tocca imparare le Markov Chains da Wikipedia)
Ammettiamo di trovarci in un paese di 100.000 abitanti dove ognuno incontra nella sua vita solo un certo numero di persone del paese e ognuna di queste persone con una frequenza diversa. E ammettiamo che io sia un’abitante di questo strano luogo e che un giorno incontri per caso un mio caro amico che si chiama Giorgio.
Non è una novità , anzi devo precisare che questo mio amico lo incontro molto spesso, per essere esatti quasi una
volta al giorno. Ma oggi è successo qualcosa che non capita molto spesso: ci siamo incontrati davanti ad un bar alle 8 del mattino e non c’era nessuno. Così abbiamo deciso di andare da Stefano, un nostro comune amico, che abita poco lontano da questo bar e che io non vedo molto spesso, ma che lui conosce davvero bene, lo frequenta da qualche anno e mi dice che si incontrano almeno cinque volte alla settimana. Ora che ci penso non mi è quasi mai capitato di incontrarmi con Stefano da solo, c’era quasi sempre anche Giorgio le poche volte che l’ho visto.
Comunque sia arriviamo sotto casa sua in un paio di minuti e suoniamo al citofono, Stefano dice di aspettare un attimo
che finisce di prepararsi; ci comunica, inoltre, che dobbiamo andare ad incontrare un certo Stuart Delta, un suo amico che l’ha chiamato pochi minuti prima, dicendogli che sta traslocando e chiedendogli se per caso poteva aiutarlo. Stefano ci saluta dicendoci che arriva subito e io chiedo a Giorgio chi sia questo Stuart. Lui mi risponde che lo conosce da poco ma che è una grande amico di Stefano, tanto che stanno quasi sempre assieme ed escono tutti e tre ogni sabato sera: è la persona che Giorgio frequenta di più quando esce con Stefano.
Ma ecco che arriva Stefano, si scusa per averci impiegato così tanto a prepararsi e ci dice che Stuart abita poco più avanti e che sarebbe gentile da parte nostra aiutarlo a traslocare.
Arriviamo a casa sua e pochi minuti dopo sale Enrico un grande amico di Stefano e Stuart che è venuto ad aiutare. Con grande sorpresa scopro che si tratta di un mio vecchio amico e gli dico che non mi aspettavo di incontrarlo lì. Lui mi saluta chiededomi come mai mi trovassi a casa di Stuart e poi senza aspettare che io risponda si volta e stringe la mano a Giorgio, presentandosi.
Le Markov chains si basano su uno o più parametri iniziali (io e Giorgio) per ottenere uno più parametri finali in base alla probabilità con cui i parametri iniziali sono legati al parametro finale (Stefano): io conosco poco Stefano, Giorgio lo vede molto spesso, io quasi sempre lo incontro quando c’è anche Giorgio: Io -> Giorgio -> Stefano.
Giorgio conosce poco Stuart, Stefano lo frequenta spesso, è per questo che lui e Giorgio oggi incontrano Stuart, perché come precisato è la pesona che più frequentano quando sono assieme, quindi: Giorgio -> Stefano -> Stuart.
Ed è per questo che oggi ho conosciuto Stuart, perché: Io -> Giorgio -> Stefano -> Stuart.
E per ultimo il fatto che io conosca Enrico non è determinante per il suo arrivo a casa di Stuart e oltretutto non mi ha neppure dato molta importanza. Giorgio comunque non lo conosceva.
Eppure domani potrei incontrarmi con Jacopo: un amico mio, di Giorgio e di Stefano. Magari lo incontriamo proprio perché ci troviamo tutti e tre assieme (io, Giorgio ed Stefano). O magari un giorno decidiamo di vederci con lui solo io e Giorgio. O magari mi vedo da solo con lui.
Non necessario un determinato numero di parametri iniziali per ottenere un parametro finale tramite una Catena di Markov. Però il parametro finale ha una probabilità di essere generato dai parametri iniziali che dipende strettamente da questi ultimi.
Ma non preoccupatevi se non è tutto chiaro, farò altri esempi e man mano che ci addentreremo nell’argomento scoprirete sia perché è interessante per i Black Hat SEO sia per i White.
Ammettiamo adesso di avere un insieme di partenza (prima era il paese) in cui è stabilito sia un rapporto ordinato tra i vari elementi (Nel paese erano per esempio: Io e Giorgio; Io e Stefano, Io e Enrico; Io e Stuart; Giorgio e Io; Giorgio e Stefano; Giorgio e Stuart; Giorgio e Enrico; ..), sia un rapporto ordinato tra un sotto insieme ordinato di elementi con un elemento (Nel paese erano per esempio: [Io e Giorgio]->Stefano è diverso da [Giorgio e Io]->Stefano).
Inoltre stabiliamo che ad ogni tipo di rapporto sia abinata una frequenza che va da 0 a 1.
Esempio (dimenticatevi di Me, di Stefano, di Giorgio etc.. adesso usiamo solo lettere e definiamo un nuovo tipo di rapporto):
- I -> G = 1/2;
- G -> I = 1/3;
- I -> S = 1/7;
- S -> G = 1/4;
- G -> S = 1/6;
- [G -> I]->S = 1/20;
- [I -> G]->S = 1/10
Come potete vedere adesso a differenza dell’esempio del paese, la frequenza si basa anche sull’ordine degli elementi. Ma non preoccupatevi, facciamo sparire le lettere e passiamo ad un esempio con le parole.
Ammettiamo di avere un documento testuale che tratta di cani. Questo documento è il nostro insieme, mentre le parole che lo compongono sono gli elementi.
Ogni parola presente nel documento sarà seguita da un’altra con una certa frequenza (numero di occorrenze della coppia ordinata diviso per il numero delle occorrenze della prima parola), per esempio nel testo la parola il è seguita dalla parola cane con una frequenza di 1/20, perché ci sono 200 occorrenze della parola il e 10 occorrenze della coppia ordinata il cane. Vi faccio capire al volo cosa intendo dire con coppia ordinata per chi ancora non l’ha capito: il cane è una coppia formata da il e da cane, ma è una coppia diversa dalla coppia cane il ed infatti la coppia il cane può avere una frequenza diversa dalla coppia cane il.
Inoltre nel nostro documento ogni coppia ordinata di parole è seguita da un’altra con una certa frequenza, per esempio nel nostro documento solo queste parole seguono la coppia ordinata il cane:
- è
- bianco
- Snoopy

La parola è segue la coppia il cane con una frequenza di 1/2 e infatti ci sono ben 5 occorrenze della tripla ordinata il cane è nel documento, su un totale di 10 occorrenze della coppia il cane. La parola bianco segue la coppia il cane con una frequenza di 2/5 e la parola Snoopy segue la coppia il cane con una frequenza di 1/10.
Ammettiamo di conoscere qual’è la frequenza che lega ogni coppia del documento ad ogni parola del documento, precisando che si tratta sempre di un legame ordinato. Utilizzeremo queste informazioni in un array e definiremo una coppia iniziale presa a caso tra tutte le coppie.
Se abbiamo a disposizione un array molto grande possiamo ottenere un testo abbastanza lungo e corretto anche se privo di senzo logico per noi umani.
Ammettiamo che la nostra coppia iniziale sia il cane.
La cerchiamo nell’array e scopriamo che può essere seguita da 3 parole (è; bianco; Snoopy), ognuna con una certa frequenza. Viene casualmente scelta una di queste parole (è) e si prosegue.
Adesso abbiamo la coppia cane è, la cerchiamo nell’array e scopriamo che può essere seguita da 2 parole (bianco, nero), viene scelta una delle due a caso in base alla frequenza (viene scelta la parola bianco) e si prosegue cercando nell’array la coppia è bianco…
E’ chiaro che il testo prodotto potrà arrivare ad una strada senza uscita solo nei seguenti casi:
- cerca nell’array una coppia che non è associata a nessun altra parola (se esiste ce n’è solo una per ogni array)
- cerca nell’array una coppia A che è associata ad una sola parola e la seconda parola della coppia forma una coppia che è associata ad una sola parola e così via finché o si arriva ad una coppia che non è associata a nessuna parola o ad una coppia che è presente tra quelle che necessariamente seguono la coppia A. In sostanza in questo secondo caso si crea un loop.
Ok.. adesso vi ho spiegato cos’è una markov chain o almeno vi ho spiegato le markov chain nell’ottica della generazione di testi casuali. A questo punto gli spammers possono smettere di leggere. Ecco invece cosa può interessare agli amici White SEO:
La domanda che bisogna porsi è: perché gli spammers usano questi testi? Pigrizia? Voglia di raggiungere subito molti posizionamenti per molte keywords senza dover scrivere i contenuti a mano?
Sicuro! Il 99% lo fa per quei motivi lì, ma il restante 1% si chiede: perché questi testi “piacciono” ai motori di ricerca?
La mia idea è che questi testi se creati correttamente possano interpretare la moda di una serp sia dal punto di vista tematico che da quello linguistico, andando così a scalare la serp stessa, perché ritenuti idonei dai motori di ricerca.
Questo tipo di pagine, dunque, possono essere considerate una buona sonda per comprendere approssimativamente cosa è la moda di una serp e come creare pagine pulite basandosi sui risultati ottenuti dalle pagine markov.
I processi di ranking nei motori di ricerca fanno quasi sicuramente affidamento al concetto matematico/geometrico di similitudine, dunque, è ben vista dal motore una pagina che è simile a tutte le altre pagine che sono state considerate interessanti all’interno di una serp e che allo stesso tempo è diversa da ognuna di queste quanto basta per superare i filtri antiduplicazione.
E’ da qui che si evince che la moda può realmente esistere, quanto meno come modello ideale a cui tende una pagina web e che ne determina il ranking all’interno di una serp.
Trackback URI



Questo blog è parte del network
September 19th, 2006 at 9:33 pm
grande
io comunque suggerisco di leggere questo post con un bel bicchiere di Chianti Classico.
September 21st, 2006 at 7:15 am
Molto molto interessante, soprattutto per sviluppare le argomentazioni di quell’1% di SEO.
PS. Sono astemio, ho letto il post con un caffè, va bene lo stesso?
September 21st, 2006 at 7:18 am
corretto?
September 22nd, 2006 at 1:59 pm
sei un grande! avrò capito si e no il 20%, ma vado sulla fiducia!
(ti aggrego, in parole povere…)
September 22nd, 2006 at 6:15 pm
Splendido! per il drink suggerirei un “Cappello di Prete”…
ma cosa intendi per “correttamente” quando dici “La mia idea è che questi testi se creati correttamente possano interpretare la moda …”?
Indipendentemente dal colore del mio cappello, dove pubblicare testo “automatico” (e senza senso logico)? DIV “Seo-oriented” (hidden)? Door-page?
September 26th, 2006 at 6:43 pm
Ciao Vincenzo,
sai percaso quante risorse dovrebbero essere impiegate perchè un motore di ricerca individui il testo in questo modo?
Google e gli altri motori hanno così tanti dati che moltissimi test nei loro DB potrebbe portare a tantissime risposte.
Che bello sarebbe cavolo, speriamo con Teecno di poter offrire questa possibilità , un giorno.
Ma sono curiosissimo dei risultati che si possono ottenere cavolini
Giorgio
September 26th, 2006 at 7:54 pm
Se io sapessi come individuarlo allora andrei da larry pages e mi farei assumere. Non so se sia facilmente individuabile, dipende da quanto è uguale ad altri documenti esistenti. Ma le markov possono generare anche testo completamente diverso da tutto e purtroppo google non può dire che una pagina è spam solo perché in un documento di n parole tutte le parole sono uguali a coppie ad altri n-1 documenti. Cioè alla fine non puoi riconoscere le markov in quanto markov, ma certamente google può attribuire pesi allo spam. Come dire: “la pagina pippo.html è tot spam perché è abbastanza simile a questo o a quello o perché è stata creata da tizio o perché ha lo stesso ip di caio o perché è linkata da sempronio o perché linka topolino”.
I testi markov fatti male sono ad alto rischio spam. Ma d’altra parte secondo me quelli fatti bene possono anche essere premiati, per la loro naturale similitudine.
Un motore anti markov dovrebbe premiare le novità e non basarsi su nessuna moda. Secondo me.
September 26th, 2006 at 9:34 pm
L’ho letto e ti dirò…l’ho anche capito…
La cosa che non capisco è “cosa ti cali per scrivere testi del genere???”
Bella ker!
November 17th, 2006 at 9:45 pm
Complimenti Vincenzo!
Sono riuscito a capire tutto, puoi considerare il testo che hai scritto come comprensibile a chiunque!
November 19th, 2006 at 4:37 pm
Sei riuscito nel compito quasi impossibile di riesumarmi sta roba da brutti ricordi universitari e farmene fare una ragione di studio.
!!!
Sei un grande Vinc
January 14th, 2007 at 8:14 am
B[log] of the Week: Gray Hat Seo…
Il blog che voglio recensire questa domenica è leggermente diverso dai soliti, ma senza dubbio molto valido. Infatti Gray Hat Seo, curato da Vincenzo Lombino (aka Kerouac3001) tocca temi che, nell’ambito del posizionamento, comunemente vengo…
January 19th, 2007 at 1:20 pm
Ciao,
tempo addietro ho letto il paper scentifico redatto da Brin e Page quando erano studenti (dovrei averlo, se vi interessa). Presentavano il primo algoritmo base di google. In particolare, Brin (oppure Page, non ricordo bene) stava facendo un dottorato di ricerca sulle catene markoviane. Credo che se volessero, potrebbero implementare l’algoritmo in modo da riconoscerle precisamente nei testi.
January 19th, 2007 at 1:55 pm
@tiziano:
molto interessante, fammi sapere
January 28th, 2007 at 10:09 am
Ciao,
ho trovato il file. Lo scaricai perché, secondo me, ha un valore sopratutto storico.
http://www.net-turbini.com/The-Anatomy-of-large-scale-Web-search-engine.pdf
Ciao,
Tiziano.
January 28th, 2007 at 12:04 pm
@tiziano:
aggiungo una cosa: devo ammettere che non ho seguito molto bene la storia del phraserank, ma da quel poco che ho capito credo di aver fatto centro con ciò che ho detto sulle markov
google forse non le usava, ma sta cominciando sicuramente a farlo
May 21st, 2007 at 2:08 pm
[…] Questi temi hanno comunque attratto la mia attenzione e curiosità per capire quali siano praticamente tutti i metodi per ottenere buoni/ottimi risultati (per un breve periodo) senza scrivere contenuti di qualità sfruttando software particolari (come le Markov Chain) e tecniche illecite (cloaching, commenti spam nei blog e strumenti e strategie poco pulite nei servizi di social bookmarking). […]
May 27th, 2007 at 4:31 pm
[…] Durante il corso Madri - seo extreme 2007 si è parlato delle Catene di Markov e questo argomento mi ha incuriosito in maniera particolare. L’utilizzo delle Markov Chain nelle cosidette tecniche Black Hat Seo (tecniche estreme di posizionamento sui motori di ricerca) è uno sviluppo interessante del concetto di proprietà di Markov in un processo stocastico. Questa proprietà sussiste nel momento in cui in un processo, la variabile casuale dei suoi futuri stati, dipende solo dallo stato presente. In questo post di kerouac3001 trovate una spiegazione semplice e dettagliata delle possibilità che offre la teoria delle catene di Markov nella generazione di testi casuali che possono essere utilizzati sia per produrre spam della peggior specie, sia per comprendere meglio il motivo per cui i motori di ricerca apprezzino molto questi testi auto generati. […]
July 6th, 2007 at 1:45 am
molto molto interessante, anche se dovrò rileggere il tutto con maggiore calma
July 10th, 2007 at 8:27 am
[…] Non avendo nulla da fare stavo navigando sulla serp ‘spam‘ alla ricerca di un mio sito. Sì, lo so è da psicopatici, però a volte sono queste le vie che conducono alle grandi scoperte. Ok, non si tratta di una grande scoperta, ma devo pur trovare una scusa che giustifichi il fatto che alle 22.45 stavo navigando oltre il 370esimo risultato della serp spam. Ciò che mi ha sorpreso subito è stato il trovare non il sito che mi aspettavo, ma uno dei post del mio blog in cui parlavo di markov chains. […]
July 12th, 2007 at 12:24 pm
anche se ci sto ancora facendo impazzire le meningi per capirlo a fondo…. mi pare un ottimo artocolo!
August 12th, 2007 at 1:08 pm
MOlto utile, anche se penso che le markov sono i peggiori nemici dei motori di ricerca penso anche che dovrebbe essere usata per altri scopi, che non siano necessariamente SPAM
August 27th, 2007 at 10:54 pm
[…] Uno spam engine è un software che crea migliaia di pagine web, zeppe di contenuti, in pochi minuti. Un buon esempio di spam engine è quello creato da Kerouac3001, che si basa sulle catene di Markov. Ecco qui un post molto approfondito sulle catene di Markov, che Kerouac ha scritto sul suo blog. […]
October 11th, 2007 at 6:23 pm
[…] Durante il corso Madri - seo extreme 2007 si è parlato delle Catene di Markov e questo argomento mi ha incuriosito in maniera particolare. L’utilizzo delle Markov Chain nelle cosidette tecniche Black Hat Seo (tecniche estreme di posizionamento sui motori di ricerca) è uno sviluppo interessante del concetto di proprietà di Markov in un processo stocastico. Questa proprietà sussiste nel momento in cui in un processo, la variabile casuale dei suoi futuri stati, dipende solo dallo stato presente. In questo post di kerouac3001 trovate una spiegazione semplice e dettagliata delle possibilità che offre la teoria delle catene di Markov nella generazione di testi casuali che possono essere utilizzati sia per produrre spam della peggior specie, sia per comprendere meglio il motivo per cui i motori di ricerca apprezzino molto questi testi auto generati. […]
January 14th, 2008 at 11:02 pm
Ciao kerouac3001 e complimenti. Io credo solamente che gli spammer siano interessati a vedere come si comportano i motori ed in un certo senso riuscirli a fregare, riuscire a sorprenderli e per questo cerca di prendere in giro una macchina. D’altronde un uomo si presuppone sia più intelligente di un processore… Poi se si mettono in mezzo i QR è un altro discorso
February 12th, 2008 at 12:53 pm
io onestamente non ho capito da dove hai tirato fuori le occorrenze
February 28th, 2008 at 5:23 am
Leggo il tuo post a quasi due anni dalla pubblicazione… Forse arrivo tardi, ma davvero complimenti, post facilmente leggibile ma tecnico quel tanto che basta! Ps Ho bevuto prima di leggere una tazzina di jack…
April 8th, 2008 at 9:21 pm
Ciao Vincenzo!
ho utilizzato la tua spiegazione per semplificare (si fa per dire) una serie di elementi per la gestione delle matrici nella progettazione architettonica del mio corso nella facoltà di architettura valle giulia.
esauriente ed interessante! ovviamente gli spam non mi interessavano!!
grazie
P.S.
ho citato la fonte, ovviamente
July 28th, 2008 at 11:48 am
Giorgio Taverniti,secondo me non è un fatto di risorse, perchè l’utilizzo ottimizzato di questo modello matematico non ne richiede così tante, anzi un motore di ricerca che sfrutta queste catene si semplifica e si velocizza parecchio…tieni conto che le catene di markov sono utilizzate addirittura per semplificare il codice del DNA! mi sembra assurdo fare altri esempi. Nel caso se vuoi espandere il discorso fai pure, a me l’argomento interessa, non per i motori di ricerca, ma mi interessa molto..
giusto per chi è venuto a conoscenza di queste catene tramite l’artilo (molto bello complimenti all’autore) aggiungo che queste vengono largamente utilizzate nel campo dell’informatica di un certo livello (e non solo) per generare algoritmi veloci e precisi