Discourse AI - Sentimento

:bookmark: Questa guida spiega come configurare la classificazione di sentiment e emozioni in Discourse AI e utilizzare i report per esplorare i post della tua community.

:person_raising_hand: Livello utente richiesto: Amministratore per la configurazione; amministratore o moderatore per visualizzare i report.

La classificazione di sentiment ed emozioni ti aiuta a esplorare i pattern nelle discussioni della tua community:

  • Sentiment classifica i post come positivi, neutri o negativi.
  • Emozione assegna punteggi su 28 etichette, tra cui gratitudine, curiosità, rabbia e tristezza.

Si tratta di funzionalità separate. Puoi abilitarne una, l’altra o entrambe, e scegliere un backend di classificazione diverso per ciascuna. I report contano i post classificati, non le persone univoche o i tipi di personalità. Utilizzarli per trovare discussioni degne di nota, non come sostituto della comprensione del loro contesto.

Prima di iniziare

È necessario che Discourse AI sia abilitato tramite discourse_ai_enabled e che sia configurato un backend di classificazione.

Ospitato da Discourse? Il tuo sito potrebbe già avere endpoint di classificazione dedicati provisionati. Verifica la configurazione esistente prima di modificarla. Contatta team@discourse.org se hai bisogno di aiuto riguardo alla disponibilità, alla configurazione dell’endpoint o ai limiti del backfill.

Self-hosted? Configura un endpoint dedicato compatibile, un agente AI con un modello linguistico o un modello decisionale. Abilitare la funzione da sola non fornisce un servizio di inferenza.

Rivedi l’informativa sulla privacy, le regole di conservazione e i costi del tuo provider prima di abilitare l’elaborazione automatica. La classificazione invia il testo del post al backend selezionato. Gli screenshot seguenti utilizzano post inventati su un sito di test e un modello decisionale; non raccomandano quel provider per contenuti community privati.

Configura sentiment ed emozioni

  1. Apri Admin → Plugins → AI → Features.
  2. Apri “Sentiment and emotion”.
  3. Sotto “Sentiment”, seleziona “Enabled” se desideri la classificazione positiva, neutra e negativa. Questo controlla ai_sentiment_enabled.
  4. Scegli il suo “Backend” e configura l’endpoint, l’agente o il modello corrispondente come descritto di seguito.
  5. Sotto “Emotion”, seleziona “Enabled” se desideri la classificazione delle emozioni. Questo controlla ai_sentiment_emotion_enabled.
  6. Scegli il suo backend e configuralo indipendentemente.
  7. Imposta i limiti di elaborazione in background descritti nella sezione successiva.
  8. Fai clic su “Submit” e verifica che le tue selezioni siano state salvate.

Questo esempio utilizza un modello decisionale per entrambe le funzionalità. “Posts per hour” è impostato deliberatamente su 0 per mettere in pausa la scansione automatica durante i test. Utilizza un valore positivo per elaborare automaticamente i nuovi post e quelli storici.

Utilizza endpoint di classificazione dedicati

Scegli “Dedicated classification endpoint” per ciascuna funzionalità che desideri eseguire con un modello dedicato. Segui “Configure dedicated classification endpoints” fino all’impostazione ai_sentiment_model_configs.

I modelli dedicati di riferimento sono:

Funzionalità Modello
Sentiment cardiffnlp/twitter-roberta-base-sentiment-latest
Emotion SamLowe/roberta-base-go_emotions

Ogni voce di configurazione identifica il suo classification_type (sentiment o emotion), model_name, endpoint e api_key. Fornisci una voce separata per ogni classificatore dedicato che utilizzi. Mantieni private le credenziali; non includerle in post di supporto o screenshot.

Vedi Self-hosting sentiment and emotion for Discourse AI per il deployment del server di inferenza. Abilita e seleziona ciascuna funzionalità separatamente utilizzando i controlli sopra indicati.

