Vorgeschlagene Themen - Titel- und inhaltsbasierte Vorschläge

Es wäre wirklich fantastisch, wenn vorgeschlagene Themen sowohl die Titel als auch den Inhalt berücksichtigen würden. Zum Beispiel: Wenn man ein Thema zum Thema „Analytics

6 „Gefällt mir“

Ich habe einen ähnlichen Thread erstellt, der jedoch gesperrt ist.
Derzeit habe ich diese Funktion deaktiviert und durch meine eigene ersetzt.

1 „Gefällt mir“

Dies ist eine sehr komplexe Funktion, die effizient umzusetzen ist, und das Thema ist enorm tiefgründig. Irgendwann beginnt man, maschinelles Lernen in Betracht zu ziehen, und die Komplexität wächst immer weiter.

Ich erkenne den Reiz, KI zu nutzen, um verwandte Inhalte zu bestimmen. Dies kann bei #support-Themen sehr praktisch sein, die fast als „Self-Service“ gestaltet werden können. Man stellt eine Frage, das ML-System wählt 10 Kandidaten aus und postet sie einfach als Antwort, die man entweder akzeptieren oder löschen kann. Ebenso ist es hilfreich, wenn ein anonymer Nutzer etwas zur Unterstützung sucht, verwandte Inhalte anzuzeigen.

Trotzdem… eine gigantische, enorme Aufgabe. Sie steht nicht auf unserer Roadmap für das nächste Jahr. Aber @eviltrout ist sehr daran interessiert, irgendwann mit KI/ML zu experimentieren, und dies ist die Art von Projekt, das damit zusammenhängen könnte.

@codinghorror bleibt ein großer Fan von DJ Random, denn er ist der Meinung, dass dieser viele ausgefeilte Algorithmen übertreffen kann (und das tut er oft).

7 „Gefällt mir“

DJ Random ist fantastisch, obwohl wir ihn nach Zeit und Kategorie/Tag einschränken – das ist wichtig.

3 „Gefällt mir“

Hallo,

ich bin neu hier, also entschuldigt bitte, falls ich ein altes Thema wieder aufwärme.

Ich stimme @sam zu, dass es eine tiefgründige Materie ist, aber auf der anderen Seite ist die Technologie zur Themenmodellierung mittlerweile ziemlich ausgereift, und es gibt sehr gute fertige Tools. Bei einem kürzlichen Projekt habe ich etwa 5 Millionen Patentschriften und Zusammenfassungen analysiert; die Analyse von einigen tausend Themen auf meiner schicken neuen Discourse-Seite wäre ein Kinderspiel. Außerdem hat meine Community vielleicht die Energie, das umzusetzen.

An die Experten: Ich würde gerne Rat dazu bekommen, ob ich über die Entwicklung eines Plugins nachdenken sollte oder ob ich lieber direkt den Discourse-Quellcode (den ich von GitHub heruntergeladen habe) anpassen sollte.

Ich habe diesen Beitrag zum Scraping von Discourse-Themen mit Python gefunden, aber ich habe es noch nicht zum Laufen gebracht. Etwas Ähnliches sollte es mir ermöglichen, die Daten offline zu extrahieren, das Modell zu erstellen und es später für Abfragen zu laden.

Die meisten guten Tools sind in Python, FWIW…

4 „Gefällt mir“

Funktionell passt es am besten in das Panel „Ihr Thema ähnelt …“, wenn Sie ein neues Thema erstellen.

1 „Gefällt mir“

Ich würde hier auf jeden Fall ein Plugin empfehlen, anstatt den Quellcode zu manipulieren. Die Wahrscheinlichkeit, dass wir so etwas im Kern von Discourse bereitstellen können, ist extrem gering, da dafür eine massive Python-Abhängigkeit erforderlich wäre und zudem eine umfangreiche Benutzeroberfläche für das Training und vieles mehr nötig wäre.

Es gibt viele Aspekte zu klären, wie etwa die Mechaniken des Trainings. Könntest du kurz skizzieren, wie du das Training durchführen würdest? Welche genauen Modelle würdest du empfehlen? Was passiert, wenn ein Thema 100 Beiträge hat? 1000 Beiträge?

Welche Signale würdest du verwenden und welche Gewichtung würdest du einzelnen Faktoren geben (Aufrufe/Kategorie/Tag usw.)?

Ich bin diesem Projekt sehr zugeneigt, aber ich habe das Gefühl, dass es eine ziemlich große Aufgabe ist.

3 „Gefällt mir“

Es gibt viel Arbeit rund um die Mechaniken des Trainings und so weiter. Könnten Sie eine Übersicht über die Mechaniken geben, mit denen Sie das Training durchführen würden? Welche genauen Modelle würden Sie empfehlen?

Die aktuellen Tools, die mein Team verwendet, stammen von gensim. Es verfügt über eine standardmäßige Python-Schnittstelle. Es wurde über viele Jahre hinweg gut getestet.

Die Konfiguration, die mir einfällt, wäre folgende:

  • Zuerst: Wählen Sie einen Dokumentensatz aus: Dies könnten alle Themenwurzeln oder alle Beiträge sein.

Von Zeit zu Zeit (z. B. einmal pro Woche? einmal pro Monat? je nach Forumstraffik) das doc2vec-Modell erstellen:

  • Die Diskurs-Themen in eine oder mehrere Dateien mit Markdown-Text, Titel und Themeninhalt scrapen. Betrachten Sie nun jedes Thema als ein Dokument oder „Dokument
6 „Gefällt mir“

@Bcat: Ich wäre sehr daran interessiert zu sehen, wie du „durch deine ersetzt hast“. Hast du ein Plugin oder ein Repository, das ich mir ansehen könnte?

