Disturbo del Discorso

:warning: Questa funzionalità fa ora parte di Discourse AI. Questo plugin è deprecato.

|||-|
:discourse2:| Riepilogo | Disorder aiuta i moderatori segnalando automaticamente contenuti potenzialmente tossici sul tuo forum Discourse.
:hammer_and_wrench:| Link al Repository | https://github.com/xfalcox/disorder
:open_book:| Guida all’Installazione | Come installare plugin in Discourse

Se stai utilizzando il nostro servizio di hosting ufficiale, contatta il nostro supporto per registrare il tuo interesse per questo plugin.

Tossicità

Come ha detto @hawk in Dealing with Toxicity in Online Communities, gestire la tossicità nella tua community è fondamentale.

Mentre Discourse viene fornito pronto all’uso con molti strumenti diversi per aiutare a gestire la tossicità nella tua community, siamo sempre alla ricerca di modi per migliorarla ulteriormente. In particolare, ho ricercato possibili applicazioni del Machine Learning e dell’IA nei forum online. Che ora è un plugin sperimentale, disponibile per tutte le community.

Il plugin

Disorder sfrutta l’Intelligenza Artificiale e il Machine Learning per aiutarti a moderare la tua community, rendendo più facile per il tuo team di moderazione essere al corrente di contenuti potenzialmente problematici e persino incoraggiare opzionalmente i tuoi utenti a rivedere post tossici prima di pubblicarli.

Questo è un primo passo nell’utilizzo di modelli ML self-hosted in Discourse, e sebbene sia un modello semplice, stabilisce un modello che può essere riutilizzato per applicare modelli più complessi in futuro.

Funzionalità

Segnalazione in background

Questa è la modalità operativa principale di Disorder, poiché è completamente trasparente per i tuoi utenti, che non saranno a conoscenza di alcuna modifica.

Ogni volta che viene creato un nuovo post (o messaggio di chat utilizzando Discourse Chat), verrà inserito in una coda di classificazione in modo asincrono. Nel caso in cui la classificazione risulti superiore a una soglia configurabile, il post/messaggio di chat verrà segnalato in modo che il tuo team di moderazione ne venga avvisato e possa prendere la decisione finale sulla segnalazione.

Intervento su nuovi post

Se pensi che la prevenzione sia la migliore medicina, potresti essere interessato a questa opzione più attiva.

Puoi abilitare una classificazione sincrona di qualsiasi nuovo post che, se al di sopra di una soglia di tossicità configurabile, attiverà un intervento nel flusso del nuovo post, chiedendo all’utente di rivedere e apportare modifiche al messaggio che potrebbe essere al di fuori dei limiti stabiliti dalle regole della tua community.

Questo accadrà solo una volta, e dopo aver chiuso la modale l’utente potrà postare normalmente.

Come funziona?

Questo plugin integra i modelli open source di Detoxify, utilizzando un modello di chiamata API remota per consentire agli amministratori di scalare correttamente il tasso di inferenza in base alle esigenze di ciascuna community.

Forniamo una semplice immagine che fornisce un’API HTTP sottile che Discourse chiamerà per eseguire la classificazione dei contenuti, che può essere eseguita sia sullo stesso server su cui esegui Discourse, sia su un server diverso.

Il plugin Discourse ascolta gli eventi di nuovi post / nuovi messaggi di chat e accoda un lavoro di classificazione nella coda in background. I risultati vengono memorizzati nel database in modo da poter estrarre report, e segnaliamo i contenuti utilizzando un utente bot separato in modo da poter monitorare l’accuratezza delle sue segnalazioni nel tempo.

Opzioni

Innanzitutto, il plugin funziona pronto all’uso, quindi non è necessario modificare subito alcuna impostazione. Tuttavia, se desideri modificare il comportamento del plugin, ci sono alcune opzioni che puoi utilizzare.

Forniamo 3 diversi modelli di classificazione tra cui puoi scegliere nelle opzioni del plugin:

  • unbiased (predefinito): Un modello che cerca di ridurre il bias indesiderato del modello nella classificazione della tossicità
  • multilingual: Un modello che può classificare italiano, francese, russo, portoghese, spagnolo e turco.
  • original: Il modello più semplice.

Puoi anche regolare se il plugin:

  • segnalerà automaticamente
  • abiliterà l’intervento sincrono su post tossici con avviso (sperimentale)
  • abiliterà l’intervento sincrono su post tossici (non raccomandato)

Tutto quanto sopra avviene solo quando il commento viene classificato al di sopra delle soglie per ciascun tipo di classificazione:

  • tossicità
  • grave_tossicità
  • attacco_identità
  • insulto
  • minaccia
  • esplicito_sessuale

Puoi regolare ciascuna delle soglie di classificazione per le azioni automatiche.

