• Community Manager

    Hey Agoago,

    che ne dici di riportare le tue riflessioni qui, mi sembra più corretto 🙂
    http://www.giorgiotave.it/forum/viewtopic.php?t=4155&start=105

    :ciauz:


  • Moderatore

    Wow! Premesso che mi hai fatto commuovere più di una volta, veniamo a noi:

    Gli oggetti in comune a piu ' categorie, come li tratti?
    Semplice, dopo aver creato le categorie le ordini per "importanza", gli oggetti comuni a piu' categorie li metterai-suddividerai nelle categorie minori o maggiori, a tua scelta.

    E se ripetessimo l'algoritmo ricorsivamente, escludendo le "categorie" del livello superiore? Otterremmo delle sotto-categorie...

    Ma torniamo alla questione base, come decidi quale oggetto sara' categoria?

    k >= m+2s

    Non mi sembra applicabile, nessun K supera (realmente) media + varianza, a maggior ragione media + varianza * 2

    In teoria, se la distribuzione è di Gauss (ipotesi da verificare nel linguaggio "pseudo-naturale" delle frasi scritte nella textBox di ricerca...), l'80% dei "campioni"
    (in questo caso le keywords) si distribuisce tra m+-2s...(il "meno" mi preoccupa...)

    In ogni caso i risultati che sto ottenendo sono soffisfacenti, ma stanno uscendo anche cose strane...

    Un'altra soluzione potrebbe essere quella di passare agli spazi vettoriali: una keyphrases appartiene ad una categoria(=significato?) sel il prodotto scalare dei due vettori tende a 1 (ovvero sono vettori "paralleli")...Ma come assegnare ad una frase un "insieme di coordinate"???


  • Moderatore

    Ho implementato l'algoritmo indicato nel suddetto articolo!
    I risultati, sulla base delle keyword utilizzate per accedere al mio sito nell'ultima settimana (in versione limitata 😎 ), sono disponibili su questa pagina:
    http://www.cavone.com/services/KeyphraseAnalyzer.asp

    Davvero interessante...c'è da fare un pò di pulizia sulle preposizioni semplici e articolate, i verbi, le congiunzioni, le parola inglesi 😮 ...

    Quasi quasi lo faccio diventare un Tool disponibile a tutti... a pagamento ovviamente :fumato:


  • Super User

    @paocavo said:

    Un'altra soluzione potrebbe essere quella di passare agli spazi vettoriali: una keyphrases appartiene ad una categoria(=significato?) sel il prodotto scalare dei due vettori tende a 1 (ovvero sono vettori "paralleli")...Ma come assegnare ad una frase un "insieme di coordinate"???

    A cosa ti serve l'"insieme di coordinate"? Non puoi semplicemente scegliere dei centroidi ed assegnare la keyphrase al centroide più vicino?

    Molti algoritmi di clustering fanno così, usando tecniche iterative per aggiornare le coordinate dei vettori dei centroidi fino a quando i contenuti degli insiemi (le keyphrase assegnate ai centroidi) non cambiano più.

    Ma questo approccio vettoriale vanificherebbe il lavoro che hai fatto finora, che si basa anche sull'analisi logica delle keyphrase.


  • Moderatore

    @LowLevel said:

    Ma questo approccio vettoriale vanificherebbe il lavoro che hai fatto finora, che si basa anche sull'analisi logica delle keyphrase.

    Infatti...continuo con la prima... :yuppi:


  • Super User

    @paocavo said:

    Infatti...continuo con la prima... :yuppi:

    Ottima decisione. Personalmente, però, rivedrei un attimo il calcolo di K.

    E' possibile che si ottengano risultati migliori applicando una forma di term weighting invece che basandosi solo sul numero delle occorrenze. Bisognerebbe provare.


  • Moderatore

    @LowLevel said:

    E' possibile che si ottengano risultati migliori applicando una forma di term weighting invece che basandosi solo sul numero delle occorrenze. Bisognerebbe provare.

    http://www.sims.berkeley.edu:8000/ courses/is202/f98/Lecture17/sld001.htm mi sembra un ottimo punto di partenza...

    Sviluppando l'implementazione dell'algoritmo mi è "avanzato" un dato che non trascurerei: l'Hit count delle KeyPhrases (non Keyword) 😮 .
    Posso assumerlo come "fattore arcano" nel calcolo del "peso" delle Keyword costituenti o il peso lo si stabilisce a priori?


  • Super User

    @paocavo said:

    Posso assumerlo come "fattore arcano" nel calcolo del "peso" delle Keyword costituenti o il peso lo si stabilisce a priori?

    Penso che se deciderai di applicare una formula di term weighting anche semplice (la classica tf*idf va bene), terresti indirettamente conto anche delle keyphrase, visto che con l'aumentare delle istanze di una keyphrase sale inevitabilmente l'hit count dei singoli termini che la compongono.

    Se non hai problemi di spamming, ovvero la necessità di proteggere l'algoritmo dalla presenza eccessiva di troppe keyphrase identiche, puoi anche fregartene della normalizzazione.

    Io normalizzo sempre, di norma. E generalmente introduco anche una funzione che mi eviti le crescite lineari, come un logaritmo. A volte ho usato anche qualche funzione trigonometrica, a seconda del tipo di crescita che mi piace dare alla curva.


  • Moderatore

    @LowLevel said:

    Penso che se deciderai di applicare una formula di term weighting anche semplice (la classica tf*idf va bene), terresti indirettamente conto anche delle keyphrase, visto che con l'aumentare delle istanze di una keyphrase sale inevitabilmente l'hit count dei singoli termini che la compongono.

    Grazie infinite! ci provo subito anche se, forse, dovrei tener conto del peso delle keyword in base alla loro funzione grammaticale. Provo ad azzardare:

    PGramm_Key = 0.80 per i complementi (c. oggetto, c. di termine, c. di specificazione, ...)
    PGramm_Key = 0.19 per i verbi
    PGramm_Key = 0.01 per le congiunzioni, le preposizioni semplici ed articolate, ecc...

    E provare con tfidfPGramm_Key


  • Super User

    @paocavo said:

    Grazie infinite! ci provo subito anche se, forse, dovrei tener conto del peso delle keyword in base alla loro funzione grammaticale.

    E' un'idea, ma conta che se la quantità di keyphrase è abbastanza alta, è lo stesso idf ad assegnare meno peso a congiunzioni, articoli e preposizioni.

    In genere in IR si tende ad evitare l'aumento della complessità delle formule e si cerca di progettare formule semplici che funzionino bene solo su grandi quantità di dati.

    Quindi la scelta sta a te: se il tuo obiettivo è quello di ottenere qualcosa che funzioni anche con poche keyphrase, allora l'analisi logica è benvenuta. Se invece devi lavorare su grandi quantità di dati, il contributo dell'analisi logica diventa minimo.


  • Moderatore

    @LowLevel said:

    Quindi la scelta sta a te: se il tuo obiettivo è quello di ottenere qualcosa che funzioni anche con poche keyphrase, allora l'analisi logica è benvenuta. Se invece devi lavorare su grandi quantità di dati, il contributo dell'analisi logica diventa minimo.

    I risulati su un campione delle ultime 1000 keyphrases utilizzate per il mio sito sono su http://www.cavone.com/services/KeyphraseAnalyzer.asp

    La formula finale usata è K >= mg + S

    dove mg è la media pesata sui pesi dovuti all'analisi logica.
    S è la deviazione standard. Per i miei scopi và + che bene.
    GRAZIE ancora a tutti.

    PS1: l'articolo è stato tradotto in inglese da Google, appena ho un pò di tempo lo sistemo.

    PS2: Prossimo obiettivo? Un motore di ricerca per il mio sito migliore di quello presente ora (si basa, banalmente 😎 , sulla ricerca esatta della stringa passata, all'interno dei Title e Body dei miei articoli.


  • Moderatore

    @paocavo said:

    Ho implementato l'algoritmo indicato nel suddetto articolo!
    I risultati, sulla base delle keyword utilizzate per accedere al mio sito nell'ultima settimana (in versione limitata 😎 ), sono disponibili su questa pagina:
    http://www.cavone.com/services/KeyphraseAnalyzer.asp

    Adesso sono calcolabili, oltre ai dati statistici, gli insiemi di keyprases "related", la relativa "categoria" (significato?), la funzione grammaticale delle keyword-categoria, e la "top keyphrase". Alcuni insiemi/categorie però sono, a loro volta, relazionati: che fare?


  • User Attivo

    Paocavo vedo che hai abbandonato la precedente formula k >= m+2s (infatti provando a me era sembrata poco pratica) per passare a :

    "La formula finale usata è K >= mg + S

    dove mg è la media pesata sui pesi dovuti all'analisi logica.
    S è la deviazione standard. Per i miei scopi và + che bene.
    GRAZIE ancora a tutti. "

    Tuttavia anche con questa non mi ci ritrovo, nel senso che dal lato pratico analizzando gruppi di 1000 frasi alla volta mi ritrovo con molte decine di parole superiori a mg+s

    Insomma prima non trovavo una categoria che fosse una, adesso ne trovo troppe.

    Non lo dico per rompere le scatole, ma siccome su questo argomento sbatte la testa mezzo mondo seo, riuscire a trovare una buona formula non sarebbe cosa da poco...


    Sconsiglio la lettura di quanto segue ai puristi, si tratta di roba da smanettoni, per la serie a caccia della pagnotta.

    Ipotizziamo che io abbia in una mia dir 1000 pagine e che voglia suddividerle per un minimo comune denominatore.

    Le 1000 pagine trattano un po' di tutto e non ho voglia di passarmele a mano una ad una per decidere sotto quale "categoria" metterle.

    La pigrizia e' una brutta bestia ma a volte aiuta ad aguzzare l'ingegno.

    1. conto qunate volte appare una parole per ogni pagina, per esempio per 1000 pagine avro' una classifica generale di 22.000 parole.

    2. parto dalla prima parola in classifica, ipotizziamo che la parola suoneria appaia in tutto nella mia dir 10.000 volte, e per di piu' sia presente in ogni mia pagina (esempio estremo, per far capire come funziona il tutto). A questo punto calcolo: valore key/ numero delle pagine nella quale appare la key suoneria.
      Pertanto in questo caso: 10.000/1000 = 10

    3. Tutte le pagine che hanno-contengono 10 o piu' volte la parola suoneria le sposto dalla dir principale nella sottodir suoneria.

    4. Loop

    Oviamente con loop intendo dire che si riinizia da capo, a fare tutti i conteggi. Adesso nella mia dir principale le pagine non saranno piu' 1000 ma magari solo 590, e non e' detto che la key che prima era seconda in classifica (dopo suoneria) adesso sia diventata prima.

    Questo perche' se la seconda key in classifica appariva spesso in unione con la prima probabilmente, dopo che ho spostate tutte le pagine che contenevano la prima key suoneria (con un valore = o > alla media) nella sottodir suoneria, anche il secondo termine avra' subito un duro colpo, e magari adesso apparira' come quinto...

    Procedo in loop fin tanto che non raggiungo una fase che non mi permetta piu di creare sottodir ben popolate, diciamo almeno un cinquantesimo del valore iniziale.

    Pertanto se non saro' piu' in grado di assegnare ad una sottodir almeno 20 pagine il loop finisce.

    Le rimanenti pagine non catalogabili le lascio nella dir principale, una sorta di gruppo misto del parlamento.

    Sistema semplice ed efficace, senza pretesa alcuna, ma molto pratico soprattutto per chi lavora nel setttore dello spam sui motori.


  • Moderatore

    @agoago said:

    ...Insomma prima non trovavo una categoria che fosse una, adesso ne trovo troppe.
    Non lo dico per rompere le scatole, ma siccome su questo argomento sbatte la testa mezzo mondo seo, riuscire a trovare una buona formula non sarebbe cosa da poco...

    All'aumentare del numero di keyphrases (dell'ordine di 10000) i risultati ottenuti sono accettabili e le differenze tra media aritmentica e media pesata (con i pesi "grammaticali" suggeriti) si assottigliano sempre più.


  • Moderatore

    @agoago said:

    ...
    Sistema semplice ed efficace, senza pretesa alcuna, ma molto pratico soprattutto per chi lavora nel setttore dello spam sui motori.

    Qualcosa del tipo:

    
    // Analysis
    pageCounter = 0
    for each page in directory
        for each word in page
    	if NotIsCommon(word) then
    	   wordcounter(word).Hit ++
               wordcounter(word).Pages.add(page.name)
    	end if
        next
        pageCounter++
        Weight(word) = wordcounter(word).Hit/pageCounter  
    next
    
    // File Moving
    for each word in wordcounter
        for each page in word.Pages
            if page.word.Hit > Weight(word) then
               category = page.word 
               MovingFile(page,category)        
            end if
        next
    next
    
    

  • User Attivo

    @paocavo said:

    @agoago said:

    ...
    Sistema semplice ed efficace, senza pretesa alcuna, ma molto pratico soprattutto per chi lavora nel setttore dello spam sui motori.

    Qualcosa del tipo:

    
    // Analysis
    pageCounter = 0
    for each page in directory
       for each word in page
    	if NotIsCommon(word) then
    	   wordcounter(word).Hit ++
              wordcounter(word).Pages.add(page.name)
    	end if
       next
       pageCounter++
       Weight(word) = wordcounter(word).Hit/pageCounter  
    next
    
    // File Moving
    for each word in wordcounter
       for each page in word.Pages
           if page.word.Hit > Weight(word) then
              category = page.word 
              MovingFile(page,category)        
           end if
       next
    next
    
    

    Esatto, avevo messo un passaggio in piu' per gestire quei casi molto frequenti, soprattutto a fine loop, nel caso valore key e numero delle pagine nella quale appare la key siano identici per 2 o piu' key.

    In questo caso dico: se kay A appare 100 volte in 10 pagine e key B appare 100 volte su 10 pagine, calcola quele delle 2 key sia distribuita in modo piu' omogeo.

    Pertanto se la key A, per sempio, appare 91 volte in una pagina ed 1 volta in 9 pagine (totale 100 su 10) e la key B appare magari 50 volte su 1 pagina, 42 su un altra, ed 1 volta sulle rimanenti 8 allora previlegio la B.

    A dire il vero uso anche un altro accorgimento a monte di ogni parola, nel senso che per ogni parola, a priori, escludo dai valori tutti quelli estremi verso l'alto.

    Pertanto se la parola contata 10.000 volte su 1000 pagine appare magari in 10 pagine per dire 50 o piu' volte, cioe' almeno 5 volte oltre la media, allora levo dai valori iniziali quelle 10 pagine ed avro': 9.300 volte su 990 pagine. Posso fare anche un paio di cicli in questo senso, per tutte le key.

    Dopo di che procedo normalmente come da schema iniziale.

    So che e' un sistema banale, ma come molti so anche che quando si tratta di discutere di massimi sistemi sui forum e' una cosa (pane per il cervello), quando si tratta di pagare l'affitto e' tutta un'altra faccenda.


  • User Attivo

    Aggiungo, credo che il problema maggiore per identificare le categorie sia dato dal fatto che si cerchi sempre di trovare il miglior "sistema", e non un si cerchi di sfruttare l'unione di piu' tecniche.

    Voglio dire, ammettiamo che 4 wm affrontino il problema, ed ognuno di essi a modo suo proponga una soluzione valida, accettabile, diversa dalle altre 3.

    Ecco, a mio giudizio, forse l'unione, l'accorpare (magari sommando i risultati delle 4 soluzioni diverse) i valori di tutte e 4 le soluzioni potrebbe portare veramente ad un risultato ideale.

    Ognuno sostiene il proprio metodo, lo migliora ed affina nel tempo come per dimostrare, a se stesso ed agli altri, che sia quello il migliore, e non pensa che unendo-sommando punti di vista e risultati diversi, anche molto diversi tra di loro, si potrebbe raggiungere un compromesso finale assolutamente migliore nei fatti di tutte le tecniche prese singolarmente.

    Probabilmente e' questa cosa che ci "frega" veramente, non eventuali errori nelle formule con varianze, centroidi o banali frequenze.


  • Moderatore

    @agoago said:

    Probabilmente e' questa cosa che ci "frega" veramente, non eventuali errori nelle formule con varianze, centroidi o banali frequenze.

    Ovviamente lo scambio di idee non può che essere costruttivo (il solo fatto che esiste qualcun altro che si pone domande ed obiettivi simili alle proprie non può che far piacere e ci fa sentire meno "folli"...)

    L'unione (o l'"intersezione" 😄 ) di idee e soluzioni è sicuramente una strada da percorrere senza però dimenticare gli obiettivi iniziali che ci si era preposti: nel mio caso si tratta di categorie di Keyphrases inserite nella textbox di Google, nel tuo caso categorie di contenuti testuali presenti nelle pagine web. Immagino che gli algoritmi da utilizzare siano differenti data la diversità nelle complessità: grammaticale, spaziale e computazionale...


  • Moderatore

    Googlando ho trovato questi [url=http://robert.boeck-horn.de/]tool
    li conoscete gia? che ne pensate?


  • Moderatore

    Premesso che l'obiettivo era raggruppare le keyprases inserite nei motori di ricerca per giungere al nostro sito (per meri motivi statistici) gli ultimi sviluppi sull'algoritmo proposto ed i risultati della sua implementazione
    sono disponibili nel link indicato nel primo post di questo 3D.

    Magia delle magie...alla fine della fiera è risultato che le "Top Keyphrases" sono, in pratica, i nomi delle pagine web del sito! :fumato: