Automatisch Themen neu kategorisieren, indem Schlagwörter in den Titeln erkannt werden?

Hallo,

ich importiere ein altes und großes Forum über Einradfahren.

Die alten Kategorien waren nicht die besten, und viele verschiedene Themen waren durcheinander gemischt.

Deshalb organisiere ich die Kategorien neu.

Anfangs wollte ich die neuesten paar hundert Themen manuell neu kategorisieren und die alten so lassen, wie sie sind.
Die Idee wäre, auf die Zukunft und nicht auf die Vergangenheit ausgerichtet zu sein. Es ist nicht so wichtig, ob alte Themen schlecht kategorisiert sind; das Wichtigste ist, dass sie weiterhin verfügbar sind.

Aber ich frage mich, ob eine automatische Neu-Kategorisierung von Themen durch Zielen auf Schlüsselwörter tatsächlich gut funktionieren könnte.

Derzeit befinden sich die überwiegende Mehrheit unserer Themen – mehr als die Hälfte der Gesamtzahl! – in einer einzigen Kategorie (:scream:).

Ich könnte diese Schlüsselwörter in den Titeln ansprechen: „lernen“, „Training“, „Training“, „Haltung“ usw. … und all diese Themen in eine Kategorie #riding-advice verschieben.

Dasselbe ließe sich mit „Rahmen“, „Rad“, „Reifen“, „Sattel“ usw. machen. Diese würden dann in #unicycles-and-equipments landen.

Ich werde nach Wörtern suchen, die von Leerzeichen umgeben sind, und versuchen, mehrwortige Ausdrücke zu antizipieren und etwas vor „falschen Positiven“ zu warnen. Beispiel: „Wheelwalking“ ist ein Einradtrick, der wahrscheinlich in #riding-advice zu finden sein sollte. Wenn ich also nur „Rad“ ohne Nachdenken anspreche, gibt es falsche Positivfälle, die leicht hätten vermieden werden können (ich könnte zwar Themen mit „Rad“ von A nach B verschieben und dann Themen mit „Wheelwalking“ von B nach C verschieben …).

Hat hier jemand so etwas gemacht? Habt ihr Vorschläge oder Ideen, um das Risiko von „falschen Positiven“ zu minimieren? Gibt es offensichtliche (oder nicht offensichtliche) Dinge, die ich vorab wissen muss?

Es müssen etwa 70.000 Themen betrachtet werden.

Ein kleiner Rat: Betrachte dies nicht als etwas, das beim ersten Versuch perfekt sein muss.

Deine Idee, nach Keywords zu suchen, ist der gleiche erste Ansatz, den ich wählen würde. Hab keine Angst davor, die gesamte Arbeit deiner ersten Versuche über Bord zu werfen. Wenn das Ergebnis nicht dem entspricht, was du suchst, nimm das, was du durch den ersten Versuch gelernt hast, und fange komplett von vorne an.


EDIT

Bei einer kurzen Suche nach kostenlosen Tools für die Wortanalyse bin ich auf diese Informationsseite über Textanalyse gestoßen. Ein lohnender Lesestoff.

Ich habe ähnliche Projekte bisher mit unüberwachtem Lernen mittels K-Means-Clustering angegangen. Das wäre ein ziemlich spannendes Experiment, und vielleicht kommt der Algorithmus sogar auf eine bessere Kategorisierung :wink:

Mehr zu diesem Ansatz findest du hier: https://towardsdatascience.com/applying-machine-learning-to-classify-an-unsupervised-text-document-e7bb6265f52

Genau wie @EricGT bereits sagte: Hab keine Angst vor Iterationen, aber „nahe genug

Das ist interessant!

Ich werde wahrscheinlich weder die Zeit noch die Fähigkeiten haben, diesen Ansatz auszuprobieren (das Forum ist seit über einem Monat down, und ich habe immer noch viel Arbeit zu erledigen!).

Nach einem ersten Versuch scheint die manuelle Auswahl von Schlüsselwörtern recht gute Ergebnisse zu liefern, obwohl ich noch keine Neuordnung vorgenommen habe und lediglich mit SQL-Abfragen gespielt habe.