Servizio di Classificazione

Il plugin viene fornito preconfigurato e funzionante. Per questo, contatta un servizio gestito da Discourse (CDCK) per classificare i contenuti degli utenti. Quel servizio API di classificazione è open-source, e puoi eseguire la tua copia del servizio se necessario.

39 Mi Piace

Solo per curiosità, quali sono le differenze tra l’implementazione di “Disorder” e quella di Discourse dell’API Google Perspective?

7 Mi Piace

Dal punto di vista del codice, sono plugin completamente diversi.

A una visione superficiale coprono lo stesso bisogno, ma sono ingegnerizzati diversamente:

  • Disorder funziona con chat e post, Perspective solo con post

  • Perspective si basa su un’API proprietaria e di terze parti, con tutte le implicazioni in termini di privacy, affidabilità e trasparenza che ne derivano.

  • Disorder imposta uno schema che consente l’aggiunta di nuovi modelli con facilità, in modo da poter evolvere il servizio o persino aggiungere funzionalità completamente nuove.

  • L’API self-hostable di Disorder offre flessibilità e libertà dai limiti di pagamento per chiamata API e dai limiti di frequenza.

  • L’interfaccia front-end di Disorder è piuttosto ridotta, quindi dovrebbe essere più resiliente agli aggiornamenti di Discourse.

16 Mi Piace

Fantastico. Dove e come lo facciamo?

5 Mi Piace

Invia un’email a team@discourse.org :slight_smile:

6 Mi Piace

Non c’è bisogno di rispondere qui, ma se stai cercando suggerimenti su dove andare dopo, un suggeritore di tag AI basato sul testo di un argomento potrebbe essere utile. Sto immaginando qualcosa di simile a come Soundcloud suggerisce tag di genere musicale dopo aver eseguito un’analisi su un caricamento. È utile per organizzare i contenuti generati dagli utenti su un sito affollato.

9 Mi Piace

Ho capito correttamente che l’istanza dell’API disorder dovrebbe essere avviata per supportare il plugin? C’è un’impostazione precompilata disorder inference service api endpoint con https://disorder-testing.demo-by-discourse.com preimpostata. Tuttavia, c’è disorder inference service api key che è vuota per impostazione predefinita.

Siamo interessati a testare questo plugin poiché affrontiamo molti comportamenti tossici tra gli utenti, che alla fine vengono risolti segnalando e con l’aiuto dei Leader, tuttavia vorremmo prevenire proattivamente che gli utenti diffondano post negativi, se possibile, e questo plugin sembra adatto a tale ruolo.

Possiamo utilizzare un endpoint pronto per provarlo? Avviso onesto, abbiamo circa 150.000 visualizzazioni di pagina giornaliere e ciò potrebbe intasare alcuni server non preparati.

Siamo autonomi.

4 Mi Piace

Sebbene sia possibile eseguire il proprio server API, il plugin viene fornito preconfigurato puntando a https://disorder-testing.demo-by-discourse.com/, quindi funziona immediatamente.

Ti preghiamo di utilizzare questo endpoint per la tua istanza, poiché è fornito esattamente per il tuo caso d’uso di istanze self-hosted che desiderano provare questo plugin. Nella configurazione predefinita, tutte le chiamate API avvengono in background, quindi l’API non funzionante non influenzerà in alcun modo il tuo sito, quindi è sicuro utilizzarla.

L’impostazione api key è facoltativa e necessaria solo se il tuo server API la ha abilitata. L’istanza pubblica su https://disorder-testing.demo-by-discourse.com/ non la ha abilitata.

6 Mi Piace

Grazie! Sembra perfetto e ci proverò nei prossimi giorni :heart:

4 Mi Piace

Sono previste altre applicazioni di ML in futuro?

2 Mi Piace

Ho provato questo per una settimana, ed è stato assurdamente aggressivo nel segnalare i post. Consiglio di usarlo solo se hai un sito enorme senza abbastanza moderatori. Spero che l’IA migliori, ma semplicemente non ci siamo ancora.

6 Mi Piace

Questo è un ottimo feedback! Saresti disposto a condividere alcune statistiche di debug per aiutarmi a capire esattamente cosa è successo?

Qualcosa come il risultato di

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'

qui o in un messaggio privato sarebbe immensamente utile.

5 Mi Piace

Ah sì, me ne ero completamente dimenticato! Ecco qui. Non ce n’erano poi molti, ma erano solo non necessari e i membri e i moderatori li trovavano fastidiosi. Inoltre, non sono sicuro che scansionasse i DM, so che ci potrebbe essere valore lì se qualcuno stesse molestando qualcuno tramite DM, ma il più delle volte farebbe solo innervosire le persone sapendo che stiamo guardando i loro DM.

1 Mi Piace

Usi la chat? Erano tutte le bandierine fastidiose nei post / PM?

Usiamo la chat, ma sono abbastanza sicuro che tutte le segnalazioni fossero nei post e nei messaggi privati.

1 Mi Piace

Prima di tutto, sono molto grato sia per il feedback che per i dati che hai condiviso e che mi hanno permesso di eseguire ulteriori debug.

Ora ai miei risultati!

Durante questa settimana, hai avuto 1942 nuovi post da utenti non staff. Una community piuttosto attiva! Tuttavia, non direi che l’IA sia “assurdamente aggressiva nel segnalare i post”, poiché sono stati segnalati solo 7 post.

Detto questo, di questi 7, metà sono chiaramente falsi positivi attivati da soglie predefinite troppo basse, l’altra metà sono più difficili da capire per l’IA nel contesto (chiamare il tuo interlocutore uno stupido vs raccontare una storia su come qualcuno sia stato uno stupido con te oggi mentre facevi la spesa) e uno è, secondo me, un successo corretto.

Se sei disposto a fare un altro tentativo, spostare tutte le soglie a 85 e passare al modello original potrebbe risolvere quasi tutti i problemi di segnalazione troppo sensibile che hai avuto finora. Aggiungerò un’impostazione del sito per consentire di saltare i PM, poiché posso vedere come questo possa essere fastidioso per alcune community.

8 Mi Piace

Grazie Falco, mi scuso per aver detto che era assurdamente aggressivo. Avevo già molti drammi in corso sul sito e il flagging ha solo aggiunto a ciò e al momento ero piuttosto infastidito.

Apprezzo i suggerimenti e ci riproverò. Domanda, cosa succede quando disabiliti disorder flag automatically? Sarò comunque avvisato in qualche modo se un post viene ritenuto disordinato? Sarebbe bello testarlo e capire quali impostazioni funzionano senza che i post vengano segnalati.

4 Mi Piace

Senza quell’impostazione, eseguirà i post contro l’IA ma non intraprenderà alcuna azione. Puoi lasciarla così e poi eseguire quella query di Data Explorer per analizzare i tassi di falsi positivi/falsi negativi.

C’è anche un’altra impostazione che ti consente di aggiungere gruppi a un elenco di esclusione, dove potresti, ad esempio, saltare la classificazione dei post da TL4/3. Anche questo potrebbe aiutare.

Caro @Falco,

Abbiamo iniziato a testare Disorder. Il feedback generale è positivo: rileva davvero le cose inappropriate, segnalando al contempo molte cose che la nostra community accetta. Data la natura del forum in cui testiamo questo plugin (Adult), la comunicazione coinvolge diversi aspetti che attivano Disorder per segnalare molti molti post. La tua Query SQL aiuta davvero a verificare quali soglie regolare, ma posso suggerire di aggiungerle alla tabella Punteggio Verificabile per ogni post segnalato?

Questo

Non so se sia possibile per un plugin introdurre i propri dati in questa vista, ma aiuterebbe molto lo staff a capire quali criteri regolare per ridurre i falsi positivi per noi. Il modo in cui lo vedo è aggiungere un menu a discesa con una ripartizione per criterio attivato all’interno di questa vista. Non è necessario includere i criteri uguali a 0. Quelli che sono superiori a 0 dovrebbero essere presenti, ma solo quelli che superano le attuali soglie di configurazione dovrebbero essere contrassegnati in grassetto/rosso.

Esempio di Punteggio Disorder
  • Tossicità 65% [1]
  • Insulto 73% [2]
  • Minaccia 12% [3]
  • Esplicito sessuale 2% [4]

Se necessario, posso fornirti i risultati della Query SQL. Siamo lontani dal finire di revisionare la Coda Segnalazioni..
Stiamo utilizzando un modello multilingue e non ne abbiamo provati altri. Abbiamo deciso che sarebbe stato un buon punto di partenza considerando che abbiamo alcuni utenti che preferiscono postare usando la loro lingua originale.


  1. superiore, font rosso ↩︎

  2. superiore, font rosso ↩︎

  3. normale, font normale ↩︎

  4. normale, font normale ↩︎

1 Mi Piace

Ciao di nuovo,

Volevo informarti che stiamo riscontrando errori nei log relativi a Disorder che utilizza il modello “original”. L’ho appena ripristinato su multilingue per vedere se faceva differenza.

Eccezione del job: metodo non definito `>=’ per nil:NilClass @classification[label] >= SiteSetting.send(“disorder_flag_threshold_#{label}”) ^^

Dettagli

/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=“Dettagli 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. Sì, la modalità multilingue non produce questi errori. Anche il modello imparziale non produce errori.

1 Mi Piace