Tag Archives: Whatsup

Whatsup 0.3: le query degli utenti in mappa mentale

La versione 0.3 di Whatsup permette di esportare automaticamente i dati in formato Freemind. Se non sapete che cosa è Whatsup, allora vi invito a dare un’occhiata agli articoli dedicati a Whatsup.

Forse il risultato visuale non sarà figo come quello ottenibile esportando i dati in formato XMind, tuttavia ho scelto il formato Freemind per le seguenti buone ragioni:

  • E’ più facile da creare, perché si tratta di un semplice ed essenziale file XML. Il formato XMind è invece più complesso, in quanto un file è in realtà un archivio zip contenente directory, thumbnail e più di un file XML.
  • Per Freemind esiste un applet Java che consente di mostrare via browser una mappa in tale formato. In questo modo sarà possibile mostrare la mappa delle query degli utenti direttamente sul pannello di controllo di Whatsup.
  • E’ un formato importabile in XMind, se proprio si desidera conferire figosità estetica alla mappa creata.

Per mostrarvi il risultato finale, segue una mappa delle query estratte ieri, sia in formato Freemind che in formato XMind. Le keyphrase in neretto sono quelle considerate più “hot” nel momento dell’estrazione.

E a proposito di questo stramaledetto neretto, sappiate che è ciò che ha fatto slittare di molto la presentazione di Whatsup 0.3, pronto da tempo ma fino a ieri privo di un sistema di assegnazione di attributi alle keyphrase, che adesso invece c’è.

Formato Freemind

Mappa mentale in formato Freemind

Importazione in XMind

Il file Freemind importato in XMind

Whatsup 0.3: gestione dei datacenter e fermento sul web

Nel precedente post dedicato a Whatsup avevo accennato alla versione 0.3, che tra le altre cose introduce la produzione automatica delle mappe mentali.

Prima di affrontare l’esportazione dei cluster in formato FreeMind, però, penso che sia opportuno dare piorità ad un aspetto più critico e che durante la sua gestione mi ha permesso di sviluppare una nuova idea sul genere di informazioni che Whatsup potrebbe fornire.

La gestione dei datacenter

Datacenter di GoogleOgni software di ranking, nell’interrogare Google o qualsiasi altro motore di ricerca, si pone come obiettivo quello di acquisire informazioni sulla posizione dei siti, che vengono solitamente comparate con quelle acquisite precedentemente per comprendere se la visibilità dei siti migliora o peggiora nel tempo.

In linea teorica, converebbe interrogare sempre uno stesso datacenter, per essere certi che le informazioni acquisite sulle posizioni non siano sporcate dal tipico fenomeno di disallineamento dei dati che i datacenter solitamente mostrano. Nella pratica esistono ragioni per evitare l’interrogazione di un solo datacenter, ma in teoria la maggiore consistenza dei dati si otterrebbe evitando di interrogare datacenter diversi.

L’acquisizione di dati fatta da Whatsup si pone però obiettivi diversi da quelli che si pongono i software di ranking. L’interrogazione di un solo datacenter, infatti, non consentirebbe di acquisire tutte le ricerche “hot” del momento ma solo le ricerche hot conosciute dal datacenter interrogato. A causa del disallineamento dei dati, datacenter diversi possono ospitare ricerche leggermente diverse.

Che cosa conviene fare a Whatsup? Conviene porsi come obiettivo la completezza delle informazioni e acquisire tutte le ricerche facendo richieste multiple a datacenter diversi.

Interrogare più datacenter implica che si acquisiranno sia ricerche appena introdotte da Google nella categoria delle ricerche del momento, sia ricerche ormai meno attuali ma che rimangono ancora per un po’ di tempo nei datacenter aggiornati per ultimi. Questa non è una reale criticità, tuttavia, perché la frequenza di aggiornamento dei datacenter è così alta che anche le ricerche “vecchie” hanno vita breve e scompaiono da tutti i datacenter abbastanza velocemente, dietro la spinta delle query più nuove.

Datacenter non vuol dire IP

Molti SEO credono che un datacenter di Google venga identificato da uno specifico indirizzo IP o, per essere più precisi, che vi sia una corrispondenza biunivoca tra un datacenter e un indirizzo IP. Almeno relativamente ai servizi di Google che interrogo per estrarre le ricerche hot, questa convinzione pare essere errata.

Anche interrogando Google allo stesso indirizzo IP, l’insieme di query restituito può variare da utente a utente, che in termini di protocollo si traduce in “da connessione a connessione”. Quindi magari ad un IP corrisponderà pure una specifica struttura tecnologica, però sicuramente non corrisponde un unico centro di dati o archivio.

Per questa ragione, piuttosto che fare interrogazioni a IP diversi, Whatsup mantiene inalterato l’IP interrogato e fa di tutto per presentarsi sotto spoglie diverse cambiando user-agent, cookie e ovviamente aprendo ogni volta una nuova connessione HTTP. La quantità di richieste è modesta e non c’è rischio di incorrere in contromisure anti-flood di Google.

Diversi test testimoniano che questo approccio permette di ottenere ad ogni interrogazione un insieme di query leggermente diverso da quello dell’interrogazione precedente. Whatsup fa un po’ di tali richieste e poi mette assieme tutte le query raccolte. Ho anche svolto inoltre delle prove che dimostrano che, sfruttando la tecnica indicata, cambiere l’IP interrogato non porta ulteriori benefici in termini di nuove query acquisite.

Sfruttare il disallineamento

Nel fare query ai servizi di Google che erogano le informazioni sulle query più cercate del momento, ho notato un fenomeno interessante che riguarda l’allineamento dei datacenter.

Durante le ore diurne il disallineamento è maggiore, probabilmente perché l’aggiornamento dei dati avviene dietro la spinta delle ricerche effettuate dagli utenti e un volume maggiore di ricerche o la nascita di picchi su temi nuovi comporta un maggiore e più frenetico avvicendamento delle query vecchie/nuove. Al contrario, le ore notturne non mostrano quasi mai datacenter dai contenuti disallineati.

Ho allora pensato che il grado di disallineamento dei datacenter potrebbe essere usato come un indice indiretto del volume di query in un dato istante o, più precisamente, del “fermento” delle ricerche degli utenti.

Si tratterebbe di un indice molto approssimativo e difficile da estrarre (anche durante il giorno i datacenter non appaiono disallineati costantemente) ma se l’intuizione sulla relazione “attività umana – disallineamenti” si dovesse dimostrare azzeccata, si potrebbe ottenere per la prima volta uno strumento in grado di dare visibilità del fermento esistente in rete durante l’arco di una giornata. 🙂

Whatsup 0.2: sorgenti dei dati e query importanti

Mappa realizzata con XMind di un cluster creato da Whatsup 0.2

Mappa realizzata con XMind di un cluster creato da Whatsup 0.2

Nel precedente post su Whatsup 0.2, segnalavo che una novità introdotta in questa nuova versione era l’indicazione di quali keyphrase, nei cluster, potevano essere considerate più importanti di altre. Ripubblico per comodità l’immagine del cluster già usata nel post precedente e vi invito a dare un’occhiata alle keyphrase evidenziate in neretto.

Ovviamente la definizione di che cosa è importante o meno è squisitamente arbitraria: acquisite informazioni e segnali che esistono attorno alle ricerche del momento, la scelta di che cosa considerare più importante l’ha fatta il sottoscritto.

Come ho deciso di muovermi? Innanzitutto dalla versione 0.2, Whatsup inizia ad acquisire dati da più fonti.

Riguardo le fonti dalle quali è possibile ottenere informazioni in tempo reale sulle ricerche degli utenti, degli hint ben espliciti erano stati dati pubblicamente già durante il mio intervento al Convegno GT del 2009, incentrato su Google News (ecco la presentazione usata durante l’intervento).

A colleghi e compagni di aperitivi, inoltre, ho sempre sciorinato diversi dettagli di metodo e implementativi: molto era sostanzialmente incentrato sul monitoraggio del Google Suggest del servizio Google News.

Whatsup 0.2 ottiene però informazioni provenienti da altri strumenti in grado di riportare dati in tempo reale sulle abitudini di ricerca degli utenti. Di bello c’è che tali nuove fonti sono ben compatibili con la fonte usata finora e consentono di incrociare i dati in maniera molto armonica.

Il concetto di “maggiore importanza” che ho tirato fuori è nato in modo molto spontaneo: ad essere considerate più importanti sono quelle ricerche riportate da più di una fonte. Una banalissima intersezione ha permesso di mixare sia la caratteristica di freschezza tipica del suggest di Google News sia aspetti più quantitativi, acquisiti da fonti molto usate dagli utenti ma aggiornate meno frequentemente o con criteri diversi di quelli usati da Google per il suggest delle notizie.

I risultati ottenuti, come potete notare dall’immagine pubblicata in questo post, non sono davvero niente male e le keyphrase evidenziate in neretto dall’algoritmo sembrano anche coincidere con le keyphrase che le fonti stesse indicano esplicitamente come le più cercate.