Der knifflige Leistungsteil ist hier der RPC-Mechanismus. Sie möchten nicht für jede einzelne Themenansicht einen brandneuen Python-Prozess starten.

Selbst ein HTTP-Aufruf könnte zu langsam sein.

Vielleicht … eine Tabelle related_topics (topic_id, related_topic_id, rank) füllen? Sie könnten dann auf WebHooks zurückgreifen, um die Tabelle schnell zu aktualisieren, wenn neue Themen erstellt werden, und Ruby muss Python nicht aufrufen.

Auf der Discourse-Seite wäre die Implementierung ziemlich einfach; Sie müssten diese Methode einfach so umschreiben, dass sie die Informationen in Ihrer neuen related_topics-Tabelle nachschlägt.

2 „Gefällt mir“

Die alte Methode hat nicht funktioniert, also habe ich sie durch Google Ads ersetzt. Die von Google vorgeschlagenen Themen sind sehr clever.
Was die alte Vorgehensweise betrifft, habe ich die Standardvorschläge deaktiviert und durch ein JS-Snippet ersetzt, das /search aufruft und anschließend eine Liste von Themen zurückgibt.

2 „Gefällt mir“

Danke für den Hinweis zur Tabellenimplementierung. Ich bin mir jedoch nicht sicher, ob der Tabellenansatz skalierbar ist. Für N Themen benötigen wir eine Tabelle der Größe N^2. Bei 10^4 Themen hätte die Tabelle also 10^8 Einträge.

Ich sehe nicht, wie man um einen Python-Aufruf herumkommt, um ein neues Thema zu parsen, es zu embedden und die nächsten Nachbarn zu finden. Ich habe in der Vergangenheit bereits eine Weboberfläche erstellt, aber ich wäre hier eher geneigt, einfach einen separaten Python-Prozess laufen zu lassen und über einen Socket oder eine Pipe mit Discourse zu kommunizieren. Das würde eher dem Lesen und Schreiben einer Datei ähneln als einem tatsächlichen Python-Aufruf. (Es läuft schließlich alles auf meinem Server…)

Entschuldigung, ich glaube, ich verstehe das hier völlig falsch?

Wenn du 100 Themen hast und jedes Thema 5 verwandte Themen anzeigt, warum müsste die Tabelle dann größer als 500 sein?

1 „Gefällt mir“

N Themen ergeben N Punkte in der Vektorraumdarstellung.
Die Matrix der Abstände zwischen jedem Punkt hat die Größe N². (Da die Matrix symmetrisch ist, gibt es N*(N-1)/2 unabhängige Werte.) Dies ist das N², auf das ich mich bezogen habe.

Doch clevere Datenstrukturen (z. B. kd-Bäume) ermöglichen das Finden der nächsten Nachbarn, ohne eine Brute-Force-Suche in der N²-Tabelle der Differenzen durchführen zu müssen.

Wie auch immer, ich weiß, wie man all das in Python umsetzt, um die kleine Tabelle zurückzugeben, auf die Sie sich beziehen: N x 5 für die 5 nächsten Themen.

1 „Gefällt mir“

Wenn du das dann täglich in Python ausführst, könntest du Python einfach direkt mit der Discourse-Datenbank verbinden und diese Cachetabelle generieren lassen.

Der Discourse-Plugin-Teil ist dann eher trivial. Anstatt aus Ort X auszuwählen, wird aus Ort Y ausgewählt (eine andere Tabelle).

Du musst nicht mehr mit Pipelines kämpfen, die für eine einzelne Anfrage zwischen zwei Programmiersprachen hin und her wechseln müssen.

Der hier vorgeschlagene KI-Ansatz klingt interessant und könnte die ideale Lösung sein.

Ich frage mich, ob es sich lohnen würde, einen weniger technischen Ansatz zu verfolgen – der Abschnitt „Vorgeschlagene Themen“ könnte eine Schaltfläche „Thema vorschlagen“ enthalten. Durch Klicken auf die Schaltfläche könnten Benutzer einen Link zu einem anderen Thema auf der Website posten und eine kurze Beschreibung, warum die beiden Themen zusammenhängen.

Kein richtiges Mock-up, aber um sicherzustellen, dass wir auf dem gleichen Stand sind, meine ich so etwas:

Als Kontext: Ich bin daran interessiert, Themen vorzuschlagen, die sowohl die in einem bestimmten Thema geäußerten Ansichten unterstützen als auch ihnen widersprechen. Wenn beispielsweise jemand ein Thema erstellt, das behauptet, der Klimawandel sei keine große Sache, möchte ich, dass Benutzer auf der Website verwandte Themen vorschlagen können, die dieses Argument entweder kontern oder unterstützen.

Es könnte auch für weniger kontroverse Themen nützlich sein. Wenn ich hier auf ein Thema antworte, nutze ich oft die Suchfunktion der Website, um zu sehen, ob es verwandte Themen gibt. Die Ergebnisse dieser Bemühungen könnten erhalten bleiben, indem Benutzer verwandte Themen vorschlagen können. Als Beispiel: Das Lesen dieses Themas brachte mich zum Nachdenken über die jüngste Nutzung von KI durch Discourse hier: Discourse Disorder. Es wäre für mich relevant, dieses Thema in der Liste der vorgeschlagenen Themen dieses Themas erscheinen zu lassen, mit einem Hinweis, dass Discourse nach Wegen sucht, Foren mit KI zu integrieren.

3 „Gefällt mir“

Update, dies ist jetzt im Discourse AI Plugin implementiert :confetti_ball:

5 „Gefällt mir“