¿Recategorizar automáticamente los temas de un foro importado mediante la identificación de palabras clave en los títulos?

Hola,

Estoy importando un foro antiguo y grande sobre monociclismo.

Las categorías antiguas no eran las mejores, y se mezclaban muchos temas diferentes.

Así que estoy reorganizando las categorías.

Al principio, pensé en recategorizar manualmente las últimas pocas cientos de temas y dejar los antiguos tal como están.

La idea sería enfocarnos en el futuro, no en el pasado. No importa tanto si los temas antiguos están mal categorizados; lo más importante es que sigan disponibles.

Pero me pregunto si recategorizar los temas automáticamente buscando palabras clave podría, de hecho, funcionar bien.

Actualmente, la gran mayoría de nuestros temas, ¡más de la mitad del total! están en una sola categoría (:scream:).

Podría buscar estas palabras clave en los títulos: “aprender”, “aprendizaje”, “entrenar”, “entrenamiento”, “postura”, etc., y colocar todos esos temas en la categoría #consejos-de-rodar.

Lo mismo podría hacerse con “cuadro”, “rueda”, “neumático”, “sillín”, etc. Eso iría en #monociclos-y-equipo.

Buscaré palabras rodeadas por espacios y trataré de anticipar expresiones de varias palabras para evitar un poco los “falsos positivos”. Por ejemplo: “wheelwalking” es un truco de monociclo que probablemente debería encontrarse en #consejos-de-rodar, así que si solo busco “rueda” sin pensarlo mucho, habrá falsos positivos que podrían haberse evitado fácilmente (dicho esto, podría mover los temas con “rueda” de A a B, y luego mover los temas con “wheelwalking” de B a C…).

¿Alguien aquí ha hecho algo así? ¿Tienen sugerencias o ideas para minimizar el riesgo de “falsos positivos”? ¿Hay cosas obvias (o no) que necesite saber antes de hacer esto?

Hay aproximadamente 70,000 temas que deben revisarse.

Un consejo: no pienses que esto tiene que hacerse bien a la primera.

Tu idea de buscar palabras clave es el mismo primer enfoque que yo tomaría. No tengas miedo de desechar todo el trabajo que hiciste en tu primer intento. Si el resultado no es lo que buscas, aprovecha lo aprendido en ese primer intento y comienza de nuevo desde cero.


EDIT

Al hacer una búsqueda rápida de herramientas gratuitas para análisis de palabras, encontré esta página de información sobre Análisis de texto. Muy interesante.

Anteriormente, he abordado proyectos similares utilizando aprendizaje no supervisado con el algoritmo de agrupamiento K-means. Sería un experimento bastante interesante, y quizás el algoritmo incluso proponga una categorización mejor :wink:

Puedes leer sobre este enfoque aquí: https://towardsdatascience.com/applying-machine-learning-to-classify-an-unsupervised-text-document-e7bb6265f52

Al igual que dijo @EricGT: no tengas miedo de iterar, pero algo suficientemente cercano ya es suficiente. Además, sería útil tener algunos usuarios de nivel TL3 listos para recategorizar cuando sea necesario.

¡Eso es interesante!

Sin embargo, probablemente no tendré ni el tiempo ni las habilidades para probar este enfoque (el foro lleva más de un mes caído y todavía tengo mucho trabajo que hacer).

Tras un primer intento, la selección manual de palabras clave parece dar resultados bastante buenos, aunque aún no he recategorizado y solo he estado probando consultas SQL.

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%'

Esta consulta devuelve 33.000 temas de los 52.000 de la categoría principal que podrían ser recategorizados. El número parece realista, pero probablemente todavía necesito añadir más palabras clave.

El método parece lo suficientemente fiable.

¿Qué terminaste haciendo aquí?

Si tienes palabras clave lo suficientemente únicas en los temas (asumo que estás iterando por todas las respuestas de los temas y contando las palabras clave en cada publicación), podría ser viable categorizar automáticamente un tema basándose en la presencia de suficientes palabras clave únicas y específicas en ese tema.

(Esto es principalmente útil para migraciones, aunque en un foro en vivo querrías que el tema estuviera en la categoría correcta desde el principio.)

Moví los temas a otras categorías verificando las palabras clave en sus títulos. Funcionó lo suficientemente bien como para ser mejor que el desorden que había antes.

Ese es un buen punto; que una palabra específica aparezca consistentemente en muchos títulos de temas es una fuerte evidencia de que se necesita una nueva categoría. :thinking:

¿Hiciste esto mediante una consulta? Si es así, ¿cuál fue la plantilla de consulta? ¿Se requirieron otras actividades después de ejecutar la consulta para garantizar la integridad de la base de datos?

Parece que se hizo en un script de importación, por lo que se habría modificado para inferir una categoría del título.

¿Estás haciendo una importación? ¿Desde qué software? Si ya existe en Discourse, podrías hacerlo desde Rails.

Por lo que recuerdo, ya que lo ayudé en muchos de sus trabajos relacionados con Discourse, recuerdo que usó un script de Rails después de la importación. Seleccionó los temas por palabras clave en sus títulos, luego usó comandos documentados oficialmente para moverlos, como Administrative Bulk Operations.

También recuerdo que mover temas que tenían etiquetas, comandos oficiales y tareas de rake no actualizó completamente algunas tablas, ni tampoco el trabajo relacionado de Sidekiq periódico.
No sé si todavía es el caso, pero eso podría ser algo a tener en cuenta en Bulk tagged topics, then moved topics into another category, but the category tag selector doesn't show tags - #3 by Canapin.

¡Espero que eso ayude!