Ovviamente un dettaglio su quali siano le nuove fonti non verrà fornito, perché l’obiettivo dei miei post su Whatsup è quello di produrre un diario degli aspetti informatici del progetto e non un vademecum completo che permetta ad altri di replicare esattamente il mio lavoro.

Il prossimo post sarà incentrato sulla versione 0.3 di Whatsup e sulla produzione automatizzata delle mappe mentali.

Whatsup 0.2: rinominare i cluster

Whatsup è e rimarrà uno strumento semplice, votato all’appoccio KISS.

La ragione di tale scelta è che dovrà macinare informazioni che gli arrivano da Google in qualche modo già filtrate; il fatto che si tratti delle keyphrase che mostrano un picco di ricerche, rappresenta a tutti gli effetti una prima selezione operata dagli stessi utenti, prima ancora che dal motore di ricerca.

Tuttavia l’esiguità dei dati ed il fatto che l’approccio al clustering sia strettamente statistico, impone dei limiti nel momento in cui si vuol tentare di migliorare un po’ il risultato.

Uno dei due obiettivi della versione 0.2 di Whatsup era quello di rivedere i nomi da assegnare alle categorie (parlo al passato perché nel momento in cui scrivo è già pronta la versione 0.3).

Nella versione 0.1 i nomi dei cluster erano scelti estraendo semplicemente la singola parola più frequente nelle keyphrase, spostando in un cluster così nominato le keyphrase che contenevano la parola stessa e ripetere il processo cercando la nuova parola più frequente nelle keyphrase rimanenti.

Se date un’occhiata all’immagine della mappa mentale pubblicata sul post iniziale di Whatsup 0.1, noterete che i cluster prodotti con questo criterio presentavano parole quasi sempre ben correlate con il nome del cluster, ma a volte la scelta era “sgraziata”.

Per esempio il cluster che conteneva le keyphrase “asse terrestre” e “asse terrestre spostato” acquisiva semplicemente il nome “terrestre”.

Nella versione 0.2 di Whatsup sono stati dunque aggiunti dei controlli per rinominare ciascun cluster con espressioni di due o più parole contigue (si veda Ngram), purché presenti più di una volta nelle keyphrase associate al cluster stesso.

Potete osservare il risultato della modifica nell’immagine presente su questa pagina.

Mappa realizzata con XMind di un cluster creato da Whatsup 0.2

Mappa realizzata con XMind di un cluster creato da Whatsup 0.2

La soluzione funziona molto bene con i nomi propri di persone perché naturalmente composti da almeno due parole. E l’osservazione può essere ovviamente estesa anche ai nomi propri in genere, come si può notare dalla presenza di un cluster chiamato “explorer 9”.

Esiste tuttavia un rischio nel rinominare i cluster in questo modo: assegnando un nome più specifico ci si allontana dalla genericità attorno alla quale il cluster è stato costruito. Il che significa che una volta rinominato, il cluster potrebbe presentare al proprio interno keyphrase generiche concettualmente più distanti dal nuovo nome.

Questo effetto negativo non si coglie dall’immagine allegata al presente post ma non mancherò di farvelo notare nelle prossime clusterizzazioni quando capiterà. Va detto però che tale problema è stato minimizzato con l’acquisizione di una maggiore quantità di keyphrase, come spiegherò quando tratterò la versione 0.3 del software.

Ho anche scritto che la rinominazione dei cluster era il primo di due obiettivi che mi ero posto di raggiungere nella versione 0.2; qual’era il secondo?

Come potete notare nell’immagine, alcune keyphrase appaiono in neretto e sono le keyphrase che l’algoritmo giudica più “importanti” di altre. Nel prossimo post scriverò come tale selezione è stata operata.

Whatsup 0.1: tipologia dei dati e algoritmo di clustering

L’algoritmo di clustering che ho sviluppato è estremamente semplice ma riesce ad ottenere discreti risultati nonostante l’esiguità di dati.

Il “nonostante” si applica perché in Information Retrieval la bontà di molte soluzioni non si fonda principalmente sulla qualità degli algoritmi bensì sulla qualità delle informazioni sulle quali gli algoritmi devono lavorare.

Uno stesso algoritmo può produrre risultati scadenti se applicato a pochi dati e risultati ottimi se applicato a basi di dati molto grandi. Google non è il leader nell’IR solo perché sviluppa buoni algoritmi ma anche perché disponde di una gigantesca quantità di informazioni sulla quale farli macinare.

