Diskursstörung

:warning: Diese Funktion ist jetzt Teil von Discourse AI. Dieses Plugin ist veraltet.

|||-|
:discourse2:| Zusammenfassung | Disorder hilft Moderatoren, indem es potenziell toxische Inhalte auf Ihrem Discourse-Forum automatisch kennzeichnet.
:hammer_and_wrench:| Repository-Link | https://github.com/xfalcox/disorder
:open_book:| Installationsanleitung | So installieren Sie Plugins in Discourse

Wenn Sie unseren offiziellen Hosting-Service nutzen, kontaktieren Sie bitte unseren Support, um Ihr Interesse an diesem Plugin zu bekunden.

Toxizität

Wie @hawk in Dealing with Toxicity in Online Communities sagte, ist die Bewältigung von Toxizität in Ihrer Community von grundlegender Bedeutung.

Während Discourse von Haus aus viele verschiedene Werkzeuge zur Bekämpfung von Toxizität in Ihrer Community mitbringt, erforschen wir ständig Wege, diese weiter zu verbessern. Insbesondere habe ich mögliche Anwendungen von Machine Learning und KI in Online-Foren erforscht. Dies ist nun ein experimentelles Plugin, das für alle Communities verfügbar ist.

Das Plugin

Disorder nutzt künstliche Intelligenz und maschinelles Lernen, um Ihnen bei der Moderation Ihrer Community zu helfen, wodurch es für Ihr Moderationsteam einfacher wird, potenziell problematische Inhalte im Auge zu behalten und sogar optional Ihre Benutzer aufzufordern, toxische Beiträge vor dem Absenden zu überarbeiten.

Dies ist ein erster Vorstoß in die Nutzung von selbst gehosteten ML-Modellen in Discourse, und obwohl es ein einfaches Modell ist, legt es ein Muster fest, das für die Anwendung komplexerer Modelle in Zukunft wiederverwendet werden kann.

Funktionen

Hintergrundkennzeichnung

Dies ist die Hauptfunktionsweise von Disorder, da sie für Ihre Benutzer völlig transparent ist und diese keine Änderungen bemerken werden.

Immer wenn ein neuer Beitrag (oder eine Chat-Nachricht mit Discourse Chat) erstellt wird, wird er asynchron in eine Klassifizierungswarteschlange gestellt. Wenn die Klassifizierung über einem konfigurierbaren Schwellenwert liegt, wird der Beitrag/die Chat-Nachricht gekennzeichnet, damit Ihr Moderationsteam gewarnt wird und die endgültige Entscheidung über die Kennzeichnung treffen kann.

Eingriff bei neuen Beiträgen

Wenn Sie der Meinung sind, dass Prävention die beste Medizin ist, sind Sie vielleicht an dieser aktiveren Option interessiert.

Sie können eine synchrone Klassifizierung jedes neuen Beitrags aktivieren, die, wenn sie über einem konfigurierbaren Toxizitätsgrad liegt, einen Eingriff in den Fluss neuer Beiträge auslöst und den Benutzer auffordert, die Nachricht zu überprüfen und zu ändern, die möglicherweise außerhalb der von Ihren Community-Regeln festgelegten Grenzen liegt.

Dies geschieht nur einmal, und nach dem Schließen des Modals kann der Benutzer normal posten.

Wie funktioniert es?

Dieses Plugin integriert die Open-Source-Modelle von Detoxify und verwendet ein Remote-API-Aufrufmodell, damit Administratoren die Inferenzrate entsprechend den Bedürfnigen jeder Community skalieren können.

Wir stellen ein einfaches Image bereit, das eine dünne HTTP-API bereitstellt, die Discourse aufruft, um die Inhaltsklassifizierung durchzuführen. Diese kann entweder auf demselben Server, auf dem Sie Discourse ausführen, oder auf einem ganz anderen Server ausgeführt werden.

Das Discourse-Plugin lauscht auf Ereignisse für neue Beiträge / neue Chat-Nachrichten und stellt einen Klassifizierungsauftrag in der Hintergrundwarteschlange ein. Die Ergebnisse werden in der Datenbank gespeichert, sodass Sie Berichte extrahieren können, und wir kennzeichnen Inhalte mit einem separaten Bot-Benutzer, damit wir die Genauigkeit der Kennzeichnungen im Laufe der Zeit verfolgen können.

Optionen

Zunächst funktioniert das Plugin sofort, sodass es nicht notwendig ist, sofort Einstellungen zu ändern. Wenn Sie jedoch das Verhalten des Plugins ändern möchten, gibt es einige Stellschrauben, die Sie verwenden können.

Wir bieten 3 verschiedene Klassifizierungsmodelle an, aus denen Sie in den Plugin-Optionen wählen können:

  • unbiased (Standard): Ein Modell, das versucht, die unbeabsichtigte Modellverzerrung bei der Toxizitätsklassifizierung zu reduzieren.

  • multilingual: Ein Modell, das Italienisch, Französisch, Russisch, Portugiesisch, Spanisch und Türkisch klassifizieren kann.

  • original: Das einfachste Modell.

Sie können auch einstellen, ob das Plugin:

  • automatisch kennzeichnet
  • synchrone Eingriffe bei toxischen Beiträgen mit Warnung (experimentell) aktiviert
  • synchrone Eingriffe bei toxischen Beiträgen aktiviert (nicht empfohlen)

All dies geschieht nur, wenn der Kommentar über den Schwellenwerten für die jeweilige Klassifizierungsart als toxisch eingestuft wird:

  • toxizität
  • schwere_toxizität
  • identitätsangriff
  • beleidigung
  • bedrohung
  • sexuell_explizit

Sie können die Schwellenwerte für jede Klassifizierung für automatische Aktionen anpassen.

Klassifizierungsdienst

Das Plugin wird vorkonfiguriert und funktioniert sofort. Dazu kontaktiert es einen von Discourse (CDCK) betriebenen Dienst zur Klassifizierung der Benutzerinhalte. Dieser Classifier-API-Dienst ist Open Source, und Sie können bei Bedarf Ihre eigene Kopie des Dienstes ausführen.

39 „Gefällt mir“

Nur aus Neugier, was sind die Unterschiede zwischen "Disorder" und Discoures Implementierung der Google Perspective API?

7 „Gefällt mir“

Vom Code her sind das komplett unterschiedliche Plugins.

Aus der Vogelperspektive erfüllen sie denselben Zweck, sind aber unterschiedlich konstruiert:

  • Disorder arbeitet mit Chats und Beiträgen, Perspective nur mit Beiträgen

  • Perspective stützt sich auf eine proprietäre und Drittanbieter-API, mit all den damit verbundenen Auswirkungen auf Datenschutz, Zuverlässigkeit und Transparenz.

  • Disorder legt ein Muster fest, das die einfache Hinzufügung neuer Modelle ermöglicht, sodass wir den Dienst weiterentwickeln oder sogar brandneue Funktionen hinzufügen können.

  • Die selbst-hostbare API von Disorder bietet Flexibilität und Freiheit von Pay-per-API-Call und Ratenbegrenzungen.

  • Die Front-End-Oberfläche von Disorder ist deutlich kleiner, daher sollte sie bei Discourse-Updates widerstandsfähiger sein.

16 „Gefällt mir“

Cool. Wo und wie machen wir das?

5 „Gefällt mir“

E-Mail an team@discourse.org :slight_smile:

6 „Gefällt mir“

Hier ist keine Antwort erforderlich, aber wenn Sie nach Vorschlägen suchen, wohin es als Nächstes gehen soll, könnte ein KI-Tag-Vorschlag basierend auf dem Text eines Themas nützlich sein. Ich stelle mir etwas Ähnliches vor, wie Soundcloud Musikgenre-Tags vorschlägt, nachdem sie eine Analyse eines Uploads durchgeführt haben. Es ist nützlich, um benutzergenerierte Inhalte auf einer belebten Website zu organisieren.

9 „Gefällt mir“

Verstehe ich richtig, dass die Disorder-API-Instanz gestartet werden sollte, um das Plugin zu unterstützen? Es gibt eine vorausgefüllte Einstellung disorder inference service api endpoint mit der voreingestellten URL https://disorder-testing.demo-by-discourse.com. Allerdings gibt es den disorder inference service api key, der standardmäßig leer ist.

Wir sind daran interessiert, dieses Plugin zu testen, da wir mit viel toxischem Verhalten zwischen Benutzern konfrontiert sind, das schließlich durch Markierungen und die Hilfe von Führungskräften gelöst wird. Wir möchten jedoch proaktiv verhindern, dass Benutzer negative Beiträge verbreiten, wenn dies möglich ist, und dieses Plugin scheint eine solche Rolle zu spielen.

Können wir einen fertigen Endpunkt verwenden, um es auszuprobieren? Zur Warnung: Wir haben täglich ca. 150.000 Seitenaufrufe, und dies könnte einige unvorbereitete Server verstopfen.

Wir sind eigenständig.

4 „Gefällt mir“

Sie können zwar Ihren eigenen API-Server betreiben, aber das Plugin ist vorkonfiguriert und zeigt auf https://disorder-testing.demo-by-discourse.com/, sodass es sofort einsatzbereit ist.

Bitte verwenden Sie diesen Endpunkt für Ihre Instanz, da er genau für Ihren Anwendungsfall von selbst gehosteten Instanzen bereitgestellt wird, die dieses Plugin ausprobieren möchten. In der Standardkonfiguration erfolgen alle API-Aufrufe im Hintergrund, sodass ein Ausfall der API Ihre Website in keiner Weise beeinträchtigt. Die Verwendung ist daher sicher.

Die Einstellung API-Schlüssel ist optional und wird nur benötigt, wenn Ihr API-Server ihn aktiviert hat. Die öffentliche Instanz unter https://disorder-testing.demo-by-discourse.com/ hat ihn nicht aktiviert.

6 „Gefällt mir“

Danke! Klingt perfekt und ich werde es in den kommenden Tagen ausprobieren :heart:

4 „Gefällt mir“

Sind weitere ML-Anwendungen für die Zukunft geplant?

2 „Gefällt mir“

Ich habe das eine Woche lang ausprobiert, und es war absurd aggressiv beim Markieren von Beiträgen. Ich empfehle die Verwendung nur, wenn Sie eine riesige Website ohne genügend Moderatoren haben. Ich hoffe, die KI wird besser, aber sie ist einfach noch nicht so weit.

6 „Gefällt mir“

Das ist großartiges Feedback! Wären Sie bereit, einige Debugging-Statistiken zu teilen, damit ich genau verstehen kann, was passiert ist?

So etwas wie das Ergebnis von

SELECT
  pcf.value,
  p.raw
FROM
  post_custom_fields AS pcf
INNER JOIN
  posts AS p ON p.id = pcf.post_id
WHERE
  pcf.name = 'disorder'

hier oder in einer privaten Nachricht wäre äußerst hilfreich.

5 „Gefällt mir“

Ach ja, das habe ich ganz vergessen! Hier sind sie. Es waren nicht wirklich viele, aber sie waren einfach unnötig und Mitglieder und Moderatoren fanden sie störend. Ich bin mir auch nicht sicher, ob es DMs scannt. Ich weiß, dass es dort einen Wert geben könnte, wenn jemand jemanden per DM belästigt, aber meistens wird es die Leute nur verärgern, wenn sie wissen, dass wir ihre DMs durchgehen.

1 „Gefällt mir“

Benutzen Sie Chat? Waren alle nervigen Flaggen in Beiträgen / PMs?

Wir nutzen zwar den Chat, aber ich bin ziemlich sicher, dass alle Markierungen in Beiträgen und privaten Nachrichten waren.

1 „Gefällt mir“

Zuallererst bin ich sehr dankbar für sowohl das Feedback als auch die Daten, die Sie geteilt haben und die es mir ermöglichten, dies weiter zu debuggen.

Nun zu meinen Erkenntnissen!

Während dieser Woche hatten Sie 1942 neue Beiträge von Nicht-Mitarbeiter-Benutzern. Eine ziemlich aktive Community! Ich würde jedoch nicht sagen, dass die KI „absurd aggressiv Beiträge markiert“, da nur 7 Beiträge markiert wurden.

Davon sind die Hälfte eindeutig Fehlalarme, die durch zu niedrige Standardwerte ausgelöst wurden, die andere Hälfte ist für die KI schwieriger zu verstehen (jemanden als Idioten zu bezeichnen vs. eine Geschichte darüber zu erzählen, wie jemand heute ein Idiot zu Ihnen war, während Sie einkaufen) und einer ist meiner Meinung nach ein korrekter Treffer.

Wenn Sie es noch einmal versuchen möchten, können Sie fast alle Probleme mit übermäßig markierenden Markierungen lösen, indem Sie alle Schwellenwerte auf 85 setzen und zum original-Modell wechseln. Ich werde eine Website-Einstellung hinzufügen, um PMs zu überspringen, da ich sehe, wie das für einige Communities ärgerlich sein kann.

8 „Gefällt mir“

Danke Falco, es tut mir leid, dass ich sagte, es sei absurd aggressiv. Ich hatte bereits viel Drama auf der Seite und die Markierung hat das noch verstärkt, und ich war zu der Zeit ziemlich verärgert.

Ich schätze die Vorschläge und werde es noch einmal versuchen. Frage, was passiert, wenn Sie disorder flag automatically deaktivieren? Werde ich trotzdem irgendwie benachrichtigt, wenn ein Beitrag als unordentlich eingestuft wird? Das wäre schön, um es auszuprobieren und herauszufinden, welche Einstellungen funktionieren, ohne dass Beiträge markiert werden.

4 „Gefällt mir“

Ohne diese Einstellung werden die Beiträge gegen die KI ausgeführt, aber es werden keine Aktionen ausgeführt. Sie können sie so belassen und dann diese Data Explorer-Abfrage ausführen, um die Raten von falsch positiven/negativen Ergebnissen zu analysieren.

Es gibt auch eine weitere Einstellung, mit der Sie Gruppen zu einer Ausschlussliste hinzufügen können, wo Sie beispielsweise verhindern könnten, dass Beiträge von TL4/3 klassifiziert werden. Das könnte auch helfen.

Sehr geehrter @Falco,

wir haben begonnen, Disorder zu testen. Das allgemeine Feedback ist positiv – es erkennt tatsächlich unangemessene Dinge, markiert aber auch viele Dinge, die unsere Community akzeptiert. Aufgrund der Art des Forums, in dem wir dieses Plugin testen (Erwachsene), beinhaltet die Kommunikation mehrere Aspekte, die Disorder dazu veranlassen, viele, viele Beiträge zu markieren. Ihre SQL-Abfrage hilft wirklich dabei, die Schwellenwerte zu überprüfen, aber darf ich vorschlagen, diese für jeden markierten Beitrag zur Tabelle „Reviewable Scoring“ hinzuzufügen?

Dieser hier

Ich weiß nicht, ob es für ein Plugin möglich ist, eigene Daten in dieser Ansicht einzufügen, aber es würde dem Personal sehr helfen zu verstehen, welche Kriterien angepasst werden müssen, um falsch positive Ergebnisse für uns zu reduzieren. So wie ich es sehe, sollte eine Dropdown-Liste mit einer Aufschlüsselung nach Kriterien, die in dieser Ansicht ausgelöst wurden, hinzugefügt werden. Kriterien, die 0 ergeben, müssen nicht aufgeführt werden. Diejenigen, die über 0 liegen, sollten dort vorhanden sein, aber nur diejenigen, die die aktuellen Konfigurationsschwellenwerte überschreiten, sollten fett/rot markiert werden.

Beispiel für Disorder Scoring
  • Toxizität 65% [1]
  • Beleidigung 73% [2]
  • Bedrohung 12% [3]
  • Sexuell explizit 2% [4]

Wenn nötig, kann ich Ihnen die Ergebnisse der SQL-Abfrage zur Verfügung stellen. Wir sind noch weit davon entfernt, die Flaggenwarteschlange zu überprüfen…
Wir verwenden ein mehrsprachiges Modell und haben andere nicht ausprobiert. Wir haben beschlossen, damit zu beginnen, da wir einige Benutzer haben, die es vorziehen, in ihrer Muttersprache zu posten.


  1. überschritten, rote Schrift ↩︎

  2. überschritten, rote Schrift ↩︎

  3. normal, normale Schrift ↩︎

  4. normal, normale Schrift ↩︎

1 „Gefällt mir“

Hallo nochmal,

Ich wollte Sie darüber informieren, dass wir Fehler in den Protokollen im Zusammenhang mit Disorder mit dem „original“-Modell erhalten. Ich habe es gerade wieder auf mehrsprachig umgestellt, um zu sehen, ob das einen Unterschied macht.

Job-Ausnahme: undefinierte Methode `>=’ für nil:NilClass @classification[label] >= SiteSetting.send(“disorder_flag_threshold_#{label}”) ^^

Details

/var/www/discourse/plugins/disorder/lib/classifier.rb:39:in `block in consider_flagging’

/var/www/discourse/plugins/disorder/lib/classifier.rb:38:in `filter’

/var/www/discourse/plugins/disorder/lib/classifier.rb:38:in `consider_flagging’

/var/www/discourse/plugins/disorder/lib/classifier.rb:25:in `classify!’

/var/www/discourse/app/jobs/regular/classify_post.rb:14:in `execute’

/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform’

rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in with_connection' /var/www/discourse/app/jobs/base.rb:236:in block in perform’

/var/www/discourse/app/jobs/base.rb:232:in `each’

/var/www/discourse/app/jobs/base.rb:232:in `perform’

sidekiq-6.5.8/lib/sidekiq/processor.rb:202:in `execute_job’

sidekiq-6.5.8/lib/sidekiq/processor.rb:170:in `block (2 levels) in process’

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:177:in `block in invoke’

/var/www/discourse/lib/sidekiq/pausable.rb:134:in `call’

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:179:in `block in invoke’

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:182:in `invoke’

sidekiq-6.5.8/lib/sidekiq/processor.rb:169:in `block in process’

sidekiq-6.5.8/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:113:in `local’

sidekiq-6.5.8/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq.rb:44:in `block in module:Sidekiq

sidekiq-6.5.8/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq/processor.rb:263:in `stats’

sidekiq-6.5.8/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:13:in `call’

sidekiq-6.5.8/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:80:in `global’

sidekiq-6.5.8/lib/sidekiq/processor.rb:124:in `block in dispatch’

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:39:in `prepare’

sidekiq-6.5.8/lib/sidekiq/processor.rb:123:in `dispatch’

sidekiq-6.5.8/lib/sidekiq/processor.rb:168:in `process’

sidekiq-6.5.8/lib/sidekiq/processor.rb:78:in `process_one’

sidekiq-6.5.8/lib/sidekiq/processor.rb:68:in `run’

sidekiq-6.5.8/lib/sidekiq/component.rb:8:in `watchdog’

sidekiq-6.5.8/lib/sidekiq/component.rb:17:in `block in safe_thread’

[details=“Details 2”]
|hostname||
|—|—|\n|process_id|65460|\n|application_version|2f8ad17aed81bbfa2fd20b6cc9210be92779bd74|\n|current_db|default|\n|current_hostname||\n|job|Jobs::ClassifyPost|\n|problem_db|default|\n|time|1:52 pm|\n|||\n|opts||\n|post_id|604063|\n|current_site_id|default|\n\n[/details]

P.S. Ja, der mehrsprachige Modus erzeugt diese Fehler nicht. Das unvoreingenommene Modell erzeugt ebenfalls keine Fehler.

1 „Gefällt mir“