Il backend dedicato si aspetta un’API di classificazione compatibile. Copiare un endpoint Anthropic, OpenAI chat o Azure Language in questa impostazione non lo rende compatibile. Un test di connessione riuscito per un modello linguistico altrove in Discourse non testa un endpoint di sentiment dedicato.

Utilizza un agente AI o un modello decisionale

Per “LLM agent”, seleziona un agente classificatore appropriato con un modello linguistico configurato. Discourse include agenti classificatori di sentiment e emozioni. Un agente conversazionale generico non è un sostituto per un agente configurato per restituire i punteggi delle etichette previsti.

Per “Decision model”, prima configura e testa un modello decisionale compatibile, quindi selezionalo per ogni funzionalità abilitata. Un modello decisionale non richiede un modello linguistico conversazionale separato per questa classificazione.

Le richieste per agenti e modelli decisionali possono comportare addebiti da parte del provider o consumare crediti. Rivedi le regole di gestione dei dati del modello selezionato prima di assegnarlo a una funzione elaborata automaticamente.

Controlla l’elaborazione e la copertura storica

Un processo pianificato controlla i post con classificazioni mancanti ogni cinque minuti. I nuovi post e quelli storici condividono questa scansione; i risultati non sono necessariamente disponibili immediatamente dopo la pubblicazione. Non c’è un numero minimo di post o giorni prima che i dati possano apparire: un singolo post classificato con successo può contribuire.

Controllo Impostazione del sito Predefinito Effetto
Post per ora ai_sentiment_backfill_maximum_posts_per_hour 240 Numero approssimativo di post elaborati all’ora. 0 arresta la scansione pianificata, inclusi i nuovi post.
Limite età post, in giorni ai_sentiment_backfill_post_max_age_days 60 Scansiona i post creati entro questa finestra di età. 0 significa oggi, non cronologia illimitata.

Aumenta il limite di età per includere post più vecchi. Il processo pianificato elabora i risultati mancanti nel tempo; selezionare un intervallo di date del report più antico non classifica di per sé quella cronologia.

La velocità è approssimativa, non un limite esatto di richieste o di spesa. Abilitare entrambi i classificatori può generare due richieste per post. Le richieste fallite o i rifiuto possono essere ritentati. I post modificati sono controllati separatamente e non sono controllati dalla velocità o dai limiti di età della scansione pianificata.

I messaggi privati, i post cancellati, gli argomenti cancellati e i tipi di post non regolari sono esclusi dalla scansione di backfill pianificata. L’esclusione dei PM nel scanner e nei report non è una garanzia per tutti i percorsi di classificazione: il processo sui post modificati non applica lo stesso filtro PM. Considera questo prima di configurare un provider esterno.

Esplora il sentiment per categoria o tag

  1. Apri Admin → Reports → Sentiment analysis, oppure visita /admin/reports/sentiment_analysis sul tuo sito.
  2. Seleziona le date di inizio e fine.
  3. Scegli “Category” o “Tag” per raggruppare i risultati.
  4. Utilizza il filtro per categoria o tag corrispondente per restringere i risultati. Il filtro per categoria offre anche un’opzione per includere sottocategorie.
  5. Leggi il totale di ogni gruppo e la sua suddivisione in positivo, negativo e neutro.
  6. Fai clic sulla riga di un gruppo per ispezionare il suo grafico e i post sottostanti.

L’esempio contiene nove post classificati: tre positivi, tre negativi e tre neutri. I post neutri sono inclusi in questo report.

Nella vista dettagliata:

  • Seleziona “All”, “Positive”, “Neutral” o “Negative” per filtrare i post caricati.
  • Apri l’argomento di un post per leggere la discussione circostante.
  • Utilizza l’icona del link accanto al grafico per copiare l’URL per quella vista del report. I destinatari hanno comunque bisogno di accesso staff.
  • Fai clic su “Back” per tornare ai risultati raggruppati.

Le date nel report si riferiscono a quando i post sono stati creati, non a quando la classificazione è stata eseguita. Un post può contribuire a più gruppi di tag se il suo argomento ha più tag, quindi sommare i totali dei tag può contare lo stesso post più di una volta.

Leggi la tendenza generale del sentiment

Apri il report “Overall sentiment” da Admin → Reports, oppure visita /admin/reports/overall_sentiment.

Il punteggio è:

Numero di post positivi − numero di post negativi

Un punteggio positivo o negativo deve essere maggiore di 0.6 perché il post venga contato in quel gruppo. Se nessuno supera la soglia, il report raggruppato tratta il post come neutro. La soglia è fissa; non c’è un’impostazione del sito per cambiarla.

Il sentiment complessivo è un conteggio netto di post, non una media di probabilità o percentuale di felicità. Tre post positivi e tre post negativi producono un punteggio complessivo di 0, indipendentemente da quanti post neutri ci siano. Ispeziona la suddivisione raggruppata e le discussioni sottostanti prima di interpretare una tendenza piatta come assenza di forti opinioni.

Esplora le emozioni

Ogni emozione ha un report sotto Admin → Reports. Ad esempio, visita /admin/reports/emotion_anger per “Anger” o /admin/reports/emotion_curiosity per “Curiosity”. Scegli un intervallo di date e un raggruppamento giornaliero, settimanale o mensile per esplorare la tendenza.

Un report delle emozioni conta i post il cui punteggio per quell’etichetta è maggiore di 0.1. Anche questa soglia è fissa. Più di un’emozione può qualificarsi per lo stesso post, quindi i totali delle emozioni non si escludono a vicenda.

Puoi anche filtrare gli argomenti per un’emozione. Visita /filter?q=order:emotion_anger per trovare argomenti corrispondenti, ordinati per il numero di post qualificati classificati come rabbia piuttosto che per un punteggio medio di emozione. Utilizza order:emotion_anger-asc per invertire l’ordine. Senza un filtro activity-after:, questo ordinamento conta i post qualificati dell’ultimo anno. Si applicano ancora le normali permessi di accesso alla lista degli argomenti.

Etichette di emozione disponibili

Ammirazione, divertimento, rabbia, fastidio, approvazione, premura, confusione, curiosità, desiderio, delusione, disapprovazione, disgusto, imbarazzo, eccitazione, paura, gratitudine, lutto, gioia, amore, nervosismo, neutro, ottimismo, orgoglio, realizzazione, sollievo, rimorso, tristezza e sorpresa.

Comprendi i limiti

  • La classificazione dipende dal modello. Sarcastico, citazioni, linguaggio specialistico e discussioni multilingue possono essere fraintese. La copertura linguistica e la precisione dipendono dal modello scelto. I punteggi di backend diversi non sono necessariamente calibrati allo stesso modo.
  • I report coprono solo i risultati archiviati. Una funzione abilitata senza un backend funzionante, elaborazione in pausa o copertura storica insufficiente possono produrre report vuoti o incompleti.
  • Le classificazioni esistenti vengono riutilizzate. Modificare un post classificato non sostituisce automaticamente i suoi risultati. Cambiare l’agente selezionato o il modello decisionale all’interno dello stesso backend non riclassifica i risultati esistenti.
  • Cambiare backend cambia la fonte dei risultati del report. I vecchi risultati non vengono convertiti al backend selezionato. I report possono apparire vuoti mentre le classificazioni mancanti vengono elaborate.
  • I report escludono i messaggi privati. Questa esclusione nei report è separata dal limite di elaborazione dei dati descritto sopra.

Risoluzione dei problemi per risultati mancanti o inaspettati

Problema Cosa controllare
Nessun risultato dopo l’abilitazione Conferma che la funzionalità pertinente sia abilitata, il suo backend sia configurato, “Posts per hour” sia positivo e i processi in background siano in esecuzione. Consenti tempo per la scansione di cinque minuti e la coda di elaborazione.
Il sentiment funziona ma l’emozione è vuota Abilita e configura “Emotion” separatamente. Un endpoint dedicato solo per il sentiment non fornisce classificazioni delle emozioni.
Le date più vecchie non hanno risultati Aumenta il limite di età dei post, consenti tempo di elaborazione e controlla che l’intervallo del report includa le date di creazione dei post.
L’endpoint dedicato restituisce un errore Controlla la sua URL, le credenziali, il modello e il formato della risposta. L’adattatore si aspetta un array piatto di etichette e punteggi, con etichette di sentiment come positive, neutral e negative, non risposte chat arbitrarie o etichette stile LABEL_0.
L’endpoint di rete privata non è raggiungibile Controlla la connettività e, dove richiesto, aggiungi solo il nome host o l’IP dell’endpoint di inferenza fidato a allowed_internal_hosts. Non disabilitare ampiamente le protezioni contro la falsificazione delle richieste lato server.
I risultati non cambiano dopo una modifica o la selezione di un modello I risultati esistenti vengono riutilizzati. Non supporre che modificare il contenuto o salvare un altro modello programmi una riclassificazione completa.
Un filtro mostra meno post rispetto al suo conteggio Il conteggio descrive l’intero gruppo, mentre le schede del sentiment filtrano i post caricati. Controlla se ci sono più risultati da caricare e apri gli argomenti originali quando investigi discrepanze.

Gli amministratori possono rivedere i record delle richieste degli agenti e dei modelli decisionali in Admin → Plugins → AI → Logs. Controlla /logs per errori di classificazione in background, inclusi fallimenti degli endpoint dedicati. Tratta i contenuti dei log come sensibili: possono contenere testo dei post e risposte del modello. Rimuovi credenziali e contenuti privati prima di condividere i diagnostici.

Risorse aggiuntive

10 Mi Piace

Un post è stato unito a un argomento esistente: Problemi con il backfill del sentiment

Un post è stato unito a un argomento esistente: Problemi con il riempimento retroattivo del sentiment

L’OP è stato aggiornato con un nuovo video che mostra le funzionalità aggiornate di Sentiment, incluse molte più emozioni e la comprensione di quali argomenti/post sono associati a ciascuna emozione.

Ho configurato il sentiment model config con un model_name, endpoint e api_key copiati dalle impostazioni LLM, dove passa il test, ma ottengo l’errore sottostante nei /logs.

(Ma forse non capisco correttamente, perché il sentiment non usa uno degli LLM configurati?)

Utilizzo claude-3-5-sonnet.


{"type":"error","error":{"type":"invalid_request_error","message":"anthropic-version: header is required"}} (Net::HTTPBadResponse)
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:71:in `classify'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:142:in `request_with'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:78:in `block (4 levels) in bulk_classify!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1593:in `evaluate_to'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1776:in `block in on_resolvable'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:359:in `run_task'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:350:in `block (3 levels) in create_worker'
internal:kernel:187:in `loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:341:in `block (2 levels) in create_worker'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `catch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `block in create_worker'
Status: 400

{"type":"error","error":{"type":"invalid_request_error","message":"anthropic-version: header is required"}} (Net::HTTPBadResponse)
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:71:in `classify'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:142:in `request_wit...

Il modulo di sentiment non utilizza LLM generici, ma modelli specificamente ottimizzati per la classificazione del sentiment. Se desideri eseguire tali modelli autonomamente, la documentazione è disponibile su Self-Hosting Sentiment and Emotion for DiscourseAI

3 Mi Piace

@Falco Ho appena notato che il sentiment ha smesso di funzionare a partire da gennaio 2025. La mia ipotesi è che ci sia questa nuova impostazione ai_sentiment_model che, come spiega il link sopra, serve per far funzionare un proprio modello di sentiment/dizione. Ho notato che dopo aver aggiornato discourse ora ai_sentiment_model_configs è tutto vuoto (dovrebbe esserlo?).