select title from topics
where category_id = 10
and lower(title) not like '%saddle%'
and lower(title) not like '%crank%'
and lower(title) not like '%pedal%'
and lower(title) not like '%rim%'
and lower(title) not like '%carbon%'
and lower(title) not like '%spoke%'
and lower(title) not like '%wheel%'
and lower(title) not like '%frame%'
and lower(title) not like '%hub%'
and lower(title) not like '%tubeless%'
and lower(title) not like '%disk%'
and lower(title) not like '%hydraulic%'
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 '%bearing%'
and lower(title) not like '%pad%'
and lower(title) not like '%repair%'
and lower(title) not like '%handlebar%'
and lower(title) not like '%kh%'
and lower(title) not like '%kris holm%'
and lower(title) not like '%coker%'
and lower(title) not like '%tube%'
and lower(title) not like '%build%'
and lower(title) not like '%29er%'
and lower(title) not like '%36er%'

and lower(title) not like '%backwards%'
and lower(title) not like '%riding%'
and lower(title) not like '%foot%'
and lower(title) not like '%train%'
and lower(title) not like '%training%'
and lower(title) not like '%learn%'
and lower(title) not like '%learning%'
and lower(title) not like '%dismount%'
and lower(title) not like '%habit%'
and lower(title) not like '%idle%'
and lower(title) not like '%idling%'
and lower(title) not like '%freemount%'
and lower(title) not like '%free mount%'
and lower(title) not like '%free mounting%'

Diese Abfrage gibt 33.000 von 52.000 Themen aus der Hauptkategorie zurück, die neu kategorisiert werden könnten. Die Zahl scheint realistisch, aber ich muss wahrscheinlich noch weitere Schlüsselwörter hinzufügen.

Die Methode scheint zuverlässig genug zu sein.

Was hast du hier am Ende gemacht?

Wenn die Themen einzigartige Schlüsselwörter enthalten (ich gehe davon aus, dass du alle Themenantworten durchgehst und in jedem Beitrag Schlüsselwörter zählst), könnte es machbar sein, ein Thema automatisch zu kategorisieren, basierend auf dem Vorhandensein ausreichend einzigartiger, spezifischer Schlüsselwörter in diesem Thema.

(Dies ist jedoch hauptsächlich für Migrationen nützlich, da du in einem Live-Forum möchtest, dass das Thema von Anfang an in der richtigen Kategorie liegt.)

Ich habe Themen in andere Kategorien verschoben, indem ich Schlüsselwörter in ihren Titeln überprüft habe. Das funktionierte gut genug, um besser zu sein als das Chaos davor.

Das ist ein guter Punkt: Wenn ein bestimmtes Wort häufig in vielen Titel auftaucht, ist das ein starkes Indiz dafür, dass eine neue Kategorie benötigt wird. :thinking:

Haben Sie dies über eine Abfrage gemacht? Wenn ja, wie lautete die Abfragevorlage? Waren nach der Ausführung der Abfrage weitere Aktivitäten erforderlich, um die Datenbankintegrität sicherzustellen?

Es klingt, als wäre es mit einem Import-Skript gemacht worden, sodass es modifiziert wurde, um eine Kategorie aus dem Titel abzuleiten.

Führen Sie einen Import durch? Aus welcher Software? Wenn es bereits in Discourse vorhanden ist, könnten Sie es von Rails aus tun.

Soweit ich mich erinnere, da ich ihn bei vielen seiner Discourse-bezogenen Arbeiten unterstützt habe, erinnere ich mich, dass er nach dem Import ein Rails-Skript verwendet hat. Er wählte die Themen nach Schlüsselwörtern in ihren Titeln aus und verwendete dann offiziell dokumentierte Befehle, um sie zu verschieben, wie z. B. Administrative Bulk Operations.

Ich erinnere mich auch, dass das Verschieben von Themen mit Tags, offiziellen Befehlen und Rake-Tasks einige Tabellen nicht vollständig aktualisiert hat, ebenso wenig wie der zugehörige periodische Sidekiq-Job.
Ich weiß nicht, ob das immer noch der Fall ist, aber das könnte etwas sein, worauf man unter Bulk tagged topics, then moved topics into another category, but the category tag selector doesn't show tags - #3 by Canapin achten sollte.

Ich hoffe, das hilft!