Ricategorizzare automaticamente gli argomenti da un forum importato individuando parole chiave nei titoli?

Ciao,

sto importando un vecchio e grande forum sull’unicycling.

Le vecchie categorie non erano delle migliori e molte cose diverse erano mescolate insieme.

Quindi, sto riorganizzando le categorie.

Inizialmente, pensavo di ricategorizzare manualmente le ultime centinaia di discussioni e lasciare quelle vecchie così come sono.
L’idea sarebbe quella di puntare al futuro, non al passato. Non importa molto se le discussioni vecchie sono mal categorizzate; l’importante è che siano ancora disponibili.

Ma mi chiedo se ricategorizzare le discussioni automaticamente, cercando parole chiave, possa effettivamente fare un buon lavoro.

Attualmente, la stragrande maggioranza delle nostre discussioni -più della metà del totale!- si trova in una singola categoria (:scream:).

Potrei cercare queste parole chiave nei titoli: “learn”, “learning”, “train”, “training”, “posture”, ecc… e mettere tutte queste discussioni nella categoria #riding-advice.

Lo stesso potrebbe valere per “frame”, “wheel”, “tire”, “saddle”, ecc… che andrebbero nella categoria #unicycles-and-equipments.

Mi concentrerò sulle parole racchiuse da spazi e cercherò di anticipare le espressioni composte, evitando un po’ di “falsi positivi”. Esempio: “wheelwalking” è un trucco sull’unicycling che probabilmente dovrebbe trovarsi in #riding-advice, quindi se cerco solo “wheel” senza pensarci troppo, ci saranno falsi positivi che avrebbero potuto essere facilmente evitati (detto questo, potrei spostare le discussioni con “wheel” da A a B, e poi spostare quelle con “wheelwalking” da B a C…).

Qualcuno qui ha mai fatto una cosa del genere? Avete suggerimenti o idee per minimizzare il rischio di “falsi positivi”? Ci sono cose ovvie (o meno) che devo sapere prima di farlo?

Circa 70.000 discussioni devono essere esaminate.

Un consiglio: non considerare questo compito come qualcosa che deve essere fatto perfettamente al primo tentativo.

Il tuo approccio di cercare parole chiave è lo stesso che adotterei come primo passo. Non aver paura di scartare tutto il lavoro svolto nel primo tentativo. Se il risultato non è quello che cerchi, prendi ciò che hai imparato dal primo tentativo e ricomincia da capo.


EDIT

Facendo una rapida ricerca di alcuni strumenti gratuiti per l’analisi delle parole, ho trovato questa pagina informativa su Text Analysis. Lettura interessante.

In passato ho affrontato progetti simili utilizzando l’apprendimento non supervisionato con il clustering K-means. Sarebbe un esperimento piuttosto interessante e forse l’algoritmo potrebbe persino proporre una categorizzazione migliore :wink:

Puoi leggere di questo approccio qui https://towardsdatascience.com/applying-machine-learning-to-classify-an-unsupervised-text-document-e7bb6265f52

Proprio come ha detto @EricGT: non aver paura di iterare, ma una soluzione abbastanza vicina va bene, e magari tieni pronti alcuni utenti TL3 per ricategorizzare quando necessario.

È interessante!

Probabilmente non avrò il tempo né le competenze per provare questo approccio (il forum è offline da oltre un mese e ho ancora molto lavoro da fare!).

Dopo un primo tentativo, la selezione manuale delle parole chiave sembra dare risultati piuttosto buoni, anche se non ho ancora riclassificato le categorie e mi sono limitato a giocare con le query SQL.

select title from topics
where category_id = 10
and lower(title) not like '%sella%'
and lower(title) not like '%pedivella%'
and lower(title) not like '%pedale%'
and lower(title) not like '%cerchio%'
and lower(title) not like '%carbonio%'
and lower(title) not like '%raggio%'
and lower(title) not like '%ruota%'
and lower(title) not like '%telaio%'
and lower(title) not like '%mozzo%'
and lower(title) not like '%tubeless%'
and lower(title) not like '%disco%'
and lower(title) not like '%idraulico%'
and lower(title) not like '%duro%'
and lower(title) not like '%dominator%'
and lower(title) not like '%torker%'
and lower(title) not like '%nimbus%'
and lower(title) not like '%cuscinetto%'
and lower(title) not like '%pastiglia%'
and lower(title) not like '%riparazione%'
and lower(title) not like '%manubrio%'
and lower(title) not like '%kh%'
and lower(title) not like '%kris holm%'
and lower(title) not like '%coker%'
and lower(title) not like '%camera%'
and lower(title) not like '%costruzione%'
and lower(title) not like '%29er%'
and lower(title) not like '%36er%'

and lower(title) not like '%all'indietro%'
and lower(title) not like '%cavalcare%'
and lower(title) not like '%piede%'
and lower(title) not like '%treno%'
and lower(title) not like '%allenamento%'
and lower(title) not like '%imparare%'
and lower(title) not like '%apprendimento%'
and lower(title) not like '%smontaggio%'
and lower(title) not like '%abitudine%'
and lower(title) not like '%inerzia%'
and lower(title) not like '%in inerzia%'
and lower(title) not like '%salita libera%'
and lower(title) not like '%salita libera%'
and lower(title) not like '%salita libera%'

Questa query restituisce 33.000 argomenti su 52.000 della categoria principale che potrebbero essere riclassificati. Il numero sembra realistico, ma probabilmente devo ancora aggiungere altre parole chiave.

Il metodo sembra abbastanza affidabile.

Alla fine, cosa hai fatto qui?

Se hai parole chiave abbastanza uniche nei topic (suppongo che tu stia iterando su tutte le risposte dei topic e contando le parole chiave in ogni post), potrebbe essere fattibile categorizzare automaticamente un topic sulla base della presenza di sufficienti parole chiave uniche e specifiche in quel topic.

(Questo è principalmente utile per le migrazioni, poiché su un forum attivo vorresti che il topic fosse nella categoria corretta fin dall’inizio.)

Ho spostato gli argomenti in altre categorie controllando le parole chiave nei loro titoli. Ha funzionato abbastanza bene da essere migliore del disastro in cui era prima.

È un buon punto: una parola specifica che appare costantemente in molti titoli di argomenti è una forte evidenza che sia necessaria una nuova categoria. :thinking:

L’hai fatto tramite una query? Se sì, qual era il modello della query? Sono state necessarie altre attività dopo l’esecuzione della query per garantirne l’integrità del database?

Sembra che sia stato fatto su uno script di importazione, quindi sarebbe stato modificato per dedurre una categoria dal titolo.

Stai facendo un’importazione? Da quale software? Se è già presente in discourse, potresti farlo da rails.

Per quanto ricordo, da quando l’ho assistito in molti dei suoi lavori relativi a Discourse, ricordo che utilizzava uno script Rails dopo l’importazione. Selezionava gli argomenti per parole chiave nei loro titoli, quindi utilizzava comandi documentati ufficialmente per spostarli, come Administrative Bulk Operations.

Ricordo anche che lo spostamento di argomenti con tag, comandi ufficiali e rake tasks non aggiornava completamente alcune tabelle, né il relativo job periodico di Sidekiq.
Non so se sia ancora così, ma potrebbe essere qualcosa a cui prestare attenzione su Bulk tagged topics, then moved topics into another category, but the category tag selector doesn't show tags - #3 by Canapin.

Spero che questo aiuti!