Quando provo a eseguire un rake di backfill, ricevo un errore:

rake ai:sentiment:backfill
rake aborted!
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  errore di sintassi vicino a ")" (ActiveRecord::StatementInvalid)
LINE 1: ...e_upload_id", "posts"."outbound_message_id" FROM () as posts..

Il plugin utilizzava per impostazione predefinita un server situato in DigitalOcean che avevo allestito per facilitare i test.

Da allora ho modificato le impostazioni predefinite del plugin su una base pulita e coloro che desiderano la classificazione AI devono eseguire server seguendo la documentazione qui su Meta.

In effetti, ma stavamo pagando quel costo per scopi di test. Non è sostenibile offrire questo per ogni self-hoster.

Vale la pena menzionare che offriamo questo servizio di classificazione su server con accelerazione GPU come parte del nostro servizio di hosting.

2 Mi Piace

Problemi di analisi del sentiment con Discourse AI: formato del modello Hugging Face e fallimento dell’endpoint Azure


Ciao Community e sviluppatori di Discourse,

Sto riscontrando problemi significativi nel tentativo di configurare e utilizzare la funzionalità di analisi del sentiment all’interno del plugin Discourse AI sul mio forum. Sembra che ci siano due problemi distinti che impediscono il suo corretto funzionamento.


Problema 1: Discrepanza nel formato della risposta del modello Hugging Face

Ho configurato il modello cardiffnlp/twitter-roberta-base-sentiment di Hugging Face per l’analisi del sentiment. Sebbene la mia chiave API sia valida e io possa chiamare con successo l’API dalla mia istanza Discourse utilizzando curl, il plugin Discourse AI sembra analizzare la risposta in modo errato a causa di una modifica nel formato di output del modello Hugging Face.

Il mio comando curl (che conferma la chiave API valida e il nuovo formato):

Bashcurl -X POST https://api-inference.huggingface.co/models/cardiffnlp/twitter-roberta-base-sentiment \ -H "Authorization: Bearer hf_xxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d "{\"inputs\": \"I love Discourse!\"}"

Output da curl (che mostra il nuovo formato di array nidificato):

[[{\"label\":\"LABEL_2\",\"score\":0.9891520738601685},{\"label\":\"LABEL_1\",\"score\":0.009014752693474293},{\"label\":\"LABEL_0\",\"score\":0.0018332178005948663}]]

Problema: Il modello twitter-roberta-base-sentiment restituiva un singolo array di hash label-score: [{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]. Ora restituisce un array nidificato: [[{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]].
La logica di analisi hardcoded del plugin Discourse AI (in particolare, classification[\"label\"][/\\d+/].to_i come indicato dal backtrace) non tiene conto di questo livello di array esterno. Ciò causa un TypeError quando tenta di accedere a un Simbolo come Intero.

Messaggio di errore (dall’eccezione del job):

nessuna conversione implicita di Simbolo in Intero (TypeError)
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in block in transform_result' /var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in each’
/var/www/discourse/plugin…`

Backtrace completo per il problema Hugging Face:

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1268:in `raise'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1268:in `wait_until_resolved!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:998:in `value!'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:93:in `bulk_classify!'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/sentiment_backfill.rb:27:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/app/jobs/base.rb:379:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:137:in `process_queue'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:77:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in `block (2 levels) in ensure_worker_threads'
internal:kernel:187:in `loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:341:in `block (2 levels) in create_worker'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `catch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `block in create_worker'
nessuna conversione implicita di Simbolo in Intero (TypeError)
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in `block in transform_result'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in `each'
/var/www/discourse/plugin...

Problema 2: La configurazione del modello Microsoft Azure porta a un errore Hugging Face

Quando ho tentato di passare al modello Microsoft Text Analytics nelle impostazioni di Discourse AI, ho riscontrato un errore 404 Resource not found e, sorprendentemente, il backtrace punta ancora a hugging_face_text_embeddings.rb.

Messaggio di errore (dall’eccezione del job):

Job exception: 416 errors
{"error":{"code":"404","message": "Resource not found"}} (Net::HTTPBadResponse)

Frammento di backtrace pertinente (che punta a Hugging Face nonostante il modello Microsoft selezionato):

/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:76:in `do_request!'
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:51:in `classify_by_sentiment!'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:156:in `request_with'

Osservazione: Questo indica che anche quando seleziono e configuro l’endpoint e la chiave API del modello Microsoft, il plugin Discourse AI sembra essere hardcoded o instradare in modo errato le richieste di analisi del sentiment attraverso la logica o gli endpoint specifici di Hugging Face. Ciò impedisce l’utilizzo del modello Microsoft.


Screenshot della configurazione:

Ho allegato uno screenshot delle mie impostazioni di Discourse AI per mostrare la configurazione:

  • Configurazione dettagliata per i modelli AI di sentiment (che mostra sia i modelli Hugging Face che Microsoft) - Ho testato solo con la configurazione del modello Hugging Face o solo con quella del modello Microsoft con lo stesso risultato

Questi problemi rendono la funzionalità di analisi del sentiment di fatto inutilizzabile. Sembra che il plugin richieda un aggiornamento per gestire il nuovo formato di risposta di Hugging Face e per instradare correttamente le richieste quando vengono configurati diversi provider di sentiment.

Qualsiasi assistenza o guida su questi problemi sarebbe molto apprezzata.

Grazie!

2 Mi Piace

Sono curioso di sapere se il reporting del sentiment funziona per altri, o se ho configurato qualcosa in modo errato. Vorrei sapere cos’altro devo controllare o configurare per abilitare il reporting del sentiment, poiché sto ancora riscontrando lo stesso problema.

1 Mi Piace

Stiamo cercando di utilizzare questa funzionalità con Azure AI Language (dalla nostra istanza Discourse self-hosted), poiché stiamo già utilizzando il nostro abbonamento Azure per integrare GPT-4.5 con Discourse (per funzionalità di riepilogo e chatbot):

…ma non stiamo ottenendo dati nella dashboard del sentiment e vediamo questi errori nei log:

Discourse AI: Errors during bulk classification: Failed to classify 208 posts (example ids: 2256, 909, 2270, 2260, 2797) : JSON::ParserError : An empty string is not a valid JSON string.

Il backtrace mostra che Discourse potrebbe tentare di utilizzare HuggingFace - questi sono gli unici modelli supportati al momento?

Grazie,

N

1 Mi Piace

Quindi, l’unico modo per usare questa funzionalità è configurare le proprie istanze dei modelli (che necessitano di istanze GPU ad alta intensità di risorse che sarebbero costose)? Questa funzionalità sembra molto utile, ma sembra che mi costerebbe di più impostarla rispetto al mio attuale hosting di Discourse.

Sì, i modelli supportati sono quelli elencati nell’OP.

Alla fine aggiungeremo il supporto per la classificazione utilizzando LLM per le persone per cui il costo non è un problema.

Bene, l’intera funzionalità è costruita attorno alla classificazione dei post utilizzando modelli ML, quindi sì, hai bisogno di un posto dove eseguirli.

E poiché Discourse può essere eseguito sul VPS più economico in circolazione, l’esecuzione di modelli ML è effettivamente più costosa. Se vuoi avere la funzionalità nel modo più economico possibile, è fattibile eseguirla su un server con solo una manciata di core CPU, purché tu abbia abbastanza RAM per caricare i modelli.

1 Mi Piace

Mi scuso se questa domanda è già stata posta, ma non sono riuscito a trovare un riferimento a dove sia configurabile esattamente il punteggio soglia :sweat_smile:

1 Mi Piace

Sfortunatamente, il punteggio di soglia non è qualcosa che può essere configurato dagli utenti o dagli amministratori. È un valore specifico impostato nella codebase.

1 Mi Piace