Le informazioni prese in esame da Whatsup sono le keyphrase cercate dagli utenti su Google e, trattandosi nello specifico delle sole keyphrase che in un dato istante mostrano un picco di ricerche, la loro quantità è limitata. Attraverso i metodi che sto sfruttando al momento, la quantità delle keyphrase “hot” che è possibile estrarre da Google varia da 100 a 200 elementi.

Fortunatamente, nonostante la quantità non sia alta, i dati possiedono caratteristiche che vengono facilmente incontro anche all’algoritmo di clustering più semplice. In particolare, gli utenti sul Web cercano informazioni su uno specifico soggetto digitando ricerche molto diverse, varianti che fanno uso di sinonimi e altre che ripropongono le stesse parole in ordine differente.

A seguito di un’estrazione di keyphrase “di picco” da Google capita quindi che diverse di esse facciano riferimento allo stesso tema, usando parole e variazioni leggermente diverse, ma facilmente accomunabili da una o più parole in comune.

Di fronte a questi elementi di similarità, ho pensato che buoni risultati potessero essere ottenuti anche con un semplice algoritmo di clustering che cercasse nelle keyphrase la presenza di parole “importanti”. Ma cosa si intende per “importante”?

Il concetto di importanza va definito. Nel contesto in cui sto operando, ovvero un elenco di keyphrase “hot”, una parola che posso considerare importante potrebbe essere una parola che si ripete in più keyphrase. Più sono le keyphrase in cui la parola è presente e più essa può essere considerata importante per questo specifico contesto.

Tradotto in numeri, significa che il mio concetto di importanza si può limitare per il momento a calcolare la frequenza di ciascuna parola all’interno del corpus (in questo caso l’elenco delle keyphrase) e considerare importanti i termini che sono più frequenti.

Il metodo funziona bene solo se tiene conto del fatto che esistono particelle linguistiche che possono apparire frequentemente nelle keyphrase (articoli, preposizioni, ecc.) ma che non dovrebbero essere considerate importanti.

Le soluzioni per evitare che le particelle del discorso frequenti in lingua italiana inficino i risultati, sono sostanzialmente due: usare una lista di stop words oppure riuscire ad assegnare un peso inferiore o nullo a tali termini sfruttando statistiche su un corpus più grande.

Nonostante io possieda un grande storico delle ricerche su Google (in particolare su Google News), nella versione 0.1 di Whatsup mi sono limitato a usare una semplice lista di stop words. E’ stato veloce, indolore ed i risultati non sono niente male. Ovviamente le versioni successive di Whatsup preferiranno implementare soluzioni basate sull’analisi di dati storici.

Ho preso una lista di stop words italiane da qua, ne ho aggiunta qualcuna che mancava all’appello (es: “quando”) e ho prodotto una seconda lista di termini molto generici, come “news”, “notizie”, “video” o “ansa”. Ho infatti deciso di gestire normalmente questi termini tranne che durante la scelta dei nomi da attribuire ai cluster, che desidero incentrare su parole più specifiche.

Ecco dunque di seguito l’algoritmo finale di Whatsup 0.1, già obsoleto nel momento in cui scrivo ma che vi riporto perché nei post successivi sarà più facile spiegare il motivo di alcuni cambiamenti fatti nelle versioni successive del software, via via che ho acquisito visibilità sulla qualità della classificazione.

Mappa mentale con il risultato di Whatsup v0.1

Primo clustering fatto a mano con XMind

  1. Estraggo la parola più frequente nelle keyphrase (escludendo le stop words)
  2. Creo un cluster e lo chiamo come la parola trovata
  3. Assegno al cluster tutte le keyphrase che contengono la parola
  4. Una volta che una keyphrase viene assegnata ad un cluster, viene tolta dal bacino di keyphrase dalle quali estrarre, al prossimo giro, la nuova parola più frequente
  5. Prossimo giro: si torna al punto 1 fino a quando ci saranno parole ripetute in almeno due keyphrase diverse
  6. A questo punto rimarranno solo keyphrase che non contengono alcuna delle parole usate per dare nome ai cluster. Per ciascuna keyphrase non assegnata, l’assegno al cluster che condivide con essa la quantità maggiore di parole.
  7. Tutto ciò che rimane termina in un cluster speciale che chiamo “UNCATEGORIZED”

Pubblico nuovamente l’immagine con il risultato del clustering dell’algoritmo appena descritto.

Nei prossimi post vedremo i limiti del presente approccio e che cosa ho deciso di cambiare nelle versioni successive di Whatsup.